barsa-sap-ui 2.0.38 → 2.0.40

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.
@@ -1,7 +1,7 @@
1
- import { Component, ElementRef, Input, signal, ViewChild } from '@angular/core';
1
+ import { Component, Input, signal } from '@angular/core';
2
2
  import jmoment from 'moment-jalaali';
3
3
  import { animate, style, transition, trigger } from '@angular/animations';
4
- import { FormBaseComponent, FormPanelService } from 'barsa-novin-ray-core';
4
+ import { FormBaseComponent, FormPanelService, BarsaApi } from 'barsa-novin-ray-core';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/common";
7
7
  import * as i2 from "barsa-novin-ray-core";
@@ -79,7 +79,10 @@ export class BarsaChatComponent extends FormBaseComponent {
79
79
  this.selectedThread = signal(null);
80
80
  this.messages = signal(null);
81
81
  this.replyingMessage = signal(null);
82
- this.messageText = '';
82
+ this._newMessageText = '';
83
+ }
84
+ onTextChange($event) {
85
+ this._newMessageText = $event.target.value;
83
86
  }
84
87
  ngOnInit() {
85
88
  super.ngOnInit();
@@ -90,19 +93,17 @@ export class BarsaChatComponent extends FormBaseComponent {
90
93
  document.body.classList.remove('chat-mode');
91
94
  }
92
95
  scrollToBottom(force = false, instant = false) {
93
- const container = this.chatContentElement?.nativeElement;
96
+ const container = (this._el?.nativeElement).querySelector('#chatContentElement');
94
97
  if (force || (container && container.scrollTopMax - container.scrollTop < 300)) {
95
- setTimeout(() => container.scrollTo({
98
+ setTimeout(() => container?.scrollTo({
96
99
  top: container.scrollHeight,
97
100
  behavior: instant ? 'instant' : 'smooth'
98
101
  }));
99
102
  }
100
103
  }
101
- async checkInput(event) {
102
- this.messageText = event.target.innerText;
103
- }
104
104
  sendMessage() {
105
- if (this.messageText?.trim().length) {
105
+ if (this._newMessageText?.trim().length) {
106
+ BarsaApi.Bw.RunBlMethodAsync({});
106
107
  this.messages?.set([
107
108
  ...this.messages(),
108
109
  {
@@ -112,37 +113,19 @@ export class BarsaChatComponent extends FormBaseComponent {
112
113
  avatar: 'https://picsum.photos/100?workAround=' + Math.floor(Math.random() * 100),
113
114
  name: 'مهدی زارعی'
114
115
  },
115
- text: this.messageText,
116
+ text: this._newMessageText,
116
117
  createdAt: new Date(),
117
118
  deliveredAt: new Date(),
118
119
  readAt: new Date()
119
120
  }
120
121
  ]);
121
- this.messageText = '';
122
+ this._newMessageText = '';
122
123
  const inputMessage = document.getElementById('chat-textarea');
123
124
  if (inputMessage) {
124
125
  inputMessage.focus();
125
126
  inputMessage.innerText = '';
126
127
  }
127
128
  this.scrollToBottom(true);
128
- setTimeout(() => {
129
- this.messages?.set([
130
- ...this.messages(),
131
- {
132
- id: Math.random() * 1000,
133
- owner: {
134
- id: 4321,
135
- avatar: 'https://picsum.photos/100?workAround=' + Math.floor(Math.random() * 100),
136
- name: this.selectedThread().title
137
- },
138
- text: this.shuffle(this.randomTextArr.slice(0, 1 + Math.floor(this.randomTextArr.length * Math.random()))).join(' '),
139
- createdAt: new Date(),
140
- deliveredAt: new Date(),
141
- readAt: new Date()
142
- }
143
- ]);
144
- this.scrollToBottom(true);
145
- }, 2000);
146
129
  }
147
130
  }
148
131
  addAttachment() { }
@@ -206,7 +189,7 @@ export class BarsaChatComponent extends FormBaseComponent {
206
189
  return array;
207
190
  }
208
191
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaChatComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
209
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaChatComponent, selector: "bsu-barsa-chat", inputs: { simple: "simple" }, providers: [FormPanelService], viewQueries: [{ propertyName: "chatContentElement", first: true, predicate: ["chatContentElement"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"tw-flex tw-w-full tw-bg-gradient-to-r tw-from-[#5d6e7f] tw-to-[#354a5f] dark:tw-from-[#253443] dark:tw-to-[#10161c]\"\r\n fillEmptySpace\r\n [class.tw-h-screen]=\"!simple\"\r\n [class.tw-justify-center]=\"simple\"\r\n>\r\n @if (!simple) {\r\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\r\n }\r\n <div\r\n class=\"tw-h-full tw-flex 2xl:tw-container max-w-[80rem] tw-shrink-0 tw-relative\"\r\n [ngClass]=\"{\r\n 'tw-grow 2xl:tw-grow-0': !simple,\r\n 'tw-w-full': simple\r\n }\"\r\n >\r\n @if (!simple) {\r\n <div class=\"tw-grow-0 tw-shrink-0 tw-w-full md:tw-w-96 tw-p-0 md:tw-p-6\">\r\n <div\r\n class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden tw-border-l tw-border-l-gray-300 md:tw-rounded-2xl md:tw-border md:tw-border-l-gray-300 md:tw-border-gray-300 dark:tw-border-l-gray-600 md:dark:tw-border-l-gray-600 md:dark:tw-border-gray-600\"\r\n >\r\n <bsu-barsa-chat-threads-list-toolbar></bsu-barsa-chat-threads-list-toolbar>\r\n <bsu-barsa-chat-threads-list>\r\n @for (thread of threads; track thread.id) {\r\n <bsu-barsa-chat-thread [thread]=\"thread\" (click)=\"selectThread(thread)\"></bsu-barsa-chat-thread>\r\n }\r\n </bsu-barsa-chat-threads-list>\r\n </div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"tw-absolute tw-top-0 tw-left-0 tw-w-full tw-h-full tw-bg-[url('assets/chat-bg.png')] tw-bg-fixed tw-opacity-25\"\r\n ></div>\r\n }\r\n <div\r\n class=\"tw-grow tw-shrink tw-relative\"\r\n [ngClass]=\"{\r\n 'md:tw-py-6 md:tw-pl-6 tw-hidden md:tw-flex': !simple,\r\n 'tw-flex': simple\r\n }\"\r\n >\r\n @if (selectedThread()) {\r\n <div\r\n @inContentAnimation\r\n class=\"tw-h-full tw-w-full tw-flex tw-flex-col tw-relative md:tw-border-gray-300 md:dark:tw-border-gray-600 tw-overflow-hidden\"\r\n [ngClass]=\"{\r\n 'md:tw-border md:tw-rounded-2xl': !simple\r\n }\"\r\n >\r\n <bsu-barsa-chat-content-toolbar\r\n [title]=\"selectedThread().title\"\r\n [subtitle]=\"'\u0645\u062D\u0645\u062F \u0645\u062D\u0645\u062F\u06CC'\"\r\n [avatar]=\"selectedThread().avatar\"\r\n [status]=\"selectedThread().status\"\r\n ></bsu-barsa-chat-content-toolbar>\r\n <bsu-barsa-chat-content id=\"chat-container\">\r\n @if(layout94$ | async;as layout94){ @if ('\u0644\u06CC\u0633\u062A \u06AF\u0641\u062A\u06AF\u0648' | controlUi: layout94; as configUi) {\r\n <bsu-layout-control [config]=\"configUi\"></bsu-layout-control>\r\n } }\r\n </bsu-barsa-chat-content>\r\n <div\r\n class=\"tw-w-full\"\r\n [ngClass]=\"{\r\n 'tw-relative': !simple,\r\n '2xl:tw-rounded-t-xl tw-grow-0 tw-shrink-0': simple\r\n }\"\r\n >\r\n @if (replyingMessage()) {\r\n <div\r\n @inOutReplyingMessage\r\n class=\"tw-w-full tw-px-2 tw-py-1 tw-border-r-4 tw-border-r-bubble-mine tw-flex tw-gap-2 te-items-center tw-absolute tw-z-0 tw-bg-default tw-right-0 -tw-top-14\"\r\n >\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"decline\"\r\n class=\"tw-grow-0 tw-shrink-0\"\r\n (click)=\"replyingMessage.set(null)\"\r\n ></button>\r\n <div class=\"tw-flex tw-flex-col tw-grow tw-shrink tw-overflow-hidden\">\r\n <span class=\"tw-font-bold\">{{ replyingMessage().owner.name }}</span>\r\n <span class=\"tw-truncate\">{{\r\n replyingMessage().text ?? replyingMessage().file?.name ?? replyingMessage().image?.name\r\n }}</span>\r\n </div>\r\n <div class=\"tw-w-8 tw-shrink-0 tw-grow-0\"></div>\r\n </div>\r\n }\r\n <div\r\n class=\"tw-w-full tw-p-2 tw-flex tw-gap-2 tw-border-t tw-border-t-gray-300 dark:tw-border-t-gray-600 tw-bg-default tw-items-end tw-z-10\"\r\n >\r\n <fd-popover placement=\"top-start\" title=\"top-start\">\r\n <fd-popover-control>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"attachment\"\r\n class=\"!tw-rounded-full tw-shrink-0 tw-grow-0 !tw-size-10 !tw-min-h-10 !tw-max-h-10 !tw-min-w-10 !tw-max-w-10\"\r\n (click)=\"addAttachment()\"\r\n ></button>\r\n </fd-popover-control>\r\n <fd-popover-body minWidth=\"10rem\">\r\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\r\n <label\r\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\r\n >\r\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"camera\"></fd-icon>\r\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0639\u06A9\u0633</span>\r\n <input class=\"tw-hidden\" type=\"file\" id=\"img\" name=\"img\" accept=\"image/*\" />\r\n </label>\r\n <label\r\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\r\n >\r\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"add-document\"></fd-icon>\r\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06CC\u0644</span>\r\n <input class=\"tw-hidden\" type=\"file\" id=\"file\" name=\"file\" accept=\"file/*\" />\r\n </label>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n <div class=\"tw-inline-flex tw-relative tw-grow tw-shrink\">\r\n <fd-feed-input [attr.aria-label]=\"'\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645'\" class=\"tw-flex-1\">\r\n <fd-avatar\r\n fdFeedInputAvatar\r\n size=\"s\"\r\n [label]=\"'\u0631\u0627\u0647\u0628\u0631'\"\r\n [image]=\"''\"\r\n [placeholder]=\"true\"\r\n ></fd-avatar>\r\n <textarea fd-form-control fdFeedInputTextarea placeholder=\"\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645\"></textarea>\r\n <button\r\n fdFeedInputButton\r\n [attr.aria-label]=\"'Send' | bbbTranslate\"\r\n [title]=\"'Send' | bbbTranslate\"\r\n (click)=\"sendMessage()\"\r\n ></button>\r\n </fd-feed-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"tw-absolute tw-top-1/2 -tw-translate-y-1/2 tw-left-1/2 -tw-translate-x-1/2 tw-flex tw-flex-col tw-gap-8 tw-items-center\"\r\n >\r\n <img src=\"assets/not-selected-chat.png\" class=\"tw-w-64 tw-opacity-25\" />\r\n <!-- <span class=\"tw-text-xl tw-font-bold tw-text-gray-400 dark:tw-text-gray-500\">-->\r\n <!-- \u0628\u0631\u0627\u06CC \u0634\u0631\u0648\u0639 \u06CC\u06A9 \u0686\u062A \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F-->\r\n <!-- </span>-->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (!simple) {\r\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\r\n }\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"], exportAs: ["fillEmptySpace"] }, { kind: "directive", type: i2.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.FeedInputComponent, selector: "fd-feed-input", inputs: ["disabled"] }, { kind: "directive", type: i5.FeedInputTextareaDirective, selector: "[fdFeedInputTextarea]", inputs: ["fdFeedInputTextareaMaxRows"], outputs: ["valueChange"] }, { kind: "directive", type: i5.FeedInputButtonDirective, selector: "[fdFeedInputButton]" }, { kind: "directive", type: i5.FeedInputAvatarDirective, selector: "[fdFeedInputAvatar]", inputs: ["class", "placeholder"] }, { kind: "component", type: i6.FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i7.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i8.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i8.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i8.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i9.LayoutControlComponent, selector: "bsu-layout-control", inputs: ["inlineEdit", "caption", "focusControl", "showLabel", "maxLabelWidth", "hasHorizontalText", "contentDensity", "flex", "RefreshLabel", "SetVisible"], outputs: ["events"] }, { kind: "component", type: i10.BarsaChatContentComponent, selector: "bsu-barsa-chat-content" }, { kind: "component", type: i11.BarsaChatThreadComponent, selector: "bsu-barsa-chat-thread", inputs: ["thread"] }, { kind: "component", type: i12.BarsaChatThreadsListComponent, selector: "bsu-barsa-chat-threads-list" }, { kind: "component", type: i13.BarsaChatThreadsListToolbarComponent, selector: "bsu-barsa-chat-threads-list-toolbar" }, { kind: "component", type: i14.BarsaChatContentToolbarComponent, selector: "bsu-barsa-chat-content-toolbar", inputs: ["avatar", "title", "subtitle", "status"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.ControlUiPipe, name: "controlUi" }], animations: [
192
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaChatComponent, selector: "bsu-barsa-chat", inputs: { simple: "simple" }, providers: [FormPanelService], usesInheritance: true, ngImport: i0, template: "<div\n class=\"tw-flex tw-w-full tw-bg-gradient-to-r tw-from-[#5d6e7f] tw-to-[#354a5f] dark:tw-from-[#253443] dark:tw-to-[#10161c]\"\n fillEmptySpace\n [class.tw-h-screen]=\"!simple\"\n [class.tw-justify-center]=\"simple\"\n>\n @if (!simple) {\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\n }\n <div\n class=\"tw-h-full tw-flex 2xl:tw-container max-w-[80rem] tw-shrink-0 tw-relative\"\n [ngClass]=\"{\n 'tw-grow 2xl:tw-grow-0': !simple,\n 'tw-w-full': simple\n }\"\n >\n @if (!simple) {\n <div class=\"tw-grow-0 tw-shrink-0 tw-w-full md:tw-w-96 tw-p-0 md:tw-p-6\">\n <div\n class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden tw-border-l tw-border-l-gray-300 md:tw-rounded-2xl md:tw-border md:tw-border-l-gray-300 md:tw-border-gray-300 dark:tw-border-l-gray-600 md:dark:tw-border-l-gray-600 md:dark:tw-border-gray-600\"\n >\n <bsu-barsa-chat-threads-list-toolbar></bsu-barsa-chat-threads-list-toolbar>\n <bsu-barsa-chat-threads-list>\n @for (thread of threads; track thread.id) {\n <bsu-barsa-chat-thread [thread]=\"thread\" (click)=\"selectThread(thread)\"></bsu-barsa-chat-thread>\n }\n </bsu-barsa-chat-threads-list>\n </div>\n </div>\n } @else {\n <div\n class=\"tw-absolute tw-top-0 tw-left-0 tw-w-full tw-h-full tw-bg-[url('assets/chat-bg.png')] tw-bg-fixed tw-opacity-25\"\n ></div>\n }\n <div\n class=\"tw-grow tw-shrink tw-relative\"\n [ngClass]=\"{\n 'md:tw-py-6 md:tw-pl-6 tw-hidden md:tw-flex': !simple,\n 'tw-flex': simple\n }\"\n >\n @if (selectedThread()) {\n <div\n @inContentAnimation\n class=\"tw-h-full tw-w-full tw-flex tw-flex-col tw-relative md:tw-border-gray-300 md:dark:tw-border-gray-600 tw-overflow-hidden\"\n [ngClass]=\"{\n 'md:tw-border md:tw-rounded-2xl': !simple\n }\"\n >\n <bsu-barsa-chat-content-toolbar\n [title]=\"selectedThread().title\"\n [subtitle]=\"'\u0645\u062D\u0645\u062F \u0645\u062D\u0645\u062F\u06CC'\"\n [avatar]=\"selectedThread().avatar\"\n [status]=\"selectedThread().status\"\n ></bsu-barsa-chat-content-toolbar>\n <bsu-barsa-chat-content id=\"chat-container\">\n @if(layout94$ | async;as layout94){ @if ('\u0644\u06CC\u0633\u062A \u06AF\u0641\u062A\u06AF\u0648' | controlUi: layout94; as configUi) {\n <bsu-layout-control [config]=\"configUi\"></bsu-layout-control>\n } }\n </bsu-barsa-chat-content>\n <div\n class=\"tw-w-full\"\n [ngClass]=\"{\n 'tw-relative': !simple,\n '2xl:tw-rounded-t-xl tw-grow-0 tw-shrink-0': simple\n }\"\n >\n @if (replyingMessage()) {\n <div\n @inOutReplyingMessage\n class=\"tw-w-full tw-px-2 tw-py-1 tw-border-r-4 tw-border-r-bubble-mine tw-flex tw-gap-2 te-items-center tw-absolute tw-z-0 tw-bg-default tw-right-0 -tw-top-14\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"tw-grow-0 tw-shrink-0\"\n (click)=\"replyingMessage.set(null)\"\n ></button>\n <div class=\"tw-flex tw-flex-col tw-grow tw-shrink tw-overflow-hidden\">\n <span class=\"tw-font-bold\">{{ replyingMessage().owner.name }}</span>\n <span class=\"tw-truncate\">{{\n replyingMessage().text ?? replyingMessage().file?.name ?? replyingMessage().image?.name\n }}</span>\n </div>\n <div class=\"tw-w-8 tw-shrink-0 tw-grow-0\"></div>\n </div>\n }\n <div\n class=\"tw-w-full tw-p-2 tw-flex tw-gap-2 tw-border-t tw-border-t-gray-300 dark:tw-border-t-gray-600 tw-bg-default tw-items-end tw-z-10\"\n >\n <fd-popover placement=\"top-start\" title=\"top-start\">\n <fd-popover-control>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"attachment\"\n class=\"!tw-rounded-full tw-shrink-0 tw-grow-0 !tw-size-10 !tw-min-h-10 !tw-max-h-10 !tw-min-w-10 !tw-max-w-10\"\n (click)=\"addAttachment()\"\n ></button>\n </fd-popover-control>\n <fd-popover-body minWidth=\"10rem\">\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"camera\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0639\u06A9\u0633</span>\n <input class=\"tw-hidden\" type=\"file\" id=\"img\" name=\"img\" accept=\"image/*\" />\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"add-document\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06CC\u0644</span>\n <input class=\"tw-hidden\" type=\"file\" id=\"file\" name=\"file\" accept=\"file/*\" />\n </label>\n </div>\n </fd-popover-body>\n </fd-popover>\n <div class=\"tw-inline-flex tw-relative tw-grow tw-shrink\">\n <fd-feed-input [attr.aria-label]=\"'\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645'\" class=\"tw-flex-1\">\n <fd-avatar\n fdFeedInputAvatar\n size=\"s\"\n [label]=\"'\u0631\u0627\u0647\u0628\u0631'\"\n [image]=\"''\"\n [placeholder]=\"true\"\n ></fd-avatar>\n <textarea\n id=\"chat-textarea\"\n fd-form-control\n fdFeedInputTextarea\n placeholder=\"\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645\"\n [fdFeedInputTextareaMaxRows]=\"2\"\n (input)=\"onTextChange($event)\"\n ></textarea>\n <button\n fdFeedInputButton\n [attr.aria-label]=\"'Send' | bbbTranslate\"\n [title]=\"'Send' | bbbTranslate\"\n (click)=\"sendMessage()\"\n ></button>\n </fd-feed-input>\n </div>\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"tw-absolute tw-top-1/2 -tw-translate-y-1/2 tw-left-1/2 -tw-translate-x-1/2 tw-flex tw-flex-col tw-gap-8 tw-items-center\"\n >\n <img src=\"assets/not-selected-chat.png\" class=\"tw-w-64 tw-opacity-25\" />\n <!-- <span class=\"tw-text-xl tw-font-bold tw-text-gray-400 dark:tw-text-gray-500\">-->\n <!-- \u0628\u0631\u0627\u06CC \u0634\u0631\u0648\u0639 \u06CC\u06A9 \u0686\u062A \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F-->\n <!-- </span>-->\n </div>\n }\n </div>\n </div>\n @if (!simple) {\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"], exportAs: ["fillEmptySpace"] }, { kind: "directive", type: i2.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.FeedInputComponent, selector: "fd-feed-input", inputs: ["disabled"] }, { kind: "directive", type: i5.FeedInputTextareaDirective, selector: "[fdFeedInputTextarea]", inputs: ["fdFeedInputTextareaMaxRows"], outputs: ["valueChange"] }, { kind: "directive", type: i5.FeedInputButtonDirective, selector: "[fdFeedInputButton]" }, { kind: "directive", type: i5.FeedInputAvatarDirective, selector: "[fdFeedInputAvatar]", inputs: ["class", "placeholder"] }, { kind: "component", type: i6.FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i7.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i8.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i8.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i8.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i9.LayoutControlComponent, selector: "bsu-layout-control", inputs: ["inlineEdit", "caption", "focusControl", "showLabel", "maxLabelWidth", "hasHorizontalText", "contentDensity", "flex", "RefreshLabel", "SetVisible"], outputs: ["events"] }, { kind: "component", type: i10.BarsaChatContentComponent, selector: "bsu-barsa-chat-content" }, { kind: "component", type: i11.BarsaChatThreadComponent, selector: "bsu-barsa-chat-thread", inputs: ["thread"] }, { kind: "component", type: i12.BarsaChatThreadsListComponent, selector: "bsu-barsa-chat-threads-list" }, { kind: "component", type: i13.BarsaChatThreadsListToolbarComponent, selector: "bsu-barsa-chat-threads-list-toolbar" }, { kind: "component", type: i14.BarsaChatContentToolbarComponent, selector: "bsu-barsa-chat-content-toolbar", inputs: ["avatar", "title", "subtitle", "status"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.ControlUiPipe, name: "controlUi" }], animations: [
210
193
  trigger('inContentAnimation', [
211
194
  transition(':enter', [
212
195
  style({ opacity: 0, transform: 'scale(50%, 50%)' }),
@@ -252,11 +235,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
252
235
  animate('300ms ease-in', style({ opacity: 0, transform: 'translateY(50%)' }))
253
236
  ])
254
237
  ])
255
- ], template: "<div\r\n class=\"tw-flex tw-w-full tw-bg-gradient-to-r tw-from-[#5d6e7f] tw-to-[#354a5f] dark:tw-from-[#253443] dark:tw-to-[#10161c]\"\r\n fillEmptySpace\r\n [class.tw-h-screen]=\"!simple\"\r\n [class.tw-justify-center]=\"simple\"\r\n>\r\n @if (!simple) {\r\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\r\n }\r\n <div\r\n class=\"tw-h-full tw-flex 2xl:tw-container max-w-[80rem] tw-shrink-0 tw-relative\"\r\n [ngClass]=\"{\r\n 'tw-grow 2xl:tw-grow-0': !simple,\r\n 'tw-w-full': simple\r\n }\"\r\n >\r\n @if (!simple) {\r\n <div class=\"tw-grow-0 tw-shrink-0 tw-w-full md:tw-w-96 tw-p-0 md:tw-p-6\">\r\n <div\r\n class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden tw-border-l tw-border-l-gray-300 md:tw-rounded-2xl md:tw-border md:tw-border-l-gray-300 md:tw-border-gray-300 dark:tw-border-l-gray-600 md:dark:tw-border-l-gray-600 md:dark:tw-border-gray-600\"\r\n >\r\n <bsu-barsa-chat-threads-list-toolbar></bsu-barsa-chat-threads-list-toolbar>\r\n <bsu-barsa-chat-threads-list>\r\n @for (thread of threads; track thread.id) {\r\n <bsu-barsa-chat-thread [thread]=\"thread\" (click)=\"selectThread(thread)\"></bsu-barsa-chat-thread>\r\n }\r\n </bsu-barsa-chat-threads-list>\r\n </div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"tw-absolute tw-top-0 tw-left-0 tw-w-full tw-h-full tw-bg-[url('assets/chat-bg.png')] tw-bg-fixed tw-opacity-25\"\r\n ></div>\r\n }\r\n <div\r\n class=\"tw-grow tw-shrink tw-relative\"\r\n [ngClass]=\"{\r\n 'md:tw-py-6 md:tw-pl-6 tw-hidden md:tw-flex': !simple,\r\n 'tw-flex': simple\r\n }\"\r\n >\r\n @if (selectedThread()) {\r\n <div\r\n @inContentAnimation\r\n class=\"tw-h-full tw-w-full tw-flex tw-flex-col tw-relative md:tw-border-gray-300 md:dark:tw-border-gray-600 tw-overflow-hidden\"\r\n [ngClass]=\"{\r\n 'md:tw-border md:tw-rounded-2xl': !simple\r\n }\"\r\n >\r\n <bsu-barsa-chat-content-toolbar\r\n [title]=\"selectedThread().title\"\r\n [subtitle]=\"'\u0645\u062D\u0645\u062F \u0645\u062D\u0645\u062F\u06CC'\"\r\n [avatar]=\"selectedThread().avatar\"\r\n [status]=\"selectedThread().status\"\r\n ></bsu-barsa-chat-content-toolbar>\r\n <bsu-barsa-chat-content id=\"chat-container\">\r\n @if(layout94$ | async;as layout94){ @if ('\u0644\u06CC\u0633\u062A \u06AF\u0641\u062A\u06AF\u0648' | controlUi: layout94; as configUi) {\r\n <bsu-layout-control [config]=\"configUi\"></bsu-layout-control>\r\n } }\r\n </bsu-barsa-chat-content>\r\n <div\r\n class=\"tw-w-full\"\r\n [ngClass]=\"{\r\n 'tw-relative': !simple,\r\n '2xl:tw-rounded-t-xl tw-grow-0 tw-shrink-0': simple\r\n }\"\r\n >\r\n @if (replyingMessage()) {\r\n <div\r\n @inOutReplyingMessage\r\n class=\"tw-w-full tw-px-2 tw-py-1 tw-border-r-4 tw-border-r-bubble-mine tw-flex tw-gap-2 te-items-center tw-absolute tw-z-0 tw-bg-default tw-right-0 -tw-top-14\"\r\n >\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"decline\"\r\n class=\"tw-grow-0 tw-shrink-0\"\r\n (click)=\"replyingMessage.set(null)\"\r\n ></button>\r\n <div class=\"tw-flex tw-flex-col tw-grow tw-shrink tw-overflow-hidden\">\r\n <span class=\"tw-font-bold\">{{ replyingMessage().owner.name }}</span>\r\n <span class=\"tw-truncate\">{{\r\n replyingMessage().text ?? replyingMessage().file?.name ?? replyingMessage().image?.name\r\n }}</span>\r\n </div>\r\n <div class=\"tw-w-8 tw-shrink-0 tw-grow-0\"></div>\r\n </div>\r\n }\r\n <div\r\n class=\"tw-w-full tw-p-2 tw-flex tw-gap-2 tw-border-t tw-border-t-gray-300 dark:tw-border-t-gray-600 tw-bg-default tw-items-end tw-z-10\"\r\n >\r\n <fd-popover placement=\"top-start\" title=\"top-start\">\r\n <fd-popover-control>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"attachment\"\r\n class=\"!tw-rounded-full tw-shrink-0 tw-grow-0 !tw-size-10 !tw-min-h-10 !tw-max-h-10 !tw-min-w-10 !tw-max-w-10\"\r\n (click)=\"addAttachment()\"\r\n ></button>\r\n </fd-popover-control>\r\n <fd-popover-body minWidth=\"10rem\">\r\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\r\n <label\r\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\r\n >\r\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"camera\"></fd-icon>\r\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0639\u06A9\u0633</span>\r\n <input class=\"tw-hidden\" type=\"file\" id=\"img\" name=\"img\" accept=\"image/*\" />\r\n </label>\r\n <label\r\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\r\n >\r\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"add-document\"></fd-icon>\r\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06CC\u0644</span>\r\n <input class=\"tw-hidden\" type=\"file\" id=\"file\" name=\"file\" accept=\"file/*\" />\r\n </label>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n <div class=\"tw-inline-flex tw-relative tw-grow tw-shrink\">\r\n <fd-feed-input [attr.aria-label]=\"'\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645'\" class=\"tw-flex-1\">\r\n <fd-avatar\r\n fdFeedInputAvatar\r\n size=\"s\"\r\n [label]=\"'\u0631\u0627\u0647\u0628\u0631'\"\r\n [image]=\"''\"\r\n [placeholder]=\"true\"\r\n ></fd-avatar>\r\n <textarea fd-form-control fdFeedInputTextarea placeholder=\"\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645\"></textarea>\r\n <button\r\n fdFeedInputButton\r\n [attr.aria-label]=\"'Send' | bbbTranslate\"\r\n [title]=\"'Send' | bbbTranslate\"\r\n (click)=\"sendMessage()\"\r\n ></button>\r\n </fd-feed-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"tw-absolute tw-top-1/2 -tw-translate-y-1/2 tw-left-1/2 -tw-translate-x-1/2 tw-flex tw-flex-col tw-gap-8 tw-items-center\"\r\n >\r\n <img src=\"assets/not-selected-chat.png\" class=\"tw-w-64 tw-opacity-25\" />\r\n <!-- <span class=\"tw-text-xl tw-font-bold tw-text-gray-400 dark:tw-text-gray-500\">-->\r\n <!-- \u0628\u0631\u0627\u06CC \u0634\u0631\u0648\u0639 \u06CC\u06A9 \u0686\u062A \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F-->\r\n <!-- </span>-->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (!simple) {\r\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\r\n }\r\n</div>\r\n" }]
238
+ ], template: "<div\n class=\"tw-flex tw-w-full tw-bg-gradient-to-r tw-from-[#5d6e7f] tw-to-[#354a5f] dark:tw-from-[#253443] dark:tw-to-[#10161c]\"\n fillEmptySpace\n [class.tw-h-screen]=\"!simple\"\n [class.tw-justify-center]=\"simple\"\n>\n @if (!simple) {\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\n }\n <div\n class=\"tw-h-full tw-flex 2xl:tw-container max-w-[80rem] tw-shrink-0 tw-relative\"\n [ngClass]=\"{\n 'tw-grow 2xl:tw-grow-0': !simple,\n 'tw-w-full': simple\n }\"\n >\n @if (!simple) {\n <div class=\"tw-grow-0 tw-shrink-0 tw-w-full md:tw-w-96 tw-p-0 md:tw-p-6\">\n <div\n class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden tw-border-l tw-border-l-gray-300 md:tw-rounded-2xl md:tw-border md:tw-border-l-gray-300 md:tw-border-gray-300 dark:tw-border-l-gray-600 md:dark:tw-border-l-gray-600 md:dark:tw-border-gray-600\"\n >\n <bsu-barsa-chat-threads-list-toolbar></bsu-barsa-chat-threads-list-toolbar>\n <bsu-barsa-chat-threads-list>\n @for (thread of threads; track thread.id) {\n <bsu-barsa-chat-thread [thread]=\"thread\" (click)=\"selectThread(thread)\"></bsu-barsa-chat-thread>\n }\n </bsu-barsa-chat-threads-list>\n </div>\n </div>\n } @else {\n <div\n class=\"tw-absolute tw-top-0 tw-left-0 tw-w-full tw-h-full tw-bg-[url('assets/chat-bg.png')] tw-bg-fixed tw-opacity-25\"\n ></div>\n }\n <div\n class=\"tw-grow tw-shrink tw-relative\"\n [ngClass]=\"{\n 'md:tw-py-6 md:tw-pl-6 tw-hidden md:tw-flex': !simple,\n 'tw-flex': simple\n }\"\n >\n @if (selectedThread()) {\n <div\n @inContentAnimation\n class=\"tw-h-full tw-w-full tw-flex tw-flex-col tw-relative md:tw-border-gray-300 md:dark:tw-border-gray-600 tw-overflow-hidden\"\n [ngClass]=\"{\n 'md:tw-border md:tw-rounded-2xl': !simple\n }\"\n >\n <bsu-barsa-chat-content-toolbar\n [title]=\"selectedThread().title\"\n [subtitle]=\"'\u0645\u062D\u0645\u062F \u0645\u062D\u0645\u062F\u06CC'\"\n [avatar]=\"selectedThread().avatar\"\n [status]=\"selectedThread().status\"\n ></bsu-barsa-chat-content-toolbar>\n <bsu-barsa-chat-content id=\"chat-container\">\n @if(layout94$ | async;as layout94){ @if ('\u0644\u06CC\u0633\u062A \u06AF\u0641\u062A\u06AF\u0648' | controlUi: layout94; as configUi) {\n <bsu-layout-control [config]=\"configUi\"></bsu-layout-control>\n } }\n </bsu-barsa-chat-content>\n <div\n class=\"tw-w-full\"\n [ngClass]=\"{\n 'tw-relative': !simple,\n '2xl:tw-rounded-t-xl tw-grow-0 tw-shrink-0': simple\n }\"\n >\n @if (replyingMessage()) {\n <div\n @inOutReplyingMessage\n class=\"tw-w-full tw-px-2 tw-py-1 tw-border-r-4 tw-border-r-bubble-mine tw-flex tw-gap-2 te-items-center tw-absolute tw-z-0 tw-bg-default tw-right-0 -tw-top-14\"\n >\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"tw-grow-0 tw-shrink-0\"\n (click)=\"replyingMessage.set(null)\"\n ></button>\n <div class=\"tw-flex tw-flex-col tw-grow tw-shrink tw-overflow-hidden\">\n <span class=\"tw-font-bold\">{{ replyingMessage().owner.name }}</span>\n <span class=\"tw-truncate\">{{\n replyingMessage().text ?? replyingMessage().file?.name ?? replyingMessage().image?.name\n }}</span>\n </div>\n <div class=\"tw-w-8 tw-shrink-0 tw-grow-0\"></div>\n </div>\n }\n <div\n class=\"tw-w-full tw-p-2 tw-flex tw-gap-2 tw-border-t tw-border-t-gray-300 dark:tw-border-t-gray-600 tw-bg-default tw-items-end tw-z-10\"\n >\n <fd-popover placement=\"top-start\" title=\"top-start\">\n <fd-popover-control>\n <button\n fd-button\n fdType=\"transparent\"\n glyph=\"attachment\"\n class=\"!tw-rounded-full tw-shrink-0 tw-grow-0 !tw-size-10 !tw-min-h-10 !tw-max-h-10 !tw-min-w-10 !tw-max-w-10\"\n (click)=\"addAttachment()\"\n ></button>\n </fd-popover-control>\n <fd-popover-body minWidth=\"10rem\">\n <div class=\"tw-flex tw-flex-col tw-bg-default tw-w-full\" bodyClick>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"camera\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0639\u06A9\u0633</span>\n <input class=\"tw-hidden\" type=\"file\" id=\"img\" name=\"img\" accept=\"image/*\" />\n </label>\n <label\n class=\"tw-px-4 tw-py-2 tw-flex tw-gap-2 tw-w-full hover:tw-bg-base/[.1] tw-transition-all tw-cursor-pointer\"\n >\n <fd-icon class=\"!tw-text-base !tw-text-3xl\" glyph=\"add-document\"></fd-icon>\n <span class=\"!tw-text-base\">\u0627\u0631\u0633\u0627\u0644 \u0641\u0627\u06CC\u0644</span>\n <input class=\"tw-hidden\" type=\"file\" id=\"file\" name=\"file\" accept=\"file/*\" />\n </label>\n </div>\n </fd-popover-body>\n </fd-popover>\n <div class=\"tw-inline-flex tw-relative tw-grow tw-shrink\">\n <fd-feed-input [attr.aria-label]=\"'\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645'\" class=\"tw-flex-1\">\n <fd-avatar\n fdFeedInputAvatar\n size=\"s\"\n [label]=\"'\u0631\u0627\u0647\u0628\u0631'\"\n [image]=\"''\"\n [placeholder]=\"true\"\n ></fd-avatar>\n <textarea\n id=\"chat-textarea\"\n fd-form-control\n fdFeedInputTextarea\n placeholder=\"\u0645\u062A\u0646 \u067E\u06CC\u0627\u0645\"\n [fdFeedInputTextareaMaxRows]=\"2\"\n (input)=\"onTextChange($event)\"\n ></textarea>\n <button\n fdFeedInputButton\n [attr.aria-label]=\"'Send' | bbbTranslate\"\n [title]=\"'Send' | bbbTranslate\"\n (click)=\"sendMessage()\"\n ></button>\n </fd-feed-input>\n </div>\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"tw-absolute tw-top-1/2 -tw-translate-y-1/2 tw-left-1/2 -tw-translate-x-1/2 tw-flex tw-flex-col tw-gap-8 tw-items-center\"\n >\n <img src=\"assets/not-selected-chat.png\" class=\"tw-w-64 tw-opacity-25\" />\n <!-- <span class=\"tw-text-xl tw-font-bold tw-text-gray-400 dark:tw-text-gray-500\">-->\n <!-- \u0628\u0631\u0627\u06CC \u0634\u0631\u0648\u0639 \u06CC\u06A9 \u0686\u062A \u0631\u0627 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F-->\n <!-- </span>-->\n </div>\n }\n </div>\n </div>\n @if (!simple) {\n <div class=\"tw-bg-black/[.3] 2xl:tw-grow tw-shrink tw-h-full\"></div>\n }\n</div>\n" }]
256
239
  }], propDecorators: { simple: [{
257
240
  type: Input
258
- }], chatContentElement: [{
259
- type: ViewChild,
260
- args: ['chatContentElement', { read: ElementRef }]
261
241
  }] } });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi9iYXJzYS1jaGF0L2JhcnNhLWNoYXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtY2hhdC9iYXJzYS1jaGF0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBOEIzRSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsaUJBQWlCO0lBNUJ6RDs7UUE2QmEsV0FBTSxHQUFHLElBQUksQ0FBQztRQUV2QixrQkFBYSxHQUFHLCtEQUErRCxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRixvQkFBZSxHQUFHLDhEQUE4RCxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RixrQkFBYSxHQUFHLENBQ1osbUZBQW1GO1lBQ25GLCtGQUErRjtZQUMvRiw0RkFBNEY7WUFDNUYsMkZBQTJGO1lBQzNGLDJGQUEyRjtZQUMzRix5RkFBeUY7WUFDekYsMEZBQTBGO1lBQzFGLDhFQUE4RSxDQUNqRixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLFlBQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO2FBQ2QsSUFB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LEVBQUU7NEJBQzVCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2pCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUM7Z0NBQ25ELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDOzZCQUMvRSxDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2pCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dDQUNqRCxPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQzs2QkFDaEYsQ0FBQzt5QkFDTCxDQUFDO3FCQUNMOzhCQUdRLE1BQU07c0JBQWQsS0FBSztnQkFDaUQsa0JBQWtCO3NCQUF4RSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIFZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBqbW9tZW50IGZyb20gJ21vbWVudC1qYWxhYWxpJztcbmltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBGb3JtQmFzZUNvbXBvbmVudCwgRm9ybVBhbmVsU2VydmljZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtY2hhdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhcnNhLWNoYXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9iYXJzYS1jaGF0LmNvbXBvbmVudC5jc3MnLFxuICAgIHByb3ZpZGVyczogW0Zvcm1QYW5lbFNlcnZpY2VdLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignaW5Db250ZW50QW5pbWF0aW9uJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGUoNTAlLCA1MCUpJyB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGUoMTAwJSwgMTAwJSknIH0pKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZSgxMDAlLCAxMDAlKScgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGUoNTAlLCA1MCUpJyB9KSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdpbk91dFJlcGx5aW5nTWVzc2FnZScsIFtcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoNTAlKScgfSksXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDUwJSknIH0pKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEJhcnNhQ2hhdENvbXBvbmVudCBleHRlbmRzIEZvcm1CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHNpbXBsZSA9IHRydWU7XG4gICAgQFZpZXdDaGlsZCgnY2hhdENvbnRlbnRFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNoYXRDb250ZW50RWxlbWVudDogRWxlbWVudFJlZjtcbiAgICByYW5kb21OYW1lQXJyID0gJ9i52YTbjCDYrdiz2YYg2K3Ys9uM2YYg2KrZgtuMINmG2YLbjCDZhdit2YXYryDZhdmH2K/bjCDYrNin2YjbjNivINmF2K3Zhdiv2LHYttinINqp2LHbjNmFINmH2YjYtNmG2q8g2b7bjNmF2KfZhicuc3BsaXQoJyAnKTtcbiAgICByYW5kb21GYW1pbHlBcnIgPSAn2qnYsduM2YXbjCDYrdiz24zZhtuMINiy2KfYsdi524wg2KrZgtmI24wg2qnYp9i42YXbjCDZgtmG2KjYsduMINmG2KjZiNuM2KfZhiDYp9mB2LTYp9ixINix2KfYr9mF2YbYryDZhdit2YXYr9uMJy5zcGxpdCgnICcpO1xuICAgIHJhbmRvbVRleHRBcnIgPSAoXG4gICAgICAgICfZhNmI2LHZhSDYp9uM2b7Ys9mI2YUg2YXYqtmGINiz2KfYrtiq2q/bjCDYqNinINiq2YjZhNuM2K8g2LPYp9iv2q/bjCDZhtin2YXZgdmH2YjZhSDYp9iyINi12YbYudiqINqG2KfZvtiMINmIINio2Kcg2KfYs9iq2YHYp9iv2Ycg2KfYsiDYt9ix2KfYrdin2YYnICtcbiAgICAgICAgJyDar9ix2KfZgduM2qkg2KfYs9iq2Iwg2obYp9m+2q/YsdmH2Kcg2Ygg2YXYqtmI2YYg2KjZhNqp2Ycg2LHZiNiy2YbYp9mF2Ycg2Ygg2YXYrNmE2Ycg2K/YsSDYs9iq2YjZhiDZiCDYs9i32LHYotmG2obZhtin2YYg2qnZhyDZhNin2LLZhSDYp9iz2KrYjCDZiCDYqNix2KfbjCDYtNix2KfbjNi3JyArXG4gICAgICAgICcg2YHYudmE24wg2KraqdmG2YjZhNmI2pjbjCDZhdmI2LHYryDZhtuM2KfYstiMINmIINqp2KfYsdio2LHYr9mH2KfbjCDZhdiq2YbZiNi5INio2Kcg2YfYr9mBINio2YfYqNmI2K8g2KfYqNiy2KfYsdmH2KfbjCDaqdin2LHYqNix2K/bjCDZhduMINio2KfYtNiv2Iwg2qnYqtin2KjZh9in24wnICtcbiAgICAgICAgJyDYstuM2KfYr9uMINiv2LEg2LTYtdiqINmIINiz2Ycg2K/Ysdi12K8g2q/YsNi02KrZhyDYrdin2YQg2Ygg2KLbjNmG2K/Zh9iMINi02YbYp9iu2Kog2YHYsdin2YjYp9mGINis2KfZhdi52Ycg2Ygg2YXYqtiu2LXYtdin2YYg2LHYpyDZhduMINi32YTYqNiv2Iwg2KrYpyDYqNinJyArXG4gICAgICAgICcg2YbYsdmFINin2YHYstin2LHZh9inINi02YbYp9iu2Kog2KjbjNi02KrYsduMINix2Kcg2KjYsdin24wg2LfYsdin2K3Yp9mGINix2KfbjNin2YbZhyDYp9uMINi52YTbjCDYp9mE2K7YtdmI2LUg2LfYsdin2K3Yp9mGINiu2YTYp9mC24zYjCDZiCDZgdix2YfZhtqvINm+24zYtNix2YgnICtcbiAgICAgICAgJyDYr9ixINiy2KjYp9mGINmB2KfYsdiz24wg2KfbjNis2KfYryDaqdix2K/YjCDYr9ixINin24zZhiDYtdmI2LHYqiDZhduMINiq2YjYp9mGINin2YXbjNivINiv2KfYtNiqINqp2Ycg2KrZhdin2YUg2Ygg2K/YtNmI2KfYsduMINmF2YjYrNmI2K8g2K/YsSDYp9ix2KfYptmHJyArXG4gICAgICAgICcg2LHYp9mH2qnYp9ix2YfYp9iMINmIINi02LHYp9uM2Lcg2LPYrtiqINiq2KfbjNm+INio2Ycg2b7Yp9uM2KfZhiDYsdiz2K8g2Ygg2LLZhdin2YYg2YXZiNix2K8g2YbbjNin2LIg2LTYp9mF2YQg2K3YsdmI2YHahtuM2YbbjCDYr9iz2KrYp9mI2LHYr9mH2KfbjCDYp9i12YTbjNiMJyArXG4gICAgICAgICcg2Ygg2KzZiNin2Kjar9mI24wg2LPZiNin2YTYp9iqINm+24zZiNiz2KrZhyDYp9mH2YQg2K/ZhtuM2KfbjCDZhdmI2KzZiNivINi32LHYp9it24wg2KfYs9in2LPYpyDZhdmI2LHYryDYp9iz2KrZgdin2K/ZhyDZgtix2KfYsSDar9uM2LHYry4nXG4gICAgKS5zcGxpdCgnICcpO1xuICAgIHRocmVhZHMgPSBBcnJheSgyMClcbiAgICAgICAgLmZpbGwobnVsbClcbiAgICAgICAgLm1hcCgodCkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBNYXRoLnJhbmRvbSgpICogMTAwMCxcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgIHRoaXMucmFuZG9tTmFtZUFycltNYXRoLmZsb29yKHRoaXMucmFuZG9tTmFtZUFyci5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKV0gK1xuICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5kb21GYW1pbHlBcnJbTWF0aC5mbG9vcih0aGlzLnJhbmRvbUZhbWlseUFyci5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKV0sXG4gICAgICAgICAgICBhdmF0YXI6ICdodHRwczovL3BpY3N1bS5waG90b3MvMTAwP3dvcmtBcm91bmQ9JyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCksXG4gICAgICAgICAgICBzdGF0dXM6IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDQpLFxuICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0aGlzLnJhbmRvbURhdGUobmV3IERhdGUoJzIwMjQtMDMtMDMnKSwgbmV3IERhdGUoKSksXG4gICAgICAgICAgICB1bnJlYWRDb3VudDogTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKSA/IDEgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMCkgOiAwLFxuICAgICAgICAgICAgcGlubmVkOiAhIU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSksXG4gICAgICAgICAgICBtdXRlZDogISFNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkpLFxuICAgICAgICAgICAgbGFzdE1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICBpZDogTWF0aC5yYW5kb20oKSAqIDEwMDAsXG4gICAgICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IDEyMzQsXG4gICAgICAgICAgICAgICAgICAgIGF2YXRhcjogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy8xMDA/d29ya0Fyb3VuZD0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ9mF2YfYr9uMINiy2KfYsdi524wnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnNodWZmbGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZG9tVGV4dEFyci5zbGljZSgwLCAxICsgTWF0aC5mbG9vcih0aGlzLnJhbmRvbVRleHRBcnIubGVuZ3RoICogTWF0aC5yYW5kb20oKSkpXG4gICAgICAgICAgICAgICAgKS5qb2luKCcgJyksXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIC50b1RpbWVTdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJyAnKVswXVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJzonKVxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgMilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgocykgPT4gcy5wYWRTdGFydCgyLCAnMCcpKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignOicpLFxuICAgICAgICAgICAgICAgIGRlbGl2ZXJlZEF0OiBuZXcgRGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIC50b1RpbWVTdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJyAnKVswXVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJzonKVxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgMilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgocykgPT4gcy5wYWRTdGFydCgyLCAnMCcpKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignOicpLFxuICAgICAgICAgICAgICAgIHJlYWRBdDogbmV3IERhdGUoKVxuICAgICAgICAgICAgICAgICAgICAudG9UaW1lU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCc6JylcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIDIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMucGFkU3RhcnQoMiwgJzAnKSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJzonKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgbW9tZW50ID0gam1vbWVudDtcbiAgICBzZWxlY3RlZFRocmVhZDogV3JpdGFibGVTaWduYWw8YW55IHwgbnVsbD4gPSBzaWduYWwobnVsbCk7XG4gICAgbWVzc2FnZXM6IFdyaXRhYmxlU2lnbmFsPGFueVtdIHwgbnVsbD4gPSBzaWduYWwobnVsbCk7XG4gICAgcmVwbHlpbmdNZXNzYWdlOiBXcml0YWJsZVNpZ25hbDxhbnkgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgICBtZXNzYWdlVGV4dCA9ICcnO1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2NoYXQtbW9kZScpO1xuICAgICAgICB0aGlzLnNlbGVjdFRocmVhZCh0aGlzLnRocmVhZHNbMF0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdjaGF0LW1vZGUnKTtcbiAgICB9XG4gICAgc2Nyb2xsVG9Cb3R0b20oZm9yY2UgPSBmYWxzZSwgaW5zdGFudCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhdENvbnRlbnRFbGVtZW50Py5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZm9yY2UgfHwgKGNvbnRhaW5lciAmJiBjb250YWluZXIuc2Nyb2xsVG9wTWF4IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8IDMwMCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT5cbiAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgICAgICAgICB0b3A6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBpbnN0YW50ID8gJ2luc3RhbnQnIDogJ3Ntb290aCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBjaGVja0lucHV0KGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVGV4dCA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQ7XG4gICAgfVxuICAgIHNlbmRNZXNzYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tZXNzYWdlVGV4dD8udHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcz8uc2V0KFtcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tZXNzYWdlcygpIGFzIGFueVtdKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBNYXRoLnJhbmRvbSgpICogMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAxMjM0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMD93b3JrQXJvdW5kPScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ9mF2YfYr9uMINiy2KfYsdi524wnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZGVsaXZlcmVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIHJlYWRBdDogbmV3IERhdGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dCA9ICcnO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtdGV4dGFyZWEnKTtcbiAgICAgICAgICAgIGlmIChpbnB1dE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBpbnB1dE1lc3NhZ2UuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBpbnB1dE1lc3NhZ2UuaW5uZXJUZXh0ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRydWUpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlcz8uc2V0KFtcbiAgICAgICAgICAgICAgICAgICAgLi4uKHRoaXMubWVzc2FnZXMoKSBhcyBhbnlbXSksXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNYXRoLnJhbmRvbSgpICogMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDQzMjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMD93b3JrQXJvdW5kPScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuc2VsZWN0ZWRUaHJlYWQoKS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc2h1ZmZsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbmRvbVRleHRBcnIuc2xpY2UoMCwgMSArIE1hdGguZmxvb3IodGhpcy5yYW5kb21UZXh0QXJyLmxlbmd0aCAqIE1hdGgucmFuZG9tKCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKS5qb2luKCcgJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRBdDogbmV3IERhdGUoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0cnVlKTtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEF0dGFjaG1lbnQoKTogdm9pZCB7fVxuICAgIHNlbGVjdFRocmVhZCh0aHJlYWQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGhyZWFkLnNldCh0aHJlYWQpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzLnNldChcbiAgICAgICAgICAgIEFycmF5KDQwKVxuICAgICAgICAgICAgICAgIC5maWxsKG51bGwpXG4gICAgICAgICAgICAgICAgLm1hcCgodCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvd25lclVzZXIgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1RleHQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWdPcmlnaW5hbFdpZHRoID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjAwKSArIDIwMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nT3JpZ2luYWxIZWlnaHQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMDApICsgMjAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1hdGgucmFuZG9tKCkgKiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogb3duZXJVc2VyID8gMTIzNCA6IDQzMjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMD93b3JrQXJvdW5kPScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG93bmVyVXNlciA/ICfZhdmH2K/bjCDYstin2LHYuduMJyA6IHRocmVhZC50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2VUeXBlID4gMC41ICYmIGhhc1RleHQpIHx8IG1lc3NhZ2VUeXBlIDw9IDAuNVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2h1ZmZsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5kb21UZXh0QXJyLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlVHlwZSA+IDAuNSA/IDMwIDogdGhpcy5yYW5kb21UZXh0QXJyLmxlbmd0aCkgKiBNYXRoLnJhbmRvbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlID4gMC44NVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ9uM2qkg2LnYr9ivINmB2KfbjNmEJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0OiBbJ3BuZycsICdqcGcnLCAncGRmJywgJ2RvY3MnLCAnY3N2J11bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyfYqNin24zYqicsICfaqduM2YTZiNio2KfbjNiqJywgJ9mF2q/Yp9io2KfbjNiqJ11bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlIDw9IDAuODUgJiYgbWVzc2FnZVR5cGUgPiAwLjVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICfbjNqpINi52K/YryDYudqp2LMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL3BpY3N1bS5waG90b3MvJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMDAwKX0vJHtNYXRoLmZsb29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yYW5kb20oKSAqIDIwMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX0/d29ya0Fyb3VuZD0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxXaWR0aDogaW1nT3JpZ2luYWxXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxIZWlnaHQ6IGltZ09yaWdpbmFsSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogdGhpcy5yYW5kb21EYXRlKG5ldyBEYXRlKCcyMDI0LTAzLTAzJyksIG5ldyBEYXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcmVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQXQ6IG5ldyBEYXRlKClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZWRBdC5nZXRUaW1lKCkgLSBiLmNyZWF0ZWRBdC5nZXRUaW1lKCkpXG4gICAgICAgICk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxUb0JvdHRvbSh0cnVlLCB0cnVlKSk7XG4gICAgfVxuICAgIHJhbmRvbURhdGUoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IERhdGUge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoc3RhcnQuZ2V0VGltZSgpICsgTWF0aC5yYW5kb20oKSAqIChlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpKSk7XG4gICAgfVxuICAgIHNodWZmbGUoYXJyYXk6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBsZXQgcmFuZG9tSW5kZXggPSAxO1xuICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4ID4gMCkge1xuICAgICAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgY3VycmVudEluZGV4LS07XG4gICAgICAgICAgICBbYXJyYXlbY3VycmVudEluZGV4XSwgYXJyYXlbcmFuZG9tSW5kZXhdXSA9IFthcnJheVtyYW5kb21JbmRleF0sIGFycmF5W2N1cnJlbnRJbmRleF1dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG59XG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cInR3LWZsZXggdHctdy1mdWxsIHR3LWJnLWdyYWRpZW50LXRvLXIgdHctZnJvbS1bIzVkNmU3Zl0gdHctdG8tWyMzNTRhNWZdIGRhcms6dHctZnJvbS1bIzI1MzQ0M10gZGFyazp0dy10by1bIzEwMTYxY11cIlxyXG4gICAgZmlsbEVtcHR5U3BhY2VcclxuICAgIFtjbGFzcy50dy1oLXNjcmVlbl09XCIhc2ltcGxlXCJcclxuICAgIFtjbGFzcy50dy1qdXN0aWZ5LWNlbnRlcl09XCJzaW1wbGVcIlxyXG4+XHJcbiAgICBAaWYgKCFzaW1wbGUpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ0dy1iZy1ibGFjay9bLjNdIDJ4bDp0dy1ncm93IHR3LXNocmluayB0dy1oLWZ1bGxcIj48L2Rpdj5cclxuICAgIH1cclxuICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInR3LWgtZnVsbCB0dy1mbGV4IDJ4bDp0dy1jb250YWluZXIgbWF4LXctWzgwcmVtXSB0dy1zaHJpbmstMCB0dy1yZWxhdGl2ZVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAndHctZ3JvdyAyeGw6dHctZ3Jvdy0wJzogIXNpbXBsZSxcclxuICAgICAgICAgICAgJ3R3LXctZnVsbCc6IHNpbXBsZVxyXG4gICAgICAgIH1cIlxyXG4gICAgPlxyXG4gICAgICAgIEBpZiAoIXNpbXBsZSkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1ncm93LTAgdHctc2hyaW5rLTAgdHctdy1mdWxsIG1kOnR3LXctOTYgdHctcC0wIG1kOnR3LXAtNlwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctdy1mdWxsIHR3LWgtZnVsbCB0dy1vdmVyZmxvdy1oaWRkZW4gdHctYm9yZGVyLWwgdHctYm9yZGVyLWwtZ3JheS0zMDAgbWQ6dHctcm91bmRlZC0yeGwgbWQ6dHctYm9yZGVyIG1kOnR3LWJvcmRlci1sLWdyYXktMzAwIG1kOnR3LWJvcmRlci1ncmF5LTMwMCBkYXJrOnR3LWJvcmRlci1sLWdyYXktNjAwIG1kOmRhcms6dHctYm9yZGVyLWwtZ3JheS02MDAgbWQ6ZGFyazp0dy1ib3JkZXItZ3JheS02MDBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YnN1LWJhcnNhLWNoYXQtdGhyZWFkcy1saXN0LXRvb2xiYXI+PC9ic3UtYmFyc2EtY2hhdC10aHJlYWRzLWxpc3QtdG9vbGJhcj5cclxuICAgICAgICAgICAgICAgIDxic3UtYmFyc2EtY2hhdC10aHJlYWRzLWxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAodGhyZWFkIG9mIHRocmVhZHM7IHRyYWNrIHRocmVhZC5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxic3UtYmFyc2EtY2hhdC10aHJlYWQgW3RocmVhZF09XCJ0aHJlYWRcIiAoY2xpY2spPVwic2VsZWN0VGhyZWFkKHRocmVhZClcIj48L2JzdS1iYXJzYS1jaGF0LXRocmVhZD5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2JzdS1iYXJzYS1jaGF0LXRocmVhZHMtbGlzdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInR3LWFic29sdXRlIHR3LXRvcC0wIHR3LWxlZnQtMCB0dy13LWZ1bGwgdHctaC1mdWxsIHR3LWJnLVt1cmwoJ2Fzc2V0cy9jaGF0LWJnLnBuZycpXSB0dy1iZy1maXhlZCB0dy1vcGFjaXR5LTI1XCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJ0dy1ncm93IHR3LXNocmluayB0dy1yZWxhdGl2ZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdtZDp0dy1weS02IG1kOnR3LXBsLTYgdHctaGlkZGVuIG1kOnR3LWZsZXgnOiAhc2ltcGxlLFxyXG4gICAgICAgICAgICAgICAgJ3R3LWZsZXgnOiBzaW1wbGVcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICBAaWYgKHNlbGVjdGVkVGhyZWFkKCkpIHtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgQGluQ29udGVudEFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1oLWZ1bGwgdHctdy1mdWxsIHR3LWZsZXggdHctZmxleC1jb2wgdHctcmVsYXRpdmUgbWQ6dHctYm9yZGVyLWdyYXktMzAwIG1kOmRhcms6dHctYm9yZGVyLWdyYXktNjAwIHR3LW92ZXJmbG93LWhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgJ21kOnR3LWJvcmRlciBtZDp0dy1yb3VuZGVkLTJ4bCc6ICFzaW1wbGVcclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YnN1LWJhcnNhLWNoYXQtY29udGVudC10b29sYmFyXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInNlbGVjdGVkVGhyZWFkKCkudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdWJ0aXRsZV09XCIn2YXYrdmF2K8g2YXYrdmF2K/bjCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdmF0YXJdPVwic2VsZWN0ZWRUaHJlYWQoKS5hdmF0YXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwic2VsZWN0ZWRUaHJlYWQoKS5zdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgPjwvYnN1LWJhcnNhLWNoYXQtY29udGVudC10b29sYmFyPlxyXG4gICAgICAgICAgICAgICAgPGJzdS1iYXJzYS1jaGF0LWNvbnRlbnQgaWQ9XCJjaGF0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihsYXlvdXQ5NCQgfCBhc3luYzthcyBsYXlvdXQ5NCl7IEBpZiAoJ9mE24zYs9iqINqv2YHYqtqv2YgnIHwgY29udHJvbFVpOiBsYXlvdXQ5NDsgYXMgY29uZmlnVWkpIHtcclxuICAgICAgICAgICAgICAgICAgICA8YnN1LWxheW91dC1jb250cm9sIFtjb25maWddPVwiY29uZmlnVWlcIj48L2JzdS1sYXlvdXQtY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICB9IH1cclxuICAgICAgICAgICAgICAgIDwvYnN1LWJhcnNhLWNoYXQtY29udGVudD5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctZnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAndHctcmVsYXRpdmUnOiAhc2ltcGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnMnhsOnR3LXJvdW5kZWQtdC14bCB0dy1ncm93LTAgdHctc2hyaW5rLTAnOiBzaW1wbGVcclxuICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKHJlcGx5aW5nTWVzc2FnZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5PdXRSZXBseWluZ01lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy13LWZ1bGwgdHctcHgtMiB0dy1weS0xIHR3LWJvcmRlci1yLTQgdHctYm9yZGVyLXItYnViYmxlLW1pbmUgdHctZmxleCB0dy1nYXAtMiB0ZS1pdGVtcy1jZW50ZXIgdHctYWJzb2x1dGUgdHctei0wIHR3LWJnLWRlZmF1bHQgdHctcmlnaHQtMCAtdHctdG9wLTE0XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJkZWNsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctZ3Jvdy0wIHR3LXNocmluay0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXBseWluZ01lc3NhZ2Uuc2V0KG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1mbGV4LWNvbCB0dy1ncm93IHR3LXNocmluayB0dy1vdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctZm9udC1ib2xkXCI+e3sgcmVwbHlpbmdNZXNzYWdlKCkub3duZXIubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctdHJ1bmNhdGVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5aW5nTWVzc2FnZSgpLnRleHQgPz8gcmVwbHlpbmdNZXNzYWdlKCkuZmlsZT8ubmFtZSA/PyByZXBseWluZ01lc3NhZ2UoKS5pbWFnZT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdy04IHR3LXNocmluay0wIHR3LWdyb3ctMFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdy1mdWxsIHR3LXAtMiB0dy1mbGV4IHR3LWdhcC0yIHR3LWJvcmRlci10IHR3LWJvcmRlci10LWdyYXktMzAwIGRhcms6dHctYm9yZGVyLXQtZ3JheS02MDAgdHctYmctZGVmYXVsdCB0dy1pdGVtcy1lbmQgdHctei0xMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtcG9wb3ZlciBwbGFjZW1lbnQ9XCJ0b3Atc3RhcnRcIiB0aXRsZT1cInRvcC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwiYXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIXR3LXJvdW5kZWQtZnVsbCB0dy1zaHJpbmstMCB0dy1ncm93LTAgIXR3LXNpemUtMTAgIXR3LW1pbi1oLTEwICF0dy1tYXgtaC0xMCAhdHctbWluLXctMTAgIXR3LW1heC13LTEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEF0dGFjaG1lbnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5IG1pbldpZHRoPVwiMTByZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1mbGV4LWNvbCB0dy1iZy1kZWZhdWx0IHR3LXctZnVsbFwiIGJvZHlDbGljaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXB4LTQgdHctcHktMiB0dy1mbGV4IHR3LWdhcC0yIHR3LXctZnVsbCBob3Zlcjp0dy1iZy1iYXNlL1suMV0gdHctdHJhbnNpdGlvbi1hbGwgdHctY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2UgIXR3LXRleHQtM3hsXCIgZ2x5cGg9XCJjYW1lcmFcIj48L2ZkLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2VcIj7Yp9ix2LPYp9mEINi52qnYszwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInR3LWhpZGRlblwiIHR5cGU9XCJmaWxlXCIgaWQ9XCJpbWdcIiBuYW1lPVwiaW1nXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1weC00IHR3LXB5LTIgdHctZmxleCB0dy1nYXAtMiB0dy13LWZ1bGwgaG92ZXI6dHctYmctYmFzZS9bLjFdIHR3LXRyYW5zaXRpb24tYWxsIHR3LWN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gY2xhc3M9XCIhdHctdGV4dC1iYXNlICF0dy10ZXh0LTN4bFwiIGdseXBoPVwiYWRkLWRvY3VtZW50XCI+PC9mZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdHctdGV4dC1iYXNlXCI+2KfYsdiz2KfZhCDZgdin24zZhDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInR3LWhpZGRlblwiIHR5cGU9XCJmaWxlXCIgaWQ9XCJmaWxlXCIgbmFtZT1cImZpbGVcIiBhY2NlcHQ9XCJmaWxlLypcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWlubGluZS1mbGV4IHR3LXJlbGF0aXZlIHR3LWdyb3cgdHctc2hyaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZmVlZC1pbnB1dCBbYXR0ci5hcmlhLWxhYmVsXT1cIifZhdiq2YYg2b7bjNin2YUnXCIgY2xhc3M9XCJ0dy1mbGV4LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYXZhdGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkRmVlZElucHV0QXZhdGFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIifYsdin2YfYqNixJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCInJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1hdmF0YXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGZkLWZvcm0tY29udHJvbCBmZEZlZWRJbnB1dFRleHRhcmVhIHBsYWNlaG9sZGVyPVwi2YXYqtmGINm+24zYp9mFXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkRmVlZElucHV0QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbmQnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidTZW5kJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZW5kTWVzc2FnZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWZlZWQtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1hYnNvbHV0ZSB0dy10b3AtMS8yIC10dy10cmFuc2xhdGUteS0xLzIgdHctbGVmdC0xLzIgLXR3LXRyYW5zbGF0ZS14LTEvMiB0dy1mbGV4IHR3LWZsZXgtY29sIHR3LWdhcC04IHR3LWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL25vdC1zZWxlY3RlZC1jaGF0LnBuZ1wiIGNsYXNzPVwidHctdy02NCB0dy1vcGFjaXR5LTI1XCIgLz5cclxuICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3LXRleHQteGwgdHctZm9udC1ib2xkIHR3LXRleHQtZ3JheS00MDAgZGFyazp0dy10ZXh0LWdyYXktNTAwXCI+LS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgINio2LHYp9uMINi02LHZiNi5INuM2qkg2obYqiDYsdinINin2YbYqtiu2KfYqCDaqdmG24zYry0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDwvc3Bhbj4tLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmICghc2ltcGxlKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwidHctYmctYmxhY2svWy4zXSAyeGw6dHctZ3JvdyB0dy1zaHJpbmsgdHctaC1mdWxsXCI+PC9kaXY+XHJcbiAgICB9XHJcbjwvZGl2PlxyXG4iXX0=
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1zYXAtdWkvc3JjL2xpYi9iYXJzYS1jaGF0L2JhcnNhLWNoYXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtY2hhdC9iYXJzYS1jaGF0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QnJGLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUE1QnpEOztRQTZCYSxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGtCQUFhLEdBQUcsK0RBQStELENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNGLG9CQUFlLEdBQUcsOERBQThELENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVGLGtCQUFhLEdBQUcsQ0FDWixtRkFBbUY7WUFDbkYsK0ZBQStGO1lBQy9GLDRGQUE0RjtZQUM1RiwyRkFBMkY7WUFDM0YsMkZBQTJGO1lBQzNGLHlGQUF5RjtZQUN6RiwwRkFBMEY7WUFDMUYsOEVBQThFLENBQ2pGLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDZCxJQUFJLENBQUMsSUFB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QUM7NkJBQ25GLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDakIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztnQ0FDckQsT0FBTyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7NkJBQ2hGLENBQUM7eUJBQ0wsQ0FBQzt3QkFDRixPQUFPLENBQUMsc0JBQXNCLEVBQUU7NEJBQzVCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2pCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUM7Z0NBQ25ELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDOzZCQUMvRSxDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2pCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dDQUNqRCxPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQzs2QkFDaEYsQ0FBQzt5QkFDTCxDQUFDO3FCQUNMOzhCQUdRLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgam1vbWVudCBmcm9tICdtb21lbnQtamFsYWFsaSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUJhc2VDb21wb25lbnQsIEZvcm1QYW5lbFNlcnZpY2UsIEJhcnNhQXBpIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1iYXJzYS1jaGF0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtY2hhdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2JhcnNhLWNoYXQuY29tcG9uZW50LmNzcycsXG4gICAgcHJvdmlkZXJzOiBbRm9ybVBhbmVsU2VydmljZV0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdpbkNvbnRlbnRBbmltYXRpb24nLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSg1MCUsIDUwJSknIH0pLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2Utb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZSgxMDAlLCAxMDAlKScgfSkpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEwMCUsIDEwMCUpJyB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSg1MCUsIDUwJSknIH0pKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIHRyaWdnZXIoJ2luT3V0UmVwbHlpbmdNZXNzYWdlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSg1MCUpJyB9KSxcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScgfSkpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pLFxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoNTAlKScgfSkpXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQmFyc2FDaGF0Q29tcG9uZW50IGV4dGVuZHMgRm9ybUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgc2ltcGxlID0gdHJ1ZTtcblxuICAgIHJhbmRvbU5hbWVBcnIgPSAn2LnZhNuMINit2LPZhiDYrdiz24zZhiDYqtmC24wg2YbZgtuMINmF2K3ZhdivINmF2YfYr9uMINis2KfZiNuM2K8g2YXYrdmF2K/Ysdi22Kcg2qnYsduM2YUg2YfZiNi02YbaryDZvtuM2YXYp9mGJy5zcGxpdCgnICcpO1xuICAgIHJhbmRvbUZhbWlseUFyciA9ICfaqdix24zZhduMINit2LPbjNmG24wg2LLYp9ix2LnbjCDYqtmC2YjbjCDaqdin2LjZhduMINmC2YbYqNix24wg2YbYqNmI24zYp9mGINin2YHYtNin2LEg2LHYp9iv2YXZhtivINmF2K3Zhdiv24wnLnNwbGl0KCcgJyk7XG4gICAgcmFuZG9tVGV4dEFyciA9IChcbiAgICAgICAgJ9mE2YjYsdmFINin24zZvtiz2YjZhSDZhdiq2YYg2LPYp9iu2Krar9uMINio2Kcg2KrZiNmE24zYryDYs9in2K/ar9uMINmG2KfZhdmB2YfZiNmFINin2LIg2LXZhti52Kog2obYp9m+2Iwg2Ygg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINi32LHYp9it2KfZhicgK1xuICAgICAgICAnINqv2LHYp9mB24zaqSDYp9iz2KrYjCDahtin2b7ar9ix2YfYpyDZiCDZhdiq2YjZhiDYqNmE2qnZhyDYsdmI2LLZhtin2YXZhyDZiCDZhdis2YTZhyDYr9ixINiz2KrZiNmGINmIINiz2LfYsdii2YbahtmG2KfZhiDaqdmHINmE2KfYstmFINin2LPYqtiMINmIINio2LHYp9uMINi02LHYp9uM2LcnICtcbiAgICAgICAgJyDZgdi52YTbjCDYqtqp2YbZiNmE2YjamNuMINmF2YjYsdivINmG24zYp9iy2Iwg2Ygg2qnYp9ix2KjYsdiv2YfYp9uMINmF2KrZhtmI2Lkg2KjYpyDZh9iv2YEg2KjZh9io2YjYryDYp9io2LLYp9ix2YfYp9uMINqp2KfYsdio2LHYr9uMINmF24wg2KjYp9i02K/YjCDaqdiq2KfYqNmH2KfbjCcgK1xuICAgICAgICAnINiy24zYp9iv24wg2K/YsSDYtNi12Kog2Ygg2LPZhyDYr9ix2LXYryDar9iw2LTYqtmHINit2KfZhCDZiCDYotuM2YbYr9mH2Iwg2LTZhtin2K7YqiDZgdix2KfZiNin2YYg2KzYp9mF2LnZhyDZiCDZhdiq2K7Ytdi12KfZhiDYsdinINmF24wg2LfZhNio2K/YjCDYqtinINio2KcnICtcbiAgICAgICAgJyDZhtix2YUg2KfZgdiy2KfYsdmH2Kcg2LTZhtin2K7YqiDYqNuM2LTYqtix24wg2LHYpyDYqNix2KfbjCDYt9ix2KfYrdin2YYg2LHYp9uM2KfZhtmHINin24wg2LnZhNuMINin2YTYrti12YjYtSDYt9ix2KfYrdin2YYg2K7ZhNin2YLbjNiMINmIINmB2LHZh9mG2q8g2b7bjNi02LHZiCcgK1xuICAgICAgICAnINiv2LEg2LLYqNin2YYg2YHYp9ix2LPbjCDYp9uM2KzYp9ivINqp2LHYr9iMINiv2LEg2KfbjNmGINi12YjYsdiqINmF24wg2KrZiNin2YYg2KfZhduM2K8g2K/Yp9i02Kog2qnZhyDYqtmF2KfZhSDZiCDYr9i02YjYp9ix24wg2YXZiNis2YjYryDYr9ixINin2LHYp9im2YcnICtcbiAgICAgICAgJyDYsdin2Yfaqdin2LHZh9in2Iwg2Ygg2LTYsdin24zYtyDYs9iu2Kog2KrYp9uM2b4g2KjZhyDZvtin24zYp9mGINix2LPYryDZiCDYstmF2KfZhiDZhdmI2LHYryDZhtuM2KfYsiDYtNin2YXZhCDYrdix2YjZgdqG24zZhtuMINiv2LPYqtin2YjYsdiv2YfYp9uMINin2LXZhNuM2IwnICtcbiAgICAgICAgJyDZiCDYrNmI2KfYqNqv2YjbjCDYs9mI2KfZhNin2Kog2b7bjNmI2LPYqtmHINin2YfZhCDYr9mG24zYp9uMINmF2YjYrNmI2K8g2LfYsdin2K3bjCDYp9iz2KfYs9inINmF2YjYsdivINin2LPYqtmB2KfYr9mHINmC2LHYp9ixINqv24zYsdivLidcbiAgICApLnNwbGl0KCcgJyk7XG4gICAgdGhyZWFkcyA9IEFycmF5KDIwKVxuICAgICAgICAuZmlsbChudWxsKVxuICAgICAgICAubWFwKCh0KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IE1hdGgucmFuZG9tKCkgKiAxMDAwLFxuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICAgdGhpcy5yYW5kb21OYW1lQXJyW01hdGguZmxvb3IodGhpcy5yYW5kb21OYW1lQXJyLmxlbmd0aCAqIE1hdGgucmFuZG9tKCkpXSArXG4gICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmRvbUZhbWlseUFycltNYXRoLmZsb29yKHRoaXMucmFuZG9tRmFtaWx5QXJyLmxlbmd0aCAqIE1hdGgucmFuZG9tKCkpXSxcbiAgICAgICAgICAgIGF2YXRhcjogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy8xMDA/d29ya0Fyb3VuZD0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKSxcbiAgICAgICAgICAgIHN0YXR1czogTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCksXG4gICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRoaXMucmFuZG9tRGF0ZShuZXcgRGF0ZSgnMjAyNC0wMy0wMycpLCBuZXcgRGF0ZSgpKSxcbiAgICAgICAgICAgIHVucmVhZENvdW50OiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkpID8gMSArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIwKSA6IDAsXG4gICAgICAgICAgICBwaW5uZWQ6ICEhTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKSxcbiAgICAgICAgICAgIG11dGVkOiAhIU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSksXG4gICAgICAgICAgICBsYXN0TWVzc2FnZToge1xuICAgICAgICAgICAgICAgIGlkOiBNYXRoLnJhbmRvbSgpICogMTAwMCxcbiAgICAgICAgICAgICAgICBvd25lcjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogMTIzNCxcbiAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMD93b3JrQXJvdW5kPScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAn2YXZh9iv24wg2LLYp9ix2LnbjCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc2h1ZmZsZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5kb21UZXh0QXJyLnNsaWNlKDAsIDEgKyBNYXRoLmZsb29yKHRoaXMucmFuZG9tVGV4dEFyci5sZW5ndGggKiBNYXRoLnJhbmRvbSgpKSlcbiAgICAgICAgICAgICAgICApLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKClcbiAgICAgICAgICAgICAgICAgICAgLnRvVGltZVN0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzBdXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnOicpXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAyKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBzLnBhZFN0YXJ0KDIsICcwJykpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCc6JyksXG4gICAgICAgICAgICAgICAgZGVsaXZlcmVkQXQ6IG5ldyBEYXRlKClcbiAgICAgICAgICAgICAgICAgICAgLnRvVGltZVN0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzBdXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnOicpXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAyKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBzLnBhZFN0YXJ0KDIsICcwJykpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCc6JyksXG4gICAgICAgICAgICAgICAgcmVhZEF0OiBuZXcgRGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIC50b1RpbWVTdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJyAnKVswXVxuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJzonKVxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgMilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgocykgPT4gcy5wYWRTdGFydCgyLCAnMCcpKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignOicpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICBtb21lbnQgPSBqbW9tZW50O1xuICAgIHNlbGVjdGVkVGhyZWFkOiBXcml0YWJsZVNpZ25hbDxhbnkgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgICBtZXNzYWdlczogV3JpdGFibGVTaWduYWw8YW55W10gfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgICByZXBseWluZ01lc3NhZ2U6IFdyaXRhYmxlU2lnbmFsPGFueSB8IG51bGw+ID0gc2lnbmFsKG51bGwpO1xuICAgIF9uZXdNZXNzYWdlVGV4dCA9ICcnO1xuICAgIG9uVGV4dENoYW5nZSgkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmV3TWVzc2FnZVRleHQgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdjaGF0LW1vZGUnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RUaHJlYWQodGhpcy50aHJlYWRzWzBdKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY2hhdC1tb2RlJyk7XG4gICAgfVxuICAgIHNjcm9sbFRvQm90dG9tKGZvcmNlID0gZmFsc2UsIGluc3RhbnQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSAodGhpcy5fZWw/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJyNjaGF0Q29udGVudEVsZW1lbnQnKSBhcyBhbnk7XG4gICAgICAgIGlmIChmb3JjZSB8fCAoY29udGFpbmVyICYmIGNvbnRhaW5lci5zY3JvbGxUb3BNYXggLSBjb250YWluZXIuc2Nyb2xsVG9wIDwgMzAwKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj8uc2Nyb2xsVG8oe1xuICAgICAgICAgICAgICAgICAgICB0b3A6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBpbnN0YW50ID8gJ2luc3RhbnQnIDogJ3Ntb290aCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZW5kTWVzc2FnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX25ld01lc3NhZ2VUZXh0Py50cmltKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHt9KTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXM/LnNldChbXG4gICAgICAgICAgICAgICAgLi4uKHRoaXMubWVzc2FnZXMoKSBhcyBhbnlbXSksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZDogTWF0aC5yYW5kb20oKSAqIDEwMDAsXG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogMTIzNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhcjogJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy8xMDA/d29ya0Fyb3VuZD0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICfZhdmH2K/bjCDYstin2LHYuduMJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLl9uZXdNZXNzYWdlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBkZWxpdmVyZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgcmVhZEF0OiBuZXcgRGF0ZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB0aGlzLl9uZXdNZXNzYWdlVGV4dCA9ICcnO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtdGV4dGFyZWEnKTtcbiAgICAgICAgICAgIGlmIChpbnB1dE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBpbnB1dE1lc3NhZ2UuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBpbnB1dE1lc3NhZ2UuaW5uZXJUZXh0ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEF0dGFjaG1lbnQoKTogdm9pZCB7fVxuICAgIHNlbGVjdFRocmVhZCh0aHJlYWQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGhyZWFkLnNldCh0aHJlYWQpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzLnNldChcbiAgICAgICAgICAgIEFycmF5KDQwKVxuICAgICAgICAgICAgICAgIC5maWxsKG51bGwpXG4gICAgICAgICAgICAgICAgLm1hcCgodCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvd25lclVzZXIgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1RleHQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWdPcmlnaW5hbFdpZHRoID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjAwKSArIDIwMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nT3JpZ2luYWxIZWlnaHQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMDApICsgMjAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IE1hdGgucmFuZG9tKCkgKiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogb3duZXJVc2VyID8gMTIzNCA6IDQzMjEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMD93b3JrQXJvdW5kPScgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG93bmVyVXNlciA/ICfZhdmH2K/bjCDYstin2LHYuduMJyA6IHRocmVhZC50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2VUeXBlID4gMC41ICYmIGhhc1RleHQpIHx8IG1lc3NhZ2VUeXBlIDw9IDAuNVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2h1ZmZsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5kb21UZXh0QXJyLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlVHlwZSA+IDAuNSA/IDMwIDogdGhpcy5yYW5kb21UZXh0QXJyLmxlbmd0aCkgKiBNYXRoLnJhbmRvbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlID4gMC44NVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ9uM2qkg2LnYr9ivINmB2KfbjNmEJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0OiBbJ3BuZycsICdqcGcnLCAncGRmJywgJ2RvY3MnLCAnY3N2J11bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyfYqNin24zYqicsICfaqduM2YTZiNio2KfbjNiqJywgJ9mF2q/Yp9io2KfbjNiqJ11bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlIDw9IDAuODUgJiYgbWVzc2FnZVR5cGUgPiAwLjVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICfbjNqpINi52K/YryDYudqp2LMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL3BpY3N1bS5waG90b3MvJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMDAwKX0vJHtNYXRoLmZsb29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yYW5kb20oKSAqIDIwMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX0/d29ya0Fyb3VuZD0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxXaWR0aDogaW1nT3JpZ2luYWxXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxIZWlnaHQ6IGltZ09yaWdpbmFsSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogdGhpcy5yYW5kb21EYXRlKG5ldyBEYXRlKCcyMDI0LTAzLTAzJyksIG5ldyBEYXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcmVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQXQ6IG5ldyBEYXRlKClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZWRBdC5nZXRUaW1lKCkgLSBiLmNyZWF0ZWRBdC5nZXRUaW1lKCkpXG4gICAgICAgICk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxUb0JvdHRvbSh0cnVlLCB0cnVlKSk7XG4gICAgfVxuICAgIHJhbmRvbURhdGUoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IERhdGUge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoc3RhcnQuZ2V0VGltZSgpICsgTWF0aC5yYW5kb20oKSAqIChlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpKSk7XG4gICAgfVxuICAgIHNodWZmbGUoYXJyYXk6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBsZXQgcmFuZG9tSW5kZXggPSAxO1xuICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4ID4gMCkge1xuICAgICAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgY3VycmVudEluZGV4LS07XG4gICAgICAgICAgICBbYXJyYXlbY3VycmVudEluZGV4XSwgYXJyYXlbcmFuZG9tSW5kZXhdXSA9IFthcnJheVtyYW5kb21JbmRleF0sIGFycmF5W2N1cnJlbnRJbmRleF1dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJ0dy1mbGV4IHR3LXctZnVsbCB0dy1iZy1ncmFkaWVudC10by1yIHR3LWZyb20tWyM1ZDZlN2ZdIHR3LXRvLVsjMzU0YTVmXSBkYXJrOnR3LWZyb20tWyMyNTM0NDNdIGRhcms6dHctdG8tWyMxMDE2MWNdXCJcbiAgICBmaWxsRW1wdHlTcGFjZVxuICAgIFtjbGFzcy50dy1oLXNjcmVlbl09XCIhc2ltcGxlXCJcbiAgICBbY2xhc3MudHctanVzdGlmeS1jZW50ZXJdPVwic2ltcGxlXCJcbj5cbiAgICBAaWYgKCFzaW1wbGUpIHtcbiAgICA8ZGl2IGNsYXNzPVwidHctYmctYmxhY2svWy4zXSAyeGw6dHctZ3JvdyB0dy1zaHJpbmsgdHctaC1mdWxsXCI+PC9kaXY+XG4gICAgfVxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0dy1oLWZ1bGwgdHctZmxleCAyeGw6dHctY29udGFpbmVyIG1heC13LVs4MHJlbV0gdHctc2hyaW5rLTAgdHctcmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAndHctZ3JvdyAyeGw6dHctZ3Jvdy0wJzogIXNpbXBsZSxcbiAgICAgICAgICAgICd0dy13LWZ1bGwnOiBzaW1wbGVcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICBAaWYgKCFzaW1wbGUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInR3LWdyb3ctMCB0dy1zaHJpbmstMCB0dy13LWZ1bGwgbWQ6dHctdy05NiB0dy1wLTAgbWQ6dHctcC02XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1mbGV4IHR3LWZsZXgtY29sIHR3LXctZnVsbCB0dy1oLWZ1bGwgdHctb3ZlcmZsb3ctaGlkZGVuIHR3LWJvcmRlci1sIHR3LWJvcmRlci1sLWdyYXktMzAwIG1kOnR3LXJvdW5kZWQtMnhsIG1kOnR3LWJvcmRlciBtZDp0dy1ib3JkZXItbC1ncmF5LTMwMCBtZDp0dy1ib3JkZXItZ3JheS0zMDAgZGFyazp0dy1ib3JkZXItbC1ncmF5LTYwMCBtZDpkYXJrOnR3LWJvcmRlci1sLWdyYXktNjAwIG1kOmRhcms6dHctYm9yZGVyLWdyYXktNjAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnN1LWJhcnNhLWNoYXQtdGhyZWFkcy1saXN0LXRvb2xiYXI+PC9ic3UtYmFyc2EtY2hhdC10aHJlYWRzLWxpc3QtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICA8YnN1LWJhcnNhLWNoYXQtdGhyZWFkcy1saXN0PlxuICAgICAgICAgICAgICAgICAgICBAZm9yICh0aHJlYWQgb2YgdGhyZWFkczsgdHJhY2sgdGhyZWFkLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxic3UtYmFyc2EtY2hhdC10aHJlYWQgW3RocmVhZF09XCJ0aHJlYWRcIiAoY2xpY2spPVwic2VsZWN0VGhyZWFkKHRocmVhZClcIj48L2JzdS1iYXJzYS1jaGF0LXRocmVhZD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvYnN1LWJhcnNhLWNoYXQtdGhyZWFkcy1saXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0dy1hYnNvbHV0ZSB0dy10b3AtMCB0dy1sZWZ0LTAgdHctdy1mdWxsIHR3LWgtZnVsbCB0dy1iZy1bdXJsKCdhc3NldHMvY2hhdC1iZy5wbmcnKV0gdHctYmctZml4ZWQgdHctb3BhY2l0eS0yNVwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInR3LWdyb3cgdHctc2hyaW5rIHR3LXJlbGF0aXZlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnbWQ6dHctcHktNiBtZDp0dy1wbC02IHR3LWhpZGRlbiBtZDp0dy1mbGV4JzogIXNpbXBsZSxcbiAgICAgICAgICAgICAgICAndHctZmxleCc6IHNpbXBsZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRUaHJlYWQoKSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIEBpbkNvbnRlbnRBbmltYXRpb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWgtZnVsbCB0dy13LWZ1bGwgdHctZmxleCB0dy1mbGV4LWNvbCB0dy1yZWxhdGl2ZSBtZDp0dy1ib3JkZXItZ3JheS0zMDAgbWQ6ZGFyazp0dy1ib3JkZXItZ3JheS02MDAgdHctb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdtZDp0dy1ib3JkZXIgbWQ6dHctcm91bmRlZC0yeGwnOiAhc2ltcGxlXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJzdS1iYXJzYS1jaGF0LWNvbnRlbnQtdG9vbGJhclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwic2VsZWN0ZWRUaHJlYWQoKS50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJ0aXRsZV09XCIn2YXYrdmF2K8g2YXYrdmF2K/bjCdcIlxuICAgICAgICAgICAgICAgICAgICBbYXZhdGFyXT1cInNlbGVjdGVkVGhyZWFkKCkuYXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJzZWxlY3RlZFRocmVhZCgpLnN0YXR1c1wiXG4gICAgICAgICAgICAgICAgPjwvYnN1LWJhcnNhLWNoYXQtY29udGVudC10b29sYmFyPlxuICAgICAgICAgICAgICAgIDxic3UtYmFyc2EtY2hhdC1jb250ZW50IGlkPVwiY2hhdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmKGxheW91dDk0JCB8IGFzeW5jO2FzIGxheW91dDk0KXsgQGlmICgn2YTbjNiz2Kog2q/Zgdiq2q/ZiCcgfCBjb250cm9sVWk6IGxheW91dDk0OyBhcyBjb25maWdVaSkge1xuICAgICAgICAgICAgICAgICAgICA8YnN1LWxheW91dC1jb250cm9sIFtjb25maWddPVwiY29uZmlnVWlcIj48L2JzdS1sYXlvdXQtY29udHJvbD5cbiAgICAgICAgICAgICAgICAgICAgfSB9XG4gICAgICAgICAgICAgICAgPC9ic3UtYmFyc2EtY2hhdC1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy13LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAndHctcmVsYXRpdmUnOiAhc2ltcGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzJ4bDp0dy1yb3VuZGVkLXQteGwgdHctZ3Jvdy0wIHR3LXNocmluay0wJzogc2ltcGxlXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChyZXBseWluZ01lc3NhZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5PdXRSZXBseWluZ01lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdy1mdWxsIHR3LXB4LTIgdHctcHktMSB0dy1ib3JkZXItci00IHR3LWJvcmRlci1yLWJ1YmJsZS1taW5lIHR3LWZsZXggdHctZ2FwLTIgdGUtaXRlbXMtY2VudGVyIHR3LWFic29sdXRlIHR3LXotMCB0dy1iZy1kZWZhdWx0IHR3LXJpZ2h0LTAgLXR3LXRvcC0xNFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJkZWNsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWdyb3ctMCB0dy1zaHJpbmstMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcGx5aW5nTWVzc2FnZS5zZXQobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctZ3JvdyB0dy1zaHJpbmsgdHctb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy1mb250LWJvbGRcIj57eyByZXBseWluZ01lc3NhZ2UoKS5vd25lci5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctdHJ1bmNhdGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseWluZ01lc3NhZ2UoKS50ZXh0ID8/IHJlcGx5aW5nTWVzc2FnZSgpLmZpbGU/Lm5hbWUgPz8gcmVwbHlpbmdNZXNzYWdlKCkuaW1hZ2U/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXctOCB0dy1zaHJpbmstMCB0dy1ncm93LTBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy13LWZ1bGwgdHctcC0yIHR3LWZsZXggdHctZ2FwLTIgdHctYm9yZGVyLXQgdHctYm9yZGVyLXQtZ3JheS0zMDAgZGFyazp0dy1ib3JkZXItdC1ncmF5LTYwMCB0dy1iZy1kZWZhdWx0IHR3LWl0ZW1zLWVuZCB0dy16LTEwXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwidG9wLXN0YXJ0XCIgdGl0bGU9XCJ0b3Atc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwiYXR0YWNobWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiF0dy1yb3VuZGVkLWZ1bGwgdHctc2hyaW5rLTAgdHctZ3Jvdy0wICF0dy1zaXplLTEwICF0dy1taW4taC0xMCAhdHctbWF4LWgtMTAgIXR3LW1pbi13LTEwICF0dy1tYXgtdy0xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQXR0YWNobWVudCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgbWluV2lkdGg9XCIxMHJlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1mbGV4LWNvbCB0dy1iZy1kZWZhdWx0IHR3LXctZnVsbFwiIGJvZHlDbGljaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctcHgtNCB0dy1weS0yIHR3LWZsZXggdHctZ2FwLTIgdHctdy1mdWxsIGhvdmVyOnR3LWJnLWJhc2UvWy4xXSB0dy10cmFuc2l0aW9uLWFsbCB0dy1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gY2xhc3M9XCIhdHctdGV4dC1iYXNlICF0dy10ZXh0LTN4bFwiIGdseXBoPVwiY2FtZXJhXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXR3LXRleHQtYmFzZVwiPtin2LHYs9in2YQg2LnaqdizPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInR3LWhpZGRlblwiIHR5cGU9XCJmaWxlXCIgaWQ9XCJpbWdcIiBuYW1lPVwiaW1nXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1weC00IHR3LXB5LTIgdHctZmxleCB0dy1nYXAtMiB0dy13LWZ1bGwgaG92ZXI6dHctYmctYmFzZS9bLjFdIHR3LXRyYW5zaXRpb24tYWxsIHR3LWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cIiF0dy10ZXh0LWJhc2UgIXR3LXRleHQtM3hsXCIgZ2x5cGg9XCJhZGQtZG9jdW1lbnRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdHctdGV4dC1iYXNlXCI+2KfYsdiz2KfZhCDZgdin24zZhDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0dy1oaWRkZW5cIiB0eXBlPVwiZmlsZVwiIGlkPVwiZmlsZVwiIG5hbWU9XCJmaWxlXCIgYWNjZXB0PVwiZmlsZS8qXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWlubGluZS1mbGV4IHR3LXJlbGF0aXZlIHR3LWdyb3cgdHctc2hyaW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWZlZWQtaW5wdXQgW2F0dHIuYXJpYS1sYWJlbF09XCIn2YXYqtmGINm+24zYp9mFJ1wiIGNsYXNzPVwidHctZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkRmVlZElucHV0QXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ9ix2KfZh9io2LEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCInJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNoYXQtdGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZEZlZWRJbnB1dFRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cItmF2KrZhiDZvtuM2KfZhVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmRGZWVkSW5wdXRUZXh0YXJlYU1heFJvd3NdPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25UZXh0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRGZWVkSW5wdXRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlbmQnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VuZCcgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRNZXNzYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1mZWVkLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWFic29sdXRlIHR3LXRvcC0xLzIgLXR3LXRyYW5zbGF0ZS15LTEvMiB0dy1sZWZ0LTEvMiAtdHctdHJhbnNsYXRlLXgtMS8yIHR3LWZsZXggdHctZmxleC1jb2wgdHctZ2FwLTggdHctaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9ub3Qtc2VsZWN0ZWQtY2hhdC5wbmdcIiBjbGFzcz1cInR3LXctNjQgdHctb3BhY2l0eS0yNVwiIC8+XG4gICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctdGV4dC14bCB0dy1mb250LWJvbGQgdHctdGV4dC1ncmF5LTQwMCBkYXJrOnR3LXRleHQtZ3JheS01MDBcIj4tLT5cbiAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgINio2LHYp9uMINi02LHZiNi5INuM2qkg2obYqiDYsdinINin2YbYqtiu2KfYqCDaqdmG24zYry0tPlxuICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8L3NwYW4+LS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmICghc2ltcGxlKSB7XG4gICAgPGRpdiBjbGFzcz1cInR3LWJnLWJsYWNrL1suM10gMnhsOnR3LWdyb3cgdHctc2hyaW5rIHR3LWgtZnVsbFwiPjwvZGl2PlxuICAgIH1cbjwvZGl2PlxuIl19
@@ -5,4 +5,4 @@ export var ThreadStatus;
5
5
  ThreadStatus[ThreadStatus["Online"] = 2] = "Online";
