@banta/sdk 4.8.2 → 4.9.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/esm2020/lib/banta/banta.component.mjs +3 -3
- package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +1 -1
- package/esm2020/lib/chat-backend-base.mjs +1 -1
- package/esm2020/lib/chat-backend.mjs +80 -12
- package/esm2020/lib/chat-source-base.mjs +1 -1
- package/esm2020/lib/chat-source.mjs +7 -2
- package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +17 -10
- package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +5 -5
- package/esm2020/lib/comments/comment/comment.component.mjs +88 -130
- package/esm2020/lib/comments/comment-field/comment-field.component.mjs +122 -144
- package/esm2020/lib/comments/comment-view/comment-view.component.mjs +72 -70
- package/esm2020/lib/comments/live-comment.component.mjs +1 -1
- package/esm2020/lib/emoji/emoji-selector-button.component.mjs +7 -4
- package/esm2020/lib/static-chat-source.mjs +71 -0
- package/fesm2015/banta-sdk.mjs +490 -379
- package/fesm2015/banta-sdk.mjs.map +1 -1
- package/fesm2020/banta-sdk.mjs +462 -374
- package/fesm2020/banta-sdk.mjs.map +1 -1
- package/lib/chat-backend-base.d.ts +4 -0
- package/lib/chat-backend.d.ts +29 -4
- package/lib/chat-source-base.d.ts +8 -0
- package/lib/chat-source.d.ts +2 -0
- package/lib/comments/attachment-button/attachment-button.component.d.ts +3 -2
- package/lib/comments/comment/comment.component.d.ts +41 -39
- package/lib/comments/comment-field/comment-field.component.d.ts +37 -40
- package/lib/comments/comment-view/comment-view.component.d.ts +43 -41
- package/lib/emoji/emoji-selector-button.component.d.ts +2 -1
- package/lib/static-chat-source.d.ts +42 -0
- package/package.json +1 -1
|
@@ -182,10 +182,10 @@ export class BantaComponent {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
BantaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaComponent, deps: [{ token: i1.ChatBackendBase }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
185
|
-
BantaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaComponent, selector: "banta", inputs: { topicID: "topicID", chatLabel: "chatLabel", commentsLabel: "commentsLabel" }, outputs: { signInSelected: "signInSelected" }, host: { properties: { "class.point-focus": "this.hasPoint" } }, viewQueries: [{ propertyName: "firehose", first: true, predicate: ["firehose"], descendants: true, static: true }], ngImport: i0, template: "\r\n<mat-menu #userMenu=\"matMenu\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <button [disabled]=\"true\" mat-menu-item>{{currentUser.displayName}} (@{{currentUser.username}})</button>\r\n <button mat-menu-item (click)=\"signOut()\">Sign Out</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!currentUser\">\r\n <button mat-menu-item>Sign In</button>\r\n </ng-container>\r\n <button mat-menu-item>Help</button>\r\n</mat-menu>\r\n\r\n<div class=\"tabs\">\r\n <div>\r\n <a mat-button (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</a>\r\n <a mat-button (click)=\"mobileFocus = 'comments'\">{{commentsLabel}}</a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div>\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"firehose\" [class.focus]=\"mobileFocus === 'chat'\">\r\n <header>\r\n <div>\r\n <label (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</label>\r\n <div class=\"spacer\"></div>\r\n\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n </header>\r\n <banta-chat \r\n #firehose\r\n [source]=\"firehoseSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n (reported)=\"reportMessage($event)\"\r\n ></banta-chat>\r\n</div>\r\n\r\n<div class=\"aux\" [class.focus]=\"mobileFocus === 'aux'\" [class.open]=\"auxOpen\">\r\n <header>\r\n <div>\r\n <label>{{auxTitle}}</label>\r\n <div class=\"spacer\"></div>\r\n <button mat-icon-button (click)=\"auxOpen = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n <div class=\"aux-contents\">\r\n <ng-container *ngIf=\"auxMode === 'profile'\">\r\n <ng-container *ngIf=\"profileUser\">\r\n\r\n <div>\r\n <strong style=\"font-size: 125%;\">\r\n {{profileUser.displayName}}\r\n </strong>\r\n @{{profileUser.username}}\r\n </div>\r\n\r\n <br/>\r\n <strong>Top Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n\r\n <br/>\r\n <strong>Recent Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'report'\">\r\n <p>Are you sure you want to report this message?</p>\r\n\r\n <banta-live-message [message]=\"reportedMessage\"></banta-live-message>\r\n\r\n <div style=\"text-align: center;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"sendReport(reportedMessage)\">Yes, Report</button>\r\n \r\n <button mat-raised-button color=\"secondary\" (click)=\"auxOpen = false\">No, Cancel</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'notifications'\">\r\n\r\n <div *ngIf=\"!notifications || notifications.length === 0\">\r\n <em>You do not have any notifications yet</em>\r\n </div>\r\n \r\n <div class=\"notifications\">\r\n <div class=\"notification\" *ngFor=\"let notif of notifications\">\r\n <div>\r\n <ng-container *ngIf=\"notif.type === 'upvote'\">\r\n @{{notif.message?.user?.username}} upvoted your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'notice'\">\r\n <div>\r\n {{notif.message}}\r\n </div>\r\n <a mat-button target=\"_blank\" href=\"{{notif.actionUrl}}\">\r\n {{notif.actionLabel}}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'mention'\">\r\n You were mentioned by @{{notif.message?.user?.username}}\r\n\r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'reply'\">\r\n @{{notif.replyMessage?.user?.username}} replied to your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.replyMessage\"\r\n (upvoted)=\"upvoteMessage(notif.replyMessage)\"\r\n (reported)=\"reportMessage(notif.replyMessage)\"\r\n (selected)=\"goToMessage(notif.replyMessage)\">\r\n </banta-live-message>\r\n </ng-container>\r\n </div>\r\n\r\n <banta-timestamp [value]=\"notif.sentAt\"></banta-timestamp>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<div class=\"points\" [class.focus]=\"mobileFocus === 'points'\">\r\n <header>\r\n <div>\r\n <label>{{commentsLabel}}</label>\r\n </div>\r\n </header>\r\n <div class=\"point-focus\">\r\n <div class=\"actions\">\r\n <button mat-button (click)=\"pointUnfocus()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Back\r\n </button>\r\n\r\n <div class=\"spacer\"></div>\r\n \r\n <ng-container *ngIf=\"pointOpen\">\r\n <div class=\"counted-action\">\r\n <div class=\"count-indicator\"> \r\n {{pointOpen.likes}}\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!pointSubChat\">\r\n Error: No subchat\r\n </div>\r\n \r\n <banta-comment-view\r\n class=\"subcomments\"\r\n *ngIf=\"pointSubChat\"\r\n [newestLast]=\"true\"\r\n [allowReplies]=\"false\"\r\n [source]=\"pointSubChat\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n >\r\n \r\n <banta-comment\r\n class=\"focused-comment\"\r\n data-before\r\n *ngIf=\"pointOpen\"\r\n (upvoted)=\"upvoteMessage(pointOpen)\"\r\n (userSelected)=\"showProfile(pointOpen.user)\"\r\n (reported)=\"reportMessage(pointOpen)\"\r\n [showReplyAction]=\"false\"\r\n [message]=\"pointOpen\"\r\n ></banta-comment>\r\n \r\n <div class=\"message reply\">\r\n Reply:\r\n <form class=\"new-message\" (submit)=\"sendPointSubMessage()\">\r\n <textarea \r\n name=\"message\" \r\n (keydown)=\"newPointSubMessageKeyDown($event)\"\r\n [(ngModel)]=\"newPointSubMessage.message\"></textarea>\r\n \r\n <div class=\"actions\">\r\n <button [disabled]=\"!newPointSubMessage.message\" \r\n mat-raised-button color=\"primary\">Send</button>\r\n </div>\r\n </form>\r\n </div>\r\n </banta-comment-view>\r\n </div>\r\n <div class=\"points-section\">\r\n <banta-comments\r\n [source]=\"pointSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (selected)=\"goToMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n ></banta-comments>\r\n </div>\r\n</div>", styles: [":host{display:flex;flex-direction:row;padding:.5em;height:40em;position:relative}.counted-action{display:flex;align-items:center}.count-indicator{font-size:9pt;padding:0 3px;border-radius:3px;border:1px solid #333}header{position:relative;margin-bottom:1em}header div{display:flex;align-items:center;height:30px}header button{color:#666}header label{text-transform:uppercase;z-index:1;font-size:12pt;letter-spacing:2px;font-weight:100;color:#333;margin:0 auto 0 0;display:block;width:-moz-fit-content;width:fit-content;position:relative;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}header:after{content:\"\";border:1px solid;border-color:#ccc;height:0px;width:100%;display:block;position:relative;z-index:0}.points{width:33%;max-width:50em;display:flex;flex-direction:column}:host.point-focus .points{width:66%;max-width:50em}:host.point-focus .points .points-section{opacity:0;pointer-events:none}:host.point-focus .points .point-focus{opacity:1;pointer-events:initial}:host.point-focus .points .point-focus .actions{display:flex}banta-comments{flex-grow:1}.points{width:33%;margin-left:.5em;font-size:12pt;flex-shrink:0;max-width:30em;transition:.2s width ease-in,.2s max-width ease-in;position:relative}.points .points-section{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:.2s opacity ease-in;z-index:2}.points .point-focus{position:absolute;width:100%;inset:1.75em 0 0;padding:.5em;opacity:0;transition:.2s opacity ease-in;flex-grow:1;display:flex;flex-direction:column}.firehose{flex-grow:1;font-size:10pt;display:flex;flex-direction:column}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:black;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}.subcomments ::ng-deep banta-comment{font-size:10pt}.subcomments ::ng-deep banta-comment.focused-comment{background:#001321;color:#fff;font-size:12pt}.aux{width:0px;min-width:0px;overflow-x:hidden;transition:.4s width ease-out,.4s min-width ease-out;display:flex;flex-direction:column}.aux.open{width:30em;min-width:18em}.aux .aux-contents{width:30em;min-width:10em;max-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1}.notifications .notification{border-bottom:1px solid #333;padding:1em}.notifications .notification banta-timestamp{display:block;text-align:right;font-size:9pt;color:#999}.message.reply{padding:1em}.tabs{display:none}@media (max-width: 1015px){:host{flex-direction:column}.tabs{display:flex;position:absolute;top:0;left:0;right:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:rgba(0,0,0,.5)}.points{width:100%;max-width:100%;margin-left:0}header{display:none}:host.point-focus .points{width:100%;max-width:100%}.aux{width:100%;min-width:0;min-width:initial;max-width:100%}.points,.firehose,.aux{position:absolute;inset:2em 0 0;z-index:0;background:black}.points.focus,.firehose.focus,.aux.focus{z-index:2}}:host-context(.mat-dark-theme) :host{background:#090909;color:#fff}:host-context(.mat-dark-theme) form textarea{background:#ccc;color:#333}:host-context(.mat-dark-theme) header:after{border-color:#222}:host-context(.mat-dark-theme) header label{color:#aaa}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.TimestampComponent, selector: "banta-timestamp", inputs: ["value"] }, { kind: "component", type: i6.CommentComponent, selector: "banta-comment", inputs: ["maxLength", "message", "customMenuItems", "showReplyAction", "permissions", "mine", "editing", "genericAvatarUrl"], outputs: ["loaded", "userSelected", "usernameSelected", "avatarSelected", "reported", "liked", "unliked", "selected", "edited", "deleted", "editStarted", "editEnded", "shared"] }, { kind: "component", type: i7.CommentViewComponent, selector: "banta-comment-view", inputs: ["showEmptyState", "allowReplies", "enableHoldOnClick", "enableHoldOnScroll", "customMenuItems", "fixedHeight", "selectedMessage", "source", "genericAvatarUrl", "maxMessages", "maxVisibleMessages", "newestLast", "holdNewMessages"], outputs: ["selected", "messageEdited", "userSelected", "reported", "liked", "unliked", "usernameSelected", "avatarSelected", "shared", "deleted", "sortOrderChanged", "filterModeChanged"] }, { kind: "component", type: i8.BantaCommentsComponent, selector: "banta-comments", inputs: ["customMenuItems", "url", "maxCommentLength", "loadingMessages", "useInlineReplies", "signInLabel", "sendLabel", "signingInLabel", "replyLabel", "sendingLabel", "permissionDeniedLabel", "postCommentLabel", "postReplyLabel", "allowAttachments", "fixedHeight", "maxMessages", "maxVisibleMessages", "genericAvatarUrl", "shouldInterceptMessageSend", "participants", "source", "hashtags", "topicID", "sortOrder", "filterMode"], outputs: ["signInSelected", "editAvatarSelected", "permissionDeniedError", "upvoted", "reported", "selected", "userSelected", "usernameSelected", "avatarSelected", "shared"] }, { kind: "component", type: i9.BantaChatComponent, selector: "banta-chat", inputs: ["shouldInterceptMessageSend", "url", "source", "topicID", "signInLabel", "sendLabel", "permissionDeniedLabel", "messageFieldPlaceholder", "emptyLabel"], outputs: ["selected", "reported", "upvoted", "userSelected", "permissionDeniedError", "signInSelected", "received"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.LiveMessageComponent, selector: "banta-live-message", inputs: ["message"], outputs: ["upvoted", "reported", "selected"] }] });
|
|
185
|
+
BantaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaComponent, selector: "banta", inputs: { topicID: "topicID", chatLabel: "chatLabel", commentsLabel: "commentsLabel" }, outputs: { signInSelected: "signInSelected" }, host: { properties: { "class.point-focus": "this.hasPoint" } }, viewQueries: [{ propertyName: "firehose", first: true, predicate: ["firehose"], descendants: true, static: true }], ngImport: i0, template: "\r\n<mat-menu #userMenu=\"matMenu\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <button [disabled]=\"true\" mat-menu-item>{{currentUser.displayName}} (@{{currentUser.username}})</button>\r\n <button mat-menu-item (click)=\"signOut()\">Sign Out</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!currentUser\">\r\n <button mat-menu-item>Sign In</button>\r\n </ng-container>\r\n <button mat-menu-item>Help</button>\r\n</mat-menu>\r\n\r\n<div class=\"tabs\">\r\n <div>\r\n <a mat-button (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</a>\r\n <a mat-button (click)=\"mobileFocus = 'comments'\">{{commentsLabel}}</a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div>\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"firehose\" [class.focus]=\"mobileFocus === 'chat'\">\r\n <header>\r\n <div>\r\n <label (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</label>\r\n <div class=\"spacer\"></div>\r\n\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n </header>\r\n <banta-chat \r\n #firehose\r\n [source]=\"firehoseSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n (reported)=\"reportMessage($event)\"\r\n ></banta-chat>\r\n</div>\r\n\r\n<div class=\"aux\" [class.focus]=\"mobileFocus === 'aux'\" [class.open]=\"auxOpen\">\r\n <header>\r\n <div>\r\n <label>{{auxTitle}}</label>\r\n <div class=\"spacer\"></div>\r\n <button mat-icon-button (click)=\"auxOpen = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n <div class=\"aux-contents\">\r\n <ng-container *ngIf=\"auxMode === 'profile'\">\r\n <ng-container *ngIf=\"profileUser\">\r\n\r\n <div>\r\n <strong style=\"font-size: 125%;\">\r\n {{profileUser.displayName}}\r\n </strong>\r\n @{{profileUser.username}}\r\n </div>\r\n\r\n <br/>\r\n <strong>Top Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n\r\n <br/>\r\n <strong>Recent Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'report'\">\r\n <p>Are you sure you want to report this message?</p>\r\n\r\n <banta-live-message [message]=\"reportedMessage\"></banta-live-message>\r\n\r\n <div style=\"text-align: center;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"sendReport(reportedMessage)\">Yes, Report</button>\r\n \r\n <button mat-raised-button color=\"secondary\" (click)=\"auxOpen = false\">No, Cancel</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'notifications'\">\r\n\r\n <div *ngIf=\"!notifications || notifications.length === 0\">\r\n <em>You do not have any notifications yet</em>\r\n </div>\r\n \r\n <div class=\"notifications\">\r\n <div class=\"notification\" *ngFor=\"let notif of notifications\">\r\n <div>\r\n <ng-container *ngIf=\"notif.type === 'upvote'\">\r\n @{{notif.message?.user?.username}} upvoted your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'notice'\">\r\n <div>\r\n {{notif.message}}\r\n </div>\r\n <a mat-button target=\"_blank\" href=\"{{notif.actionUrl}}\">\r\n {{notif.actionLabel}}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'mention'\">\r\n You were mentioned by @{{notif.message?.user?.username}}\r\n\r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'reply'\">\r\n @{{notif.replyMessage?.user?.username}} replied to your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.replyMessage\"\r\n (upvoted)=\"upvoteMessage(notif.replyMessage)\"\r\n (reported)=\"reportMessage(notif.replyMessage)\"\r\n (selected)=\"goToMessage(notif.replyMessage)\">\r\n </banta-live-message>\r\n </ng-container>\r\n </div>\r\n\r\n <banta-timestamp [value]=\"notif.sentAt\"></banta-timestamp>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<div class=\"points\" [class.focus]=\"mobileFocus === 'points'\">\r\n <header>\r\n <div>\r\n <label>{{commentsLabel}}</label>\r\n </div>\r\n </header>\r\n <div class=\"point-focus\">\r\n <div class=\"actions\">\r\n <button mat-button (click)=\"pointUnfocus()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Back\r\n </button>\r\n\r\n <div class=\"spacer\"></div>\r\n \r\n <ng-container *ngIf=\"pointOpen\">\r\n <div class=\"counted-action\">\r\n <div class=\"count-indicator\"> \r\n {{pointOpen.likes}}\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!pointSubChat\">\r\n Error: No subchat\r\n </div>\r\n \r\n <banta-comment-view\r\n class=\"subcomments\"\r\n *ngIf=\"pointSubChat\"\r\n [newestLast]=\"true\"\r\n [allowReplies]=\"false\"\r\n [source]=\"pointSubChat\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n >\r\n \r\n <banta-comment\r\n class=\"focused-comment\"\r\n data-before\r\n *ngIf=\"pointOpen\"\r\n [showReplyAction]=\"false\"\r\n [message]=\"pointOpen\"\r\n [readonly]=\"pointSubChat?.readonly\"\r\n (upvoted)=\"upvoteMessage(pointOpen)\"\r\n (userSelected)=\"showProfile(pointOpen.user)\"\r\n (reported)=\"reportMessage(pointOpen)\"\r\n ></banta-comment>\r\n \r\n <div class=\"message reply\">\r\n Reply:\r\n <form class=\"new-message\" (submit)=\"sendPointSubMessage()\">\r\n <textarea \r\n name=\"message\" \r\n (keydown)=\"newPointSubMessageKeyDown($event)\"\r\n [(ngModel)]=\"newPointSubMessage.message\"></textarea>\r\n \r\n <div class=\"actions\">\r\n <button [disabled]=\"!newPointSubMessage.message\" \r\n mat-raised-button color=\"primary\">Send</button>\r\n </div>\r\n </form>\r\n </div>\r\n </banta-comment-view>\r\n </div>\r\n <div class=\"points-section\">\r\n <banta-comments\r\n [source]=\"pointSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (selected)=\"goToMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n ></banta-comments>\r\n </div>\r\n</div>", styles: [":host{display:flex;flex-direction:row;padding:.5em;height:40em;position:relative}.counted-action{display:flex;align-items:center}.count-indicator{font-size:9pt;padding:0 3px;border-radius:3px;border:1px solid #333}header{position:relative;margin-bottom:1em}header div{display:flex;align-items:center;height:30px}header button{color:#666}header label{text-transform:uppercase;z-index:1;font-size:12pt;letter-spacing:2px;font-weight:100;color:#333;margin:0 auto 0 0;display:block;width:-moz-fit-content;width:fit-content;position:relative;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}header:after{content:\"\";border:1px solid;border-color:#ccc;height:0px;width:100%;display:block;position:relative;z-index:0}.points{width:33%;max-width:50em;display:flex;flex-direction:column}:host.point-focus .points{width:66%;max-width:50em}:host.point-focus .points .points-section{opacity:0;pointer-events:none}:host.point-focus .points .point-focus{opacity:1;pointer-events:initial}:host.point-focus .points .point-focus .actions{display:flex}banta-comments{flex-grow:1}.points{width:33%;margin-left:.5em;font-size:12pt;flex-shrink:0;max-width:30em;transition:.2s width ease-in,.2s max-width ease-in;position:relative}.points .points-section{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:.2s opacity ease-in;z-index:2}.points .point-focus{position:absolute;width:100%;inset:1.75em 0 0;padding:.5em;opacity:0;transition:.2s opacity ease-in;flex-grow:1;display:flex;flex-direction:column}.firehose{flex-grow:1;font-size:10pt;display:flex;flex-direction:column}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:black;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}.subcomments ::ng-deep banta-comment{font-size:10pt}.subcomments ::ng-deep banta-comment.focused-comment{background:#001321;color:#fff;font-size:12pt}.aux{width:0px;min-width:0px;overflow-x:hidden;transition:.4s width ease-out,.4s min-width ease-out;display:flex;flex-direction:column}.aux.open{width:30em;min-width:18em}.aux .aux-contents{width:30em;min-width:10em;max-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1}.notifications .notification{border-bottom:1px solid #333;padding:1em}.notifications .notification banta-timestamp{display:block;text-align:right;font-size:9pt;color:#999}.message.reply{padding:1em}.tabs{display:none}@media (max-width: 1015px){:host{flex-direction:column}.tabs{display:flex;position:absolute;top:0;left:0;right:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:rgba(0,0,0,.5)}.points{width:100%;max-width:100%;margin-left:0}header{display:none}:host.point-focus .points{width:100%;max-width:100%}.aux{width:100%;min-width:0;min-width:initial;max-width:100%}.points,.firehose,.aux{position:absolute;inset:2em 0 0;z-index:0;background:black}.points.focus,.firehose.focus,.aux.focus{z-index:2}}:host-context(.mat-dark-theme) :host{background:#090909;color:#fff}:host-context(.mat-dark-theme) form textarea{background:#ccc;color:#333}:host-context(.mat-dark-theme) header:after{border-color:#222}:host-context(.mat-dark-theme) header label{color:#aaa}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.TimestampComponent, selector: "banta-timestamp", inputs: ["value"] }, { kind: "component", type: i6.CommentComponent, selector: "banta-comment", inputs: ["message", "customMenuItems", "showReplyAction", "maxLength", "permissions", "mine", "editing", "genericAvatarUrl", "readonly"], outputs: ["liked", "unliked", "selected", "edited", "deleted", "editStarted", "editEnded", "shared", "userSelected", "usernameSelected", "avatarSelected", "reported", "loaded"] }, { kind: "component", type: i7.CommentViewComponent, selector: "banta-comment-view", inputs: ["source", "maxMessages", "maxVisibleMessages", "newestLast", "holdNewMessages", "showEmptyState", "allowReplies", "enableHoldOnClick", "enableHoldOnScroll", "customMenuItems", "fixedHeight", "selectedMessage", "genericAvatarUrl"], outputs: ["userSelected", "reported", "liked", "unliked", "usernameSelected", "avatarSelected", "shared", "deleted", "selected", "messageEdited", "sortOrderChanged", "filterModeChanged"] }, { kind: "component", type: i8.BantaCommentsComponent, selector: "banta-comments", inputs: ["customMenuItems", "url", "maxCommentLength", "loadingMessages", "useInlineReplies", "signInLabel", "sendLabel", "signingInLabel", "replyLabel", "sendingLabel", "permissionDeniedLabel", "postCommentLabel", "postReplyLabel", "allowAttachments", "fixedHeight", "maxMessages", "maxVisibleMessages", "genericAvatarUrl", "shouldInterceptMessageSend", "participants", "source", "hashtags", "topicID", "sortOrder", "filterMode"], outputs: ["signInSelected", "editAvatarSelected", "permissionDeniedError", "upvoted", "reported", "selected", "userSelected", "usernameSelected", "avatarSelected", "shared"] }, { kind: "component", type: i9.BantaChatComponent, selector: "banta-chat", inputs: ["shouldInterceptMessageSend", "url", "source", "topicID", "signInLabel", "sendLabel", "permissionDeniedLabel", "messageFieldPlaceholder", "emptyLabel"], outputs: ["selected", "reported", "upvoted", "userSelected", "permissionDeniedError", "signInSelected", "received"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.LiveMessageComponent, selector: "banta-live-message", inputs: ["message"], outputs: ["upvoted", "reported", "selected"] }] });
|
|
186
186
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaComponent, decorators: [{
|
|
187
187
|
type: Component,
|
|
188
|
-
args: [{ selector: `banta`, template: "\r\n<mat-menu #userMenu=\"matMenu\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <button [disabled]=\"true\" mat-menu-item>{{currentUser.displayName}} (@{{currentUser.username}})</button>\r\n <button mat-menu-item (click)=\"signOut()\">Sign Out</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!currentUser\">\r\n <button mat-menu-item>Sign In</button>\r\n </ng-container>\r\n <button mat-menu-item>Help</button>\r\n</mat-menu>\r\n\r\n<div class=\"tabs\">\r\n <div>\r\n <a mat-button (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</a>\r\n <a mat-button (click)=\"mobileFocus = 'comments'\">{{commentsLabel}}</a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div>\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"firehose\" [class.focus]=\"mobileFocus === 'chat'\">\r\n <header>\r\n <div>\r\n <label (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</label>\r\n <div class=\"spacer\"></div>\r\n\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n </header>\r\n <banta-chat \r\n #firehose\r\n [source]=\"firehoseSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n (reported)=\"reportMessage($event)\"\r\n ></banta-chat>\r\n</div>\r\n\r\n<div class=\"aux\" [class.focus]=\"mobileFocus === 'aux'\" [class.open]=\"auxOpen\">\r\n <header>\r\n <div>\r\n <label>{{auxTitle}}</label>\r\n <div class=\"spacer\"></div>\r\n <button mat-icon-button (click)=\"auxOpen = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n <div class=\"aux-contents\">\r\n <ng-container *ngIf=\"auxMode === 'profile'\">\r\n <ng-container *ngIf=\"profileUser\">\r\n\r\n <div>\r\n <strong style=\"font-size: 125%;\">\r\n {{profileUser.displayName}}\r\n </strong>\r\n @{{profileUser.username}}\r\n </div>\r\n\r\n <br/>\r\n <strong>Top Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n\r\n <br/>\r\n <strong>Recent Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'report'\">\r\n <p>Are you sure you want to report this message?</p>\r\n\r\n <banta-live-message [message]=\"reportedMessage\"></banta-live-message>\r\n\r\n <div style=\"text-align: center;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"sendReport(reportedMessage)\">Yes, Report</button>\r\n \r\n <button mat-raised-button color=\"secondary\" (click)=\"auxOpen = false\">No, Cancel</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'notifications'\">\r\n\r\n <div *ngIf=\"!notifications || notifications.length === 0\">\r\n <em>You do not have any notifications yet</em>\r\n </div>\r\n \r\n <div class=\"notifications\">\r\n <div class=\"notification\" *ngFor=\"let notif of notifications\">\r\n <div>\r\n <ng-container *ngIf=\"notif.type === 'upvote'\">\r\n @{{notif.message?.user?.username}} upvoted your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'notice'\">\r\n <div>\r\n {{notif.message}}\r\n </div>\r\n <a mat-button target=\"_blank\" href=\"{{notif.actionUrl}}\">\r\n {{notif.actionLabel}}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'mention'\">\r\n You were mentioned by @{{notif.message?.user?.username}}\r\n\r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'reply'\">\r\n @{{notif.replyMessage?.user?.username}} replied to your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.replyMessage\"\r\n (upvoted)=\"upvoteMessage(notif.replyMessage)\"\r\n (reported)=\"reportMessage(notif.replyMessage)\"\r\n (selected)=\"goToMessage(notif.replyMessage)\">\r\n </banta-live-message>\r\n </ng-container>\r\n </div>\r\n\r\n <banta-timestamp [value]=\"notif.sentAt\"></banta-timestamp>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<div class=\"points\" [class.focus]=\"mobileFocus === 'points'\">\r\n <header>\r\n <div>\r\n <label>{{commentsLabel}}</label>\r\n </div>\r\n </header>\r\n <div class=\"point-focus\">\r\n <div class=\"actions\">\r\n <button mat-button (click)=\"pointUnfocus()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Back\r\n </button>\r\n\r\n <div class=\"spacer\"></div>\r\n \r\n <ng-container *ngIf=\"pointOpen\">\r\n <div class=\"counted-action\">\r\n <div class=\"count-indicator\"> \r\n {{pointOpen.likes}}\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!pointSubChat\">\r\n Error: No subchat\r\n </div>\r\n \r\n <banta-comment-view\r\n class=\"subcomments\"\r\n *ngIf=\"pointSubChat\"\r\n [newestLast]=\"true\"\r\n [allowReplies]=\"false\"\r\n [source]=\"pointSubChat\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n >\r\n \r\n <banta-comment\r\n class=\"focused-comment\"\r\n data-before\r\n *ngIf=\"pointOpen\"\r\n (upvoted)=\"upvoteMessage(pointOpen)\"\r\n (userSelected)=\"showProfile(pointOpen.user)\"\r\n (reported)=\"reportMessage(pointOpen)\"\r\n [showReplyAction]=\"false\"\r\n [message]=\"pointOpen\"\r\n ></banta-comment>\r\n \r\n <div class=\"message reply\">\r\n Reply:\r\n <form class=\"new-message\" (submit)=\"sendPointSubMessage()\">\r\n <textarea \r\n name=\"message\" \r\n (keydown)=\"newPointSubMessageKeyDown($event)\"\r\n [(ngModel)]=\"newPointSubMessage.message\"></textarea>\r\n \r\n <div class=\"actions\">\r\n <button [disabled]=\"!newPointSubMessage.message\" \r\n mat-raised-button color=\"primary\">Send</button>\r\n </div>\r\n </form>\r\n </div>\r\n </banta-comment-view>\r\n </div>\r\n <div class=\"points-section\">\r\n <banta-comments\r\n [source]=\"pointSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (selected)=\"goToMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n ></banta-comments>\r\n </div>\r\n</div>", styles: [":host{display:flex;flex-direction:row;padding:.5em;height:40em;position:relative}.counted-action{display:flex;align-items:center}.count-indicator{font-size:9pt;padding:0 3px;border-radius:3px;border:1px solid #333}header{position:relative;margin-bottom:1em}header div{display:flex;align-items:center;height:30px}header button{color:#666}header label{text-transform:uppercase;z-index:1;font-size:12pt;letter-spacing:2px;font-weight:100;color:#333;margin:0 auto 0 0;display:block;width:-moz-fit-content;width:fit-content;position:relative;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}header:after{content:\"\";border:1px solid;border-color:#ccc;height:0px;width:100%;display:block;position:relative;z-index:0}.points{width:33%;max-width:50em;display:flex;flex-direction:column}:host.point-focus .points{width:66%;max-width:50em}:host.point-focus .points .points-section{opacity:0;pointer-events:none}:host.point-focus .points .point-focus{opacity:1;pointer-events:initial}:host.point-focus .points .point-focus .actions{display:flex}banta-comments{flex-grow:1}.points{width:33%;margin-left:.5em;font-size:12pt;flex-shrink:0;max-width:30em;transition:.2s width ease-in,.2s max-width ease-in;position:relative}.points .points-section{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:.2s opacity ease-in;z-index:2}.points .point-focus{position:absolute;width:100%;inset:1.75em 0 0;padding:.5em;opacity:0;transition:.2s opacity ease-in;flex-grow:1;display:flex;flex-direction:column}.firehose{flex-grow:1;font-size:10pt;display:flex;flex-direction:column}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:black;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}.subcomments ::ng-deep banta-comment{font-size:10pt}.subcomments ::ng-deep banta-comment.focused-comment{background:#001321;color:#fff;font-size:12pt}.aux{width:0px;min-width:0px;overflow-x:hidden;transition:.4s width ease-out,.4s min-width ease-out;display:flex;flex-direction:column}.aux.open{width:30em;min-width:18em}.aux .aux-contents{width:30em;min-width:10em;max-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1}.notifications .notification{border-bottom:1px solid #333;padding:1em}.notifications .notification banta-timestamp{display:block;text-align:right;font-size:9pt;color:#999}.message.reply{padding:1em}.tabs{display:none}@media (max-width: 1015px){:host{flex-direction:column}.tabs{display:flex;position:absolute;top:0;left:0;right:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:rgba(0,0,0,.5)}.points{width:100%;max-width:100%;margin-left:0}header{display:none}:host.point-focus .points{width:100%;max-width:100%}.aux{width:100%;min-width:0;min-width:initial;max-width:100%}.points,.firehose,.aux{position:absolute;inset:2em 0 0;z-index:0;background:black}.points.focus,.firehose.focus,.aux.focus{z-index:2}}:host-context(.mat-dark-theme) :host{background:#090909;color:#fff}:host-context(.mat-dark-theme) form textarea{background:#ccc;color:#333}:host-context(.mat-dark-theme) header:after{border-color:#222}:host-context(.mat-dark-theme) header label{color:#aaa}\n"] }]
|
|
188
|
+
args: [{ selector: `banta`, template: "\r\n<mat-menu #userMenu=\"matMenu\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <button [disabled]=\"true\" mat-menu-item>{{currentUser.displayName}} (@{{currentUser.username}})</button>\r\n <button mat-menu-item (click)=\"signOut()\">Sign Out</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!currentUser\">\r\n <button mat-menu-item>Sign In</button>\r\n </ng-container>\r\n <button mat-menu-item>Help</button>\r\n</mat-menu>\r\n\r\n<div class=\"tabs\">\r\n <div>\r\n <a mat-button (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</a>\r\n <a mat-button (click)=\"mobileFocus = 'comments'\">{{commentsLabel}}</a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div>\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"firehose\" [class.focus]=\"mobileFocus === 'chat'\">\r\n <header>\r\n <div>\r\n <label (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</label>\r\n <div class=\"spacer\"></div>\r\n\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n </header>\r\n <banta-chat \r\n #firehose\r\n [source]=\"firehoseSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n (reported)=\"reportMessage($event)\"\r\n ></banta-chat>\r\n</div>\r\n\r\n<div class=\"aux\" [class.focus]=\"mobileFocus === 'aux'\" [class.open]=\"auxOpen\">\r\n <header>\r\n <div>\r\n <label>{{auxTitle}}</label>\r\n <div class=\"spacer\"></div>\r\n <button mat-icon-button (click)=\"auxOpen = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n <div class=\"aux-contents\">\r\n <ng-container *ngIf=\"auxMode === 'profile'\">\r\n <ng-container *ngIf=\"profileUser\">\r\n\r\n <div>\r\n <strong style=\"font-size: 125%;\">\r\n {{profileUser.displayName}}\r\n </strong>\r\n @{{profileUser.username}}\r\n </div>\r\n\r\n <br/>\r\n <strong>Top Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n\r\n <br/>\r\n <strong>Recent Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'report'\">\r\n <p>Are you sure you want to report this message?</p>\r\n\r\n <banta-live-message [message]=\"reportedMessage\"></banta-live-message>\r\n\r\n <div style=\"text-align: center;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"sendReport(reportedMessage)\">Yes, Report</button>\r\n \r\n <button mat-raised-button color=\"secondary\" (click)=\"auxOpen = false\">No, Cancel</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'notifications'\">\r\n\r\n <div *ngIf=\"!notifications || notifications.length === 0\">\r\n <em>You do not have any notifications yet</em>\r\n </div>\r\n \r\n <div class=\"notifications\">\r\n <div class=\"notification\" *ngFor=\"let notif of notifications\">\r\n <div>\r\n <ng-container *ngIf=\"notif.type === 'upvote'\">\r\n @{{notif.message?.user?.username}} upvoted your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'notice'\">\r\n <div>\r\n {{notif.message}}\r\n </div>\r\n <a mat-button target=\"_blank\" href=\"{{notif.actionUrl}}\">\r\n {{notif.actionLabel}}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'mention'\">\r\n You were mentioned by @{{notif.message?.user?.username}}\r\n\r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'reply'\">\r\n @{{notif.replyMessage?.user?.username}} replied to your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.replyMessage\"\r\n (upvoted)=\"upvoteMessage(notif.replyMessage)\"\r\n (reported)=\"reportMessage(notif.replyMessage)\"\r\n (selected)=\"goToMessage(notif.replyMessage)\">\r\n </banta-live-message>\r\n </ng-container>\r\n </div>\r\n\r\n <banta-timestamp [value]=\"notif.sentAt\"></banta-timestamp>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<div class=\"points\" [class.focus]=\"mobileFocus === 'points'\">\r\n <header>\r\n <div>\r\n <label>{{commentsLabel}}</label>\r\n </div>\r\n </header>\r\n <div class=\"point-focus\">\r\n <div class=\"actions\">\r\n <button mat-button (click)=\"pointUnfocus()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Back\r\n </button>\r\n\r\n <div class=\"spacer\"></div>\r\n \r\n <ng-container *ngIf=\"pointOpen\">\r\n <div class=\"counted-action\">\r\n <div class=\"count-indicator\"> \r\n {{pointOpen.likes}}\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!pointSubChat\">\r\n Error: No subchat\r\n </div>\r\n \r\n <banta-comment-view\r\n class=\"subcomments\"\r\n *ngIf=\"pointSubChat\"\r\n [newestLast]=\"true\"\r\n [allowReplies]=\"false\"\r\n [source]=\"pointSubChat\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n >\r\n \r\n <banta-comment\r\n class=\"focused-comment\"\r\n data-before\r\n *ngIf=\"pointOpen\"\r\n [showReplyAction]=\"false\"\r\n [message]=\"pointOpen\"\r\n [readonly]=\"pointSubChat?.readonly\"\r\n (upvoted)=\"upvoteMessage(pointOpen)\"\r\n (userSelected)=\"showProfile(pointOpen.user)\"\r\n (reported)=\"reportMessage(pointOpen)\"\r\n ></banta-comment>\r\n \r\n <div class=\"message reply\">\r\n Reply:\r\n <form class=\"new-message\" (submit)=\"sendPointSubMessage()\">\r\n <textarea \r\n name=\"message\" \r\n (keydown)=\"newPointSubMessageKeyDown($event)\"\r\n [(ngModel)]=\"newPointSubMessage.message\"></textarea>\r\n \r\n <div class=\"actions\">\r\n <button [disabled]=\"!newPointSubMessage.message\" \r\n mat-raised-button color=\"primary\">Send</button>\r\n </div>\r\n </form>\r\n </div>\r\n </banta-comment-view>\r\n </div>\r\n <div class=\"points-section\">\r\n <banta-comments\r\n [source]=\"pointSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (selected)=\"goToMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n ></banta-comments>\r\n </div>\r\n</div>", styles: [":host{display:flex;flex-direction:row;padding:.5em;height:40em;position:relative}.counted-action{display:flex;align-items:center}.count-indicator{font-size:9pt;padding:0 3px;border-radius:3px;border:1px solid #333}header{position:relative;margin-bottom:1em}header div{display:flex;align-items:center;height:30px}header button{color:#666}header label{text-transform:uppercase;z-index:1;font-size:12pt;letter-spacing:2px;font-weight:100;color:#333;margin:0 auto 0 0;display:block;width:-moz-fit-content;width:fit-content;position:relative;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}header:after{content:\"\";border:1px solid;border-color:#ccc;height:0px;width:100%;display:block;position:relative;z-index:0}.points{width:33%;max-width:50em;display:flex;flex-direction:column}:host.point-focus .points{width:66%;max-width:50em}:host.point-focus .points .points-section{opacity:0;pointer-events:none}:host.point-focus .points .point-focus{opacity:1;pointer-events:initial}:host.point-focus .points .point-focus .actions{display:flex}banta-comments{flex-grow:1}.points{width:33%;margin-left:.5em;font-size:12pt;flex-shrink:0;max-width:30em;transition:.2s width ease-in,.2s max-width ease-in;position:relative}.points .points-section{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:.2s opacity ease-in;z-index:2}.points .point-focus{position:absolute;width:100%;inset:1.75em 0 0;padding:.5em;opacity:0;transition:.2s opacity ease-in;flex-grow:1;display:flex;flex-direction:column}.firehose{flex-grow:1;font-size:10pt;display:flex;flex-direction:column}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:black;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}.subcomments ::ng-deep banta-comment{font-size:10pt}.subcomments ::ng-deep banta-comment.focused-comment{background:#001321;color:#fff;font-size:12pt}.aux{width:0px;min-width:0px;overflow-x:hidden;transition:.4s width ease-out,.4s min-width ease-out;display:flex;flex-direction:column}.aux.open{width:30em;min-width:18em}.aux .aux-contents{width:30em;min-width:10em;max-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1}.notifications .notification{border-bottom:1px solid #333;padding:1em}.notifications .notification banta-timestamp{display:block;text-align:right;font-size:9pt;color:#999}.message.reply{padding:1em}.tabs{display:none}@media (max-width: 1015px){:host{flex-direction:column}.tabs{display:flex;position:absolute;top:0;left:0;right:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:rgba(0,0,0,.5)}.points{width:100%;max-width:100%;margin-left:0}header{display:none}:host.point-focus .points{width:100%;max-width:100%}.aux{width:100%;min-width:0;min-width:initial;max-width:100%}.points,.firehose,.aux{position:absolute;inset:2em 0 0;z-index:0;background:black}.points.focus,.firehose.focus,.aux.focus{z-index:2}}:host-context(.mat-dark-theme) :host{background:#090909;color:#fff}:host-context(.mat-dark-theme) form textarea{background:#ccc;color:#333}:host-context(.mat-dark-theme) header:after{border-color:#222}:host-context(.mat-dark-theme) header label{color:#aaa}\n"] }]
|
|
189
189
|
}], ctorParameters: function () { return [{ type: i1.ChatBackendBase }, { type: i2.MatDialog }]; }, propDecorators: { firehose: [{
|
|
190
190
|
type: ViewChild,
|
|
191
191
|
args: ['firehose', { static: true }]
|
|
@@ -201,4 +201,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
201
201
|
type: HostBinding,
|
|
202
202
|
args: ['class.point-focus']
|
|
203
203
|
}] } });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYmFudGEvYmFudGEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYmFudGEvYmFudGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFJdkM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sY0FBYztJQUN2QixZQUNZLE9BQXlCLEVBQ3pCLFNBQXFCO1FBRHJCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFRekIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixhQUFRLEdBQUcsZUFBZSxDQUFDO1FBQzNCLFlBQU8sR0FBRyxlQUFlLENBQUM7UUFVMUIsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUF5RTVCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQStCaEIsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNuQixrQkFBYSxHQUFHLFVBQVUsQ0FBQztRQWM1QixvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUE4QjlDLGNBQVMsR0FBaUIsSUFBSSxDQUFDO1FBQy9CLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQTBDckMsdUJBQWtCLEdBQW9CLEVBQUUsQ0FBQztRQUV6QyxxQkFBZ0IsR0FBRyxpTUFBaU0sQ0FBQztJQXROck4sQ0FBQztJ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c0RqQixRQUFRO3NCQURQLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkE0RW5DLE9BQU87c0JBRFYsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBaUJGLGNBQWM7c0JBRGpCLE1BQU07Z0JBd0JILFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIEhvc3RCaW5kaW5nIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmV3TWVzc2FnZUZvcm0sIENoYXRNZXNzYWdlLCBVc2VyLCBOb3RpZmljYXRpb24gfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEJhbnRhQ2hhdENvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQnO1xyXG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi4vY2hhdC1iYWNrZW5kLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vY2hhdC1zb3VyY2UtYmFzZVwiO1xyXG5cclxuLyoqXHJcbiAqIFVuaWZpZWQgY2hhdCBhbmQgY29tbWVudHMgY29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBgYmFudGFgLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhbnRhLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWyAnLi9iYW50YS5jb21wb25lbnQuc2NzcycgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBiYWNrZW5kIDogQ2hhdEJhY2tlbmRCYXNlLFxyXG4gICAgICAgIHByaXZhdGUgbWF0RGlhbG9nIDogTWF0RGlhbG9nXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBmaXJlaG9zZVNvdXJjZSA6IENoYXRTb3VyY2VCYXNlO1xyXG4gICAgcG9pbnRTb3VyY2UgOiBDaGF0U291cmNlQmFzZTtcclxuXHJcbiAgICBwcml2YXRlIF90b3BpY0lEIDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgICBhdXhPcGVuID0gZmFsc2U7XHJcbiAgICBhdXhUaXRsZSA9ICdOb3RpZmljYXRpb25zJztcclxuICAgIGF1eE1vZGUgPSAnbm90aWZpY2F0aW9ucyc7XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLnVzZXJDaGFuZ2VkLnN1YnNjcmliZSh1c2VyID0+IHRoaXMuY3VycmVudFVzZXIgPSB1c2VyKSk7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLm5vdGlmaWNhdGlvbnNDaGFuZ2VkLnN1YnNjcmliZShub3RpZnMgPT4gdGhpcy5ub3RpZmljYXRpb25zID0gbm90aWZzKSk7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLm5ld05vdGlmaWNhdGlvbi5zdWJzY3JpYmUobm90aWYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdOb3RpZmljYXRpb25zID0gdHJ1ZTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIG1vYmlsZUZvY3VzIDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBhc3luYyBzZW5kUG9pbnRTdWJNZXNzYWdlKCkge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKHRoaXMubmV3UG9pbnRTdWJNZXNzYWdlLm1lc3NhZ2UgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICB0aGlzLm5ld1BvaW50U3ViTWVzc2FnZS5tZXNzYWdlID0gJyc7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0ID09PSAnJylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBtZXNzYWdlIDogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHNlbnRBdDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgbGlrZXM6IDAsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRleHRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBvaW50U3ViQ2hhdC5zZW5kKG1lc3NhZ2UpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNlbmQgcG9pbnQgc3ViLW1lc3NhZ2U6YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2ZpcmVob3NlJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIGZpcmVob3NlIDogQmFudGFDaGF0Q29tcG9uZW50O1xyXG5cclxuICAgIGFzeW5jIGdvVG9NZXNzYWdlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0TWVzc2FnZSA9IG1lc3NhZ2U7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLnBhcmVudE1lc3NhZ2VJZCkge1xyXG4gICAgICAgICAgICAvLyBqdW1wIHRvIHRoZSBwYXJlbnQgbWVzc2FnZSB0aHJlYWQuLi5cclxuXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRNZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRNZXNzYWdlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldE1lc3NhZ2UobWVzc2FnZS50b3BpY0lkLCBtZXNzYWdlLnBhcmVudE1lc3NhZ2VJZCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFJlY2VpdmVkIGV4Y2VwdGlvbiB3aGlsZSBmZXRjaGluZyBwYXJlbnQgbWVzc2FnZTpgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyZW50TWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvb2sgdXAgcGFyZW50IG1lc3NhZ2UgJHttZXNzYWdlLnRvcGljSWR9LyR7bWVzc2FnZS5wYXJlbnRNZXNzYWdlSWR9YCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBPcmlnaW5hbCBtZXNzYWdlIHdhczpgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKHRhcmdldE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlID0gcGFyZW50TWVzc2FnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aWV3VHlwZSA9IHRoaXMuZ2V0Vmlld1R5cGUobWVzc2FnZSk7XHJcblxyXG4gICAgICAgIGlmICh2aWV3VHlwZSA9PT0gJ2NvbW1lbnQnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvaW50U3ViQ2hhdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRTdWJDaGF0LmNsb3NlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRTdWJDaGF0LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb2JpbGVGb2N1cyA9ICdwb2ludHMnO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50T3BlbiA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRTdWJDaGF0ID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRocmVhZChtZXNzYWdlLnRvcGljSWQsIG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50T3BlbiA9IGF3YWl0IHRoaXMuYmFja2VuZC5yZWZyZXNoTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdQb2ludFN1Yk1lc3NhZ2UgPSB7fTtcclxuICAgICAgICB9IGVsc2UgaWYgKHZpZXdUeXBlID09PSAnY2hhdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2JpbGVGb2N1cyA9ICdmaXJlaG9zZSc7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZWhvc2UuanVtcFRvTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZpY2F0aW9ucyA6IE5vdGlmaWNhdGlvbltdO1xyXG4gICAgbmV3Tm90aWZpY2F0aW9ucyA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICBwb2ludFVuZm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5wb2ludE9wZW4gPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnBvaW50U3ViQ2hhdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludFN1YkNoYXQuY2xvc2UpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdC5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93QXV4KHRpdGxlIDogc3RyaW5nLCBtb2RlIDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5hdXhPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmF1eFRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgdGhpcy5hdXhNb2RlID0gbW9kZTtcclxuICAgICAgICB0aGlzLm1vYmlsZUZvY3VzID0gJ2F1eCc7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd05vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QXV4KCdOb3RpZmljYXRpb25zJywgJ25vdGlmaWNhdGlvbnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRvcGljSUQoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvcGljSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgY2hhdExhYmVsID0gJ0NoYXQnO1xyXG4gICAgQElucHV0KCkgY29tbWVudHNMYWJlbCA9ICdDb21tZW50cyc7XHJcblxyXG4gICAgc2V0IHRvcGljSUQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl90b3BpY0lEID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RUb1RvcGljKHRoaXMuX3RvcGljSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY29ubmVjdFRvVG9waWMoaWQgOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmZpcmVob3NlU291cmNlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRvcGljKGAke2lkfV9maXJlaG9zZWApO1xyXG4gICAgICAgIHRoaXMucG9pbnRTb3VyY2UgPSBhd2FpdCB0aGlzLmJhY2tlbmQuZ2V0U291cmNlRm9yVG9waWMoYCR7aWR9X3RoZXBvaW50YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2lnbkluU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IHNpZ25JblNlbGVjdGVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduSW5TZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2lnbkluKCkge1xyXG4gICAgICAgIHRoaXMuX3NpZ25JblNlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5maXJlaG9zZVNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maXJlaG9zZVNvdXJjZS5jbG9zZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZWhvc2VTb3VyY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5maXJlaG9zZVNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wb2ludFNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludFNvdXJjZS5jbG9zZSlcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRTb3VyY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludFNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MucG9pbnQtZm9jdXMnKVxyXG4gICAgZ2V0IGhhc1BvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50T3BlbiAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50T3BlbiA6IENoYXRNZXNzYWdlID0gbnVsbDtcclxuICAgIHBvaW50U3ViQ2hhdCA6IENoYXRTb3VyY2VCYXNlID0gbnVsbDtcclxuXHJcbiAgICBjbG9zZUF1eCgpIHtcclxuICAgICAgICB0aGlzLmF1eE9wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vYmlsZUZvY3VzID0gJ2ZpcmVob3NlJztcclxuICAgIH1cclxuXHJcbiAgICBnZXRWaWV3VHlwZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAobWVzc2FnZS50b3BpY0lkLmVuZHNXaXRoKCdfZmlyZWhvc2UnKSlcclxuICAgICAgICAgICAgcmV0dXJuICdjaGF0JztcclxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnRvcGljSWQuZW5kc1dpdGgoJ190aGVwb2ludCcpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwdm90ZU1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vYXdhaXQgdGhpcy5iYWNrZW5kLmxpa2VNZXNzYWdlKG1lc3NhZ2UuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dQcm9maWxlKHVzZXIgOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlVXNlciA9IHVzZXI7XHJcbiAgICAgICAgdGhpcy5zaG93QXV4KGBAJHt1c2VyLnVzZXJuYW1lfSdzIFByb2ZpbGVgLCAncHJvZmlsZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2ZpbGVVc2VyIDogVXNlcjtcclxuICAgIFxyXG4gICAgcmVwb3J0ZWRNZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcblxyXG4gICAgc2VuZFJlcG9ydChtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLmF1eE9wZW4gPSBmYWxzZTtcclxuICAgICAgICBhbGVydCgnd291bGQgc2VuZCByZXBvcnQnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBvcnRNZXNzYWdlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZWRNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLnNob3dBdXgoYFJlcG9ydCBtZXNzYWdlIGZyb20gQCR7bWVzc2FnZS51c2VyLnVzZXJuYW1lfWAsICdyZXBvcnQnKTtcclxuICAgIH1cclxuXHJcbiAgICBjdXJyZW50VXNlciA6IFVzZXI7XHJcblxyXG4gICAgbmV3UG9pbnRTdWJNZXNzYWdlIDogTmV3TWVzc2FnZUZvcm0gPSB7fTtcclxuXHJcbiAgICBnZW5lcmljQXZhdGFyVXJsID0gJ2h0dHBzOi8vZ3JhdmF0YXIuY29tL2F2YXRhci85MTVjODA0ZTBiZTYwN2E0YWQ3NjZkZGFkZWE1YzQ4YT9zPTUxMiZkPWh0dHBzOi8vY29kZXBlbi5pby9hc3NldHMvYXZhdGFycy91c2VyLWF2YXRhci01MTJ4NTEyLTZlMjQwY2YzNTBkMmYxY2MwN2MyYmVkMjM0YzNhM2JiNWYxYjIzNzAyM2MyMDRjNzgyNjIyZTgwZDZiMjEyYmEucG5nJztcclxufSIsIlxyXG48bWF0LW1lbnUgI3VzZXJNZW51PVwibWF0TWVudVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRVc2VyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwidHJ1ZVwiIG1hdC1tZW51LWl0ZW0+e3tjdXJyZW50VXNlci5kaXNwbGF5TmFtZX19IChAe3tjdXJyZW50VXNlci51c2VybmFtZX19KTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2lnbk91dCgpXCI+U2lnbiBPdXQ8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXJyZW50VXNlclwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5TaWduIEluPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5IZWxwPC9idXR0b24+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48ZGl2IGNsYXNzPVwidGFic1wiPlxyXG4gICAgPGRpdj5cclxuICAgICAgICA8YSBtYXQtYnV0dG9uIChjbGljayk9XCJtb2JpbGVGb2N1cyA9ICdjaGF0J1wiPnt7Y2hhdExhYmVsfX08L2E+XHJcbiAgICAgICAgPGEgbWF0LWJ1dHRvbiAoY2xpY2spPVwibW9iaWxlRm9jdXMgPSAnY29tbWVudHMnXCI+e3tjb21tZW50c0xhYmVsfX08L2E+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRVc2VyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlck1lbnVcIj5cclxuICAgICAgICAgICAgICAgIEB7e2N1cnJlbnRVc2VyLnVzZXJuYW1lfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9ucygpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bm90aWZpY2F0aW9uX2ltcG9ydGFudDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cIiFjdXJyZW50VXNlclwiIChjbGljayk9XCJzaG93U2lnbkluKClcIj5cclxuICAgICAgICAgICAgU2lnbiBJblxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImZpcmVob3NlXCIgW2NsYXNzLmZvY3VzXT1cIm1vYmlsZUZvY3VzID09PSAnY2hhdCdcIj5cclxuICAgIDxoZWFkZXI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGxhYmVsIChjbGljayk9XCJtb2JpbGVGb2N1cyA9ICdjaGF0J1wiPnt7Y2hhdExhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFVzZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlck1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICBAe3tjdXJyZW50VXNlci51c2VybmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9ucygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm5vdGlmaWNhdGlvbl9pbXBvcnRhbnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiIWN1cnJlbnRVc2VyXCIgKGNsaWNrKT1cInNob3dTaWduSW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgU2lnbiBJblxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvaGVhZGVyPlxyXG4gICAgPGJhbnRhLWNoYXQgXHJcbiAgICAgICAgI2ZpcmVob3NlXHJcbiAgICAgICAgW3NvdXJjZV09XCJmaXJlaG9zZVNvdXJjZVwiXHJcbiAgICAgICAgKHNpZ25JblNlbGVjdGVkKT1cInNob3dTaWduSW4oKVwiXHJcbiAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAodXNlclNlbGVjdGVkKT1cInNob3dQcm9maWxlKCRldmVudC51c2VyKVwiXHJcbiAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvYmFudGEtY2hhdD5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYXV4XCIgW2NsYXNzLmZvY3VzXT1cIm1vYmlsZUZvY3VzID09PSAnYXV4J1wiIFtjbGFzcy5vcGVuXT1cImF1eE9wZW5cIj5cclxuICAgIDxoZWFkZXI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGxhYmVsPnt7YXV4VGl0bGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImF1eE9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2hlYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJhdXgtY29udGVudHNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ3Byb2ZpbGUnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9maWxlVXNlclwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImZvbnQtc2l6ZTogMTI1JTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3twcm9maWxlVXNlci5kaXNwbGF5TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgQHt7cHJvZmlsZVVzZXIudXNlcm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJyLz5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+VG9wIE1lc3NhZ2VzPC9zdHJvbmc+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZW0+Tm90IHlldCBhdmFpbGFibGU8L2VtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJyLz5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+UmVjZW50IE1lc3NhZ2VzPC9zdHJvbmc+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZW0+Tm90IHlldCBhdmFpbGFibGU8L2VtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ3JlcG9ydCdcIj5cclxuICAgICAgICAgICAgPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlcG9ydCB0aGlzIG1lc3NhZ2U/PC9wPlxyXG5cclxuICAgICAgICAgICAgPGJhbnRhLWxpdmUtbWVzc2FnZSBbbWVzc2FnZV09XCJyZXBvcnRlZE1lc3NhZ2VcIj48L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZW5kUmVwb3J0KHJlcG9ydGVkTWVzc2FnZSlcIj5ZZXMsIFJlcG9ydDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImF1eE9wZW4gPSBmYWxzZVwiPk5vLCBDYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ25vdGlmaWNhdGlvbnMnXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW5vdGlmaWNhdGlvbnMgfHwgbm90aWZpY2F0aW9ucy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxlbT5Zb3UgZG8gbm90IGhhdmUgYW55IG5vdGlmaWNhdGlvbnMgeWV0PC9lbT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvblwiICpuZ0Zvcj1cImxldCBub3RpZiBvZiBub3RpZmljYXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICd1cHZvdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAe3tub3RpZi5tZXNzYWdlPy51c2VyPy51c2VybmFtZX19IHVwdm90ZWQgeW91ciBwb3N0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYW50YS1saXZlLW1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJub3RpZi5tZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG5vdGlmLm1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwb3J0ZWQpPVwicmVwb3J0TWVzc2FnZShub3RpZi5tZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImdvVG9NZXNzYWdlKG5vdGlmLm1lc3NhZ2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90aWYudHlwZSA9PT0gJ25vdGljZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tub3RpZi5tZXNzYWdlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgbWF0LWJ1dHRvbiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwie3tub3RpZi5hY3Rpb25Vcmx9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bm90aWYuYWN0aW9uTGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICdtZW50aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdlcmUgbWVudGlvbmVkIGJ5IEB7e25vdGlmLm1lc3NhZ2U/LnVzZXI/LnVzZXJuYW1lfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtbGl2ZS1tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibm90aWYubWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZShub3RpZi5tZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2Uobm90aWYubWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJnb1RvTWVzc2FnZShub3RpZi5tZXNzYWdlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iYW50YS1saXZlLW1lc3NhZ2U+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICdyZXBseSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB7e25vdGlmLnJlcGx5TWVzc2FnZT8udXNlcj8udXNlcm5hbWV9fSByZXBsaWVkIHRvIHlvdXIgcG9zdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtbGl2ZS1tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibm90aWYucmVwbHlNZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG5vdGlmLnJlcGx5TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKG5vdGlmLnJlcGx5TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJnb1RvTWVzc2FnZShub3RpZi5yZXBseU1lc3NhZ2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxiYW50YS10aW1lc3RhbXAgW3ZhbHVlXT1cIm5vdGlmLnNlbnRBdFwiPjwvYmFudGEtdGltZXN0YW1wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicG9pbnRzXCIgW2NsYXNzLmZvY3VzXT1cIm1vYmlsZUZvY3VzID09PSAncG9pbnRzJ1wiPlxyXG4gICAgPGhlYWRlcj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWw+e3tjb21tZW50c0xhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9oZWFkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9pbnQtZm9jdXNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInBvaW50VW5mb2N1cygpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICBCYWNrXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvaW50T3BlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZWQtYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50LWluZGljYXRvclwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cG9pbnRPcGVuLmxpa2VzfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnRodW1iX3VwPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhcG9pbnRTdWJDaGF0XCI+XHJcbiAgICAgICAgICAgIEVycm9yOiBObyBzdWJjaGF0XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnQtdmlld1xyXG4gICAgICAgICAgICBjbGFzcz1cInN1YmNvbW1lbnRzXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJwb2ludFN1YkNoYXRcIlxyXG4gICAgICAgICAgICBbbmV3ZXN0TGFzdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2FsbG93UmVwbGllc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtzb3VyY2VdPVwicG9pbnRTdWJDaGF0XCJcclxuICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh1c2VyU2VsZWN0ZWQpPVwic2hvd1Byb2ZpbGUoJGV2ZW50LnVzZXIpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJhbnRhLWNvbW1lbnRcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9jdXNlZC1jb21tZW50XCJcclxuICAgICAgICAgICAgICAgIGRhdGEtYmVmb3JlXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvaW50T3BlblwiXHJcbiAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKHBvaW50T3BlbilcIlxyXG4gICAgICAgICAgICAgICAgKHVzZXJTZWxlY3RlZCk9XCJzaG93UHJvZmlsZShwb2ludE9wZW4udXNlcilcIlxyXG4gICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UocG9pbnRPcGVuKVwiXHJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcGx5QWN0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cInBvaW50T3BlblwiXHJcbiAgICAgICAgICAgICAgICA+PC9iYW50YS1jb21tZW50PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZSByZXBseVwiPlxyXG4gICAgICAgICAgICAgICAgUmVwbHk6XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm5ldy1tZXNzYWdlXCIgKHN1Ym1pdCk9XCJzZW5kUG9pbnRTdWJNZXNzYWdlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtZXNzYWdlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm5ld1BvaW50U3ViTWVzc2FnZUtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3UG9pbnRTdWJNZXNzYWdlLm1lc3NhZ2VcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIW5ld1BvaW50U3ViTWVzc2FnZS5tZXNzYWdlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5TZW5kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYmFudGEtY29tbWVudC12aWV3PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9pbnRzLXNlY3Rpb25cIj5cclxuICAgICAgICA8YmFudGEtY29tbWVudHNcclxuICAgICAgICAgICAgW3NvdXJjZV09XCJwb2ludFNvdXJjZVwiXHJcbiAgICAgICAgICAgIChzaWduSW5TZWxlY3RlZCk9XCJzaG93U2lnbkluKClcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAocmVwb3J0ZWQpPVwicmVwb3J0TWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cImdvVG9NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAodXNlclNlbGVjdGVkKT1cInNob3dQcm9maWxlKCRldmVudC51c2VyKVwiXHJcbiAgICAgICAgICAgID48L2JhbnRhLWNvbW1lbnRzPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYmFudGEvYmFudGEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYmFudGEvYmFudGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFJdkM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sY0FBYztJQUN2QixZQUNZLE9BQXlCLEVBQ3pCLFNBQXFCO1FBRHJCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFRekIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixhQUFRLEdBQUcsZUFBZSxDQUFDO1FBQzNCLFlBQU8sR0FBRyxlQUFlLENBQUM7UUFVMUIsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUF5RTVCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQStCaEIsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNuQixrQkFBYSxHQUFHLFVBQVUsQ0FBQztRQWM1QixvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUE4QjlDLGNBQVMsR0FBaUIsSUFBSSxDQUFDO1FBQy9CLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQTBDckMsdUJBQWtCLEdBQW9CLEVBQUUsQ0FBQztRQUV6QyxxQkFBZ0IsR0FBRyxpTUFBaU0sQ0FBQztJQXROck4sQ0FBQztJ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c0RqQixRQUFRO3NCQURQLFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkE0RW5DLE9BQU87c0JBRFYsS0FBSztnQkFLRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBaUJGLGNBQWM7c0JBRGpCLE1BQU07Z0JBd0JILFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIEhvc3RCaW5kaW5nIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmV3TWVzc2FnZUZvcm0sIENoYXRNZXNzYWdlLCBVc2VyLCBOb3RpZmljYXRpb24gfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEJhbnRhQ2hhdENvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQnO1xyXG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi4vY2hhdC1iYWNrZW5kLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vY2hhdC1zb3VyY2UtYmFzZVwiO1xyXG5cclxuLyoqXHJcbiAqIFVuaWZpZWQgY2hhdCBhbmQgY29tbWVudHMgY29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBgYmFudGFgLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhbnRhLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWyAnLi9iYW50YS5jb21wb25lbnQuc2NzcycgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBiYWNrZW5kIDogQ2hhdEJhY2tlbmRCYXNlLFxyXG4gICAgICAgIHByaXZhdGUgbWF0RGlhbG9nIDogTWF0RGlhbG9nXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBmaXJlaG9zZVNvdXJjZSA6IENoYXRTb3VyY2VCYXNlO1xyXG4gICAgcG9pbnRTb3VyY2UgOiBDaGF0U291cmNlQmFzZTtcclxuXHJcbiAgICBwcml2YXRlIF90b3BpY0lEIDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgICBhdXhPcGVuID0gZmFsc2U7XHJcbiAgICBhdXhUaXRsZSA9ICdOb3RpZmljYXRpb25zJztcclxuICAgIGF1eE1vZGUgPSAnbm90aWZpY2F0aW9ucyc7XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLnVzZXJDaGFuZ2VkLnN1YnNjcmliZSh1c2VyID0+IHRoaXMuY3VycmVudFVzZXIgPSB1c2VyKSk7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLm5vdGlmaWNhdGlvbnNDaGFuZ2VkLnN1YnNjcmliZShub3RpZnMgPT4gdGhpcy5ub3RpZmljYXRpb25zID0gbm90aWZzKSk7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLm5ld05vdGlmaWNhdGlvbi5zdWJzY3JpYmUobm90aWYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdOb3RpZmljYXRpb25zID0gdHJ1ZTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIG1vYmlsZUZvY3VzIDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBhc3luYyBzZW5kUG9pbnRTdWJNZXNzYWdlKCkge1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKHRoaXMubmV3UG9pbnRTdWJNZXNzYWdlLm1lc3NhZ2UgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICB0aGlzLm5ld1BvaW50U3ViTWVzc2FnZS5tZXNzYWdlID0gJyc7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0ID09PSAnJylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBtZXNzYWdlIDogQ2hhdE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgICAgIHVzZXI6IG51bGwsXHJcbiAgICAgICAgICAgIHNlbnRBdDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgbGlrZXM6IDAsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRleHRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBvaW50U3ViQ2hhdC5zZW5kKG1lc3NhZ2UpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNlbmQgcG9pbnQgc3ViLW1lc3NhZ2U6YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2ZpcmVob3NlJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICAgIGZpcmVob3NlIDogQmFudGFDaGF0Q29tcG9uZW50O1xyXG5cclxuICAgIGFzeW5jIGdvVG9NZXNzYWdlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0TWVzc2FnZSA9IG1lc3NhZ2U7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLnBhcmVudE1lc3NhZ2VJZCkge1xyXG4gICAgICAgICAgICAvLyBqdW1wIHRvIHRoZSBwYXJlbnQgbWVzc2FnZSB0aHJlYWQuLi5cclxuXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRNZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRNZXNzYWdlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldE1lc3NhZ2UobWVzc2FnZS50b3BpY0lkLCBtZXNzYWdlLnBhcmVudE1lc3NhZ2VJZCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFJlY2VpdmVkIGV4Y2VwdGlvbiB3aGlsZSBmZXRjaGluZyBwYXJlbnQgbWVzc2FnZTpgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyZW50TWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvb2sgdXAgcGFyZW50IG1lc3NhZ2UgJHttZXNzYWdlLnRvcGljSWR9LyR7bWVzc2FnZS5wYXJlbnRNZXNzYWdlSWR9YCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBPcmlnaW5hbCBtZXNzYWdlIHdhczpgKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGlyKHRhcmdldE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlID0gcGFyZW50TWVzc2FnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aWV3VHlwZSA9IHRoaXMuZ2V0Vmlld1R5cGUobWVzc2FnZSk7XHJcblxyXG4gICAgICAgIGlmICh2aWV3VHlwZSA9PT0gJ2NvbW1lbnQnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvaW50U3ViQ2hhdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRTdWJDaGF0LmNsb3NlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRTdWJDaGF0LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb2JpbGVGb2N1cyA9ICdwb2ludHMnO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50T3BlbiA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRTdWJDaGF0ID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRocmVhZChtZXNzYWdlLnRvcGljSWQsIG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50T3BlbiA9IGF3YWl0IHRoaXMuYmFja2VuZC5yZWZyZXNoTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5uZXdQb2ludFN1Yk1lc3NhZ2UgPSB7fTtcclxuICAgICAgICB9IGVsc2UgaWYgKHZpZXdUeXBlID09PSAnY2hhdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2JpbGVGb2N1cyA9ICdmaXJlaG9zZSc7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZWhvc2UuanVtcFRvTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZpY2F0aW9ucyA6IE5vdGlmaWNhdGlvbltdO1xyXG4gICAgbmV3Tm90aWZpY2F0aW9ucyA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICBwb2ludFVuZm9jdXMoKSB7XHJcbiAgICAgICAgdGhpcy5wb2ludE9wZW4gPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnBvaW50U3ViQ2hhdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludFN1YkNoYXQuY2xvc2UpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdC5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50U3ViQ2hhdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93QXV4KHRpdGxlIDogc3RyaW5nLCBtb2RlIDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5hdXhPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmF1eFRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgdGhpcy5hdXhNb2RlID0gbW9kZTtcclxuICAgICAgICB0aGlzLm1vYmlsZUZvY3VzID0gJ2F1eCc7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd05vdGlmaWNhdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QXV4KCdOb3RpZmljYXRpb25zJywgJ25vdGlmaWNhdGlvbnMnKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRvcGljSUQoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvcGljSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgY2hhdExhYmVsID0gJ0NoYXQnO1xyXG4gICAgQElucHV0KCkgY29tbWVudHNMYWJlbCA9ICdDb21tZW50cyc7XHJcblxyXG4gICAgc2V0IHRvcGljSUQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl90b3BpY0lEID0gdmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RUb1RvcGljKHRoaXMuX3RvcGljSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY29ubmVjdFRvVG9waWMoaWQgOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmZpcmVob3NlU291cmNlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRvcGljKGAke2lkfV9maXJlaG9zZWApO1xyXG4gICAgICAgIHRoaXMucG9pbnRTb3VyY2UgPSBhd2FpdCB0aGlzLmJhY2tlbmQuZ2V0U291cmNlRm9yVG9waWMoYCR7aWR9X3RoZXBvaW50YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2lnbkluU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IHNpZ25JblNlbGVjdGVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduSW5TZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2lnbkluKCkge1xyXG4gICAgICAgIHRoaXMuX3NpZ25JblNlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5maXJlaG9zZVNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maXJlaG9zZVNvdXJjZS5jbG9zZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZWhvc2VTb3VyY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5maXJlaG9zZVNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wb2ludFNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludFNvdXJjZS5jbG9zZSlcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRTb3VyY2UuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludFNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MucG9pbnQtZm9jdXMnKVxyXG4gICAgZ2V0IGhhc1BvaW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50T3BlbiAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50T3BlbiA6IENoYXRNZXNzYWdlID0gbnVsbDtcclxuICAgIHBvaW50U3ViQ2hhdCA6IENoYXRTb3VyY2VCYXNlID0gbnVsbDtcclxuXHJcbiAgICBjbG9zZUF1eCgpIHtcclxuICAgICAgICB0aGlzLmF1eE9wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vYmlsZUZvY3VzID0gJ2ZpcmVob3NlJztcclxuICAgIH1cclxuXHJcbiAgICBnZXRWaWV3VHlwZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAobWVzc2FnZS50b3BpY0lkLmVuZHNXaXRoKCdfZmlyZWhvc2UnKSlcclxuICAgICAgICAgICAgcmV0dXJuICdjaGF0JztcclxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnRvcGljSWQuZW5kc1dpdGgoJ190aGVwb2ludCcpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xyXG5cclxuICAgICAgICByZXR1cm4gJ2NvbW1lbnQnO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwdm90ZU1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vYXdhaXQgdGhpcy5iYWNrZW5kLmxpa2VNZXNzYWdlKG1lc3NhZ2UuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dQcm9maWxlKHVzZXIgOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlVXNlciA9IHVzZXI7XHJcbiAgICAgICAgdGhpcy5zaG93QXV4KGBAJHt1c2VyLnVzZXJuYW1lfSdzIFByb2ZpbGVgLCAncHJvZmlsZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2ZpbGVVc2VyIDogVXNlcjtcclxuICAgIFxyXG4gICAgcmVwb3J0ZWRNZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcblxyXG4gICAgc2VuZFJlcG9ydChtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLmF1eE9wZW4gPSBmYWxzZTtcclxuICAgICAgICBhbGVydCgnd291bGQgc2VuZCByZXBvcnQnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBvcnRNZXNzYWdlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZWRNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLnNob3dBdXgoYFJlcG9ydCBtZXNzYWdlIGZyb20gQCR7bWVzc2FnZS51c2VyLnVzZXJuYW1lfWAsICdyZXBvcnQnKTtcclxuICAgIH1cclxuXHJcbiAgICBjdXJyZW50VXNlciA6IFVzZXI7XHJcblxyXG4gICAgbmV3UG9pbnRTdWJNZXNzYWdlIDogTmV3TWVzc2FnZUZvcm0gPSB7fTtcclxuXHJcbiAgICBnZW5lcmljQXZhdGFyVXJsID0gJ2h0dHBzOi8vZ3JhdmF0YXIuY29tL2F2YXRhci85MTVjODA0ZTBiZTYwN2E0YWQ3NjZkZGFkZWE1YzQ4YT9zPTUxMiZkPWh0dHBzOi8vY29kZXBlbi5pby9hc3NldHMvYXZhdGFycy91c2VyLWF2YXRhci01MTJ4NTEyLTZlMjQwY2YzNTBkMmYxY2MwN2MyYmVkMjM0YzNhM2JiNWYxYjIzNzAyM2MyMDRjNzgyNjIyZTgwZDZiMjEyYmEucG5nJztcclxufSIsIlxyXG48bWF0LW1lbnUgI3VzZXJNZW51PVwibWF0TWVudVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRVc2VyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwidHJ1ZVwiIG1hdC1tZW51LWl0ZW0+e3tjdXJyZW50VXNlci5kaXNwbGF5TmFtZX19IChAe3tjdXJyZW50VXNlci51c2VybmFtZX19KTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2lnbk91dCgpXCI+U2lnbiBPdXQ8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXJyZW50VXNlclwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5TaWduIEluPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5IZWxwPC9idXR0b24+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48ZGl2IGNsYXNzPVwidGFic1wiPlxyXG4gICAgPGRpdj5cclxuICAgICAgICA8YSBtYXQtYnV0dG9uIChjbGljayk9XCJtb2JpbGVGb2N1cyA9ICdjaGF0J1wiPnt7Y2hhdExhYmVsfX08L2E+XHJcbiAgICAgICAgPGEgbWF0LWJ1dHRvbiAoY2xpY2spPVwibW9iaWxlRm9jdXMgPSAnY29tbWVudHMnXCI+e3tjb21tZW50c0xhYmVsfX08L2E+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRVc2VyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlck1lbnVcIj5cclxuICAgICAgICAgICAgICAgIEB7e2N1cnJlbnRVc2VyLnVzZXJuYW1lfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9ucygpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bm90aWZpY2F0aW9uX2ltcG9ydGFudDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cIiFjdXJyZW50VXNlclwiIChjbGljayk9XCJzaG93U2lnbkluKClcIj5cclxuICAgICAgICAgICAgU2lnbiBJblxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImZpcmVob3NlXCIgW2NsYXNzLmZvY3VzXT1cIm1vYmlsZUZvY3VzID09PSAnY2hhdCdcIj5cclxuICAgIDxoZWFkZXI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGxhYmVsIChjbGljayk9XCJtb2JpbGVGb2N1cyA9ICdjaGF0J1wiPnt7Y2hhdExhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFVzZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlck1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICBAe3tjdXJyZW50VXNlci51c2VybmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9ucygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm5vdGlmaWNhdGlvbl9pbXBvcnRhbnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiIWN1cnJlbnRVc2VyXCIgKGNsaWNrKT1cInNob3dTaWduSW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgU2lnbiBJblxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvaGVhZGVyPlxyXG4gICAgPGJhbnRhLWNoYXQgXHJcbiAgICAgICAgI2ZpcmVob3NlXHJcbiAgICAgICAgW3NvdXJjZV09XCJmaXJlaG9zZVNvdXJjZVwiXHJcbiAgICAgICAgKHNpZ25JblNlbGVjdGVkKT1cInNob3dTaWduSW4oKVwiXHJcbiAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAodXNlclNlbGVjdGVkKT1cInNob3dQcm9maWxlKCRldmVudC51c2VyKVwiXHJcbiAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvYmFudGEtY2hhdD5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiYXV4XCIgW2NsYXNzLmZvY3VzXT1cIm1vYmlsZUZvY3VzID09PSAnYXV4J1wiIFtjbGFzcy5vcGVuXT1cImF1eE9wZW5cIj5cclxuICAgIDxoZWFkZXI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGxhYmVsPnt7YXV4VGl0bGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImF1eE9wZW4gPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2hlYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJhdXgtY29udGVudHNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ3Byb2ZpbGUnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9maWxlVXNlclwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT1cImZvbnQtc2l6ZTogMTI1JTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3twcm9maWxlVXNlci5kaXNwbGF5TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgQHt7cHJvZmlsZVVzZXIudXNlcm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJyLz5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+VG9wIE1lc3NhZ2VzPC9zdHJvbmc+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZW0+Tm90IHlldCBhdmFpbGFibGU8L2VtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJyLz5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+UmVjZW50IE1lc3NhZ2VzPC9zdHJvbmc+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZW0+Tm90IHlldCBhdmFpbGFibGU8L2VtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ3JlcG9ydCdcIj5cclxuICAgICAgICAgICAgPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlcG9ydCB0aGlzIG1lc3NhZ2U/PC9wPlxyXG5cclxuICAgICAgICAgICAgPGJhbnRhLWxpdmUtbWVzc2FnZSBbbWVzc2FnZV09XCJyZXBvcnRlZE1lc3NhZ2VcIj48L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZW5kUmVwb3J0KHJlcG9ydGVkTWVzc2FnZSlcIj5ZZXMsIFJlcG9ydDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImF1eE9wZW4gPSBmYWxzZVwiPk5vLCBDYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ25vdGlmaWNhdGlvbnMnXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW5vdGlmaWNhdGlvbnMgfHwgbm90aWZpY2F0aW9ucy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxlbT5Zb3UgZG8gbm90IGhhdmUgYW55IG5vdGlmaWNhdGlvbnMgeWV0PC9lbT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvblwiICpuZ0Zvcj1cImxldCBub3RpZiBvZiBub3RpZmljYXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICd1cHZvdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAe3tub3RpZi5tZXNzYWdlPy51c2VyPy51c2VybmFtZX19IHVwdm90ZWQgeW91ciBwb3N0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYW50YS1saXZlLW1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJub3RpZi5tZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG5vdGlmLm1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwb3J0ZWQpPVwicmVwb3J0TWVzc2FnZShub3RpZi5tZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImdvVG9NZXNzYWdlKG5vdGlmLm1lc3NhZ2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90aWYudHlwZSA9PT0gJ25vdGljZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tub3RpZi5tZXNzYWdlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgbWF0LWJ1dHRvbiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwie3tub3RpZi5hY3Rpb25Vcmx9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bm90aWYuYWN0aW9uTGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICdtZW50aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdlcmUgbWVudGlvbmVkIGJ5IEB7e25vdGlmLm1lc3NhZ2U/LnVzZXI/LnVzZXJuYW1lfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtbGl2ZS1tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibm90aWYubWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZShub3RpZi5tZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2Uobm90aWYubWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJnb1RvTWVzc2FnZShub3RpZi5tZXNzYWdlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iYW50YS1saXZlLW1lc3NhZ2U+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICdyZXBseSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB7e25vdGlmLnJlcGx5TWVzc2FnZT8udXNlcj8udXNlcm5hbWV9fSByZXBsaWVkIHRvIHlvdXIgcG9zdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtbGl2ZS1tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibm90aWYucmVwbHlNZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG5vdGlmLnJlcGx5TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKG5vdGlmLnJlcGx5TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJnb1RvTWVzc2FnZShub3RpZi5yZXBseU1lc3NhZ2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxiYW50YS10aW1lc3RhbXAgW3ZhbHVlXT1cIm5vdGlmLnNlbnRBdFwiPjwvYmFudGEtdGltZXN0YW1wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicG9pbnRzXCIgW2NsYXNzLmZvY3VzXT1cIm1vYmlsZUZvY3VzID09PSAncG9pbnRzJ1wiPlxyXG4gICAgPGhlYWRlcj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWw+e3tjb21tZW50c0xhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9oZWFkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9pbnQtZm9jdXNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInBvaW50VW5mb2N1cygpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICBCYWNrXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvaW50T3BlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZWQtYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50LWluZGljYXRvclwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cG9pbnRPcGVuLmxpa2VzfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnRodW1iX3VwPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhcG9pbnRTdWJDaGF0XCI+XHJcbiAgICAgICAgICAgIEVycm9yOiBObyBzdWJjaGF0XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnQtdmlld1xyXG4gICAgICAgICAgICBjbGFzcz1cInN1YmNvbW1lbnRzXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJwb2ludFN1YkNoYXRcIlxyXG4gICAgICAgICAgICBbbmV3ZXN0TGFzdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2FsbG93UmVwbGllc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtzb3VyY2VdPVwicG9pbnRTdWJDaGF0XCJcclxuICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh1c2VyU2VsZWN0ZWQpPVwic2hvd1Byb2ZpbGUoJGV2ZW50LnVzZXIpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJhbnRhLWNvbW1lbnRcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9jdXNlZC1jb21tZW50XCJcclxuICAgICAgICAgICAgICAgIGRhdGEtYmVmb3JlXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvaW50T3BlblwiXHJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcGx5QWN0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cInBvaW50T3BlblwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicG9pbnRTdWJDaGF0Py5yZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKHBvaW50T3BlbilcIlxyXG4gICAgICAgICAgICAgICAgKHVzZXJTZWxlY3RlZCk9XCJzaG93UHJvZmlsZShwb2ludE9wZW4udXNlcilcIlxyXG4gICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UocG9pbnRPcGVuKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9iYW50YS1jb21tZW50PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZSByZXBseVwiPlxyXG4gICAgICAgICAgICAgICAgUmVwbHk6XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm5ldy1tZXNzYWdlXCIgKHN1Ym1pdCk9XCJzZW5kUG9pbnRTdWJNZXNzYWdlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtZXNzYWdlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm5ld1BvaW50U3ViTWVzc2FnZUtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3UG9pbnRTdWJNZXNzYWdlLm1lc3NhZ2VcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIW5ld1BvaW50U3ViTWVzc2FnZS5tZXNzYWdlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5TZW5kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYmFudGEtY29tbWVudC12aWV3PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9pbnRzLXNlY3Rpb25cIj5cclxuICAgICAgICA8YmFudGEtY29tbWVudHNcclxuICAgICAgICAgICAgW3NvdXJjZV09XCJwb2ludFNvdXJjZVwiXHJcbiAgICAgICAgICAgIChzaWduSW5TZWxlY3RlZCk9XCJzaG93U2lnbkluKClcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAocmVwb3J0ZWQpPVwicmVwb3J0TWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cImdvVG9NZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAodXNlclNlbGVjdGVkKT1cInNob3dQcm9maWxlKCRldmVudC51c2VyKVwiXHJcbiAgICAgICAgICAgID48L2JhbnRhLWNvbW1lbnRzPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -141,7 +141,7 @@ export class BantaChatComponent {
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
BantaChatComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaChatComponent, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.Component });
|
|
144
|
-
BantaChatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaChatComponent, selector: "banta-chat", inputs: { shouldInterceptMessageSend: "shouldInterceptMessageSend", url: "url", source: "source", topicID: "topicID", signInLabel: "signInLabel", sendLabel: "sendLabel", permissionDeniedLabel: "permissionDeniedLabel", messageFieldPlaceholder: "messageFieldPlaceholder", emptyLabel: "emptyLabel" }, outputs: { selected: "selected", reported: "reported", upvoted: "upvoted", userSelected: "userSelected", permissionDeniedError: "permissionDeniedError", signInSelected: "signInSelected", received: "received" }, viewQueries: [{ propertyName: "chatView", first: true, predicate: ["chatView"], descendants: true }, { propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 1000px #211e07 inset;-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:white;color:#000;border:1px solid #ccc;width:100%;height:2.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:black;color:#fff;border:1px solid #333}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.EmojiSelectorButtonComponent, selector: "emoji-selector-button", inputs: ["overlayX", "overlayY", "originX", "originY"], outputs: ["selected"] }, { kind: "component", type: i6.ChatViewComponent, selector: "banta-chat-view", inputs: ["source", "maxMessages", "emptyLabel"], outputs: ["selected", "userSelected", "reported", "upvoted", "received"] }] });
|
|
144
|
+
BantaChatComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: BantaChatComponent, selector: "banta-chat", inputs: { shouldInterceptMessageSend: "shouldInterceptMessageSend", url: "url", source: "source", topicID: "topicID", signInLabel: "signInLabel", sendLabel: "sendLabel", permissionDeniedLabel: "permissionDeniedLabel", messageFieldPlaceholder: "messageFieldPlaceholder", emptyLabel: "emptyLabel" }, outputs: { selected: "selected", reported: "reported", upvoted: "upvoted", userSelected: "userSelected", permissionDeniedError: "permissionDeniedError", signInSelected: "signInSelected", received: "received" }, viewQueries: [{ propertyName: "chatView", first: true, predicate: ["chatView"], descendants: true }, { propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 1000px #211e07 inset;-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:white;color:#000;border:1px solid #ccc;width:100%;height:2.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:black;color:#fff;border:1px solid #333}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.EmojiSelectorButtonComponent, selector: "emoji-selector-button", inputs: ["disabled", "overlayX", "overlayY", "originX", "originY"], outputs: ["selected"] }, { kind: "component", type: i6.ChatViewComponent, selector: "banta-chat-view", inputs: ["source", "maxMessages", "emptyLabel"], outputs: ["selected", "userSelected", "reported", "upvoted", "received"] }] });
|
|
145
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaChatComponent, decorators: [{
|
|
146
146
|
type: Component,
|
|
147
147
|
args: [{ selector: 'banta-chat', template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 1000px #211e07 inset;-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:black;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:white;color:#000;border:1px solid #ccc;width:100%;height:2.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:black;color:#fff;border:1px solid #333}\n"] }]
|
|
@@ -28,4 +28,4 @@ export class ChatBackendBase {
|
|
|
28
28
|
return this._attachmentResolvers.slice();
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1iYWNrZW5kLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0LWJhY2tlbmQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBZW5ELE1BQU0sT0FBZ0IsZUFBZTtJQUNqQztRQWNRLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQU8sSUFBSSxDQUFDLENBQUM7UUFnQi9DLHdCQUFtQixHQUF3QixFQUFFLENBQUM7UUFDOUMseUJBQW9CLEdBQXlCLEVBQUUsQ0FBQztJQTlCeEQsQ0FBQztJQWdCRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQVc7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBS0QseUJBQXlCLENBQUMsT0FBMEI7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsMEJBQTBCLENBQUMsUUFBNEI7UUFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgVm90ZSwgQ29tbWVudHNPcmRlciwgTm90aWZpY2F0aW9uLCBVc2VyLCBVcmxDYXJkLCBGaWx0ZXJNb2RlIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSAnLi9jaGF0LXNvdXJjZS1iYXNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudFJlc29sdmVyLCBBdHRhY2htZW50U2NyYXBlciB9IGZyb20gJy4vYXR0YWNobWVudC1zY3JhcGVyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFNvdXJjZU9wdGlvbnMge1xyXG4gICAgc29ydE9yZGVyPzogQ29tbWVudHNPcmRlcjtcclxuICAgIGZpbHRlck1vZGU/OiBGaWx0ZXJNb2RlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG93IG1hbnkgbWVzc2FnZXMgc2hvdWxkIGJlIGxvYWRlZCBpbml0aWFsbHk/XHJcbiAgICAgKi9cclxuICAgIGluaXRpYWxNZXNzYWdlQ291bnQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaGF0QmFja2VuZEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGFic3RyYWN0IGdldFNvdXJjZUZvclRvcGljKHRvcGljSWQgOiBzdHJpbmcsIG9wdGlvbnM/OiBDaGF0U291cmNlT3B0aW9ucykgOiBQcm9taXNlPENoYXRTb3VyY2VCYXNlPjtcclxuICAgIGFic3RyYWN0IGdldFNvdXJjZUZvclRocmVhZCh0b3BpY0lkIDogc3RyaW5nLCBtZXNzYWdlSWQgOiBzdHJpbmcsIG9wdGlvbnM/OiBDaGF0U291cmNlT3B0aW9ucykgOiBQcm9taXNlPENoYXRTb3VyY2VCYXNlPjtcclxuICAgIGFic3RyYWN0IGdldFNvdXJjZUNvdW50Rm9yVG9waWModG9waWNJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+XHJcbiAgICBhYnN0cmFjdCByZWZyZXNoTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpOiBQcm9taXNlPENoYXRNZXNzYWdlPjtcclxuICAgIGFic3RyYWN0IGdldE1lc3NhZ2UodG9waWNJZCA6IHN0cmluZywgbWVzc2FnZUlkIDogc3RyaW5nKTogUHJvbWlzZTxDaGF0TWVzc2FnZT47XHJcbiAgICBhYnN0cmFjdCBnZXRTdWJNZXNzYWdlKHRvcGljSWQgOiBzdHJpbmcsIHBhcmVudE1lc3NhZ2VJZCA6IHN0cmluZywgbWVzc2FnZUlkIDogc3RyaW5nKTogUHJvbWlzZTxDaGF0TWVzc2FnZT47XHJcbiAgICBhYnN0cmFjdCB3YXRjaE1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlLCBoYW5kbGVyIDogKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkgPT4gdm9pZCkgOiAoKSA9PiB2b2lkO1xyXG4gICAgYWJzdHJhY3QgZ2V0Q2FyZEZvclVybCh1cmw6IHN0cmluZyk6IFByb21pc2U8VXJsQ2FyZD47XHJcbiAgICByZWFkb25seSBub3RpZmljYXRpb25zQ2hhbmdlZCA6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uW10+O1xyXG4gICAgcmVhZG9ubHkgbmV3Tm90aWZpY2F0aW9uIDogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb24+O1xyXG4gICAgXHJcbiAgICBwcml2YXRlIF91c2VyQ2hhbmdlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlcj4obnVsbCk7XHJcbiAgICBwcml2YXRlIF91c2VyIDogVXNlcjtcclxuICAgIFxyXG4gICAgZ2V0IHVzZXJDaGFuZ2VkKCkgOiBPYnNlcnZhYmxlPFVzZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlckNoYW5nZWQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHNldCB1c2VyKHVzZXIgOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlciA9IHVzZXI7XHJcbiAgICAgICAgdGhpcy5fdXNlckNoYW5nZWQubmV4dCh1c2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXNlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlcjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJpdmF0ZSBfYXR0YWNobWVudFNjcmFwZXJzOiBBdHRhY2htZW50U2NyYXBlcltdID0gW107XHJcbiAgICBwcml2YXRlIF9hdHRhY2htZW50UmVzb2x2ZXJzOiBBdHRhY2htZW50UmVzb2x2ZXJbXSA9IFtdO1xyXG5cclxuICAgIHJlZ2lzdGVyQXR0YWNobWVudFNjcmFwZXIoc2NyYXBlcjogQXR0YWNobWVudFNjcmFwZXIpIHtcclxuICAgICAgICB0aGlzLl9hdHRhY2htZW50U2NyYXBlcnMucHVzaChzY3JhcGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckF0dGFjaG1lbnRSZXNvbHZlcihyZXNvbHZlcjogQXR0YWNobWVudFJlc29sdmVyKSB7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNobWVudFJlc29sdmVycy5wdXNoKHJlc29sdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYXR0YWNobWVudFNjcmFwZXJzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2htZW50U2NyYXBlcnMuc2xpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYXR0YWNobWVudFJlc29sdmVycygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNobWVudFJlc29sdmVycy5zbGljZSgpO1xyXG4gICAgfVxyXG59Il19
|