stream-chat-angular 3.3.0 → 3.5.0
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/assets/version.d.ts +1 -1
- package/bundles/stream-chat-angular.umd.js +94 -41
- package/bundles/stream-chat-angular.umd.js.map +1 -1
- package/esm2015/assets/version.js +2 -2
- package/esm2015/lib/avatar/avatar.component.js +37 -8
- package/esm2015/lib/avatar-placeholder/avatar-placeholder.component.js +14 -2
- package/esm2015/lib/channel-header/channel-header.component.js +4 -11
- package/esm2015/lib/channel-preview/channel-preview.component.js +4 -11
- package/esm2015/lib/channel.service.js +31 -7
- package/esm2015/lib/message/message.component.js +2 -2
- package/esm2015/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.js +2 -2
- package/esm2015/lib/message-input/message-input.component.js +2 -2
- package/esm2015/lib/message-list/message-list.component.js +2 -2
- package/esm2015/lib/message-reactions/message-reactions.component.js +1 -1
- package/esm2015/lib/types.js +1 -1
- package/fesm2015/stream-chat-angular.js +89 -39
- package/fesm2015/stream-chat-angular.js.map +1 -1
- package/lib/avatar/avatar.component.d.ts +22 -2
- package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +19 -2
- package/lib/channel.service.d.ts +11 -4
- package/lib/message/message.component.d.ts +0 -3
- package/lib/types.d.ts +7 -1
- package/package.json +1 -1
- package/src/assets/version.ts +1 -1
|
@@ -373,7 +373,7 @@ export class MessageInputComponent {
|
|
|
373
373
|
}
|
|
374
374
|
}
|
|
375
375
|
MessageInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, deps: [{ token: i1.ChannelService }, { token: i2.NotificationService }, { token: i3.AttachmentService }, { token: i4.MessageInputConfigService }, { token: textareaInjectionToken }, { token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i5.ChatClientService }, { token: i6.EmojiInputService }, { token: i7.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
376
|
-
MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message", sendMessage$: "sendMessage$" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n </div>\n</div>\n", components: [{ type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: i11.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i12.AsyncPipe, "translate": i14.TranslatePipe } });
|
|
376
|
+
MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message", sendMessage$: "sendMessage$" }, outputs: { messageUpdate: "messageUpdate" }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div\n data-testid=\"quoted-message-container\"\n class=\"quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n style=\"font-size: 10px; line-height: 10px\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"quotedMessage?.user || undefined\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"quotedMessage?.html || quotedMessage?.text\"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\" style=\"width: 100%\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container\n *ngIf=\"emojiPickerTemplate && !isCooldownInProgress\"\n data-testid=\"emoji-picker\"\n >\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n class=\"str-chat__input-flat-cooldown str-chat-angular__cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n <ng-template\n *ngIf=\"canSendMessages && !isCooldownInProgress; else notAllowed\"\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n ></ng-template>\n <ng-template #notAllowed>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <div\n *ngIf=\"\n isFileUploadEnabled &&\n isFileUploadAuthorized &&\n canSendMessages &&\n !isCooldownInProgress\n \"\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n </div>\n</div>\n", components: [{ type: i8.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i10.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "attachments"] }, { type: i11.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "value"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i12.AsyncPipe, "translate": i14.TranslatePipe } });
|
|
377
377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, decorators: [{
|
|
378
378
|
type: Component,
|
|
379
379
|
args: [{
|
|
@@ -408,4 +408,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
408
408
|
type: ViewChild,
|
|
409
409
|
args: [TextareaDirective, { static: false }]
|
|
410
410
|
}] } });
|
|
411
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1pbnB1dC9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxTQUFTLEVBSVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUlOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVU3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHMUQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8scUJBQXFCO0lBMkRoQyxZQUNVLGNBQThCLEVBQzlCLG1CQUF3QyxFQUN4QyxpQkFBb0MsRUFDcEMsYUFBd0MsRUFFeEMsWUFBcUMsRUFDckMsd0JBQWtELEVBQ2xELEtBQXdCLEVBQ3hCLFVBQTZCLEVBQzdC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O2dCQUlHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSWEsYUFBYTtzQkFBL0IsTUFBTTtnQkFnQnlCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFFZCxjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwU2V0dGluZ3MsIENoYW5uZWwsIFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IEF0dGFjaG1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vYXR0YWNobWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IHRleHRhcmVhSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi9pbmplY3Rpb24tdG9rZW5zJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0LFxuICBBdHRhY2htZW50VXBsb2FkLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBFbW9qaVBpY2tlckNvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21lc3NhZ2UtaW5wdXQtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dGFyZWFEaXJlY3RpdmUgfSBmcm9tICcuL3RleHRhcmVhLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUZXh0YXJlYUludGVyZmFjZSB9IGZyb20gJy4vdGV4dGFyZWEuaW50ZXJmYWNlJztcbmltcG9ydCB7IGlzSW1hZ2VGaWxlIH0gZnJvbSAnLi4vaXMtaW1hZ2UtZmlsZSc7XG5pbXBvcnQgeyBFbW9qaUlucHV0U2VydmljZSB9IGZyb20gJy4vZW1vamktaW5wdXQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VJbnB1dGAgY29tcG9uZW50IGRpc3BsYXlzIGFuIGlucHV0IHdoZXJlIHVzZXJzIGNhbiB0eXBlIHRoZWlyIG1lc3NhZ2VzIGFuZCB1cGxvYWQgZmlsZXMsIGFuZCBzZW5kcyB0aGUgbWVzc2FnZSB0byB0aGUgYWN0aXZlIGNoYW5uZWwuIFRoZSBjb21wb25lbnQgY2FuIGJlIHVzZWQgdG8gY29tcG9zZSBuZXcgbWVzc2FnZXMgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMuIFRvIHNlbmQgbWVzc2FnZXMsIHRoZSBjaGF0IHVzZXIgbmVlZHMgdG8gaGF2ZSB0aGUgbmVjZXNzYXJ5IFtjaGFubmVsIGNhcGFiaWxpdHldKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIHByb3ZpZGVyczogW0F0dGFjaG1lbnRTZXJ2aWNlLCBFbW9qaUlucHV0U2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VJbnB1dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIElmIGZpbGUgdXBsb2FkIGlzIGVuYWJsZWQsIHRoZSB1c2VyIGNhbiBvcGVuIGEgZmlsZSBzZWxlY3RvciBmcm9tIHRoZSBpbnB1dC4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgdXNlciBhbHNvIG5lZWRzIHRvIGhhdmUgdGhlIG5lY2Vzc2FyeSBbY2hhbm5lbCBjYXBhYmlsaXR5XShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgaXNGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgYWxzbyBbbmVlZCB0byB1c2UgdGhlIGBBdXRvY29tcGxldGVUZXh0YXJlYWBdKC4uL2NvbmNlcHRzL29wdC1pbi1hcmNoaXRlY3R1cmUubWR4KSBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmsuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgYXJlTWVudGlvbnNFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIHNjb3BlIGZvciB1c2VyIG1lbnRpb25zLCBlaXRoZXIgbWVtYmVycyBvZiB0aGUgY3VycmVudCBjaGFubmVsIG9mIG1lbWJlcnMgb2YgdGhlIGFwcGxpY2F0aW9uLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZGlzcGFseWVkIGluIGEgY2hhbm5lbCBvciBpbiBhIFt0aHJlYWRdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB1c2VycyBjYW4gc2VsZWN0IG11bHRpcGxlIGZpbGVzIHRvIHVwbG9hZC4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBlZGl0XG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgbWVzc2FnZSBzZW5kaW5nIGZyb20gdGhlIG91dHNpZGVcbiAgICovXG4gIEBJbnB1dCgpIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYSBtZXNzYWdlIHdhcyBzdWNjZXNzZnVseSBzZW50IG9yIHVwZGF0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBtZXNzYWdlVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBpc0ZpbGVVcGxvYWRBdXRob3JpemVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjYW5TZW5kTGlua3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNhblNlbmRNZXNzYWdlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgYXR0YWNobWVudFVwbG9hZHMkOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnRVcGxvYWRbXT47XG4gIHRleHRhcmVhVmFsdWUgPSAnJztcbiAgdGV4dGFyZWFSZWY6IENvbXBvbmVudFJlZjxUZXh0YXJlYUludGVyZmFjZT4gfCB1bmRlZmluZWQ7XG4gIG1lbnRpb25lZFVzZXJzOiBVc2VyUmVzcG9uc2VbXSA9IFtdO1xuICBxdW90ZWRNZXNzYWdlOiB1bmRlZmluZWQgfCBTdHJlYW1NZXNzYWdlO1xuICB0eXBpbmdTdGFydCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb29sZG93biQ6IE9ic2VydmFibGU8bnVtYmVyPiB8IHVuZGVmaW5lZDtcbiAgaXNDb29sZG93bkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgZW1vamlQaWNrZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8RW1vamlQaWNrZXJDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGU6XG4gICAgfCBUZW1wbGF0ZVJlZjxBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBwcml2YXRlIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoVGV4dGFyZWFEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIHRleHRhcmVhQW5jaG9yITogVGV4dGFyZWFEaXJlY3RpdmU7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBoaWRlTm90aWZpY2F0aW9uOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc1ZpZXdJbml0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhcHBTZXR0aW5nczogQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY2hhbm5lbDogQ2hhbm5lbDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzZW5kTWVzc2FnZVN1YmNyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGF0dGFjaG1lbnRTZXJ2aWNlOiBBdHRhY2htZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UsXG4gICAgQEluamVjdCh0ZXh0YXJlYUluamVjdGlvblRva2VuKVxuICAgIHByaXZhdGUgdGV4dGFyZWFUeXBlOiBUeXBlPFRleHRhcmVhSW50ZXJmYWNlPixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY2hhdENsaWVudDogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbW9qaUlucHV0U2VydmljZTogRW1vamlJbnB1dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIkLnN1YnNjcmliZShcbiAgICAgICAgKGNvdW50ZXIpID0+IHtcbiAgICAgICAgICBpZiAoY291bnRlciA9PT0gMCAmJiB0aGlzLmhpZGVOb3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5oaWRlTm90aWZpY2F0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXNldEF0dGFjaG1lbnRVcGxvYWRzKCk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICB0aGlzLmlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgPVxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3VwbG9hZC1maWxlJykgIT09IC0xO1xuICAgICAgICAgIHRoaXMuY2FuU2VuZExpbmtzID0gY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3NlbmQtbGlua3MnKSAhPT0gLTE7XG4gICAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnQuYXBwU2V0dGluZ3MkLnN1YnNjcmliZShcbiAgICAgICAgKGFwcFNldHRpbmdzKSA9PiAodGhpcy5hcHBTZXR0aW5ncyA9IGFwcFNldHRpbmdzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLm1lc3NhZ2VUb1F1b3RlJC5zdWJzY3JpYmUoKG0pID0+IHtcbiAgICAgICAgY29uc3QgaXNUaHJlYWRSZXBseSA9IG0gJiYgbS5wYXJlbnRfaWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiBpc1RocmVhZFJlcGx5KSB8fFxuICAgICAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmIHRoaXMucXVvdGVkTWVzc2FnZSAmJiAhbSkgfHxcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAnbWFpbicgJiYgIWlzVGhyZWFkUmVwbHkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucXVvdGVkTWVzc2FnZSA9IG07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzJCA9IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkO1xuICAgIHRoaXMuaXNGaWxlVXBsb2FkRW5hYmxlZCA9IHRoaXMuY29uZmlnU2VydmljZS5pc0ZpbGVVcGxvYWRFbmFibGVkO1xuICAgIHRoaXMuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuYXJlTWVudGlvbnNFbmFibGVkO1xuICAgIHRoaXMubWVudGlvblNjb3BlID0gdGhpcy5jb25maWdTZXJ2aWNlLm1lbnRpb25TY29wZTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50eXBpbmdTdGFydCQuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RhcnRlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5sYXRlc3RNZXNzYWdlRGF0ZUJ5VXNlckJ5Q2hhbm5lbHMkLFxuICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLFxuICAgICAgXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKFtsYXRlc3RNZXNzYWdlcywgY2hhbm5lbF0pOiBbXG4gICAgICAgICAgICAgIERhdGUgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4gfCB1bmRlZmluZWRcbiAgICAgICAgICAgIF0gPT4gW2xhdGVzdE1lc3NhZ2VzW2NoYW5uZWw/LmNpZCB8fCAnJ10sIGNoYW5uZWwhXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChbbGF0ZXN0TWVzc2FnZURhdGUsIGNoYW5uZWxdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29vbGRvd24gPVxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/LmNvb2xkb3duIGFzIG51bWJlcikgJiZcbiAgICAgICAgICAgIGxhdGVzdE1lc3NhZ2VEYXRlICYmXG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoY2hhbm5lbD8uZGF0YT8uY29vbGRvd24gYXMgbnVtYmVyKSAtXG4gICAgICAgICAgICAgICAgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbGF0ZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpKSAvIDEwMDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29vbGRvd24gJiZcbiAgICAgICAgICAgIGNvb2xkb3duID4gMCAmJlxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKCdzbG93LW1vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdGFydENvb2xkb3duKGNvb2xkb3duKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb29sZG93bkluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcENvb2xkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5lbW9qaVBpY2tlclRlbXBsYXRlJC5zdWJzY3JpYmUoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1vamlQaWNrZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5hdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRQcmV2aWV3TGlzdFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaWV3SW5pdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRUZXh0YXJlYSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmVzZXRBdHRhY2htZW50VXBsb2FkcygpO1xuICAgICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5jcmVhdGVGcm9tQXR0YWNobWVudHMoXG4gICAgICAgICAgdGhpcy5tZXNzYWdlIS5hdHRhY2htZW50cyB8fCBbXVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSB0aGlzLm1lc3NhZ2UhLnRleHQgfHwgJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmlzRmlsZVVwbG9hZEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc0ZpbGVVcGxvYWRFbmFibGVkID0gdGhpcy5pc0ZpbGVVcGxvYWRFbmFibGVkO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQgPVxuICAgICAgICB0aGlzLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuYXJlTWVudGlvbnNFbmFibGVkID0gdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQ7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnRpb25TY29wZSA9IHRoaXMubWVudGlvblNjb3BlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5tb2RlKSB7XG4gICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5zZW5kTWVzc2FnZSQpIHtcbiAgICAgIGlmICh0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZW5kTWVzc2FnZSQpIHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uID0gdGhpcy5zZW5kTWVzc2FnZSQuc3Vic2NyaWJlKFxuICAgICAgICAgICgpID0+IHZvaWQgdGhpcy5tZXNzYWdlU2VudCgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VuZE1lc3NhZ2VTdWJjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgYXN5bmMgbWVzc2FnZVNlbnQoKSB7XG4gICAgbGV0IGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciE6IG51bWJlcjtcbiAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKChjb3VudGVyKSA9PiAoYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyID0gY291bnRlcikpO1xuICAgIGlmIChhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIgPiAwKSB7XG4gICAgICBpZiAoIXRoaXMuaGlkZU5vdGlmaWNhdGlvbikge1xuICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb24gPVxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRQZXJtYW5lbnROb3RpZmljYXRpb24oXG4gICAgICAgICAgICAnc3RyZWFtQ2hhdC5XYWl0IHVudGlsIGFsbCBhdHRhY2htZW50cyBoYXZlIHVwbG9hZGVkJ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50U2VydmljZS5tYXBUb0F0dGFjaG1lbnRzKCk7XG4gICAgbGV0IHRleHQgPSB0aGlzLnRleHRhcmVhVmFsdWU7XG4gICAgY29uc3QgdGV4dENvbnRhaW5zT25seVNwYWNlQ2hhcnMgPSAhdGV4dC5yZXBsYWNlKC8gL2csICcnKTsgLy9zcGNhZVxuICAgIGlmIChcbiAgICAgICghdGV4dCB8fCB0ZXh0Q29udGFpbnNPbmx5U3BhY2VDaGFycykgJiZcbiAgICAgICghYXR0YWNobWVudHMgfHwgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGV4dENvbnRhaW5zT25seVNwYWNlQ2hhcnMpIHtcbiAgICAgIHRleHQgPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGFpbnNMaW5rcyAmJiAhdGhpcy5jYW5TZW5kTGlua3MpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LlNlbmRpbmcgbGlua3MgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb252ZXJzYXRpb24nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNVcGRhdGUpIHtcbiAgICAgIHRoaXMudGV4dGFyZWFWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgKHRoaXMuaXNVcGRhdGVcbiAgICAgICAgPyB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVwZGF0ZU1lc3NhZ2Uoe1xuICAgICAgICAgICAgLi4udGhpcy5tZXNzYWdlISxcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgdGhpcy5tZW50aW9uZWRVc2VycyxcbiAgICAgICAgICAgIHRoaXMucGFyZW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgdGhpcy5xdW90ZWRNZXNzYWdlPy5pZFxuICAgICAgICAgICkpO1xuICAgICAgdGhpcy5tZXNzYWdlVXBkYXRlLmVtaXQoKTtcbiAgICAgIGlmICghdGhpcy5pc1VwZGF0ZSkge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLnJlc2V0QXR0YWNobWVudFVwbG9hZHMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FZGl0IG1lc3NhZ2UgcmVxdWVzdCBmYWlsZWQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS50eXBpbmdTdG9wcGVkKHRoaXMucGFyZW50TWVzc2FnZUlkKTtcbiAgICBpZiAodGhpcy5xdW90ZWRNZXNzYWdlKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29udGFpbnNMaW5rcygpIHtcbiAgICByZXR1cm4gLyg/Oig/Omh0dHBzP3xmdHApOlxcL1xcLyk/W1xcdy9cXC0/PSUuXStcXC5bXFx3L1xcLSY/PSUuXSsvLnRlc3QoXG4gICAgICB0aGlzLnRleHRhcmVhVmFsdWVcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1b3RlZE1lc3NhZ2VBdHRhY2htZW50cygpIHtcbiAgICBjb25zdCBvcmlnaW5hbEF0dGFjaG1lbnRzID0gdGhpcy5xdW90ZWRNZXNzYWdlPy5hdHRhY2htZW50cztcbiAgICByZXR1cm4gb3JpZ2luYWxBdHRhY2htZW50cyAmJiBvcmlnaW5hbEF0dGFjaG1lbnRzLmxlbmd0aFxuICAgICAgPyBbb3JpZ2luYWxBdHRhY2htZW50c1swXV1cbiAgICAgIDogW107XG4gIH1cblxuICBnZXQgZGlzYWJsZWRUZXh0YXJlYVRleHQoKSB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmRNZXNzYWdlcykge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgICAgPyBcInN0cmVhbUNoYXQuWW91IGNhbid0IHNlbmQgdGhyZWFkIHJlcGxpZXMgaW4gdGhpcyBjaGFubmVsXCJcbiAgICAgICAgOiBcInN0cmVhbUNoYXQuWW91IGNhbid0IHNlbmQgbWVzc2FnZXMgaW4gdGhpcyBjaGFubmVsXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvb2xkb3duJCkge1xuICAgICAgcmV0dXJuICdzdHJlYW1DaGF0LlNsb3cgTW9kZSBPTic7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFzeW5jIGZpbGVzU2VsZWN0ZWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghKGF3YWl0IHRoaXMuYXJlQXR0YWNoZW1udHNWYWxpZChmaWxlTGlzdCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuZmlsZXNTZWxlY3RlZChmaWxlTGlzdCk7XG4gICAgdGhpcy5jbGVhckZpbGVJbnB1dCgpO1xuICB9XG5cbiAgZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpIHtcbiAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbGVjdE1lc3NhZ2VUb1F1b3RlKHVuZGVmaW5lZCk7XG4gIH1cblxuICBnZXRFbW9qaVBpY2tlckNvbnRleHQoKTogRW1vamlQaWNrZXJDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW1vamlJbnB1dCQ6IHRoaXMuZW1vamlJbnB1dFNlcnZpY2UuZW1vamlJbnB1dCQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQoKTogQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dGFjaG1lbnRVcGxvYWRzJDogdGhpcy5hdHRhY2htZW50U2VydmljZS5hdHRhY2htZW50VXBsb2FkcyQsXG4gICAgICBkZWxldGVVcGxvYWRIYW5kbGVyOiB0aGlzLmRlbGV0ZVVwbG9hZC5iaW5kKHRoaXMpLFxuICAgICAgcmV0cnlVcGxvYWRIYW5kbGVyOiB0aGlzLnJldHJ5VXBsb2FkLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVXBsb2FkKHVwbG9hZDogQXR0YWNobWVudFVwbG9hZCkge1xuICAgIHZvaWQgdGhpcy5hdHRhY2htZW50U2VydmljZS5kZWxldGVBdHRhY2htZW50KHVwbG9hZCk7XG4gIH1cblxuICBwcml2YXRlIHJldHJ5VXBsb2FkKGZpbGU6IEZpbGUpIHtcbiAgICB2b2lkIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmV0cnlBdHRhY2htZW50VXBsb2FkKGZpbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckZpbGVJbnB1dCgpIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1VwZGF0ZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLm1lc3NhZ2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRUZXh0YXJlYSgpIHtcbiAgICAvLyBjbGVhbnVwIHByZXZpb3VzbHkgYnVpbHQgdGV4dGFyZWFcbiAgICBpZiAoIXRoaXMuY2FuU2VuZE1lc3NhZ2VzKSB7XG4gICAgICB0aGlzLnRleHRhcmVhUmVmID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5TZW5kTWVzc2FnZXMgfHwgdGhpcy50ZXh0YXJlYVJlZiB8fCAhdGhpcy50ZXh0YXJlYUFuY2hvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPVxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy50ZXh0YXJlYVR5cGUpO1xuICAgIHRoaXMudGV4dGFyZWFSZWYgPVxuICAgICAgdGhpcy50ZXh0YXJlYUFuY2hvci52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxhbnk+KFxuICAgICAgICBjb21wb25lbnRGYWN0b3J5XG4gICAgICApO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2hlbW50c1ZhbGlkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpIHtcbiAgICBpZiAoIWZpbGVMaXN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFwcFNldHRpbmdzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnQuZ2V0QXBwU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIEFycmF5LmZyb20oZmlsZUxpc3QpLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBoYXNCbG9ja2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc0Jsb2NrZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmKSkge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5VbnN1cHBvcnRlZCBmaWxlIHR5cGU6IHt7dHlwZX19JyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgdHlwZTogZi50eXBlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYW5TZW5kTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5jaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9XG4gICAgICAgIGNhcGFiaWxpdGllcy5pbmRleE9mKFxuICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nID8gJ3NlbmQtbWVzc2FnZScgOiAnc2VuZC1yZXBseSdcbiAgICAgICAgKSAhPT0gLTE7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmluaXRUZXh0YXJlYSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBhcmVudE1lc3NhZ2VJZCgpIHtcbiAgICBsZXQgcGFyZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3RocmVhZCcpIHtcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlUGFyZW50TWVzc2FnZUlkJFxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChpZCkgPT4gKHBhcmVudE1lc3NhZ2VJZCA9IGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudE1lc3NhZ2VJZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDb29sZG93bihjb29sZG93bjogbnVtYmVyKSB7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5jb29sZG93biQgPSB0aW1lcigwLCAxMDAwKS5waXBlKFxuICAgICAgdGFrZShjb29sZG93biArIDEpLFxuICAgICAgbWFwKCh2KSA9PiBjb29sZG93biAtIHYpLFxuICAgICAgdGFwKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQ29vbGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ29vbGRvd24oKSB7XG4gICAgdGhpcy5jb29sZG93biQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIC8vIHRoZSBhbmNob3IgZGlyZWN0aXZlIHdpbGwgYmUgcmVjcmVhdGVkIGJlY2F1c2Ugb2YgKm5nSWYsIHNvIHdlIHdpbGwgaGF2ZSB0byByZWluaXQgdGhlIHRleHRhcmVhIGFzIHdlbGxcbiAgICB0aGlzLnRleHRhcmVhUmVmID0gdW5kZWZpbmVkO1xuICAgIC8vIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGUgdGV4dGFyZWEgYWZ0ZXIgdGhlIGFuY2hvciB3YXMgcmVjcmVhdGVkLCBzbyB3ZSB3aWxsIGhhdmUgdG8gd2FpdCBhIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2l0aCBzZXRUaW1lb3V0XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRUZXh0YXJlYSgpKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInt7XG4gICAgbW9kZSA9PT0gJ21haW4nID8gJ3N0ci1jaGF0X19pbnB1dC1mbGF0JyA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dCdcbiAgfX1cIlxuICBbY2xhc3Muc3RyLWNoYXRfX2lucHV0LWZsYXQtaGFzLWF0dGFjaG1lbnRzXT1cIlxuICAgIChhdHRhY2htZW50VXBsb2FkcyQgfCBhc3luYykhLmxlbmd0aCA+IDBcbiAgXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19pbnB1dC1mbGF0LXF1b3RlZF09XCIhIXF1b3RlZE1lc3NhZ2VcIlxuPlxuICA8ZGl2XG4gICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS1jb250YWluZXJcIlxuICAgIGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlld1wiXG4gICAgKm5nSWY9XCJxdW90ZWRNZXNzYWdlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWhlYWRlclwiPlxuICAgICAgPGRpdj57eyBcInN0cmVhbUNoYXQuUmVwbHkgdG8gTWVzc2FnZVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NxdWFyZS1idXR0b25cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInJlbW92ZS1xdW90ZVwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdE1lc3NhZ2VUb1F1b3RlKClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgaWNvbj1cImNsb3NlLW5vLW91dGxpbmVcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogMTBweFwiXG4gICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInF1b3RlZC1tZXNzYWdlLXByZXZpZXctY29udGVudFwiPlxuICAgICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJxb3V0ZWQtbWVzc2FnZS1hdmF0YXJcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgW2ltYWdlVXJsXT1cInF1b3RlZE1lc3NhZ2U/LnVzZXI/LmltYWdlXCJcbiAgICAgICAgW25hbWVdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8ubmFtZSB8fCBxdW90ZWRNZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1jb250ZW50LWlubmVyXCI+XG4gICAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRhY2htZW50c109XCJxdW90ZWRNZXNzYWdlQXR0YWNobWVudHNcIlxuICAgICAgICAgIFttZXNzYWdlSWRdPVwicXVvdGVkTWVzc2FnZT8uaWRcIlxuICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS10ZXh0XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cInF1b3RlZE1lc3NhZ2U/Lmh0bWwgfHwgcXVvdGVkTWVzc2FnZT8udGV4dFwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19pbnB1dC1mbGF0LXdyYXBwZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ7e1xuICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICA/ICdzdHItY2hhdF9faW5wdXQtZmxhdC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgICAgICA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgIH19XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1ByZXZpZXdcbiAgICAgICAgbGV0LWF0dGFjaG1lbnRVcGxvYWRzJD1cImF0dGFjaG1lbnRVcGxvYWRzJFwiXG4gICAgICAgIGxldC1yZXRyeVVwbG9hZEhhbmRsZXI9XCJyZXRyeVVwbG9hZEhhbmRsZXJcIlxuICAgICAgICBsZXQtZGVsZXRlVXBsb2FkSGFuZGxlcj1cImRlbGV0ZVVwbG9hZEhhbmRsZXJcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0XG4gICAgICAgICAgW2F0dGFjaG1lbnRVcGxvYWRzJF09XCJhdHRhY2htZW50VXBsb2FkcyRcIlxuICAgICAgICAgIChyZXRyeUF0dGFjaG1lbnRVcGxvYWQpPVwicmV0cnlVcGxvYWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZVVwbG9hZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJyZnUtaW1hZ2UtcHJldmlld2VyLWFuZ3VsYXItaG9zdFwiXG4gICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LXByZXZpZXctbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzUHJldmlldztcbiAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KClcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydGEgc3RyLWNoYXRfX3RleHRhcmVhIHN0ci1jaGF0LWFuZ3VsYXJfX3RleHRhcmVhXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImVtb2ppUGlja2VyVGVtcGxhdGUgJiYgIWlzQ29vbGRvd25JblByb2dyZXNzXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImVtb2ppLXBpY2tlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9faW5wdXQtZmxhdC1lbW9qaXNlbGVjdFxuICAgICAgICAgICAgICBzdHItY2hhdC1hbmd1bGFyX19lbW9qaXNlbGVjdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZW1vamlQaWNrZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBnZXRFbW9qaVBpY2tlckNvbnRleHQoKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2lucHV0LWZsYXQtY29vbGRvd24gc3RyLWNoYXQtYW5ndWxhcl9fY29vbGRvd25cIlxuICAgICAgICAgICpuZ0lmPVwiaXNDb29sZG93bkluUHJvZ3Jlc3NcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY29vbGRvd24tdGltZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29vbGRvd24kIHwgYXN5bmMgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VzICYmICFpc0Nvb2xkb3duSW5Qcm9ncmVzczsgZWxzZSBub3RBbGxvd2VkXCJcbiAgICAgICAgICBzdHJlYW1UZXh0YXJlYVxuICAgICAgICAgIFsodmFsdWUpXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ0eXBpbmdTdGFydCQubmV4dCgpXCJcbiAgICAgICAgICAoc2VuZCk9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhUmVmXCJcbiAgICAgICAgICAodXNlck1lbnRpb25zKT1cIm1lbnRpb25lZFVzZXJzID0gJGV2ZW50XCJcbiAgICAgICAgICBbYXJlTWVudGlvbnNFbmFibGVkXT1cImFyZU1lbnRpb25zRW5hYmxlZFwiXG4gICAgICAgICAgW21lbnRpb25TY29wZV09XCJtZW50aW9uU2NvcGVcIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RBbGxvd2VkPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgIHJvd3M9XCIxXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkaXNhYmxlZFRleHRhcmVhVGV4dCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInJ0YV9fdGV4dGFyZWEgc3RyLWNoYXRfX3RleHRhcmVhX190ZXh0YXJlYVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRpc2FibGVkLXRleHRhcmVhXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzRmlsZVVwbG9hZEVuYWJsZWQgJiZcbiAgICAgICAgICBpc0ZpbGVVcGxvYWRBdXRob3JpemVkICYmXG4gICAgICAgICAgY2FuU2VuZE1lc3NhZ2VzICYmXG4gICAgICAgICAgIWlzQ29vbGRvd25JblByb2dyZXNzXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGV1cGxvYWQtd3JhcHBlclwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS11cGxvYWQtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICAgICAge3sgXCJzdHJlYW1DaGF0LkF0dGFjaCBmaWxlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmZ1LWZpbGUtdXBsb2FkLWJ1dHRvblwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZnUtZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVzU2VsZWN0ZWQoZmlsZUlucHV0LmZpbGVzKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9faW5wdXQtZmxhdC1maWxldXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGljb249XCJmaWxlLXVwbG9hZFwiXG4gICAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJjYW5TZW5kTWVzc2FnZXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kLWJ1dHRvblwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19zZW5kLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJzZW5kXCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
411
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1pbnB1dC9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxTQUFTLEVBSVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUlOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVU3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHMUQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8scUJBQXFCO0lBMkRoQyxZQUNVLGNBQThCLEVBQzlCLG1CQUF3QyxFQUN4QyxpQkFBb0MsRUFDcEMsYUFBd0MsRUFFeEMsWUFBcUMsRUFDckMsd0JBQWtELEVBQ2xELEtBQXdCLEVBQ3hCLFVBQTZCLEVBQzdC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O2dCQUlHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSWEsYUFBYTtzQkFBL0IsTUFBTTtnQkFnQnlCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFFZCxjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwU2V0dGluZ3MsIENoYW5uZWwsIFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IEF0dGFjaG1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vYXR0YWNobWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IHRleHRhcmVhSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi9pbmplY3Rpb24tdG9rZW5zJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0LFxuICBBdHRhY2htZW50VXBsb2FkLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBFbW9qaVBpY2tlckNvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21lc3NhZ2UtaW5wdXQtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dGFyZWFEaXJlY3RpdmUgfSBmcm9tICcuL3RleHRhcmVhLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUZXh0YXJlYUludGVyZmFjZSB9IGZyb20gJy4vdGV4dGFyZWEuaW50ZXJmYWNlJztcbmltcG9ydCB7IGlzSW1hZ2VGaWxlIH0gZnJvbSAnLi4vaXMtaW1hZ2UtZmlsZSc7XG5pbXBvcnQgeyBFbW9qaUlucHV0U2VydmljZSB9IGZyb20gJy4vZW1vamktaW5wdXQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VJbnB1dGAgY29tcG9uZW50IGRpc3BsYXlzIGFuIGlucHV0IHdoZXJlIHVzZXJzIGNhbiB0eXBlIHRoZWlyIG1lc3NhZ2VzIGFuZCB1cGxvYWQgZmlsZXMsIGFuZCBzZW5kcyB0aGUgbWVzc2FnZSB0byB0aGUgYWN0aXZlIGNoYW5uZWwuIFRoZSBjb21wb25lbnQgY2FuIGJlIHVzZWQgdG8gY29tcG9zZSBuZXcgbWVzc2FnZXMgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMuIFRvIHNlbmQgbWVzc2FnZXMsIHRoZSBjaGF0IHVzZXIgbmVlZHMgdG8gaGF2ZSB0aGUgbmVjZXNzYXJ5IFtjaGFubmVsIGNhcGFiaWxpdHldKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIHByb3ZpZGVyczogW0F0dGFjaG1lbnRTZXJ2aWNlLCBFbW9qaUlucHV0U2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VJbnB1dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIElmIGZpbGUgdXBsb2FkIGlzIGVuYWJsZWQsIHRoZSB1c2VyIGNhbiBvcGVuIGEgZmlsZSBzZWxlY3RvciBmcm9tIHRoZSBpbnB1dC4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgdXNlciBhbHNvIG5lZWRzIHRvIGhhdmUgdGhlIG5lY2Vzc2FyeSBbY2hhbm5lbCBjYXBhYmlsaXR5XShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgaXNGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgYWxzbyBbbmVlZCB0byB1c2UgdGhlIGBBdXRvY29tcGxldGVUZXh0YXJlYWBdKC4uL2NvbmNlcHRzL29wdC1pbi1hcmNoaXRlY3R1cmUubWR4KSBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmsuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgYXJlTWVudGlvbnNFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIHNjb3BlIGZvciB1c2VyIG1lbnRpb25zLCBlaXRoZXIgbWVtYmVycyBvZiB0aGUgY3VycmVudCBjaGFubmVsIG9mIG1lbWJlcnMgb2YgdGhlIGFwcGxpY2F0aW9uLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZGlzcGFseWVkIGluIGEgY2hhbm5lbCBvciBpbiBhIFt0aHJlYWRdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB1c2VycyBjYW4gc2VsZWN0IG11bHRpcGxlIGZpbGVzIHRvIHVwbG9hZC4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBlZGl0XG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgbWVzc2FnZSBzZW5kaW5nIGZyb20gdGhlIG91dHNpZGVcbiAgICovXG4gIEBJbnB1dCgpIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gYSBtZXNzYWdlIHdhcyBzdWNjZXNzZnVseSBzZW50IG9yIHVwZGF0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBtZXNzYWdlVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBpc0ZpbGVVcGxvYWRBdXRob3JpemVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBjYW5TZW5kTGlua3M6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNhblNlbmRNZXNzYWdlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgYXR0YWNobWVudFVwbG9hZHMkOiBPYnNlcnZhYmxlPEF0dGFjaG1lbnRVcGxvYWRbXT47XG4gIHRleHRhcmVhVmFsdWUgPSAnJztcbiAgdGV4dGFyZWFSZWY6IENvbXBvbmVudFJlZjxUZXh0YXJlYUludGVyZmFjZT4gfCB1bmRlZmluZWQ7XG4gIG1lbnRpb25lZFVzZXJzOiBVc2VyUmVzcG9uc2VbXSA9IFtdO1xuICBxdW90ZWRNZXNzYWdlOiB1bmRlZmluZWQgfCBTdHJlYW1NZXNzYWdlO1xuICB0eXBpbmdTdGFydCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb29sZG93biQ6IE9ic2VydmFibGU8bnVtYmVyPiB8IHVuZGVmaW5lZDtcbiAgaXNDb29sZG93bkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgZW1vamlQaWNrZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8RW1vamlQaWNrZXJDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGU6XG4gICAgfCBUZW1wbGF0ZVJlZjxBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBwcml2YXRlIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoVGV4dGFyZWFEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIHRleHRhcmVhQW5jaG9yITogVGV4dGFyZWFEaXJlY3RpdmU7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBoaWRlTm90aWZpY2F0aW9uOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc1ZpZXdJbml0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhcHBTZXR0aW5nczogQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY2hhbm5lbDogQ2hhbm5lbDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzZW5kTWVzc2FnZVN1YmNyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGF0dGFjaG1lbnRTZXJ2aWNlOiBBdHRhY2htZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UsXG4gICAgQEluamVjdCh0ZXh0YXJlYUluamVjdGlvblRva2VuKVxuICAgIHByaXZhdGUgdGV4dGFyZWFUeXBlOiBUeXBlPFRleHRhcmVhSW50ZXJmYWNlPixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY2hhdENsaWVudDogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbW9qaUlucHV0U2VydmljZTogRW1vamlJbnB1dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIkLnN1YnNjcmliZShcbiAgICAgICAgKGNvdW50ZXIpID0+IHtcbiAgICAgICAgICBpZiAoY291bnRlciA9PT0gMCAmJiB0aGlzLmhpZGVOb3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5oaWRlTm90aWZpY2F0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXNldEF0dGFjaG1lbnRVcGxvYWRzKCk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICB0aGlzLmlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgPVxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3VwbG9hZC1maWxlJykgIT09IC0xO1xuICAgICAgICAgIHRoaXMuY2FuU2VuZExpbmtzID0gY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3NlbmQtbGlua3MnKSAhPT0gLTE7XG4gICAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnQuYXBwU2V0dGluZ3MkLnN1YnNjcmliZShcbiAgICAgICAgKGFwcFNldHRpbmdzKSA9PiAodGhpcy5hcHBTZXR0aW5ncyA9IGFwcFNldHRpbmdzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLm1lc3NhZ2VUb1F1b3RlJC5zdWJzY3JpYmUoKG0pID0+IHtcbiAgICAgICAgY29uc3QgaXNUaHJlYWRSZXBseSA9IG0gJiYgbS5wYXJlbnRfaWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiBpc1RocmVhZFJlcGx5KSB8fFxuICAgICAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmIHRoaXMucXVvdGVkTWVzc2FnZSAmJiAhbSkgfHxcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAnbWFpbicgJiYgIWlzVGhyZWFkUmVwbHkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucXVvdGVkTWVzc2FnZSA9IG07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzJCA9IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkO1xuICAgIHRoaXMuaXNGaWxlVXBsb2FkRW5hYmxlZCA9IHRoaXMuY29uZmlnU2VydmljZS5pc0ZpbGVVcGxvYWRFbmFibGVkO1xuICAgIHRoaXMuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuYXJlTWVudGlvbnNFbmFibGVkO1xuICAgIHRoaXMubWVudGlvblNjb3BlID0gdGhpcy5jb25maWdTZXJ2aWNlLm1lbnRpb25TY29wZTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50eXBpbmdTdGFydCQuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RhcnRlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5sYXRlc3RNZXNzYWdlRGF0ZUJ5VXNlckJ5Q2hhbm5lbHMkLFxuICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLFxuICAgICAgXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKFtsYXRlc3RNZXNzYWdlcywgY2hhbm5lbF0pOiBbXG4gICAgICAgICAgICAgIERhdGUgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4gfCB1bmRlZmluZWRcbiAgICAgICAgICAgIF0gPT4gW2xhdGVzdE1lc3NhZ2VzW2NoYW5uZWw/LmNpZCB8fCAnJ10sIGNoYW5uZWwhXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChbbGF0ZXN0TWVzc2FnZURhdGUsIGNoYW5uZWxdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29vbGRvd24gPVxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/LmNvb2xkb3duIGFzIG51bWJlcikgJiZcbiAgICAgICAgICAgIGxhdGVzdE1lc3NhZ2VEYXRlICYmXG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoY2hhbm5lbD8uZGF0YT8uY29vbGRvd24gYXMgbnVtYmVyKSAtXG4gICAgICAgICAgICAgICAgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbGF0ZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpKSAvIDEwMDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29vbGRvd24gJiZcbiAgICAgICAgICAgIGNvb2xkb3duID4gMCAmJlxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKCdzbG93LW1vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdGFydENvb2xkb3duKGNvb2xkb3duKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb29sZG93bkluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcENvb2xkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5lbW9qaVBpY2tlclRlbXBsYXRlJC5zdWJzY3JpYmUoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1vamlQaWNrZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5hdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRQcmV2aWV3TGlzdFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaWV3SW5pdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRUZXh0YXJlYSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmVzZXRBdHRhY2htZW50VXBsb2FkcygpO1xuICAgICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5jcmVhdGVGcm9tQXR0YWNobWVudHMoXG4gICAgICAgICAgdGhpcy5tZXNzYWdlIS5hdHRhY2htZW50cyB8fCBbXVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSB0aGlzLm1lc3NhZ2UhLnRleHQgfHwgJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmlzRmlsZVVwbG9hZEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc0ZpbGVVcGxvYWRFbmFibGVkID0gdGhpcy5pc0ZpbGVVcGxvYWRFbmFibGVkO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQgPVxuICAgICAgICB0aGlzLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuYXJlTWVudGlvbnNFbmFibGVkID0gdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQ7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLm1lbnRpb25TY29wZSA9IHRoaXMubWVudGlvblNjb3BlO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5tb2RlKSB7XG4gICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5zZW5kTWVzc2FnZSQpIHtcbiAgICAgIGlmICh0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZW5kTWVzc2FnZSQpIHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uID0gdGhpcy5zZW5kTWVzc2FnZSQuc3Vic2NyaWJlKFxuICAgICAgICAgICgpID0+IHZvaWQgdGhpcy5tZXNzYWdlU2VudCgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VuZE1lc3NhZ2VTdWJjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgYXN5bmMgbWVzc2FnZVNlbnQoKSB7XG4gICAgbGV0IGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciE6IG51bWJlcjtcbiAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKChjb3VudGVyKSA9PiAoYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyID0gY291bnRlcikpO1xuICAgIGlmIChhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIgPiAwKSB7XG4gICAgICBpZiAoIXRoaXMuaGlkZU5vdGlmaWNhdGlvbikge1xuICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb24gPVxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRQZXJtYW5lbnROb3RpZmljYXRpb24oXG4gICAgICAgICAgICAnc3RyZWFtQ2hhdC5XYWl0IHVudGlsIGFsbCBhdHRhY2htZW50cyBoYXZlIHVwbG9hZGVkJ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50U2VydmljZS5tYXBUb0F0dGFjaG1lbnRzKCk7XG4gICAgbGV0IHRleHQgPSB0aGlzLnRleHRhcmVhVmFsdWU7XG4gICAgY29uc3QgdGV4dENvbnRhaW5zT25seVNwYWNlQ2hhcnMgPSAhdGV4dC5yZXBsYWNlKC8gL2csICcnKTsgLy9zcGNhZVxuICAgIGlmIChcbiAgICAgICghdGV4dCB8fCB0ZXh0Q29udGFpbnNPbmx5U3BhY2VDaGFycykgJiZcbiAgICAgICghYXR0YWNobWVudHMgfHwgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGV4dENvbnRhaW5zT25seVNwYWNlQ2hhcnMpIHtcbiAgICAgIHRleHQgPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGFpbnNMaW5rcyAmJiAhdGhpcy5jYW5TZW5kTGlua3MpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICdzdHJlYW1DaGF0LlNlbmRpbmcgbGlua3MgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb252ZXJzYXRpb24nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNVcGRhdGUpIHtcbiAgICAgIHRoaXMudGV4dGFyZWFWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgKHRoaXMuaXNVcGRhdGVcbiAgICAgICAgPyB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVwZGF0ZU1lc3NhZ2Uoe1xuICAgICAgICAgICAgLi4udGhpcy5tZXNzYWdlISxcbiAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgdGhpcy5tZW50aW9uZWRVc2VycyxcbiAgICAgICAgICAgIHRoaXMucGFyZW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgdGhpcy5xdW90ZWRNZXNzYWdlPy5pZFxuICAgICAgICAgICkpO1xuICAgICAgdGhpcy5tZXNzYWdlVXBkYXRlLmVtaXQoKTtcbiAgICAgIGlmICghdGhpcy5pc1VwZGF0ZSkge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLnJlc2V0QXR0YWNobWVudFVwbG9hZHMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FZGl0IG1lc3NhZ2UgcmVxdWVzdCBmYWlsZWQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS50eXBpbmdTdG9wcGVkKHRoaXMucGFyZW50TWVzc2FnZUlkKTtcbiAgICBpZiAodGhpcy5xdW90ZWRNZXNzYWdlKSB7XG4gICAgICB0aGlzLmRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29udGFpbnNMaW5rcygpIHtcbiAgICByZXR1cm4gLyg/Oig/Omh0dHBzP3xmdHApOlxcL1xcLyk/W1xcdy9cXC0/PSUuXStcXC5bXFx3L1xcLSY/PSUuXSsvLnRlc3QoXG4gICAgICB0aGlzLnRleHRhcmVhVmFsdWVcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1b3RlZE1lc3NhZ2VBdHRhY2htZW50cygpIHtcbiAgICBjb25zdCBvcmlnaW5hbEF0dGFjaG1lbnRzID0gdGhpcy5xdW90ZWRNZXNzYWdlPy5hdHRhY2htZW50cztcbiAgICByZXR1cm4gb3JpZ2luYWxBdHRhY2htZW50cyAmJiBvcmlnaW5hbEF0dGFjaG1lbnRzLmxlbmd0aFxuICAgICAgPyBbb3JpZ2luYWxBdHRhY2htZW50c1swXV1cbiAgICAgIDogW107XG4gIH1cblxuICBnZXQgZGlzYWJsZWRUZXh0YXJlYVRleHQoKSB7XG4gICAgaWYgKCF0aGlzLmNhblNlbmRNZXNzYWdlcykge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgICAgPyBcInN0cmVhbUNoYXQuWW91IGNhbid0IHNlbmQgdGhyZWFkIHJlcGxpZXMgaW4gdGhpcyBjaGFubmVsXCJcbiAgICAgICAgOiBcInN0cmVhbUNoYXQuWW91IGNhbid0IHNlbmQgbWVzc2FnZXMgaW4gdGhpcyBjaGFubmVsXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvb2xkb3duJCkge1xuICAgICAgcmV0dXJuICdzdHJlYW1DaGF0LlNsb3cgTW9kZSBPTic7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFzeW5jIGZpbGVzU2VsZWN0ZWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghKGF3YWl0IHRoaXMuYXJlQXR0YWNoZW1udHNWYWxpZChmaWxlTGlzdCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuZmlsZXNTZWxlY3RlZChmaWxlTGlzdCk7XG4gICAgdGhpcy5jbGVhckZpbGVJbnB1dCgpO1xuICB9XG5cbiAgZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpIHtcbiAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbGVjdE1lc3NhZ2VUb1F1b3RlKHVuZGVmaW5lZCk7XG4gIH1cblxuICBnZXRFbW9qaVBpY2tlckNvbnRleHQoKTogRW1vamlQaWNrZXJDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW1vamlJbnB1dCQ6IHRoaXMuZW1vamlJbnB1dFNlcnZpY2UuZW1vamlJbnB1dCQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQoKTogQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dGFjaG1lbnRVcGxvYWRzJDogdGhpcy5hdHRhY2htZW50U2VydmljZS5hdHRhY2htZW50VXBsb2FkcyQsXG4gICAgICBkZWxldGVVcGxvYWRIYW5kbGVyOiB0aGlzLmRlbGV0ZVVwbG9hZC5iaW5kKHRoaXMpLFxuICAgICAgcmV0cnlVcGxvYWRIYW5kbGVyOiB0aGlzLnJldHJ5VXBsb2FkLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVXBsb2FkKHVwbG9hZDogQXR0YWNobWVudFVwbG9hZCkge1xuICAgIHZvaWQgdGhpcy5hdHRhY2htZW50U2VydmljZS5kZWxldGVBdHRhY2htZW50KHVwbG9hZCk7XG4gIH1cblxuICBwcml2YXRlIHJldHJ5VXBsb2FkKGZpbGU6IEZpbGUpIHtcbiAgICB2b2lkIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmV0cnlBdHRhY2htZW50VXBsb2FkKGZpbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckZpbGVJbnB1dCgpIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1VwZGF0ZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLm1lc3NhZ2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRUZXh0YXJlYSgpIHtcbiAgICAvLyBjbGVhbnVwIHByZXZpb3VzbHkgYnVpbHQgdGV4dGFyZWFcbiAgICBpZiAoIXRoaXMuY2FuU2VuZE1lc3NhZ2VzKSB7XG4gICAgICB0aGlzLnRleHRhcmVhUmVmID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5TZW5kTWVzc2FnZXMgfHwgdGhpcy50ZXh0YXJlYVJlZiB8fCAhdGhpcy50ZXh0YXJlYUFuY2hvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPVxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy50ZXh0YXJlYVR5cGUpO1xuICAgIHRoaXMudGV4dGFyZWFSZWYgPVxuICAgICAgdGhpcy50ZXh0YXJlYUFuY2hvci52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxhbnk+KFxuICAgICAgICBjb21wb25lbnRGYWN0b3J5XG4gICAgICApO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2hlbW50c1ZhbGlkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpIHtcbiAgICBpZiAoIWZpbGVMaXN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFwcFNldHRpbmdzKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnQuZ2V0QXBwU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIEFycmF5LmZyb20oZmlsZUxpc3QpLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBoYXNCbG9ja2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc0Jsb2NrZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmKSkge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5VbnN1cHBvcnRlZCBmaWxlIHR5cGU6IHt7dHlwZX19JyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgdHlwZTogZi50eXBlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYW5TZW5kTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5jaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhblNlbmRNZXNzYWdlcyA9XG4gICAgICAgIGNhcGFiaWxpdGllcy5pbmRleE9mKFxuICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nID8gJ3NlbmQtbWVzc2FnZScgOiAnc2VuZC1yZXBseSdcbiAgICAgICAgKSAhPT0gLTE7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLmluaXRUZXh0YXJlYSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBhcmVudE1lc3NhZ2VJZCgpIHtcbiAgICBsZXQgcGFyZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3RocmVhZCcpIHtcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlUGFyZW50TWVzc2FnZUlkJFxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChpZCkgPT4gKHBhcmVudE1lc3NhZ2VJZCA9IGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudE1lc3NhZ2VJZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDb29sZG93bihjb29sZG93bjogbnVtYmVyKSB7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5jb29sZG93biQgPSB0aW1lcigwLCAxMDAwKS5waXBlKFxuICAgICAgdGFrZShjb29sZG93biArIDEpLFxuICAgICAgbWFwKCh2KSA9PiBjb29sZG93biAtIHYpLFxuICAgICAgdGFwKCh2KSA9PiB7XG4gICAgICAgIGlmICh2ID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQ29vbGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ29vbGRvd24oKSB7XG4gICAgdGhpcy5jb29sZG93biQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIC8vIHRoZSBhbmNob3IgZGlyZWN0aXZlIHdpbGwgYmUgcmVjcmVhdGVkIGJlY2F1c2Ugb2YgKm5nSWYsIHNvIHdlIHdpbGwgaGF2ZSB0byByZWluaXQgdGhlIHRleHRhcmVhIGFzIHdlbGxcbiAgICB0aGlzLnRleHRhcmVhUmVmID0gdW5kZWZpbmVkO1xuICAgIC8vIHdlIGNhbiBvbmx5IGNyZWF0ZSB0aGUgdGV4dGFyZWEgYWZ0ZXIgdGhlIGFuY2hvciB3YXMgcmVjcmVhdGVkLCBzbyB3ZSB3aWxsIGhhdmUgdG8gd2FpdCBhIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgd2l0aCBzZXRUaW1lb3V0XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRUZXh0YXJlYSgpKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInt7XG4gICAgbW9kZSA9PT0gJ21haW4nID8gJ3N0ci1jaGF0X19pbnB1dC1mbGF0JyA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dCdcbiAgfX1cIlxuICBbY2xhc3Muc3RyLWNoYXRfX2lucHV0LWZsYXQtaGFzLWF0dGFjaG1lbnRzXT1cIlxuICAgIChhdHRhY2htZW50VXBsb2FkcyQgfCBhc3luYykhLmxlbmd0aCA+IDBcbiAgXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19pbnB1dC1mbGF0LXF1b3RlZF09XCIhIXF1b3RlZE1lc3NhZ2VcIlxuPlxuICA8ZGl2XG4gICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS1jb250YWluZXJcIlxuICAgIGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlld1wiXG4gICAgKm5nSWY9XCJxdW90ZWRNZXNzYWdlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWhlYWRlclwiPlxuICAgICAgPGRpdj57eyBcInN0cmVhbUNoYXQuUmVwbHkgdG8gTWVzc2FnZVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NxdWFyZS1idXR0b25cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInJlbW92ZS1xdW90ZVwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdE1lc3NhZ2VUb1F1b3RlKClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgaWNvbj1cImNsb3NlLW5vLW91dGxpbmVcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4OyBsaW5lLWhlaWdodDogMTBweFwiXG4gICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInF1b3RlZC1tZXNzYWdlLXByZXZpZXctY29udGVudFwiPlxuICAgICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJxb3V0ZWQtbWVzc2FnZS1hdmF0YXJcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XCJcbiAgICAgICAgW2ltYWdlVXJsXT1cInF1b3RlZE1lc3NhZ2U/LnVzZXI/LmltYWdlXCJcbiAgICAgICAgW25hbWVdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8ubmFtZSB8fCBxdW90ZWRNZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgICBsb2NhdGlvbj1cInF1b3RlZC1tZXNzYWdlLXNlbmRlclwiXG4gICAgICAgIFt1c2VyXT1cInF1b3RlZE1lc3NhZ2U/LnVzZXIgfHwgdW5kZWZpbmVkXCJcbiAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1jb250ZW50LWlubmVyXCI+XG4gICAgICAgIDxzdHJlYW0tYXR0YWNobWVudC1saXN0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRhY2htZW50c109XCJxdW90ZWRNZXNzYWdlQXR0YWNobWVudHNcIlxuICAgICAgICAgIFttZXNzYWdlSWRdPVwicXVvdGVkTWVzc2FnZT8uaWRcIlxuICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1saXN0PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJxdW90ZWQtbWVzc2FnZS10ZXh0XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cInF1b3RlZE1lc3NhZ2U/Lmh0bWwgfHwgcXVvdGVkTWVzc2FnZT8udGV4dFwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19pbnB1dC1mbGF0LXdyYXBwZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ7e1xuICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICA/ICdzdHItY2hhdF9faW5wdXQtZmxhdC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgICAgICA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgIH19XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1ByZXZpZXdcbiAgICAgICAgbGV0LWF0dGFjaG1lbnRVcGxvYWRzJD1cImF0dGFjaG1lbnRVcGxvYWRzJFwiXG4gICAgICAgIGxldC1yZXRyeVVwbG9hZEhhbmRsZXI9XCJyZXRyeVVwbG9hZEhhbmRsZXJcIlxuICAgICAgICBsZXQtZGVsZXRlVXBsb2FkSGFuZGxlcj1cImRlbGV0ZVVwbG9hZEhhbmRsZXJcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0XG4gICAgICAgICAgW2F0dGFjaG1lbnRVcGxvYWRzJF09XCJhdHRhY2htZW50VXBsb2FkcyRcIlxuICAgICAgICAgIChyZXRyeUF0dGFjaG1lbnRVcGxvYWQpPVwicmV0cnlVcGxvYWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZVVwbG9hZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJyZnUtaW1hZ2UtcHJldmlld2VyLWFuZ3VsYXItaG9zdFwiXG4gICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LXByZXZpZXctbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzUHJldmlldztcbiAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KClcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydGEgc3RyLWNoYXRfX3RleHRhcmVhIHN0ci1jaGF0LWFuZ3VsYXJfX3RleHRhcmVhXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImVtb2ppUGlja2VyVGVtcGxhdGUgJiYgIWlzQ29vbGRvd25JblByb2dyZXNzXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImVtb2ppLXBpY2tlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9faW5wdXQtZmxhdC1lbW9qaXNlbGVjdFxuICAgICAgICAgICAgICBzdHItY2hhdC1hbmd1bGFyX19lbW9qaXNlbGVjdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZW1vamlQaWNrZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBnZXRFbW9qaVBpY2tlckNvbnRleHQoKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2lucHV0LWZsYXQtY29vbGRvd24gc3RyLWNoYXQtYW5ndWxhcl9fY29vbGRvd25cIlxuICAgICAgICAgICpuZ0lmPVwiaXNDb29sZG93bkluUHJvZ3Jlc3NcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY29vbGRvd24tdGltZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29vbGRvd24kIHwgYXN5bmMgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VzICYmICFpc0Nvb2xkb3duSW5Qcm9ncmVzczsgZWxzZSBub3RBbGxvd2VkXCJcbiAgICAgICAgICBzdHJlYW1UZXh0YXJlYVxuICAgICAgICAgIFsodmFsdWUpXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ0eXBpbmdTdGFydCQubmV4dCgpXCJcbiAgICAgICAgICAoc2VuZCk9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhUmVmXCJcbiAgICAgICAgICAodXNlck1lbnRpb25zKT1cIm1lbnRpb25lZFVzZXJzID0gJGV2ZW50XCJcbiAgICAgICAgICBbYXJlTWVudGlvbnNFbmFibGVkXT1cImFyZU1lbnRpb25zRW5hYmxlZFwiXG4gICAgICAgICAgW21lbnRpb25TY29wZV09XCJtZW50aW9uU2NvcGVcIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RBbGxvd2VkPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgIHJvd3M9XCIxXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkaXNhYmxlZFRleHRhcmVhVGV4dCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInJ0YV9fdGV4dGFyZWEgc3RyLWNoYXRfX3RleHRhcmVhX190ZXh0YXJlYVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRpc2FibGVkLXRleHRhcmVhXCJcbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzRmlsZVVwbG9hZEVuYWJsZWQgJiZcbiAgICAgICAgICBpc0ZpbGVVcGxvYWRBdXRob3JpemVkICYmXG4gICAgICAgICAgY2FuU2VuZE1lc3NhZ2VzICYmXG4gICAgICAgICAgIWlzQ29vbGRvd25JblByb2dyZXNzXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGV1cGxvYWQtd3JhcHBlclwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS11cGxvYWQtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICAgICAge3sgXCJzdHJlYW1DaGF0LkF0dGFjaCBmaWxlc1wiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmZ1LWZpbGUtdXBsb2FkLWJ1dHRvblwiPlxuICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZnUtZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVzU2VsZWN0ZWQoZmlsZUlucHV0LmZpbGVzKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9faW5wdXQtZmxhdC1maWxldXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGljb249XCJmaWxlLXVwbG9hZFwiXG4gICAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJjYW5TZW5kTWVzc2FnZXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJzZW5kLWJ1dHRvblwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19zZW5kLWJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJzZW5kXCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -246,7 +246,7 @@ export class MessageListComponent {
|
|
|
246
246
|
}
|
|
247
247
|
}
|
|
248
248
|
MessageListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageListComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChatClientService }, { token: i3.ImageLoadService }, { token: i4.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
249
|
-
MessageListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageListComponent, selector: "stream-message-list", inputs: { mode: "mode", direction: "direction" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "parentMessageElement", first: true, predicate: ["parentMessageElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll\">\n <ul class=\"str-chat__ul\">\n <li\n #parentMessageElement\n *ngIf=\"mode === 'thread'\"\n data-testid=\"parent-message\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: parentMessage }\n \"\n ></ng-container>\n <div class=\"str-chat__thread-start\" translate>\n streamChat.Start of a new thread\n </div>\n </li>\n <li\n data-testclass=\"message\"\n *ngFor=\"\n let message of messages$ | async;\n let i = index;\n trackBy: trackByMessageId\n \"\n class=\"str-chat__li str-chat__li--{{ groupStyles[i] }}\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: message }\n \"\n ></ng-container>\n </li>\n </ul>\n <ng-template #defaultTypingIndicator let-usersTyping$=\"usersTyping$\">\n <div\n *ngIf=\"$any(usersTyping$ | async)?.length\"\n data-testid=\"typing-indicator\"\n class=\"str-chat__typing-indicator str-chat__typing-indicator--typing\"\n >\n <stream-avatar-placeholder\n *ngFor=\"let user of usersTyping$ | async; trackBy: trackByUserId\"\n [name]=\"user.name || user.id\"\n [imageUrl]=\"user.image\"\n ></stream-avatar-placeholder>\n <div class=\"str-chat__typing-indicator__dots\">\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n </div>\n </div>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n typingIndicatorTemplate || defaultTypingIndicator;\n context: getTypingIndicatorContext()\n \"\n ></ng-container>\n </div>\n</div>\n<div class=\"str-chat__list-notifications\">\n <button\n data-testid=\"scroll-to-latest\"\n *ngIf=\"isUserScrolled\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-right\n str-chat__message-notification-scroll-to-latest\n \"\n (keyup.enter)=\"scrollToLatestMessage()\"\n (click)=\"scrollToLatestMessage()\"\n >\n <stream-icon\n style=\"display: inline-block; height: 24px\"\n [icon]=\"direction === 'bottom-to-top' ? 'arrow-down' : 'arrow-up'\"\n ></stream-icon>\n <div\n *ngIf=\"unreadMessageCount > 0\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-scroll-to-latest-unread-count\n \"\n >\n {{ unreadMessageCount }}\n </div>\n </button>\n</div>\n\n<ng-template #messageTemplateContainer let-message=\"message\">\n <ng-template\n #defaultMessageTemplate\n let-messageInput=\"message\"\n let-isLastSentMessage=\"isLastSentMessage\"\n let-enabledMessageActions=\"enabledMessageActions\"\n let-mode=\"mode\"\n >\n <stream-message\n [message]=\"messageInput\"\n [isLastSentMessage]=\"isLastSentMessage\"\n [enabledMessageActions]=\"enabledMessageActions\"\n [mode]=\"mode\"\n ></stream-message>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplate || defaultMessageTemplate;\n context: getMessageContext(message)\n \"\n ></ng-container>\n</ng-template>\n", components: [{ type: i5.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size"] }, { type: i6.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i7.MessageComponent, selector: "stream-message", inputs: ["message", "enabledMessageActions", "isLastSentMessage", "mode"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i8.AsyncPipe } });
|
|
249
|
+
MessageListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageListComponent, selector: "stream-message-list", inputs: { mode: "mode", direction: "direction" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "parentMessageElement", first: true, predicate: ["parentMessageElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll\">\n <ul class=\"str-chat__ul\">\n <li\n #parentMessageElement\n *ngIf=\"mode === 'thread'\"\n data-testid=\"parent-message\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: parentMessage }\n \"\n ></ng-container>\n <div class=\"str-chat__thread-start\" translate>\n streamChat.Start of a new thread\n </div>\n </li>\n <li\n data-testclass=\"message\"\n *ngFor=\"\n let message of messages$ | async;\n let i = index;\n trackBy: trackByMessageId\n \"\n class=\"str-chat__li str-chat__li--{{ groupStyles[i] }}\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: message }\n \"\n ></ng-container>\n </li>\n </ul>\n <ng-template #defaultTypingIndicator let-usersTyping$=\"usersTyping$\">\n <div\n *ngIf=\"$any(usersTyping$ | async)?.length\"\n data-testid=\"typing-indicator\"\n class=\"str-chat__typing-indicator str-chat__typing-indicator--typing\"\n >\n <stream-avatar-placeholder\n *ngFor=\"let user of usersTyping$ | async; trackBy: trackByUserId\"\n [name]=\"user.name || user.id\"\n [imageUrl]=\"user.image\"\n type=\"user\"\n location=\"typing-indicator\"\n [user]=\"user\"\n ></stream-avatar-placeholder>\n <div class=\"str-chat__typing-indicator__dots\">\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n </div>\n </div>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n typingIndicatorTemplate || defaultTypingIndicator;\n context: getTypingIndicatorContext()\n \"\n ></ng-container>\n </div>\n</div>\n<div class=\"str-chat__list-notifications\">\n <button\n data-testid=\"scroll-to-latest\"\n *ngIf=\"isUserScrolled\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-right\n str-chat__message-notification-scroll-to-latest\n \"\n (keyup.enter)=\"scrollToLatestMessage()\"\n (click)=\"scrollToLatestMessage()\"\n >\n <stream-icon\n style=\"display: inline-block; height: 24px\"\n [icon]=\"direction === 'bottom-to-top' ? 'arrow-down' : 'arrow-up'\"\n ></stream-icon>\n <div\n *ngIf=\"unreadMessageCount > 0\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-scroll-to-latest-unread-count\n \"\n >\n {{ unreadMessageCount }}\n </div>\n </button>\n</div>\n\n<ng-template #messageTemplateContainer let-message=\"message\">\n <ng-template\n #defaultMessageTemplate\n let-messageInput=\"message\"\n let-isLastSentMessage=\"isLastSentMessage\"\n let-enabledMessageActions=\"enabledMessageActions\"\n let-mode=\"mode\"\n >\n <stream-message\n [message]=\"messageInput\"\n [isLastSentMessage]=\"isLastSentMessage\"\n [enabledMessageActions]=\"enabledMessageActions\"\n [mode]=\"mode\"\n ></stream-message>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplate || defaultMessageTemplate;\n context: getMessageContext(message)\n \"\n ></ng-container>\n</ng-template>\n", components: [{ type: i5.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }, { type: i6.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i7.MessageComponent, selector: "stream-message", inputs: ["message", "enabledMessageActions", "isLastSentMessage", "mode"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i8.AsyncPipe } });
|
|
250
250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageListComponent, decorators: [{
|
|
251
251
|
type: Component,
|
|
252
252
|
args: [{
|
|
@@ -268,4 +268,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
268
268
|
type: ViewChild,
|
|
269
269
|
args: ['parentMessageElement']
|
|
270
270
|
}] } });
|
|
271
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVExQyxPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBSzVEOztHQUVHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQTBDL0IsWUFDVSxjQUE4QixFQUM5QixpQkFBb0MsRUFDcEMsZ0JBQWtDLEVBQ2xDLHNCQUE4QztRQUg5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUEzQ3hEOztXQUVHO1FBQ00sU0FBSSxHQUFzQixNQUFNLENBQUM7UUFDMUM7O1dBRUc7UUFDTSxjQUFTLEdBQXNDLGVBQWUsQ0FBQztRQUl4RSwwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDUCxVQUFLLEdBQ2pDLHdFQUF3RSxDQUFDO1FBQzNFLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUV2QixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFhZCw4QkFBeUIsR0FBRyxHQUFHLENBQUM7UUFDekMs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QUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFZLFlBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNqQyxDQUFDOztpSEFuVFUsb0JBQW9CO3FHQUFwQixvQkFBb0Isc1pDcENqQyx1aUhBb0hBOzJGRGhGYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7eU1BT1UsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS3dCLEtBQUs7c0JBQWxDLFdBQVc7dUJBQUMsT0FBTztnQkFRWixlQUFlO3NCQUR0QixTQUFTO3VCQUFDLGlCQUFpQjtnQkFHcEIsb0JBQW9CO3NCQUQzQixTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBNZXNzYWdlQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgU3RyZWFtTWVzc2FnZSxcbiAgVHlwaW5nSW5kaWNhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEdyb3VwU3R5bGVzLCBHcm91cFN0eWxlIH0gZnJvbSAnLi9ncm91cC1zdHlsZXMnO1xuaW1wb3J0IHsgSW1hZ2VMb2FkU2VydmljZSB9IGZyb20gJy4vaW1hZ2UtbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgTWVzc2FnZUxpc3RgIGNvbXBvbmVudCByZW5kZXJzIGEgc2Nyb2xsYWJsZSBsaXN0IG9mIG1lc3NhZ2VzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VMaXN0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbWVzc2FnZSBsaXN0IHNob3VsZCBkaXNwbGF5IGNoYW5uZWwgbWVzc2FnZXMgb3IgW3RocmVhZCBtZXNzYWdlc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvdGhyZWFkcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlOiAnbWFpbicgfCAndGhyZWFkJyA9ICdtYWluJztcbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1lc3NhZ2VzIGluIHRoZSBsaXN0LCBgYm90dG9tLXRvLXRvcGAgbWVhbnMgbmV3ZXN0IG1lc3NhZ2UgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWVzc2FnZSBsaXN0IGFuZCB1c2VycyBzY3JvbGwgdXB3YXJkcyB0byBsb2FkIG9sZGVyIG1lc3NhZ2VzXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3Rpb246ICdib3R0b20tdG8tdG9wJyB8ICd0b3AtdG8tYm90dG9tJyA9ICdib3R0b20tdG8tdG9wJztcbiAgdHlwaW5nSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFR5cGluZ0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZXMkITogT2JzZXJ2YWJsZTxTdHJlYW1NZXNzYWdlW10+O1xuICBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBwcml2YXRlIGNsYXNzID1cbiAgICAnc3RyLWNoYXQtYW5ndWxhcl9fbWFpbi1wYW5lbC1pbm5lciBzdHItY2hhdC1hbmd1bGFyX19tZXNzYWdlLWxpc3QtaG9zdCc7XG4gIHVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gIGlzVXNlclNjcm9sbGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBncm91cFN0eWxlczogR3JvdXBTdHlsZVtdID0gW107XG4gIGxhc3RTZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhcmVudE1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpXG4gIHByaXZhdGUgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhcmVudE1lc3NhZ2VFbGVtZW50JylcbiAgcHJpdmF0ZSBwYXJlbnRNZXNzYWdlRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIGxhdGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc05ld01lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnRhaW5lckhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVyTWFzc2FnZXNMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNOZXdNZXNzYWdlU2VudEJ5VXNlcjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1VzZXJTY3JvbGxlZFVwVGhyZXNob2xkID0gMzAwO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJldlNjcm9sbFRvcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVzZXJzVHlwaW5nSW5DaGFubmVsJCE6IE9ic2VydmFibGU8XG4gICAgVXNlclJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W11cbiAgPjtcbiAgcHJpdmF0ZSB1c2Vyc1R5cGluZ0luVGhyZWFkJCE6IE9ic2VydmFibGU8XG4gICAgVXNlclJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W11cbiAgPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGltYWdlTG9hZFNlcnZpY2U6IEltYWdlTG9hZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGNoYW5uZWwpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldFNjcm9sbFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGVzID0gY2hhbm5lbD8uZGF0YT8ub3duX2NhcGFiaWxpdGllcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKGNhcGFiaWxpdGVzKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMgPSBjYXBhYmlsaXRlcztcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5pbWFnZUxvYWRTZXJ2aWNlLmltYWdlTG9hZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkICYmIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCcpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgLy8gSGFja3kgYW5kIHVucmVsaWFibGUgd29ya2Fyb3VuZCB0byBzY3JvbGwgZG93biBhZnRlciBsb2FkZWQgaW1hZ2VzIG1vdmUgdGhlIHNjcm9sbGJhclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlUGFyZW50TWVzc2FnZSQuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXNzYWdlICYmXG4gICAgICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlICYmXG4gICAgICAgICAgbWVzc2FnZS5pZCAhPT0gdGhpcy5wYXJlbnRNZXNzYWdlLmlkICYmXG4gICAgICAgICAgdGhpcy5tb2RlID09PSAndGhyZWFkJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLm1lc3NhZ2VUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UudHlwaW5nSW5kaWNhdG9yVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy51c2Vyc1R5cGluZ0luQ2hhbm5lbCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVzZXJzVHlwaW5nSW5DaGFubmVsJDtcbiAgICB0aGlzLnVzZXJzVHlwaW5nSW5UaHJlYWQkID0gdGhpcy5jaGFubmVsU2VydmljZS51c2Vyc1R5cGluZ0luVGhyZWFkJDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0TWVzc2FnZXMkKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMubW9kZSB8fCBjaGFuZ2VzLmRpcmVjdGlvbikge1xuICAgICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuZGlyZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0xhdGVzdE1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyAmJlxuICAgICAgICAodGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyIHx8ICF0aGlzLmlzVXNlclNjcm9sbGVkKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5oYXNOZXdNZXNzYWdlcykge1xuICAgICAgICBpZiAoIXRoaXMuaXNVc2VyU2Nyb2xsZWQgfHwgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgIC8vIEhhY2t5IGFuZCB1bnJlbGlhYmxlIHdvcmthcm91bmQgdG8gc2Nyb2xsIGRvd24gYWZ0ZXIgbG9hZGVkIGltYWdlcyBtb3ZlIHRoZSBzY3JvbGxiYXJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkKSB7XG4gICAgICAgIHRoaXMucHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICB0aGlzLm9sZGVyTWFzc2FnZXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPFxuICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICYmXG4gICAgICAgICF0aGlzLmlzVXNlclNjcm9sbGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgdHJhY2tCeU1lc3NhZ2VJZChpbmRleDogbnVtYmVyLCBpdGVtOiBTdHJlYW1NZXNzYWdlKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICB0cmFja0J5VXNlcklkKGluZGV4OiBudW1iZXIsIHVzZXI6IFVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiB1c2VyLmlkO1xuICB9XG5cbiAgc2Nyb2xsVG9MYXRlc3RNZXNzYWdlKCkge1xuICAgIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCdcbiAgICAgID8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpXG4gICAgICA6IHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHNjcm9sbFRvQm90dG9tKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AoKSB7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICB9XG5cbiAgc2Nyb2xsZWQoKSB7XG4gICAgdGhpcy5pc1VzZXJTY3JvbGxlZCA9XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnXG4gICAgICAgID8gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLVxuICAgICAgICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpID5cbiAgICAgICAgICB0aGlzLmlzVXNlclNjcm9sbGVkVXBUaHJlc2hvbGRcbiAgICAgICAgOiB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA+IDA7XG4gICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkKSB7XG4gICAgICB0aGlzLnVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3VsZExvYWRNb3JlTWVzc2FnZXMoKSkge1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlTWVzc2FnZXMoKVxuICAgICAgICA6IHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZVRocmVhZFJlcGxpZXMoKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JDb250ZXh0KCk6IFR5cGluZ0luZGljYXRvckNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICB1c2Vyc1R5cGluZyQ6IHRoaXMudXNlcnNUeXBpbmckLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKTogTWVzc2FnZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgaXNMYXN0U2VudE1lc3NhZ2U6ICEhKFxuICAgICAgICB0aGlzLmxhc3RTZW50TWVzc2FnZUlkICYmIG1lc3NhZ2U/LmlkID09PSB0aGlzLmxhc3RTZW50TWVzc2FnZUlkXG4gICAgICApLFxuICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVzZXJ2ZVNjcm9sbGJhclBvc2l0aW9uKCkge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICh0aGlzLnByZXZTY3JvbGxUb3AgfHwgMCkgK1xuICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5jb250YWluZXJIZWlnaHQhKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkTG9hZE1vcmVNZXNzYWdlcygpIHtcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPD1cbiAgICAgICAgICAodGhpcy5wYXJlbnRNZXNzYWdlRWxlbWVudD8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMCkgJiZcbiAgICAgICAgKHRoaXMucHJldlNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgdGhpcy5wcmV2U2Nyb2xsVG9wID5cbiAgICAgICAgICAgICh0aGlzLnBhcmVudE1lc3NhZ2VFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCB8fCAwKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICtcbiAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA+PVxuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1lc3NhZ2VzJCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VzJCA9IChcbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsTWVzc2FnZXMkXG4gICAgICAgIDogdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVUaHJlYWRNZXNzYWdlcyRcbiAgICApLnBpcGUoXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudExhdGVzdE1lc3NhZ2VEYXRlID1cbiAgICAgICAgICBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXS5jcmVhdGVkX2F0O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMubGF0ZXN0TWVzc2FnZURhdGUgfHxcbiAgICAgICAgICB0aGlzLmxhdGVzdE1lc3NhZ2VEYXRlPy5nZXRUaW1lKCkgPCBjdXJyZW50TGF0ZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZURhdGUgPSBjdXJyZW50TGF0ZXN0TWVzc2FnZURhdGU7XG4gICAgICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyID1cbiAgICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdLnVzZXI/LmlkID09PVxuICAgICAgICAgICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5jaGF0Q2xpZW50Py51c2VyPy5pZDtcbiAgICAgICAgICBpZiAodGhpcy5pc1VzZXJTY3JvbGxlZCkge1xuICAgICAgICAgICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudE9sZGVzdE1lc3NhZ2VEYXRlID0gbWVzc2FnZXNbMF0uY3JlYXRlZF9hdDtcbiAgICAgICAgaWYgKCF0aGlzLm9sZGVzdE1lc3NhZ2VEYXRlKSB7XG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZSA9IGN1cnJlbnRPbGRlc3RNZXNzYWdlRGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLm9sZGVzdE1lc3NhZ2VEYXRlPy5nZXRUaW1lKCkgPiBjdXJyZW50T2xkZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMub2xkZXN0TWVzc2FnZURhdGUgPSBjdXJyZW50T2xkZXN0TWVzc2FnZURhdGU7XG4gICAgICAgICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YXAoXG4gICAgICAgIChtZXNzYWdlcykgPT5cbiAgICAgICAgICAodGhpcy5sYXN0U2VudE1lc3NhZ2VJZCA9IFsuLi5tZXNzYWdlc11cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgICAgICBtLnVzZXI/LmlkID09PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkICYmXG4gICAgICAgICAgICAgICAgbS5zdGF0dXMgIT09ICdzZW5kaW5nJ1xuICAgICAgICAgICAgKT8uaWQpXG4gICAgICApLFxuICAgICAgbWFwKChtZXNzYWdlcykgPT5cbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJyA/IG1lc3NhZ2VzIDogWy4uLm1lc3NhZ2VzXS5yZXZlcnNlKClcbiAgICAgICksXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JvdXBTdHlsZXMgPSBtZXNzYWdlcy5tYXAoKG0sIGkpID0+XG4gICAgICAgICAgZ2V0R3JvdXBTdHlsZXMobSwgbWVzc2FnZXNbaSAtIDFdLCBtZXNzYWdlc1tpICsgMV0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2Nyb2xsU3RhdGUoKSB7XG4gICAgdGhpcy5sYXRlc3RNZXNzYWdlRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmlzVXNlclNjcm9sbGVkID0gZmFsc2U7XG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNOZXdNZXNzYWdlU2VudEJ5VXNlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHVzZXJzVHlwaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAndGhyZWFkJ1xuICAgICAgPyB0aGlzLnVzZXJzVHlwaW5nSW5UaHJlYWQkXG4gICAgICA6IHRoaXMudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICB9XG59XG4iLCI8ZGl2XG4gICNzY3JvbGxDb250YWluZXJcbiAgZGF0YS10ZXN0aWQ9XCJzY3JvbGwtY29udGFpbmVyXCJcbiAgY2xhc3M9XCJzdHItY2hhdF9fbGlzdFwiXG4gIChzY3JvbGwpPVwic2Nyb2xsZWQoKVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcmV2ZXJzZS1pbmZpbml0ZS1zY3JvbGxcIj5cbiAgICA8dWwgY2xhc3M9XCJzdHItY2hhdF9fdWxcIj5cbiAgICAgIDxsaVxuICAgICAgICAjcGFyZW50TWVzc2FnZUVsZW1lbnRcbiAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndGhyZWFkJ1wiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwicGFyZW50LW1lc3NhZ2VcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogcGFyZW50TWVzc2FnZSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3RocmVhZC1zdGFydFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICBzdHJlYW1DaGF0LlN0YXJ0IG9mIGEgbmV3IHRocmVhZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGlcbiAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJtZXNzYWdlXCJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMkIHwgYXN5bmM7XG4gICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5TWVzc2FnZUlkXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2xpIHN0ci1jaGF0X19saS0te3sgZ3JvdXBTdHlsZXNbaV0gfX1cIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogbWVzc2FnZSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFR5cGluZ0luZGljYXRvciBsZXQtdXNlcnNUeXBpbmckPVwidXNlcnNUeXBpbmckXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiJGFueSh1c2Vyc1R5cGluZyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidHlwaW5nLWluZGljYXRvclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3Igc3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3ItLXR5cGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxzdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnNUeXBpbmckIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlVc2VySWRcIlxuICAgICAgICAgIFtuYW1lXT1cInVzZXIubmFtZSB8fCB1c2VyLmlkXCJcbiAgICAgICAgICBbaW1hZ2VVcmxdPVwidXNlci5pbWFnZVwiXG4gICAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90c1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90XCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgdHlwaW5nSW5kaWNhdG9yVGVtcGxhdGUgfHwgZGVmYXVsdFR5cGluZ0luZGljYXRvcjtcbiAgICAgICAgY29udGV4dDogZ2V0VHlwaW5nSW5kaWNhdG9yQ29udGV4dCgpXG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbGlzdC1ub3RpZmljYXRpb25zXCI+XG4gIDxidXR0b25cbiAgICBkYXRhLXRlc3RpZD1cInNjcm9sbC10by1sYXRlc3RcIlxuICAgICpuZ0lmPVwiaXNVc2VyU2Nyb2xsZWRcIlxuICAgIGNsYXNzPVwiXG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb25cbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1yaWdodFxuICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC10by1sYXRlc3RcbiAgICBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzY3JvbGxUb0xhdGVzdE1lc3NhZ2UoKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFRvTGF0ZXN0TWVzc2FnZSgpXCJcbiAgPlxuICAgIDxzdHJlYW0taWNvblxuICAgICAgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogMjRweFwiXG4gICAgICBbaWNvbl09XCJkaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJyA/ICdhcnJvdy1kb3duJyA6ICdhcnJvdy11cCdcIlxuICAgID48L3N0cmVhbS1pY29uPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwidW5yZWFkTWVzc2FnZUNvdW50ID4gMFwiXG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb25cbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC10by1sYXRlc3QtdW5yZWFkLWNvdW50XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IHVucmVhZE1lc3NhZ2VDb3VudCB9fVxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lciBsZXQtbWVzc2FnZT1cIm1lc3NhZ2VcIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHRNZXNzYWdlVGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgbGV0LWlzTGFzdFNlbnRNZXNzYWdlPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgIGxldC1lbmFibGVkTWVzc2FnZUFjdGlvbnM9XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgIGxldC1tb2RlPVwibW9kZVwiXG4gID5cbiAgICA8c3RyZWFtLW1lc3NhZ2VcbiAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICBbaXNMYXN0U2VudE1lc3NhZ2VdPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgICAgW2VuYWJsZWRNZXNzYWdlQWN0aW9uc109XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgPjwvc3RyZWFtLW1lc3NhZ2U+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgbWVzc2FnZVRlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlVGVtcGxhdGU7XG4gICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlKVxuICAgIFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVExQyxPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBSzVEOztHQUVHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQTBDL0IsWUFDVSxjQUE4QixFQUM5QixpQkFBb0MsRUFDcEMsZ0JBQWtDLEVBQ2xDLHNCQUE4QztRQUg5QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUEzQ3hEOztXQUVHO1FBQ00sU0FBSSxHQUFzQixNQUFNLENBQUM7UUFDMUM7O1dBRUc7UUFDTSxjQUFTLEdBQXNDLGVBQWUsQ0FBQztRQUl4RSwwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDUCxVQUFLLEdBQ2pDLHdFQUF3RSxDQUFDO1FBQzNFLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUV2QixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFhZCw4QkFBeUIsR0FBRyxHQUFHLENBQUM7UUFDekMs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QUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFZLFlBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNqQyxDQUFDOztpSEFuVFUsb0JBQW9CO3FHQUFwQixvQkFBb0Isc1pDcENqQyxvb0hBdUhBOzJGRG5GYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7eU1BT1UsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS3dCLEtBQUs7c0JBQWxDLFdBQVc7dUJBQUMsT0FBTztnQkFRWixlQUFlO3NCQUR0QixTQUFTO3VCQUFDLGlCQUFpQjtnQkFHcEIsb0JBQW9CO3NCQUQzQixTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBNZXNzYWdlQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgU3RyZWFtTWVzc2FnZSxcbiAgVHlwaW5nSW5kaWNhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEdyb3VwU3R5bGVzLCBHcm91cFN0eWxlIH0gZnJvbSAnLi9ncm91cC1zdHlsZXMnO1xuaW1wb3J0IHsgSW1hZ2VMb2FkU2VydmljZSB9IGZyb20gJy4vaW1hZ2UtbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgTWVzc2FnZUxpc3RgIGNvbXBvbmVudCByZW5kZXJzIGEgc2Nyb2xsYWJsZSBsaXN0IG9mIG1lc3NhZ2VzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VMaXN0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbWVzc2FnZSBsaXN0IHNob3VsZCBkaXNwbGF5IGNoYW5uZWwgbWVzc2FnZXMgb3IgW3RocmVhZCBtZXNzYWdlc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvdGhyZWFkcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlOiAnbWFpbicgfCAndGhyZWFkJyA9ICdtYWluJztcbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIG1lc3NhZ2VzIGluIHRoZSBsaXN0LCBgYm90dG9tLXRvLXRvcGAgbWVhbnMgbmV3ZXN0IG1lc3NhZ2UgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbWVzc2FnZSBsaXN0IGFuZCB1c2VycyBzY3JvbGwgdXB3YXJkcyB0byBsb2FkIG9sZGVyIG1lc3NhZ2VzXG4gICAqL1xuICBASW5wdXQoKSBkaXJlY3Rpb246ICdib3R0b20tdG8tdG9wJyB8ICd0b3AtdG8tYm90dG9tJyA9ICdib3R0b20tdG8tdG9wJztcbiAgdHlwaW5nSW5kaWNhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFR5cGluZ0luZGljYXRvckNvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZXMkITogT2JzZXJ2YWJsZTxTdHJlYW1NZXNzYWdlW10+O1xuICBlbmFibGVkTWVzc2FnZUFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBwcml2YXRlIGNsYXNzID1cbiAgICAnc3RyLWNoYXQtYW5ndWxhcl9fbWFpbi1wYW5lbC1pbm5lciBzdHItY2hhdC1hbmd1bGFyX19tZXNzYWdlLWxpc3QtaG9zdCc7XG4gIHVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gIGlzVXNlclNjcm9sbGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBncm91cFN0eWxlczogR3JvdXBTdHlsZVtdID0gW107XG4gIGxhc3RTZW50TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBhcmVudE1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpXG4gIHByaXZhdGUgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhcmVudE1lc3NhZ2VFbGVtZW50JylcbiAgcHJpdmF0ZSBwYXJlbnRNZXNzYWdlRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIGxhdGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc05ld01lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnRhaW5lckhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVzdE1lc3NhZ2VEYXRlOiBEYXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVyTWFzc2FnZXNMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNOZXdNZXNzYWdlU2VudEJ5VXNlcjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1VzZXJTY3JvbGxlZFVwVGhyZXNob2xkID0gMzAwO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJldlNjcm9sbFRvcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVzZXJzVHlwaW5nSW5DaGFubmVsJCE6IE9ic2VydmFibGU8XG4gICAgVXNlclJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W11cbiAgPjtcbiAgcHJpdmF0ZSB1c2Vyc1R5cGluZ0luVGhyZWFkJCE6IE9ic2VydmFibGU8XG4gICAgVXNlclJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W11cbiAgPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGltYWdlTG9hZFNlcnZpY2U6IEltYWdlTG9hZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGNoYW5uZWwpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldFNjcm9sbFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGVzID0gY2hhbm5lbD8uZGF0YT8ub3duX2NhcGFiaWxpdGllcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKGNhcGFiaWxpdGVzKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMgPSBjYXBhYmlsaXRlcztcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5pbWFnZUxvYWRTZXJ2aWNlLmltYWdlTG9hZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkICYmIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCcpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgLy8gSGFja3kgYW5kIHVucmVsaWFibGUgd29ya2Fyb3VuZCB0byBzY3JvbGwgZG93biBhZnRlciBsb2FkZWQgaW1hZ2VzIG1vdmUgdGhlIHNjcm9sbGJhclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlUGFyZW50TWVzc2FnZSQuc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXNzYWdlICYmXG4gICAgICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlICYmXG4gICAgICAgICAgbWVzc2FnZS5pZCAhPT0gdGhpcy5wYXJlbnRNZXNzYWdlLmlkICYmXG4gICAgICAgICAgdGhpcy5tb2RlID09PSAndGhyZWFkJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLm1lc3NhZ2VUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UudHlwaW5nSW5kaWNhdG9yVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy51c2Vyc1R5cGluZ0luQ2hhbm5lbCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVzZXJzVHlwaW5nSW5DaGFubmVsJDtcbiAgICB0aGlzLnVzZXJzVHlwaW5nSW5UaHJlYWQkID0gdGhpcy5jaGFubmVsU2VydmljZS51c2Vyc1R5cGluZ0luVGhyZWFkJDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0TWVzc2FnZXMkKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMubW9kZSB8fCBjaGFuZ2VzLmRpcmVjdGlvbikge1xuICAgICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuZGlyZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0xhdGVzdE1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyAmJlxuICAgICAgICAodGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyIHx8ICF0aGlzLmlzVXNlclNjcm9sbGVkKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5oYXNOZXdNZXNzYWdlcykge1xuICAgICAgICBpZiAoIXRoaXMuaXNVc2VyU2Nyb2xsZWQgfHwgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgIC8vIEhhY2t5IGFuZCB1bnJlbGlhYmxlIHdvcmthcm91bmQgdG8gc2Nyb2xsIGRvd24gYWZ0ZXIgbG9hZGVkIGltYWdlcyBtb3ZlIHRoZSBzY3JvbGxiYXJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkKSB7XG4gICAgICAgIHRoaXMucHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICB0aGlzLm9sZGVyTWFzc2FnZXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPFxuICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICYmXG4gICAgICAgICF0aGlzLmlzVXNlclNjcm9sbGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgdHJhY2tCeU1lc3NhZ2VJZChpbmRleDogbnVtYmVyLCBpdGVtOiBTdHJlYW1NZXNzYWdlKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICB0cmFja0J5VXNlcklkKGluZGV4OiBudW1iZXIsIHVzZXI6IFVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiB1c2VyLmlkO1xuICB9XG5cbiAgc2Nyb2xsVG9MYXRlc3RNZXNzYWdlKCkge1xuICAgIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCdcbiAgICAgID8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpXG4gICAgICA6IHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIHNjcm9sbFRvQm90dG9tKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3AoKSB7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICB9XG5cbiAgc2Nyb2xsZWQoKSB7XG4gICAgdGhpcy5pc1VzZXJTY3JvbGxlZCA9XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnXG4gICAgICAgID8gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLVxuICAgICAgICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQpID5cbiAgICAgICAgICB0aGlzLmlzVXNlclNjcm9sbGVkVXBUaHJlc2hvbGRcbiAgICAgICAgOiB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA+IDA7XG4gICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkKSB7XG4gICAgICB0aGlzLnVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3VsZExvYWRNb3JlTWVzc2FnZXMoKSkge1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlTWVzc2FnZXMoKVxuICAgICAgICA6IHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZVRocmVhZFJlcGxpZXMoKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JDb250ZXh0KCk6IFR5cGluZ0luZGljYXRvckNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICB1c2Vyc1R5cGluZyQ6IHRoaXMudXNlcnNUeXBpbmckLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKTogTWVzc2FnZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgaXNMYXN0U2VudE1lc3NhZ2U6ICEhKFxuICAgICAgICB0aGlzLmxhc3RTZW50TWVzc2FnZUlkICYmIG1lc3NhZ2U/LmlkID09PSB0aGlzLmxhc3RTZW50TWVzc2FnZUlkXG4gICAgICApLFxuICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVzZXJ2ZVNjcm9sbGJhclBvc2l0aW9uKCkge1xuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgICh0aGlzLnByZXZTY3JvbGxUb3AgfHwgMCkgK1xuICAgICAgKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5jb250YWluZXJIZWlnaHQhKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkTG9hZE1vcmVNZXNzYWdlcygpIHtcbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPD1cbiAgICAgICAgICAodGhpcy5wYXJlbnRNZXNzYWdlRWxlbWVudD8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMCkgJiZcbiAgICAgICAgKHRoaXMucHJldlNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgdGhpcy5wcmV2U2Nyb2xsVG9wID5cbiAgICAgICAgICAgICh0aGlzLnBhcmVudE1lc3NhZ2VFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCB8fCAwKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICtcbiAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA+PVxuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1lc3NhZ2VzJCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VzJCA9IChcbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsTWVzc2FnZXMkXG4gICAgICAgIDogdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVUaHJlYWRNZXNzYWdlcyRcbiAgICApLnBpcGUoXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudExhdGVzdE1lc3NhZ2VEYXRlID1cbiAgICAgICAgICBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXS5jcmVhdGVkX2F0O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMubGF0ZXN0TWVzc2FnZURhdGUgfHxcbiAgICAgICAgICB0aGlzLmxhdGVzdE1lc3NhZ2VEYXRlPy5nZXRUaW1lKCkgPCBjdXJyZW50TGF0ZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZURhdGUgPSBjdXJyZW50TGF0ZXN0TWVzc2FnZURhdGU7XG4gICAgICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyID1cbiAgICAgICAgICAgIG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdLnVzZXI/LmlkID09PVxuICAgICAgICAgICAgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5jaGF0Q2xpZW50Py51c2VyPy5pZDtcbiAgICAgICAgICBpZiAodGhpcy5pc1VzZXJTY3JvbGxlZCkge1xuICAgICAgICAgICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudE9sZGVzdE1lc3NhZ2VEYXRlID0gbWVzc2FnZXNbMF0uY3JlYXRlZF9hdDtcbiAgICAgICAgaWYgKCF0aGlzLm9sZGVzdE1lc3NhZ2VEYXRlKSB7XG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZSA9IGN1cnJlbnRPbGRlc3RNZXNzYWdlRGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLm9sZGVzdE1lc3NhZ2VEYXRlPy5nZXRUaW1lKCkgPiBjdXJyZW50T2xkZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMub2xkZXN0TWVzc2FnZURhdGUgPSBjdXJyZW50T2xkZXN0TWVzc2FnZURhdGU7XG4gICAgICAgICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YXAoXG4gICAgICAgIChtZXNzYWdlcykgPT5cbiAgICAgICAgICAodGhpcy5sYXN0U2VudE1lc3NhZ2VJZCA9IFsuLi5tZXNzYWdlc11cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgICAgICBtLnVzZXI/LmlkID09PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkICYmXG4gICAgICAgICAgICAgICAgbS5zdGF0dXMgIT09ICdzZW5kaW5nJ1xuICAgICAgICAgICAgKT8uaWQpXG4gICAgICApLFxuICAgICAgbWFwKChtZXNzYWdlcykgPT5cbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJyA/IG1lc3NhZ2VzIDogWy4uLm1lc3NhZ2VzXS5yZXZlcnNlKClcbiAgICAgICksXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JvdXBTdHlsZXMgPSBtZXNzYWdlcy5tYXAoKG0sIGkpID0+XG4gICAgICAgICAgZ2V0R3JvdXBTdHlsZXMobSwgbWVzc2FnZXNbaSAtIDFdLCBtZXNzYWdlc1tpICsgMV0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2Nyb2xsU3RhdGUoKSB7XG4gICAgdGhpcy5sYXRlc3RNZXNzYWdlRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmlzVXNlclNjcm9sbGVkID0gZmFsc2U7XG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5vbGRlc3RNZXNzYWdlRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVucmVhZE1lc3NhZ2VDb3VudCA9IDA7XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNOZXdNZXNzYWdlU2VudEJ5VXNlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHVzZXJzVHlwaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAndGhyZWFkJ1xuICAgICAgPyB0aGlzLnVzZXJzVHlwaW5nSW5UaHJlYWQkXG4gICAgICA6IHRoaXMudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICB9XG59XG4iLCI8ZGl2XG4gICNzY3JvbGxDb250YWluZXJcbiAgZGF0YS10ZXN0aWQ9XCJzY3JvbGwtY29udGFpbmVyXCJcbiAgY2xhc3M9XCJzdHItY2hhdF9fbGlzdFwiXG4gIChzY3JvbGwpPVwic2Nyb2xsZWQoKVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fcmV2ZXJzZS1pbmZpbml0ZS1zY3JvbGxcIj5cbiAgICA8dWwgY2xhc3M9XCJzdHItY2hhdF9fdWxcIj5cbiAgICAgIDxsaVxuICAgICAgICAjcGFyZW50TWVzc2FnZUVsZW1lbnRcbiAgICAgICAgKm5nSWY9XCJtb2RlID09PSAndGhyZWFkJ1wiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwicGFyZW50LW1lc3NhZ2VcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogcGFyZW50TWVzc2FnZSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3RocmVhZC1zdGFydFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICBzdHJlYW1DaGF0LlN0YXJ0IG9mIGEgbmV3IHRocmVhZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGlcbiAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJtZXNzYWdlXCJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMkIHwgYXN5bmM7XG4gICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5TWVzc2FnZUlkXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2xpIHN0ci1jaGF0X19saS0te3sgZ3JvdXBTdHlsZXNbaV0gfX1cIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lcjtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogbWVzc2FnZSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFR5cGluZ0luZGljYXRvciBsZXQtdXNlcnNUeXBpbmckPVwidXNlcnNUeXBpbmckXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiJGFueSh1c2Vyc1R5cGluZyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidHlwaW5nLWluZGljYXRvclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3Igc3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3ItLXR5cGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxzdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnNUeXBpbmckIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlVc2VySWRcIlxuICAgICAgICAgIFtuYW1lXT1cInVzZXIubmFtZSB8fCB1c2VyLmlkXCJcbiAgICAgICAgICBbaW1hZ2VVcmxdPVwidXNlci5pbWFnZVwiXG4gICAgICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgICAgIGxvY2F0aW9uPVwidHlwaW5nLWluZGljYXRvclwiXG4gICAgICAgICAgW3VzZXJdPVwidXNlclwiXG4gICAgICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90c1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3R5cGluZy1pbmRpY2F0b3JfX2RvdFwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fZG90XCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgdHlwaW5nSW5kaWNhdG9yVGVtcGxhdGUgfHwgZGVmYXVsdFR5cGluZ0luZGljYXRvcjtcbiAgICAgICAgY29udGV4dDogZ2V0VHlwaW5nSW5kaWNhdG9yQ29udGV4dCgpXG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbGlzdC1ub3RpZmljYXRpb25zXCI+XG4gIDxidXR0b25cbiAgICBkYXRhLXRlc3RpZD1cInNjcm9sbC10by1sYXRlc3RcIlxuICAgICpuZ0lmPVwiaXNVc2VyU2Nyb2xsZWRcIlxuICAgIGNsYXNzPVwiXG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb25cbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1yaWdodFxuICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC10by1sYXRlc3RcbiAgICBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzY3JvbGxUb0xhdGVzdE1lc3NhZ2UoKVwiXG4gICAgKGNsaWNrKT1cInNjcm9sbFRvTGF0ZXN0TWVzc2FnZSgpXCJcbiAgPlxuICAgIDxzdHJlYW0taWNvblxuICAgICAgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogMjRweFwiXG4gICAgICBbaWNvbl09XCJkaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJyA/ICdhcnJvdy1kb3duJyA6ICdhcnJvdy11cCdcIlxuICAgID48L3N0cmVhbS1pY29uPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwidW5yZWFkTWVzc2FnZUNvdW50ID4gMFwiXG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb25cbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uLXNjcm9sbC10by1sYXRlc3QtdW5yZWFkLWNvdW50XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IHVucmVhZE1lc3NhZ2VDb3VudCB9fVxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lciBsZXQtbWVzc2FnZT1cIm1lc3NhZ2VcIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHRNZXNzYWdlVGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgbGV0LWlzTGFzdFNlbnRNZXNzYWdlPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgIGxldC1lbmFibGVkTWVzc2FnZUFjdGlvbnM9XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgIGxldC1tb2RlPVwibW9kZVwiXG4gID5cbiAgICA8c3RyZWFtLW1lc3NhZ2VcbiAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICBbaXNMYXN0U2VudE1lc3NhZ2VdPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgICAgW2VuYWJsZWRNZXNzYWdlQWN0aW9uc109XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgPjwvc3RyZWFtLW1lc3NhZ2U+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgbWVzc2FnZVRlbXBsYXRlIHx8IGRlZmF1bHRNZXNzYWdlVGVtcGxhdGU7XG4gICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlKVxuICAgIFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -122,7 +122,7 @@ export class MessageReactionsComponent {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
MessageReactionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageReactionsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ChannelService }], target: i0.ɵɵFactoryTarget.Component });
|
|
125
|
-
MessageReactionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageReactionsComponent, selector: "stream-message-reactions", inputs: { messageId: "messageId", messageReactionCounts: "messageReactionCounts", isSelectorOpen: "isSelectorOpen", latestReactions: "latestReactions", ownReactions: "ownReactions" }, outputs: { isSelectorOpenChange: "isSelectorOpenChange" }, viewQueries: [{ propertyName: "selectorContainer", first: true, predicate: ["selectorContainer"], descendants: true }, { propertyName: "selectorTooltip", first: true, predicate: ["selectorTooltip"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"existingReactions.length > 0 && !isSelectorOpen\"\n class=\"str-chat__reaction-list\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n data-testid=\"reaction-list\"\n>\n <ul>\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji\"\n >\n <span class=\"emoji\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n \n </li>\n <li>\n <span\n data-testid=\"reactions-count\"\n class=\"str-chat__reaction-list--counter\"\n >{{ reactionsCount }}</span\n >\n </li>\n </ul>\n</div>\n\n<div\n #selectorContainer\n class=\"str-chat__reaction-selector\"\n *ngIf=\"isSelectorOpen\"\n data-testid=\"reaction-selector\"\n>\n <div\n *ngIf=\"tooltipText\"\n data-testid=\"tooltip\"\n #selectorTooltip\n class=\"str-chat__reaction-selector-tooltip\"\n [ngStyle]=\"{\n left: tooltipPositions?.tooltip + 'px',\n visibility: tooltipPositions ? 'visible' : 'hidden'\n }\"\n >\n <div\n class=\"arrow\"\n [ngStyle]=\"{ left: tooltipPositions?.arrow + 'px' }\"\n ></div>\n <span class=\"latest-user-username\">\n {{ tooltipText }}\n </span>\n </div>\n <ul class=\"str-chat__message-reactions-list\">\n <li\n class=\"str-chat__message-reactions-list-item str-chat__emoji\"\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji-option\"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <div\n *ngIf=\"getLatestUserByReaction(reactionType) as user\"\n class=\"latest-user\"\n (click)=\"hideTooltip()\"\n (keyup.enter)=\"hideTooltip()\"\n (mouseenter)=\"showTooltip($event, reactionType)\"\n (mouseleave)=\"hideTooltip()\"\n attr.data-testid=\"{{ reactionType }}-last-user\"\n >\n <stream-avatar-placeholder\n attr.data-testid=\"{{ reactionType }}-avatar\"\n [imageUrl]=\"user.image\"\n [name]=\"user.name || user.id\"\n [size]=\"20\"\n ></stream-avatar-placeholder>\n </div>\n <span class=\"emoji\" style=\"width: 20px; height: 20px; top: 10px\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n <span\n *ngIf=\"\n messageReactionCounts[reactionType] &&\n messageReactionCounts[reactionType]! > 0\n \"\n class=\"str-chat__message-reactions-list-item__count\"\n attr.data-testid=\"{{ reactionType }}-reaction-count\"\n >\n {{ messageReactionCounts[reactionType] }}\n </span>\n </li>\n </ul>\n</div>\n", styles: [".emoji {position: relative; display: inline-block; }"], components: [{ type: i2.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
125
|
+
MessageReactionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageReactionsComponent, selector: "stream-message-reactions", inputs: { messageId: "messageId", messageReactionCounts: "messageReactionCounts", isSelectorOpen: "isSelectorOpen", latestReactions: "latestReactions", ownReactions: "ownReactions" }, outputs: { isSelectorOpenChange: "isSelectorOpenChange" }, viewQueries: [{ propertyName: "selectorContainer", first: true, predicate: ["selectorContainer"], descendants: true }, { propertyName: "selectorTooltip", first: true, predicate: ["selectorTooltip"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"existingReactions.length > 0 && !isSelectorOpen\"\n class=\"str-chat__reaction-list\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n data-testid=\"reaction-list\"\n>\n <ul>\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji\"\n >\n <span class=\"emoji\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n \n </li>\n <li>\n <span\n data-testid=\"reactions-count\"\n class=\"str-chat__reaction-list--counter\"\n >{{ reactionsCount }}</span\n >\n </li>\n </ul>\n</div>\n\n<div\n #selectorContainer\n class=\"str-chat__reaction-selector\"\n *ngIf=\"isSelectorOpen\"\n data-testid=\"reaction-selector\"\n>\n <div\n *ngIf=\"tooltipText\"\n data-testid=\"tooltip\"\n #selectorTooltip\n class=\"str-chat__reaction-selector-tooltip\"\n [ngStyle]=\"{\n left: tooltipPositions?.tooltip + 'px',\n visibility: tooltipPositions ? 'visible' : 'hidden'\n }\"\n >\n <div\n class=\"arrow\"\n [ngStyle]=\"{ left: tooltipPositions?.arrow + 'px' }\"\n ></div>\n <span class=\"latest-user-username\">\n {{ tooltipText }}\n </span>\n </div>\n <ul class=\"str-chat__message-reactions-list\">\n <li\n class=\"str-chat__message-reactions-list-item str-chat__emoji\"\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n data-testclass=\"emoji-option\"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <div\n *ngIf=\"getLatestUserByReaction(reactionType) as user\"\n class=\"latest-user\"\n (click)=\"hideTooltip()\"\n (keyup.enter)=\"hideTooltip()\"\n (mouseenter)=\"showTooltip($event, reactionType)\"\n (mouseleave)=\"hideTooltip()\"\n attr.data-testid=\"{{ reactionType }}-last-user\"\n >\n <stream-avatar-placeholder\n attr.data-testid=\"{{ reactionType }}-avatar\"\n [imageUrl]=\"user.image\"\n [name]=\"user.name || user.id\"\n [size]=\"20\"\n ></stream-avatar-placeholder>\n </div>\n <span class=\"emoji\" style=\"width: 20px; height: 20px; top: 10px\">\n {{ getEmojiByReaction(reactionType) }}\n </span>\n <span\n *ngIf=\"\n messageReactionCounts[reactionType] &&\n messageReactionCounts[reactionType]! > 0\n \"\n class=\"str-chat__message-reactions-list-item__count\"\n attr.data-testid=\"{{ reactionType }}-reaction-count\"\n >\n {{ messageReactionCounts[reactionType] }}\n </span>\n </li>\n </ul>\n</div>\n", styles: [".emoji {position: relative; display: inline-block; }"], components: [{ type: i2.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
126
126
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageReactionsComponent, decorators: [{
|
|
127
127
|
type: Component,
|
|
128
128
|
args: [{
|
package/esm2015/lib/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dGFjaG1lbnQsXG4gIENoYW5uZWwsXG4gIENoYW5uZWxNZW1iZXJSZXNwb25zZSxcbiAgQ29tbWFuZFJlc3BvbnNlLFxuICBFdmVudCxcbiAgRXh0ZW5kYWJsZUdlbmVyaWNzLFxuICBGb3JtYXRNZXNzYWdlUmVzcG9uc2UsXG4gIExpdGVyYWxTdHJpbmdGb3JVbmlvbixcbiAgTXV0ZSxcbiAgUmVhY3Rpb25SZXNwb25zZSxcbiAgVXNlcixcbiAgVXNlclJlc3BvbnNlLFxufSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi9pY29uL2ljb24uY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgVW5rbm93blR5cGUgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVHJpZ2dlciA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIGNvbXBvbmVudFByb3BzOiBVbmtub3duVHlwZTtcbiAgICBkYXRhOiBVbmtub3duVHlwZTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBFeHRlbmRhYmxlR2VuZXJpY3MgJiB7XG4gIGF0dGFjaG1lbnRUeXBlOiBEZWZhdWx0QXR0YWNobWVudFR5cGU7XG4gIGNoYW5uZWxUeXBlOiBEZWZhdWx0Q2hhbm5lbFR5cGU7XG4gIGNvbW1hbmRUeXBlOiBMaXRlcmFsU3RyaW5nRm9yVW5pb247XG4gIGV2ZW50VHlwZTogVW5rbm93blR5cGU7XG4gIG1lc3NhZ2VUeXBlOiBEZWZhdWx0TWVzc2FnZVR5cGU7XG4gIHJlYWN0aW9uVHlwZTogVW5rbm93blR5cGU7XG4gIHVzZXJUeXBlOiBEZWZhdWx0VXNlclR5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0QXR0YWNobWVudFR5cGUgPSBVbmtub3duVHlwZSAmIHtcbiAgYXNzZXRfdXJsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgaW1hZ2VzPzogQXJyYXk8QXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPj47XG4gIG1pbWVfdHlwZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRDaGFubmVsVHlwZSA9IFVua25vd25UeXBlICYge1xuICBpbWFnZT86IHN0cmluZztcbiAgbWVtYmVyX2NvdW50PzogbnVtYmVyO1xuICBzdWJ0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRDb21tYW5kVHlwZSA9IExpdGVyYWxTdHJpbmdGb3JVbmlvbjtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdE1lc3NhZ2VUeXBlID0gVW5rbm93blR5cGUgJiB7XG4gIGN1c3RvbVR5cGU/OiAnY2hhbm5lbC5pbnRybycgfCAnbWVzc2FnZS5kYXRlJztcbiAgZGF0ZT86IHN0cmluZyB8IERhdGU7XG4gIGVycm9yU3RhdHVzQ29kZT86IG51bWJlcjtcbiAgZXZlbnQ/OiBFdmVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbiAgdW5yZWFkPzogYm9vbGVhbjtcbiAgcmVhZEJ5OiBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRVc2VyVHlwZUludGVybmFsID0ge1xuICBpbWFnZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFVzZXJUeXBlID0gVW5rbm93blR5cGUgJlxuICBEZWZhdWx0VXNlclR5cGVJbnRlcm5hbCAmIHtcbiAgICBtdXRlcz86IEFycmF5PE11dGU8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4+O1xuICB9O1xuXG5leHBvcnQgdHlwZSBTdHJlYW1NZXNzYWdlPFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSBGb3JtYXRNZXNzYWdlUmVzcG9uc2U8VD47XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRVcGxvYWQgPSB7XG4gIGZpbGU6IEZpbGU7XG4gIHN0YXRlOiAnZXJyb3InIHwgJ3N1Y2Nlc3MnIHwgJ3VwbG9hZGluZyc7XG4gIHVybD86IHN0cmluZztcbiAgdHlwZTogJ2ltYWdlJyB8ICdmaWxlJyB8ICd2aWRlbyc7XG4gIHByZXZpZXdVcmk/OiBzdHJpbmcgfCBBcnJheUJ1ZmZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtQ29udGV4dCA9IHtcbiAgaXRlbTogTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW07XG59O1xuXG5leHBvcnQgdHlwZSBDb21tYW5kQXV0b2NvbXBsZXRlTGlzdEl0ZW1Db250ZXh0ID0ge1xuICBpdGVtOiBDb21hbmRBdXRvY29tcGxldGVMaXN0SXRlbTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtID0gKFxuICB8IENoYW5uZWxNZW1iZXJSZXNwb25zZVxuICB8IFVzZXJSZXNwb25zZVxuKSAmIHtcbiAgYXV0b2NvbXBsZXRlTGFiZWw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtID0gQ29tbWFuZFJlc3BvbnNlICYge1xuICBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uVHlwZSA9ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnaW5mbyc7XG5cbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvblBheWxvYWQ8VCA9IHt9PiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcbiAgdGV4dD86IHN0cmluZztcbiAgdHJhbnNsYXRlUGFyYW1zPzogT2JqZWN0O1xuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFQ+O1xuICB0ZW1wbGF0ZUNvbnRleHQ/OiBUO1xuICBkaXNtaXNzRm46IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbFByZXZpZXdDb250ZXh0PFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSB7XG4gIGNoYW5uZWw6IENoYW5uZWw8VD47XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlSW5wdXRDb250ZXh0ID0ge1xuICBpc0ZpbGVVcGxvYWRFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhcmVNZW50aW9uc0VuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyB8IHVuZGVmaW5lZDtcbiAgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgfCB1bmRlZmluZWQ7XG4gIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVVwZGF0ZUhhbmRsZXI6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBzZW5kTWVzc2FnZSQ6IE9ic2VydmFibGU8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBNZW50aW9uVGVtcGxhdGVDb250ZXh0ID0ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHVzZXI6IFVzZXJSZXNwb25zZTtcbn07XG5cbmV4cG9ydCB0eXBlIEVtb2ppUGlja2VyQ29udGV4dCA9IHtcbiAgZW1vamlJbnB1dCQ6IFN1YmplY3Q8c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFR5cGluZ0luZGljYXRvckNvbnRleHQgPSB7XG4gIHVzZXJzVHlwaW5nJDogT2JzZXJ2YWJsZTxVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXT47XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlQ29udGV4dCA9IHtcbiAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXTtcbiAgaXNMYXN0U2VudE1lc3NhZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG1vZGU6ICd0aHJlYWQnIHwgJ21haW4nO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbEFjdGlvbnNDb250ZXh0PFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4gPSB7IGNoYW5uZWw6IENoYW5uZWw8VD4gfTtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudExpc3RDb250ZXh0ID0ge1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEF2YXRhclR5cGUgPSAnY2hhbm5lbCcgfCAndXNlcic7XG5cbmV4cG9ydCB0eXBlIEF2YXRhckxvY2F0aW9uID1cbiAgfCAnY2hhbm5lbC1wcmV2aWV3J1xuICB8ICdjaGFubmVsLWhlYWRlcidcbiAgfCAnbWVzc2FnZS1zZW5kZXInXG4gIHwgJ21lc3NhZ2UtcmVhZGVyJ1xuICB8ICdxdW90ZWQtbWVzc2FnZS1zZW5kZXInXG4gIHwgJ2F1dG9jb21wbGV0ZS1pdGVtJ1xuICB8ICd0eXBpbmctaW5kaWNhdG9yJ1xuICB8ICdyZWFjdGlvbic7XG5cbmV4cG9ydCB0eXBlIEF2YXRhckNvbnRleHQgPSB7XG4gIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICB0eXBlOiBBdmF0YXJUeXBlIHwgdW5kZWZpbmVkO1xuICBsb2NhdGlvbjogQXZhdGFyTG9jYXRpb24gfCB1bmRlZmluZWQ7XG4gIGNoYW5uZWw/OiBDaGFubmVsPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICB1c2VyPzogVXNlcjxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbn07XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQgPSB7XG4gIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+IHwgdW5kZWZpbmVkO1xuICByZXRyeVVwbG9hZEhhbmRsZXI6IChmOiBGaWxlKSA9PiBhbnk7XG4gIGRlbGV0ZVVwbG9hZEhhbmRsZXI6ICh1OiBBdHRhY2htZW50VXBsb2FkKSA9PiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBJY29uQ29udGV4dCA9IHtcbiAgaWNvbjogSWNvbiB8IHVuZGVmaW5lZDtcbiAgc2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgTG9hZGluZ0luZGljYXRvckNvbnRleHQgPSB7XG4gIHNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VBY3Rpb25zQm94Q29udGV4dCA9IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBpc01pbmU6IGJvb2xlYW47XG4gIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXTtcbiAgZGlzcGxheWVkQWN0aW9uc0NvdW50Q2hhbmVIYW5sZXI6IChjb3VudDogbnVtYmVyKSA9PiBhbnk7XG4gIGlzRWRpdGluZ0NoYW5nZUhhbmRsZXI6IChpc0VkaXRpbmc6IGJvb2xlYW4pID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCA9IHtcbiAgYWN0aW9uTmFtZTogJ3F1b3RlJyB8ICdwaW4nIHwgJ2ZsYWcnIHwgJ2VkaXQnIHwgJ2RlbGV0ZSc7XG4gIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogKCgpID0+IHN0cmluZykgfCBzdHJpbmc7XG4gIGFjdGlvbkhhbmRsZXI6ICgpID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VBY3Rpb25JdGVtID0ge1xuICBhY3Rpb25OYW1lOiAncXVvdGUnIHwgJ3BpbicgfCAnZmxhZycgfCAnZWRpdCcgfCAnZGVsZXRlJztcbiAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAoKCkgPT4gc3RyaW5nKSB8IHN0cmluZztcbiAgaXNWaXNpYmxlOiAoXG4gICAgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLFxuICAgIGlzTWluZTogYm9vbGVhbixcbiAgICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlXG4gICkgPT4gYm9vbGVhbjtcbiAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UsIGlzTWluZTogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVJlYWN0aW9uc0NvbnRleHQgPSB7XG4gIG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlUmVhY3Rpb25Db3VudHM6IHsgW2tleSBpbiBNZXNzYWdlUmVhY3Rpb25UeXBlXT86IG51bWJlciB9O1xuICBpc1NlbGVjdG9yT3BlbjogYm9vbGVhbjtcbiAgbGF0ZXN0UmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W107XG4gIG93blJlYWN0aW9uczogUmVhY3Rpb25SZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdO1xuICBpc1NlbGVjdG9yT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW46IGJvb2xlYW4pID0+IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBpc09wZW5DaGFuZ2VIYW5kbGVyOiAoaXNPcGVuOiBib29sZWFuKSA9PiBhbnk7XG4gIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPHZvaWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uQ29udGV4dCA9IHtcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZSB8IHVuZGVmaW5lZDtcbiAgY29udGVudDogVGVtcGxhdGVSZWY8dm9pZD4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBUaHJlYWRIZWFkZXJDb250ZXh0ID0ge1xuICBwYXJlbnRNZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBjbG9zZVRocmVhZEhhbmRsZXI6IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZVJlYWN0aW9uVHlwZSA9XG4gIHwgJ2FuZ3J5J1xuICB8ICdoYWhhJ1xuICB8ICdsaWtlJ1xuICB8ICdsb3ZlJ1xuICB8ICdzYWQnXG4gIHwgJ3dvdyc7XG4iXX0=
|