6
6
  ThreadStatus[ThreadStatus["Busy"] = 3] = "Busy";
7
7
  })(ThreadStatus || (ThreadStatus = {}));
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLWNoYXQvY2hhdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5QkEsTUFBTSxDQUFOLElBQVksWUFLWDtBQUxELFdBQVksWUFBWTtJQUNwQix1REFBUSxDQUFBO0lBQ1IscURBQU8sQ0FBQTtJQUNQLG1EQUFNLENBQUE7SUFDTiwrQ0FBSSxDQUFBO0FBQ1IsQ0FBQyxFQUxXLFlBQVksS0FBWixZQUFZLFFBS3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZUF0dGFjaG1lbnRJbmZvLCBGaWxlUGljdHVyZUluZm9Nb2RlbCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuZXhwb3J0IHR5cGUgVGhyZWFkID0ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBhdmF0YXI6IHN0cmluZztcbiAgICBzdGF0dXM6IFRocmVhZFN0YXR1cztcbiAgICBsYXN0QWN0aXZpdHk6IERhdGU7XG4gICAgdW5yZWFkQ291bnQ6IG51bWJlcjtcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgbXV0ZWQ6IGJvb2xlYW47XG4gICAgbGFzdE1lc3NhZ2U6IE1lc3NhZ2U7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgb3duZXI6IFVzZXI7XG4gICAgdGV4dD86IHN0cmluZztcbiAgICBmaWxlPzogRmlsZUF0dGFjaG1lbnRJbmZvO1xuICAgIGltYWdlPzogRmlsZVBpY3R1cmVJbmZvTW9kZWw7XG4gICAgY3JlYXRlZEF0OiBEYXRlO1xuICAgIGRlbGl2ZXJlZEF0OiBEYXRlO1xuICAgIHJlYWRBdDogRGF0ZTtcbn07XG5cbmV4cG9ydCBlbnVtIFRocmVhZFN0YXR1cyB7XG4gICAgTGFzdFNlZW4sXG4gICAgT2ZmbGluZSxcbiAgICBPbmxpbmUsXG4gICAgQnVzeVxufVxuXG5leHBvcnQgdHlwZSBVc2VyID0ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgYXZhdGFyOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xufTtcbiJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLWNoYXQvY2hhdC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5QkEsTUFBTSxDQUFOLElBQVksWUFLWDtBQUxELFdBQVksWUFBWTtJQUNwQix1REFBUSxDQUFBO0lBQ1IscURBQU8sQ0FBQTtJQUNQLG1EQUFNLENBQUE7SUFDTiwrQ0FBSSxDQUFBO0FBQ1IsQ0FBQyxFQUxXLFlBQVksS0FBWixZQUFZLFFBS3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZUF0dGFjaG1lbnRJbmZvLCBGaWxlUGljdHVyZUluZm9Nb2RlbCB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuZXhwb3J0IHR5cGUgVGhyZWFkID0ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBhdmF0YXI6IHN0cmluZztcbiAgICBzdGF0dXM6IFRocmVhZFN0YXR1cztcbiAgICBsYXN0QWN0aXZpdHk6IERhdGU7XG4gICAgdW5yZWFkQ291bnQ6IG51bWJlcjtcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgbXV0ZWQ6IGJvb2xlYW47XG4gICAgbGFzdE1lc3NhZ2U6IE1lc3NhZ2U7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgb3duZXI6IFVzZXI7XG4gICAgdGV4dD86IHN0cmluZztcbiAgICBmaWxlPzogRmlsZUF0dGFjaG1lbnRJbmZvO1xuICAgIGltYWdlPzogRmlsZVBpY3R1cmVJbmZvTW9kZWw7XG4gICAgY3JlYXRlZEF0OiBEYXRlO1xuICAgIGRlbGl2ZXJlZEF0OiBEYXRlO1xuICAgIHJlYWRBdDogRGF0ZTtcbn07XG5cbmV4cG9ydCBlbnVtIFRocmVhZFN0YXR1cyB7XG4gICAgTGFzdFNlZW4sXG4gICAgT2ZmbGluZSxcbiAgICBPbmxpbmUsXG4gICAgQnVzeVxufVxuXG5leHBvcnQgdHlwZSBVc2VyID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYXZhdGFyOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xufTtcbiJdfQ==
@@ -1,6 +1,6 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
2
2
  import jmoment from 'moment-jalaali';
3
- import { ReportViewBaseComponent } from 'barsa-novin-ray-core';
3
+ import { ReportViewBaseComponent, MoReportValuePipe, PictureFieldSourcePipe } from 'barsa-novin-ray-core';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/cdk/scrolling";
6
6
  import * as i2 from "../barsa-chat-message/barsa-chat-message.component";
@@ -10,6 +10,8 @@ export class BarsaChatListComponent extends ReportViewBaseComponent {
10
10
  super(...arguments);
11
11
  this.simple = true;
12
12
  this.setReplyingMessage = new EventEmitter();
13
+ this._rval = inject(MoReportValuePipe);
14
+ this._picField = inject(PictureFieldSourcePipe);
13
15
  this.moment = jmoment;
14
16
  }
15
17
  ngOnInit() {
@@ -26,26 +28,32 @@ export class BarsaChatListComponent extends ReportViewBaseComponent {
26
28
  _prepareMessages(moDataList) {
27
29
  this.messages = moDataList.map((i) => ({
28
30
  id: i.Id,
29
- createdAt: i.CreationDate,
30
- deliveredAt: i.CreationDate,
31
- readAt: i.ReadAt ? i.ReadAt : null,
32
- file: i.FileData,
33
- image: i.PictureData,
31
+ createdAt: this._rval.transform(this.viewSetting.CreationDateField, i, this.allColumns),
32
+ deliveredAt: this._rval.transform(this.viewSetting.CreationDateField, i, this.allColumns),
33
+ readAt: this._rval.transform(this.viewSetting.ReadAtField, i, this.allColumns),
34
+ file: this._rval.transform(this.viewSetting.FileDataField, i, this.allColumns),
35
+ image: this._rval.transform(this.viewSetting.PictureDataField, i, this.allColumns),
34
36
  owner: {
35
- id: 123,
36
- name: 'slm',
37
- avatar: ''
37
+ id: this._rval.transform(this.viewSetting.UserField, i, this.allColumns)?.Id,
38
+ name: this._rval.transform(this.viewSetting.DisplayNameField, i, this.allColumns),
39
+ avatar: this._picField.transform(this._rval.transform(this.viewSetting.UserPictureField, i, this.allColumns)?.FileId, 'ID', i.Id, undefined, 45)
40
+ // value: string | any,
41
+ // type: string,
42
+ // moId: string | null,
43
+ // fieldDefId?: string,
44
+ // sw?: number,
45
+ // sh?: number
38
46
  },
39
- text: i.MessageText
47
+ text: this._rval.transform(this.viewSetting.MessageTextField, i, this.allColumns)
40
48
  }));
41
49
  console.log(this.messages);
42
50
  }
43
51
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaChatListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
44
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaChatListComponent, selector: "bsu-barsa-chat-list", inputs: { messages: "messages", replyingMessage: "replyingMessage", simple: "simple" }, outputs: { setReplyingMessage: "setReplyingMessage" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (messages !== null) { @if (!simple) {\r\n<cdk-virtual-scroll-viewport\r\n [appendOnly]=\"true\"\r\n #chatContentElement\r\n itemSize=\"20\"\r\n class=\"tw-h-full tw-w-full tw-pb-4 tw-pt-24\"\r\n>\r\n <div *cdkVirtualFor=\"let message of messages; let index = index\">\r\n <bsu-barsa-chat-message\r\n [message]=\"message\"\r\n [showSender]=\"true\"\r\n [nextIsSame]=\"messages?.[index + 1]?.owner?.id === message.owner.id\"\r\n [pervIsSame]=\"messages?.[index - 1]?.owner?.id === message.owner.id\"\r\n [badge]=\"!this.messages?.[index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index - 1]?.createdAt).jDayOfYear())\"\r\n [nextHasBadge]=\"!!this.messages?.[index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[index + 1]?.owner?.id\"\r\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\r\n (reply)=\"setReplyingMessage.emit($event)\"\r\n ></bsu-barsa-chat-message>\r\n </div>\r\n @if (replyingMessage) {\r\n <div class=\"tw-h-14\"></div>\r\n }\r\n</cdk-virtual-scroll-viewport>\r\n} @else {\r\n<div class=\"tw-h-full tw-w-full tw-pt-24\">\r\n @for (message of messages; track message.id) {\r\n <bsu-barsa-chat-message\r\n [message]=\"message\"\r\n [showSender]=\"true\"\r\n [nextIsSame]=\"messages?.[$index + 1]?.owner?.id === message.owner.id\"\r\n [pervIsSame]=\"messages?.[$index - 1]?.owner?.id === message.owner.id\"\r\n [badge]=\"!this.messages?.[$index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index - 1]?.createdAt).jDayOfYear())\"\r\n [nextHasBadge]=\"!!this.messages?.[$index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[$index + 1]?.owner?.id\"\r\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\r\n (reply)=\"setReplyingMessage.emit($event)\"\r\n ></bsu-barsa-chat-message>\r\n }\r\n <div class=\"tw-h-4\"></div>\r\n</div>\r\n} }\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i2.BarsaChatMessageComponent, selector: "bsu-barsa-chat-message", inputs: ["message", "showSender", "nextIsSame", "pervIsSame", "badge", "nextHasBadge", "badgeLabel"], outputs: ["reply"] }, { kind: "pipe", type: i3.UtilChatTimeBadgePipe, name: "utilChatTimeBadge" }] }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaChatListComponent, selector: "bsu-barsa-chat-list", inputs: { messages: "messages", replyingMessage: "replyingMessage", simple: "simple" }, outputs: { setReplyingMessage: "setReplyingMessage" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (messages !== null) { @if (!simple) {\n<cdk-virtual-scroll-viewport\n [appendOnly]=\"true\"\n id=\"chatContentElement\"\n itemSize=\"20\"\n class=\"tw-h-full tw-w-full tw-pb-4 tw-pt-24\"\n>\n <div *cdkVirtualFor=\"let message of messages; let index = index\">\n <bsu-barsa-chat-message\n [message]=\"message\"\n [showSender]=\"true\"\n [nextIsSame]=\"messages?.[index + 1]?.owner?.id === message.owner.id\"\n [pervIsSame]=\"messages?.[index - 1]?.owner?.id === message.owner.id\"\n [badge]=\"!this.messages?.[index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index - 1]?.createdAt).jDayOfYear())\"\n [nextHasBadge]=\"!!this.messages?.[index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[index + 1]?.owner?.id\"\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\n (reply)=\"setReplyingMessage.emit($event)\"\n ></bsu-barsa-chat-message>\n </div>\n @if (replyingMessage) {\n <div class=\"tw-h-14\"></div>\n }\n</cdk-virtual-scroll-viewport>\n} @else {\n<div class=\"tw-h-full tw-w-full tw-pt-24\">\n @for (message of messages; track message.id) {\n <bsu-barsa-chat-message\n [message]=\"message\"\n [showSender]=\"true\"\n [nextIsSame]=\"messages?.[$index + 1]?.owner?.id === message.owner.id\"\n [pervIsSame]=\"messages?.[$index - 1]?.owner?.id === message.owner.id\"\n [badge]=\"!this.messages?.[$index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index - 1]?.createdAt).jDayOfYear())\"\n [nextHasBadge]=\"!!this.messages?.[$index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[$index + 1]?.owner?.id\"\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\n (reply)=\"setReplyingMessage.emit($event)\"\n ></bsu-barsa-chat-message>\n }\n <div class=\"tw-h-4\"></div>\n</div>\n} }\n", styles: [""], dependencies: [{ kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i2.BarsaChatMessageComponent, selector: "bsu-barsa-chat-message", inputs: ["message", "showSender", "nextIsSame", "pervIsSame", "badge", "nextHasBadge", "badgeLabel"], outputs: ["reply"] }, { kind: "pipe", type: i3.UtilChatTimeBadgePipe, name: "utilChatTimeBadge" }] }); }
45
53
  }
46
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaChatListComponent, decorators: [{
47
55
  type: Component,
48
- args: [{ selector: 'bsu-barsa-chat-list', template: "@if (messages !== null) { @if (!simple) {\r\n<cdk-virtual-scroll-viewport\r\n [appendOnly]=\"true\"\r\n #chatContentElement\r\n itemSize=\"20\"\r\n class=\"tw-h-full tw-w-full tw-pb-4 tw-pt-24\"\r\n>\r\n <div *cdkVirtualFor=\"let message of messages; let index = index\">\r\n <bsu-barsa-chat-message\r\n [message]=\"message\"\r\n [showSender]=\"true\"\r\n [nextIsSame]=\"messages?.[index + 1]?.owner?.id === message.owner.id\"\r\n [pervIsSame]=\"messages?.[index - 1]?.owner?.id === message.owner.id\"\r\n [badge]=\"!this.messages?.[index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index - 1]?.createdAt).jDayOfYear())\"\r\n [nextHasBadge]=\"!!this.messages?.[index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[index + 1]?.owner?.id\"\r\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\r\n (reply)=\"setReplyingMessage.emit($event)\"\r\n ></bsu-barsa-chat-message>\r\n </div>\r\n @if (replyingMessage) {\r\n <div class=\"tw-h-14\"></div>\r\n }\r\n</cdk-virtual-scroll-viewport>\r\n} @else {\r\n<div class=\"tw-h-full tw-w-full tw-pt-24\">\r\n @for (message of messages; track message.id) {\r\n <bsu-barsa-chat-message\r\n [message]=\"message\"\r\n [showSender]=\"true\"\r\n [nextIsSame]=\"messages?.[$index + 1]?.owner?.id === message.owner.id\"\r\n [pervIsSame]=\"messages?.[$index - 1]?.owner?.id === message.owner.id\"\r\n [badge]=\"!this.messages?.[$index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index - 1]?.createdAt).jDayOfYear())\"\r\n [nextHasBadge]=\"!!this.messages?.[$index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[$index + 1]?.owner?.id\"\r\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\r\n (reply)=\"setReplyingMessage.emit($event)\"\r\n ></bsu-barsa-chat-message>\r\n }\r\n <div class=\"tw-h-4\"></div>\r\n</div>\r\n} }\r\n" }]
56
+ args: [{ selector: 'bsu-barsa-chat-list', template: "@if (messages !== null) { @if (!simple) {\n<cdk-virtual-scroll-viewport\n [appendOnly]=\"true\"\n id=\"chatContentElement\"\n itemSize=\"20\"\n class=\"tw-h-full tw-w-full tw-pb-4 tw-pt-24\"\n>\n <div *cdkVirtualFor=\"let message of messages; let index = index\">\n <bsu-barsa-chat-message\n [message]=\"message\"\n [showSender]=\"true\"\n [nextIsSame]=\"messages?.[index + 1]?.owner?.id === message.owner.id\"\n [pervIsSame]=\"messages?.[index - 1]?.owner?.id === message.owner.id\"\n [badge]=\"!this.messages?.[index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index - 1]?.createdAt).jDayOfYear())\"\n [nextHasBadge]=\"!!this.messages?.[index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[index + 1]?.owner?.id\"\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\n (reply)=\"setReplyingMessage.emit($event)\"\n ></bsu-barsa-chat-message>\n </div>\n @if (replyingMessage) {\n <div class=\"tw-h-14\"></div>\n }\n</cdk-virtual-scroll-viewport>\n} @else {\n<div class=\"tw-h-full tw-w-full tw-pt-24\">\n @for (message of messages; track message.id) {\n <bsu-barsa-chat-message\n [message]=\"message\"\n [showSender]=\"true\"\n [nextIsSame]=\"messages?.[$index + 1]?.owner?.id === message.owner.id\"\n [pervIsSame]=\"messages?.[$index - 1]?.owner?.id === message.owner.id\"\n [badge]=\"!this.messages?.[$index - 1] || (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index - 1]?.createdAt).jDayOfYear())\"\n [nextHasBadge]=\"!!this.messages?.[$index + 1] && (moment(message.createdAt).jDayOfYear() !== moment(this.messages?.[$index + 1]?.createdAt).jDayOfYear()) && message.owner.id === this.messages?.[$index + 1]?.owner?.id\"\n [badgeLabel]=\"moment(message.createdAt) | utilChatTimeBadge\"\n (reply)=\"setReplyingMessage.emit($event)\"\n ></bsu-barsa-chat-message>\n }\n <div class=\"tw-h-4\"></div>\n</div>\n} }\n" }]
49
57
  }], propDecorators: { messages: [{
50
58
  type: Input
51
59
  }], replyingMessage: [{
@@ -55,4 +63,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
55
63
  }], setReplyingMessage: [{
56
64
  type: Output
57
65
  }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2hhdC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLWNoYXQtbGlzdC9iYXJzYS1jaGF0LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtY2hhdC1saXN0L2JhcnNhLWNoYXQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUF1Qix1QkFBdUIsRUFBMkIsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFRN0csTUFBTSxPQUFPLHNCQUNULFNBQVEsdUJBQWdEO0lBTjVEOztRQVdhLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDYix1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzNELFdBQU0sR0FBRyxPQUFPLENBQUM7S0E2QnBCO0lBNUJHLFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQy9CLElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDTCxDQUFDO0lBQ08sZ0JBQWdCLENBQUMsVUFBaUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNSLFNBQVMsRUFBRSxDQUFDLENBQUMsWUFBWTtZQUN6QixXQUFXLEVBQUUsQ0FBQyxDQUFDLFlBQVk7WUFDM0IsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ2hCLEtBQUssRUFBRSxDQUFDLENBQUMsV0FBVztZQUNwQixLQUFLLEVBQUU7Z0JBQ0gsRUFBRSxFQUFFLEdBQUc7Z0JBQ1AsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLEVBQUU7YUFDYjtZQUNELElBQUksRUFBRSxDQUFDLENBQUMsV0FBVztTQUN0QixDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7OEdBcENRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHNQQ1ZuQyxxdEVBd0NBOzsyRkQ5QmEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNJLHFCQUFxQjs4QkFRdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBqbW9tZW50IGZyb20gJ21vbWVudC1qYWxhYWxpJztcbmltcG9ydCB7IE1ldGFvYmplY3REYXRhTW9kZWwsIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LCBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZyB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuLi9iYXJzYS1jaGF0L2NoYXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1iYXJzYS1jaGF0LWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9iYXJzYS1jaGF0LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9iYXJzYS1jaGF0LWxpc3QuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQmFyc2FDaGF0TGlzdENvbXBvbmVudFxuICAgIGV4dGVuZHMgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQ8VWlSZXBvcnRWaWV3QmFzZVNldHRpbmc+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc1xue1xuICAgIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlW10gfCBudWxsO1xuICAgIEBJbnB1dCgpIHJlcGx5aW5nTWVzc2FnZTogTWVzc2FnZSB8IG51bGw7XG4gICAgQElucHV0KCkgc2ltcGxlID0gdHJ1ZTtcbiAgICBAT3V0cHV0KCkgc2V0UmVwbHlpbmdNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZXNzYWdlPigpO1xuICAgIG1vbWVudCA9IGptb21lbnQ7XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICAgIGNvbnN0IHsgbW9EYXRhTGlzdCB9ID0gY2hhbmdlcztcbiAgICAgICAgaWYgKG1vRGF0YUxpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVNZXNzYWdlcyhtb0RhdGFMaXN0LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfcHJlcGFyZU1lc3NhZ2VzKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbW9EYXRhTGlzdC5tYXAoKGkpID0+ICh7XG4gICAgICAgICAgICBpZDogaS5JZCxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogaS5DcmVhdGlvbkRhdGUsXG4gICAgICAgICAgICBkZWxpdmVyZWRBdDogaS5DcmVhdGlvbkRhdGUsXG4gICAgICAgICAgICByZWFkQXQ6IGkuUmVhZEF0ID8gaS5SZWFkQXQgOiBudWxsLFxuICAgICAgICAgICAgZmlsZTogaS5GaWxlRGF0YSxcbiAgICAgICAgICAgIGltYWdlOiBpLlBpY3R1cmVEYXRhLFxuICAgICAgICAgICAgb3duZXI6IHtcbiAgICAgICAgICAgICAgICBpZDogMTIzLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzbG0nLFxuICAgICAgICAgICAgICAgIGF2YXRhcjogJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0OiBpLk1lc3NhZ2VUZXh0XG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5tZXNzYWdlcyk7XG4gICAgfVxufVxuIiwiQGlmIChtZXNzYWdlcyAhPT0gbnVsbCkgeyBAaWYgKCFzaW1wbGUpIHtcclxuPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxyXG4gICAgW2FwcGVuZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAjY2hhdENvbnRlbnRFbGVtZW50XHJcbiAgICBpdGVtU2l6ZT1cIjIwXCJcclxuICAgIGNsYXNzPVwidHctaC1mdWxsIHR3LXctZnVsbCB0dy1wYi00IHR3LXB0LTI0XCJcclxuPlxyXG4gICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzOyBsZXQgaW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgIDxic3UtYmFyc2EtY2hhdC1tZXNzYWdlXHJcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICBbc2hvd1NlbmRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW25leHRJc1NhbWVdPVwibWVzc2FnZXM/LltpbmRleCArIDFdPy5vd25lcj8uaWQgPT09IG1lc3NhZ2Uub3duZXIuaWRcIlxyXG4gICAgICAgICAgICBbcGVydklzU2FtZV09XCJtZXNzYWdlcz8uW2luZGV4IC0gMV0/Lm93bmVyPy5pZCA9PT0gbWVzc2FnZS5vd25lci5pZFwiXHJcbiAgICAgICAgICAgIFtiYWRnZV09XCIhdGhpcy5tZXNzYWdlcz8uW2luZGV4IC0gMV0gfHwgKG1vbWVudChtZXNzYWdlLmNyZWF0ZWRBdCkuakRheU9mWWVhcigpICE9PSBtb21lbnQodGhpcy5tZXNzYWdlcz8uW2luZGV4IC0gMV0/LmNyZWF0ZWRBdCkuakRheU9mWWVhcigpKVwiXHJcbiAgICAgICAgICAgIFtuZXh0SGFzQmFkZ2VdPVwiISF0aGlzLm1lc3NhZ2VzPy5baW5kZXggKyAxXSAmJiAobW9tZW50KG1lc3NhZ2UuY3JlYXRlZEF0KS5qRGF5T2ZZZWFyKCkgIT09IG1vbWVudCh0aGlzLm1lc3NhZ2VzPy5baW5kZXggKyAxXT8uY3JlYXRlZEF0KS5qRGF5T2ZZZWFyKCkpICYmIG1lc3NhZ2Uub3duZXIuaWQgPT09IHRoaXMubWVzc2FnZXM/LltpbmRleCArIDFdPy5vd25lcj8uaWRcIlxyXG4gICAgICAgICAgICBbYmFkZ2VMYWJlbF09XCJtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpIHwgdXRpbENoYXRUaW1lQmFkZ2VcIlxyXG4gICAgICAgICAgICAocmVwbHkpPVwic2V0UmVwbHlpbmdNZXNzYWdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvYnN1LWJhcnNhLWNoYXQtbWVzc2FnZT5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChyZXBseWluZ01lc3NhZ2UpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ0dy1oLTE0XCI+PC9kaXY+XHJcbiAgICB9XHJcbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxyXG59IEBlbHNlIHtcclxuPGRpdiBjbGFzcz1cInR3LWgtZnVsbCB0dy13LWZ1bGwgdHctcHQtMjRcIj5cclxuICAgIEBmb3IgKG1lc3NhZ2Ugb2YgbWVzc2FnZXM7IHRyYWNrIG1lc3NhZ2UuaWQpIHtcclxuICAgIDxic3UtYmFyc2EtY2hhdC1tZXNzYWdlXHJcbiAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXHJcbiAgICAgICAgW3Nob3dTZW5kZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgW25leHRJc1NhbWVdPVwibWVzc2FnZXM/LlskaW5kZXggKyAxXT8ub3duZXI/LmlkID09PSBtZXNzYWdlLm93bmVyLmlkXCJcclxuICAgICAgICBbcGVydklzU2FtZV09XCJtZXNzYWdlcz8uWyRpbmRleCAtIDFdPy5vd25lcj8uaWQgPT09IG1lc3NhZ2Uub3duZXIuaWRcIlxyXG4gICAgICAgIFtiYWRnZV09XCIhdGhpcy5tZXNzYWdlcz8uWyRpbmRleCAtIDFdIHx8IChtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpLmpEYXlPZlllYXIoKSAhPT0gbW9tZW50KHRoaXMubWVzc2FnZXM/LlskaW5kZXggLSAxXT8uY3JlYXRlZEF0KS5qRGF5T2ZZZWFyKCkpXCJcclxuICAgICAgICBbbmV4dEhhc0JhZGdlXT1cIiEhdGhpcy5tZXNzYWdlcz8uWyRpbmRleCArIDFdICYmIChtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpLmpEYXlPZlllYXIoKSAhPT0gbW9tZW50KHRoaXMubWVzc2FnZXM/LlskaW5kZXggKyAxXT8uY3JlYXRlZEF0KS5qRGF5T2ZZZWFyKCkpICYmIG1lc3NhZ2Uub3duZXIuaWQgPT09IHRoaXMubWVzc2FnZXM/LlskaW5kZXggKyAxXT8ub3duZXI/LmlkXCJcclxuICAgICAgICBbYmFkZ2VMYWJlbF09XCJtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpIHwgdXRpbENoYXRUaW1lQmFkZ2VcIlxyXG4gICAgICAgIChyZXBseSk9XCJzZXRSZXBseWluZ01lc3NhZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgID48L2JzdS1iYXJzYS1jaGF0LW1lc3NhZ2U+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGNsYXNzPVwidHctaC00XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG59IH1cclxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2hhdC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLWNoYXQtbGlzdC9iYXJzYS1jaGF0LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtY2hhdC1saXN0L2JhcnNhLWNoYXQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN6QixNQUFNLHNCQUFzQixDQUFDOzs7OztBQVE5QixNQUFNLE9BQU8sc0JBQ1QsU0FBUSx1QkFBOEM7SUFOMUQ7O1FBV2EsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNiLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDM0QsVUFBSyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMzQyxXQUFNLEdBQUcsT0FBTyxDQUFDO0tBeUNwQjtJQXhDRyxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMvQixJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0wsQ0FBQztJQUNPLGdCQUFnQixDQUFDLFVBQWlDO1FBQ3RELElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDUixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN2RixXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN6RixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDOUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzlFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2xGLEtBQUssRUFBRTtnQkFDSCxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFO2dCQUM1RSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDakYsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUNuRixJQUFJLEVBQ0osQ0FBQyxDQUFDLEVBQUUsRUFDSixTQUFTLEVBQ1QsRUFBRSxDQUNMO2dCQUNELHVCQUF1QjtnQkFDdkIsZ0JBQWdCO2dCQUNoQix1QkFBdUI7Z0JBQ3ZCLHVCQUF1QjtnQkFDdkIsZUFBZTtnQkFDZixjQUFjO2FBQ2pCO1lBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDcEYsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQWxEUSxzQkFBc0I7a0dBQXRCLHNCQUFzQixzUENoQm5DLDJvRUF3Q0E7OzJGRHhCYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0kscUJBQXFCOzhCQVF0QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgam1vbWVudCBmcm9tICdtb21lbnQtamFsYWFsaSc7XG5pbXBvcnQge1xuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQsXG4gICAgVWlSZXBvcnRWaWV3QmFzZVNldHRpbmcsXG4gICAgTW9SZXBvcnRWYWx1ZVBpcGUsXG4gICAgUGljdHVyZUZpZWxkU291cmNlUGlwZVxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi4vYmFyc2EtY2hhdC9jaGF0Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtY2hhdC1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtY2hhdC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vYmFyc2EtY2hhdC1saXN0LmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIEJhcnNhQ2hhdExpc3RDb21wb25lbnRcbiAgICBleHRlbmRzIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50PEJhcnNhQ2hhdExpc3RTZXR0aW5ncz5cbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gICAgQElucHV0KCkgbWVzc2FnZXM6IE1lc3NhZ2VbXSB8IG51bGw7XG4gICAgQElucHV0KCkgcmVwbHlpbmdNZXNzYWdlOiBNZXNzYWdlIHwgbnVsbDtcbiAgICBASW5wdXQoKSBzaW1wbGUgPSB0cnVlO1xuICAgIEBPdXRwdXQoKSBzZXRSZXBseWluZ01lc3NhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lc3NhZ2U+KCk7XG4gICAgX3J2YWwgPSBpbmplY3QoTW9SZXBvcnRWYWx1ZVBpcGUpO1xuICAgIF9waWNGaWVsZCA9IGluamVjdChQaWN0dXJlRmllbGRTb3VyY2VQaXBlKTtcbiAgICBtb21lbnQgPSBqbW9tZW50O1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICBjb25zdCB7IG1vRGF0YUxpc3QgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmIChtb0RhdGFMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlTWVzc2FnZXMobW9EYXRhTGlzdC5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX3ByZXBhcmVNZXNzYWdlcyhtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1vRGF0YUxpc3QubWFwKChpKSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGkuSWQsXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHRoaXMuX3J2YWwudHJhbnNmb3JtKHRoaXMudmlld1NldHRpbmcuQ3JlYXRpb25EYXRlRmllbGQsIGksIHRoaXMuYWxsQ29sdW1ucyksXG4gICAgICAgICAgICBkZWxpdmVyZWRBdDogdGhpcy5fcnZhbC50cmFuc2Zvcm0odGhpcy52aWV3U2V0dGluZy5DcmVhdGlvbkRhdGVGaWVsZCwgaSwgdGhpcy5hbGxDb2x1bW5zKSxcbiAgICAgICAgICAgIHJlYWRBdDogdGhpcy5fcnZhbC50cmFuc2Zvcm0odGhpcy52aWV3U2V0dGluZy5SZWFkQXRGaWVsZCwgaSwgdGhpcy5hbGxDb2x1bW5zKSxcbiAgICAgICAgICAgIGZpbGU6IHRoaXMuX3J2YWwudHJhbnNmb3JtKHRoaXMudmlld1NldHRpbmcuRmlsZURhdGFGaWVsZCwgaSwgdGhpcy5hbGxDb2x1bW5zKSxcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLl9ydmFsLnRyYW5zZm9ybSh0aGlzLnZpZXdTZXR0aW5nLlBpY3R1cmVEYXRhRmllbGQsIGksIHRoaXMuYWxsQ29sdW1ucyksXG4gICAgICAgICAgICBvd25lcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9ydmFsLnRyYW5zZm9ybSh0aGlzLnZpZXdTZXR0aW5nLlVzZXJGaWVsZCwgaSwgdGhpcy5hbGxDb2x1bW5zKT8uSWQsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fcnZhbC50cmFuc2Zvcm0odGhpcy52aWV3U2V0dGluZy5EaXNwbGF5TmFtZUZpZWxkLCBpLCB0aGlzLmFsbENvbHVtbnMpLFxuICAgICAgICAgICAgICAgIGF2YXRhcjogdGhpcy5fcGljRmllbGQudHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ydmFsLnRyYW5zZm9ybSh0aGlzLnZpZXdTZXR0aW5nLlVzZXJQaWN0dXJlRmllbGQsIGksIHRoaXMuYWxsQ29sdW1ucyk/LkZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgJ0lEJyxcbiAgICAgICAgICAgICAgICAgICAgaS5JZCxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICA0NVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZTogc3RyaW5nIHwgYW55LFxuICAgICAgICAgICAgICAgIC8vIHR5cGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAvLyBtb0lkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICAgIC8vIGZpZWxkRGVmSWQ/OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgLy8gc3c/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgLy8gc2g/OiBudW1iZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLl9ydmFsLnRyYW5zZm9ybSh0aGlzLnZpZXdTZXR0aW5nLk1lc3NhZ2VUZXh0RmllbGQsIGksIHRoaXMuYWxsQ29sdW1ucylcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1lc3NhZ2VzKTtcbiAgICB9XG59XG5pbnRlcmZhY2UgQmFyc2FDaGF0TGlzdFNldHRpbmdzIGV4dGVuZHMgVWlSZXBvcnRWaWV3QmFzZVNldHRpbmcge1xuICAgIFVzZXJGaWVsZDogc3RyaW5nO1xuICAgIERpc3BsYXlOYW1lRmllbGQ6IHN0cmluZztcbiAgICBVc2VyUGljdHVyZUZpZWxkOiBzdHJpbmc7XG4gICAgQ3JlYXRpb25EYXRlRmllbGQ6IHN0cmluZztcbiAgICBSZWFkQXRGaWVsZDogc3RyaW5nO1xuICAgIE1lc3NhZ2VUZXh0RmllbGQ6IHN0cmluZztcbiAgICBGaWxlRGF0YUZpZWxkOiBzdHJpbmc7XG4gICAgUGljdHVyZURhdGFGaWVsZDogc3RyaW5nO1xufVxuIiwiQGlmIChtZXNzYWdlcyAhPT0gbnVsbCkgeyBAaWYgKCFzaW1wbGUpIHtcbjxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICBbYXBwZW5kT25seV09XCJ0cnVlXCJcbiAgICBpZD1cImNoYXRDb250ZW50RWxlbWVudFwiXG4gICAgaXRlbVNpemU9XCIyMFwiXG4gICAgY2xhc3M9XCJ0dy1oLWZ1bGwgdHctdy1mdWxsIHR3LXBiLTQgdHctcHQtMjRcIlxuPlxuICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGJzdS1iYXJzYS1jaGF0LW1lc3NhZ2VcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgW3Nob3dTZW5kZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbmV4dElzU2FtZV09XCJtZXNzYWdlcz8uW2luZGV4ICsgMV0/Lm93bmVyPy5pZCA9PT0gbWVzc2FnZS5vd25lci5pZFwiXG4gICAgICAgICAgICBbcGVydklzU2FtZV09XCJtZXNzYWdlcz8uW2luZGV4IC0gMV0/Lm93bmVyPy5pZCA9PT0gbWVzc2FnZS5vd25lci5pZFwiXG4gICAgICAgICAgICBbYmFkZ2VdPVwiIXRoaXMubWVzc2FnZXM/LltpbmRleCAtIDFdIHx8IChtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpLmpEYXlPZlllYXIoKSAhPT0gbW9tZW50KHRoaXMubWVzc2FnZXM/LltpbmRleCAtIDFdPy5jcmVhdGVkQXQpLmpEYXlPZlllYXIoKSlcIlxuICAgICAgICAgICAgW25leHRIYXNCYWRnZV09XCIhIXRoaXMubWVzc2FnZXM/LltpbmRleCArIDFdICYmIChtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpLmpEYXlPZlllYXIoKSAhPT0gbW9tZW50KHRoaXMubWVzc2FnZXM/LltpbmRleCArIDFdPy5jcmVhdGVkQXQpLmpEYXlPZlllYXIoKSkgJiYgbWVzc2FnZS5vd25lci5pZCA9PT0gdGhpcy5tZXNzYWdlcz8uW2luZGV4ICsgMV0/Lm93bmVyPy5pZFwiXG4gICAgICAgICAgICBbYmFkZ2VMYWJlbF09XCJtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpIHwgdXRpbENoYXRUaW1lQmFkZ2VcIlxuICAgICAgICAgICAgKHJlcGx5KT1cInNldFJlcGx5aW5nTWVzc2FnZS5lbWl0KCRldmVudClcIlxuICAgICAgICA+PC9ic3UtYmFyc2EtY2hhdC1tZXNzYWdlPlxuICAgIDwvZGl2PlxuICAgIEBpZiAocmVwbHlpbmdNZXNzYWdlKSB7XG4gICAgPGRpdiBjbGFzcz1cInR3LWgtMTRcIj48L2Rpdj5cbiAgICB9XG48L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbn0gQGVsc2Uge1xuPGRpdiBjbGFzcz1cInR3LWgtZnVsbCB0dy13LWZ1bGwgdHctcHQtMjRcIj5cbiAgICBAZm9yIChtZXNzYWdlIG9mIG1lc3NhZ2VzOyB0cmFjayBtZXNzYWdlLmlkKSB7XG4gICAgPGJzdS1iYXJzYS1jaGF0LW1lc3NhZ2VcbiAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgIFtzaG93U2VuZGVyXT1cInRydWVcIlxuICAgICAgICBbbmV4dElzU2FtZV09XCJtZXNzYWdlcz8uWyRpbmRleCArIDFdPy5vd25lcj8uaWQgPT09IG1lc3NhZ2Uub3duZXIuaWRcIlxuICAgICAgICBbcGVydklzU2FtZV09XCJtZXNzYWdlcz8uWyRpbmRleCAtIDFdPy5vd25lcj8uaWQgPT09IG1lc3NhZ2Uub3duZXIuaWRcIlxuICAgICAgICBbYmFkZ2VdPVwiIXRoaXMubWVzc2FnZXM/LlskaW5kZXggLSAxXSB8fCAobW9tZW50KG1lc3NhZ2UuY3JlYXRlZEF0KS5qRGF5T2ZZZWFyKCkgIT09IG1vbWVudCh0aGlzLm1lc3NhZ2VzPy5bJGluZGV4IC0gMV0/LmNyZWF0ZWRBdCkuakRheU9mWWVhcigpKVwiXG4gICAgICAgIFtuZXh0SGFzQmFkZ2VdPVwiISF0aGlzLm1lc3NhZ2VzPy5bJGluZGV4ICsgMV0gJiYgKG1vbWVudChtZXNzYWdlLmNyZWF0ZWRBdCkuakRheU9mWWVhcigpICE9PSBtb21lbnQodGhpcy5tZXNzYWdlcz8uWyRpbmRleCArIDFdPy5jcmVhdGVkQXQpLmpEYXlPZlllYXIoKSkgJiYgbWVzc2FnZS5vd25lci5pZCA9PT0gdGhpcy5tZXNzYWdlcz8uWyRpbmRleCArIDFdPy5vd25lcj8uaWRcIlxuICAgICAgICBbYmFkZ2VMYWJlbF09XCJtb21lbnQobWVzc2FnZS5jcmVhdGVkQXQpIHwgdXRpbENoYXRUaW1lQmFkZ2VcIlxuICAgICAgICAocmVwbHkpPVwic2V0UmVwbHlpbmdNZXNzYWdlLmVtaXQoJGV2ZW50KVwiXG4gICAgPjwvYnN1LWJhcnNhLWNoYXQtbWVzc2FnZT5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInR3LWgtNFwiPjwvZGl2PlxuPC9kaXY+XG59IH1cbiJdfQ==