@cometchat/chat-uikit-angular 4.3.14 → 4.3.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.d.ts +21 -4
- package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +5 -1
- package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +10 -2
- package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +4 -0
- package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +4 -0
- package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +3 -0
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +10 -1
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +5 -2
- package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +8 -1
- package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.mjs +31 -9
- package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.mjs +3 -3
- package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +9 -3
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +61 -38
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +9 -9
- package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +1 -1
- package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +19 -3
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +24 -11
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +19 -4
- package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +19 -3
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +46 -22
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +3 -3
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +21 -6
- package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +25 -5
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +3 -3
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +2 -2
- package/examples/sample-app/README.md +8 -4
- package/fesm2015/cometchat-chat-uikit-angular.mjs +294 -121
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +278 -108
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -174,17 +174,21 @@ export class CometChatMessageInformationComponent {
|
|
|
174
174
|
ngOnDestroy() {
|
|
175
175
|
this.onMessagesDelivered.unsubscribe();
|
|
176
176
|
this.onMessagesRead.unsubscribe();
|
|
177
|
+
this.onMessagesReadByAll.unsubscribe();
|
|
178
|
+
this.onMessagesDeliveredToAll.unsubscribe();
|
|
177
179
|
}
|
|
178
180
|
addMessageEventListeners() {
|
|
179
181
|
try {
|
|
180
182
|
this.onMessagesDelivered = CometChatMessageEvents.onMessagesDelivered.subscribe((messageReceipt) => {
|
|
181
183
|
if (this.message?.getId() == Number(messageReceipt.getMessageId())) {
|
|
184
|
+
this.updateReceipt(messageReceipt);
|
|
182
185
|
this.message?.setDeliveredAt(messageReceipt.getDeliveredAt());
|
|
183
186
|
this.ref.detectChanges();
|
|
184
187
|
}
|
|
185
188
|
});
|
|
186
189
|
this.onMessagesRead = CometChatMessageEvents.onMessagesRead.subscribe((messageReceipt) => {
|
|
187
190
|
if (this.message?.getId() == Number(messageReceipt.getMessageId())) {
|
|
191
|
+
this.updateReceipt(messageReceipt);
|
|
188
192
|
this.message?.setReadAt(messageReceipt.getReadAt());
|
|
189
193
|
this.ref.detectChanges();
|
|
190
194
|
}
|
|
@@ -206,6 +210,18 @@ export class CometChatMessageInformationComponent {
|
|
|
206
210
|
let receipt = MessageReceiptUtils.getReceiptStatus(this.message);
|
|
207
211
|
return receipt;
|
|
208
212
|
}
|
|
213
|
+
updateReceipt(receipt) {
|
|
214
|
+
let messageKey = this.receipts.findIndex((m) => m.getSender().getUid() === receipt.getSender().getUid());
|
|
215
|
+
if (messageKey > -1) {
|
|
216
|
+
if (receipt.getReceiptType() == receipt.RECEIPT_TYPE.READ_RECEIPT) {
|
|
217
|
+
this.receipts[messageKey].setReadAt(receipt.getReadAt());
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
this.receipts[messageKey].setDeliveredAt(receipt.getDeliveredAt());
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
this.ref.detectChanges();
|
|
224
|
+
}
|
|
209
225
|
getMessageReceipts() {
|
|
210
226
|
if (this.message.getReceiverType() == CometChatUIKitConstants.MessageReceiverType.user) {
|
|
211
227
|
this.isUserType = true;
|
|
@@ -246,10 +262,10 @@ export class CometChatMessageInformationComponent {
|
|
|
246
262
|
}
|
|
247
263
|
}
|
|
248
264
|
CometChatMessageInformationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessageInformationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
249
|
-
CometChatMessageInformationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessageInformationComponent, selector: "cometchat-message-information", inputs: { closeIconURL: "closeIconURL", message: "message", title: "title", template: "template", bubbleView: "bubbleView", subtitleView: "subtitleView", listItemView: "listItemView", receiptDatePattern: "receiptDatePattern", onError: "onError", messageInformationStyle: "messageInformationStyle", readIcon: "readIcon", deliveredIcon: "deliveredIcon", onClose: "onClose", listItemStyle: "listItemStyle", emptyStateText: "emptyStateText", errorStateText: "errorStateText", emptyStateView: "emptyStateView", loadingIconURL: "loadingIconURL", loadingStateView: "loadingStateView", errorStateView: "errorStateView" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-message-information__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-information__header\">\n <div class=\"cc-message-information__title\">\n <cometchat-label [text]=\"title\" [labelStyle]=\"getTitleStyle()\" ></cometchat-label>\n </div>\n <div class=\"cc-close-button\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"closeButtonStyle()\" (cc-button-clicked)=\"closeClicked()\">\n </cometchat-button>\n </div>\n </div>\n <div class=\"cc-message-information__bubble\">\n <cometchat-label class=\"cc-message-information__caption\" [labelStyle]=\"getCaptionStyle()\" [text]=\"messageText\"></cometchat-label>\n <div class=\"cc-message-information__bubble-view\">\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <ng-container *ngTemplateOutlet=\"bubbleView; context:{ $implicit: message }\">\n </ng-container>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n </div>\n </div>\n <div class=\"cc-message-information__list-item\">\n <cometchat-label class=\"cc-message-information__caption\" [labelStyle]=\"getCaptionStyle()\" [text]=\"receiptInfoText\"></cometchat-label>\n <div class=\"cc-message-information__bubble-view\" *ngIf=\"isUserType; else listView\">\n <ng-container *ngIf=\"listItemView; else userListitem\">\n <ng-container *ngTemplateOutlet=\"listItemView; context:{ $implicit: message }\">\n </ng-container>\n </ng-container>\n <ng-template #userListitem>\n <div *ngIf=\"!getUserReceipt(); else userReceiptView\" class=\"cc-empty-state-view\">\n <cometchat-label *ngIf=\"!emptyStateView else customEmptyView\" [text]=\"emptyStateText\" [labelStyle]=\"emptyLabelStyle\"></cometchat-label>\n <ng-template #customEmptyView>\n <ng-container *ngTemplateOutlet=\"emptyStateView\">\n </ng-container>\n </ng-template>\n </div>\n <ng-template #userReceiptView>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <cometchat-list-item [hideSeparator]=\"true\"\n [id]=\"message.getId()\"\n [title]=\"message.getReceiver().getName()\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"getAvatarUrl()\" [avatarName]=\"message.getReceiver().getName()\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else userSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #userSubtitle>\n <div class=\"cc-list-item__subtitle-view \" slot=\"subtitleView\">\n <div class=\"cc-list-item__subtitle\">\n <div class=\"cc-list-item__delivered-receipt\" *ngIf=\"message.getDeliveredAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"deliveredReceipt\" [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Delivered'\" [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"message.getDeliveredAt()\" [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n <div class=\"cc-list-item__read-receipt\" *ngIf=\"message.getReadAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"readReceipt\" [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Read'\" [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"message.getReadAt()\" [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n </div>\n </div>\n </ng-template>\n </cometchat-list-item>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n </ng-template>\n </ng-template>\n </div>\n </div>\n</div>\n<!-- list item view -->\n<ng-template #listView>\n<cometchat-list\n[list]=\"receipts\"\n[listItemView]=\"listItemView ? listItemView : listItem\"\n[hideSearch]=\"true\"\n[state]=\"states\"\n[emptyStateText]=\"emptyStateText\"\n[errorStateText]=\"errorStateText\"\n[loadingIconURL]=\"loadingIconURL\"\n[loadingStateView]=\"loadingStateView\"\n[errorStateView]=\"errorStateView\"\n[emptyStateView]=\"emptyStateView\"\n[title]=\"''\"\n></cometchat-list>\n</ng-template>\n<ng-template #listItem let-messageReceipt>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <cometchat-list-item [hideSeparator]=\"true\"\n [title]=\"messageReceipt.getSender().getName()\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"messageReceipt.getSender()?.getAvatar()\" [avatarName]=\"messageReceipt.getSender().getName()\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else userSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #userSubtitle>\n <div class=\"cc-list-item__subtitle-view \" slot=\"subtitleView\">\n<div class=\"cc-list-item__subtitle\">\n <div class=\"cc-list-item__delivered-receipt\" *ngIf=\"messageReceipt.getDeliveredAt()\">\n<div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"deliveredReceipt\" [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Delivered'\" [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n</div>\n <cometchat-date [timestamp]=\"messageReceipt.getDeliveredAt()\" [dateStyle]=\"dateStyle\" [pattern]=\"deliveredReceipt\" [customDateString]=\"getDatePattern(messageReceipt.getDeliveredAt())\"></cometchat-date>\n </div>\n <div class=\"cc-list-item__read-receipt\" *ngIf=\"messageReceipt.getReadAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"readReceipt\" [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Read'\" [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [pattern]=\"readReceipt\" [timestamp]=\"messageReceipt.getReadAt()\" [dateStyle]=\"dateStyle\" [customDateString]=\"getDatePattern(messageReceipt.getReadAt())\"></cometchat-date>\n </div>\n</div>\n </div>\n </ng-template>\n </cometchat-list-item>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n</ng-template>", styles: [".cc-message-information__wrapper{height:500px;width:500px;background-color:#fff;padding:8px;display:flex;overflow:hidden;flex-direction:column}*{margin:0;padding:0;box-sizing:border-box}.cc-message-information__title{display:flex;align-items:center;justify-content:center;height:-moz-fit-content;height:fit-content;width:100%;padding:8px 0}.cc-close-button{padding:8px 0}.cc-message-information__header{display:flex;flex-direction:row;justify-content:flex-end}.cc-message-information__bubble-header{display:flex;align-items:flex-start;justify-content:flex-start;padding-bottom:2px}.cc-message-information__bubble-view{overflow-y:auto;max-height:150px;overflow-x:hidden}.cc-message-information__bubble,.cc-message-information__list-item{margin:8px 0;overflow:hidden}.cc-list-item__delivered-receipt,.cc-list-item__read-receipt{display:flex;justify-content:space-between}.cc-list-item__receipt{display:flex}cometchat-label{display:flex;align-items:center;justify-content:flex-start}.cc-empty-state-view{display:flex;align-items:flex-start;justify-content:center}\n"], components: [{ type: i2.CometchatListComponent, selector: "cometchat-list", inputs: ["listItemView", "onScrolledToBottom", "onScrolledToTop", "list", "onSearch", "getSectionHeader", "searchText", "searchIconURL", "listStyle", "searchPlaceholderText", "hideSearch", "hideError", "title", "titleAlignment", "errorStateView", "loadingStateView", "emptyStateView", "state", "errorStateText", "emptyStateText", "loadingIconURL", "showSectionHeader", "sectionHeaderField", "DateSeparatorPattern", "dateSeparatorStyle"] }], directives: [{ type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
265
|
+
CometChatMessageInformationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessageInformationComponent, selector: "cometchat-message-information", inputs: { closeIconURL: "closeIconURL", message: "message", title: "title", template: "template", bubbleView: "bubbleView", subtitleView: "subtitleView", listItemView: "listItemView", receiptDatePattern: "receiptDatePattern", onError: "onError", messageInformationStyle: "messageInformationStyle", readIcon: "readIcon", deliveredIcon: "deliveredIcon", onClose: "onClose", listItemStyle: "listItemStyle", emptyStateText: "emptyStateText", errorStateText: "errorStateText", emptyStateView: "emptyStateView", loadingIconURL: "loadingIconURL", loadingStateView: "loadingStateView", errorStateView: "errorStateView" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-message-information__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-information__header\">\n <div class=\"cc-message-information__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n </div>\n <div class=\"cc-close-button\">\n <cometchat-button [iconURL]=\"closeIconURL\"\n [buttonStyle]=\"closeButtonStyle()\" (cc-button-clicked)=\"closeClicked()\">\n </cometchat-button>\n </div>\n </div>\n <div class=\"cc-message-information__bubble\">\n <cometchat-label class=\"cc-message-information__caption\"\n [labelStyle]=\"getCaptionStyle()\" [text]=\"messageText\"></cometchat-label>\n <div class=\"cc-message-information__bubble-view\">\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: message }\">\n </ng-container>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n </div>\n </div>\n <div class=\"cc-message-information__list-item\">\n <cometchat-label class=\"cc-message-information__caption\"\n [labelStyle]=\"getCaptionStyle()\"\n [text]=\"receiptInfoText\"></cometchat-label>\n <div class=\"cc-message-information__bubble-view\"\n *ngIf=\"isUserType; else listView\">\n <ng-container *ngIf=\"listItemView; else userListitem\">\n <ng-container\n *ngTemplateOutlet=\"listItemView; context:{ $implicit: message }\">\n </ng-container>\n </ng-container>\n <ng-template #userListitem>\n <div *ngIf=\"!getUserReceipt(); else userReceiptView\"\n class=\"cc-empty-state-view\">\n <cometchat-label *ngIf=\"!emptyStateView else customEmptyView\"\n [text]=\"emptyStateText\"\n [labelStyle]=\"emptyLabelStyle\"></cometchat-label>\n <ng-template #customEmptyView>\n <ng-container *ngTemplateOutlet=\"emptyStateView\">\n </ng-container>\n </ng-template>\n </div>\n <ng-template #userReceiptView>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <cometchat-list-item [hideSeparator]=\"true\" [id]=\"message.getId()\"\n [title]=\"message.getReceiver().getName()\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"getAvatarUrl()\"\n [avatarName]=\"message.getReceiver().getName()\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else userSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #userSubtitle>\n <div class=\"cc-list-item__subtitle-view \" slot=\"subtitleView\">\n <div class=\"cc-list-item__subtitle\">\n <div class=\"cc-list-item__delivered-receipt\"\n *ngIf=\"message.getDeliveredAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"deliveredReceipt\"\n [receiptStyle]=\"receiptStyle\"\n [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Delivered'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"message.getDeliveredAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n <div class=\"cc-list-item__read-receipt\"\n *ngIf=\"message.getReadAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"readReceipt\"\n [receiptStyle]=\"receiptStyle\"\n [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Read'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"message.getReadAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n </div>\n </div>\n </ng-template>\n </cometchat-list-item>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n </ng-template>\n </ng-template>\n </div>\n </div>\n</div>\n<!-- list item view -->\n<ng-template #listView>\n <cometchat-list [list]=\"receipts\"\n [listItemView]=\"listItemView ? listItemView : listItem\" [hideSearch]=\"true\"\n [state]=\"states\" [emptyStateText]=\"emptyStateText\"\n [errorStateText]=\"errorStateText\" [loadingIconURL]=\"loadingIconURL\"\n [loadingStateView]=\"loadingStateView\" [errorStateView]=\"errorStateView\"\n [emptyStateView]=\"emptyStateView\" [title]=\"''\"></cometchat-list>\n</ng-template>\n<ng-template #listItem let-messageReceipt>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <cometchat-list-item [hideSeparator]=\"true\"\n [title]=\"messageReceipt.getSender().getName()\"\n [listItemStyle]=\"listItemStyle\"\n [avatarURL]=\"messageReceipt.getSender()?.getAvatar()\"\n [avatarName]=\"messageReceipt.getSender().getName()\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else userSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #userSubtitle>\n <div class=\"cc-list-item__subtitle-view \" slot=\"subtitleView\">\n <div class=\"cc-list-item__subtitle\">\n <div class=\"cc-list-item__delivered-receipt\"\n *ngIf=\"messageReceipt.getDeliveredAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"deliveredReceipt\"\n [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Delivered'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"messageReceipt.getDeliveredAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n <div class=\"cc-list-item__read-receipt\"\n *ngIf=\"messageReceipt.getReadAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"readReceipt\"\n [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Read'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"messageReceipt.getReadAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n </div>\n </div>\n </ng-template>\n </cometchat-list-item>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n</ng-template>\n", styles: [".cc-message-information__wrapper{height:500px;width:500px;background-color:#fff;padding:8px;display:flex;overflow:hidden;flex-direction:column}*{margin:0;padding:0;box-sizing:border-box}.cc-message-information__title{display:flex;align-items:center;justify-content:center;height:-moz-fit-content;height:fit-content;width:100%;padding:8px 0}.cc-close-button{padding:8px 0}.cc-message-information__header{display:flex;flex-direction:row;justify-content:flex-end}.cc-message-information__bubble-header{display:flex;align-items:flex-start;justify-content:flex-start;padding-bottom:2px}.cc-message-information__bubble-view{overflow-y:auto;max-height:150px;overflow-x:hidden}.cc-message-information__bubble,.cc-message-information__list-item{margin:8px 0;overflow:hidden}.cc-list-item__delivered-receipt,.cc-list-item__read-receipt{display:flex;justify-content:space-between}.cc-list-item__receipt{display:flex}cometchat-label{display:flex;align-items:center;justify-content:flex-start}.cc-empty-state-view{display:flex;align-items:flex-start;justify-content:center}\n"], components: [{ type: i2.CometchatListComponent, selector: "cometchat-list", inputs: ["listItemView", "onScrolledToBottom", "onScrolledToTop", "list", "onSearch", "getSectionHeader", "searchText", "searchIconURL", "listStyle", "searchPlaceholderText", "hideSearch", "hideError", "title", "titleAlignment", "errorStateView", "loadingStateView", "emptyStateView", "state", "errorStateText", "emptyStateText", "loadingIconURL", "showSectionHeader", "sectionHeaderField", "DateSeparatorPattern", "dateSeparatorStyle"] }], directives: [{ type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
250
266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessageInformationComponent, decorators: [{
|
|
251
267
|
type: Component,
|
|
252
|
-
args: [{ selector: 'cometchat-message-information', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-message-information__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-information__header\">\n <div class=\"cc-message-information__title\">\n <cometchat-label [text]=\"title\"
|
|
268
|
+
args: [{ selector: 'cometchat-message-information', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-message-information__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-information__header\">\n <div class=\"cc-message-information__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n </div>\n <div class=\"cc-close-button\">\n <cometchat-button [iconURL]=\"closeIconURL\"\n [buttonStyle]=\"closeButtonStyle()\" (cc-button-clicked)=\"closeClicked()\">\n </cometchat-button>\n </div>\n </div>\n <div class=\"cc-message-information__bubble\">\n <cometchat-label class=\"cc-message-information__caption\"\n [labelStyle]=\"getCaptionStyle()\" [text]=\"messageText\"></cometchat-label>\n <div class=\"cc-message-information__bubble-view\">\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: message }\">\n </ng-container>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n </div>\n </div>\n <div class=\"cc-message-information__list-item\">\n <cometchat-label class=\"cc-message-information__caption\"\n [labelStyle]=\"getCaptionStyle()\"\n [text]=\"receiptInfoText\"></cometchat-label>\n <div class=\"cc-message-information__bubble-view\"\n *ngIf=\"isUserType; else listView\">\n <ng-container *ngIf=\"listItemView; else userListitem\">\n <ng-container\n *ngTemplateOutlet=\"listItemView; context:{ $implicit: message }\">\n </ng-container>\n </ng-container>\n <ng-template #userListitem>\n <div *ngIf=\"!getUserReceipt(); else userReceiptView\"\n class=\"cc-empty-state-view\">\n <cometchat-label *ngIf=\"!emptyStateView else customEmptyView\"\n [text]=\"emptyStateText\"\n [labelStyle]=\"emptyLabelStyle\"></cometchat-label>\n <ng-template #customEmptyView>\n <ng-container *ngTemplateOutlet=\"emptyStateView\">\n </ng-container>\n </ng-template>\n </div>\n <ng-template #userReceiptView>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <cometchat-list-item [hideSeparator]=\"true\" [id]=\"message.getId()\"\n [title]=\"message.getReceiver().getName()\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"getAvatarUrl()\"\n [avatarName]=\"message.getReceiver().getName()\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else userSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #userSubtitle>\n <div class=\"cc-list-item__subtitle-view \" slot=\"subtitleView\">\n <div class=\"cc-list-item__subtitle\">\n <div class=\"cc-list-item__delivered-receipt\"\n *ngIf=\"message.getDeliveredAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"deliveredReceipt\"\n [receiptStyle]=\"receiptStyle\"\n [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Delivered'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"message.getDeliveredAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n <div class=\"cc-list-item__read-receipt\"\n *ngIf=\"message.getReadAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"readReceipt\"\n [receiptStyle]=\"receiptStyle\"\n [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Read'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"message.getReadAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n </div>\n </div>\n </ng-template>\n </cometchat-list-item>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n </ng-template>\n </ng-template>\n </div>\n </div>\n</div>\n<!-- list item view -->\n<ng-template #listView>\n <cometchat-list [list]=\"receipts\"\n [listItemView]=\"listItemView ? listItemView : listItem\" [hideSearch]=\"true\"\n [state]=\"states\" [emptyStateText]=\"emptyStateText\"\n [errorStateText]=\"errorStateText\" [loadingIconURL]=\"loadingIconURL\"\n [loadingStateView]=\"loadingStateView\" [errorStateView]=\"errorStateView\"\n [emptyStateView]=\"emptyStateView\" [title]=\"''\"></cometchat-list>\n</ng-template>\n<ng-template #listItem let-messageReceipt>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n <cometchat-list-item [hideSeparator]=\"true\"\n [title]=\"messageReceipt.getSender().getName()\"\n [listItemStyle]=\"listItemStyle\"\n [avatarURL]=\"messageReceipt.getSender()?.getAvatar()\"\n [avatarName]=\"messageReceipt.getSender().getName()\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else userSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #userSubtitle>\n <div class=\"cc-list-item__subtitle-view \" slot=\"subtitleView\">\n <div class=\"cc-list-item__subtitle\">\n <div class=\"cc-list-item__delivered-receipt\"\n *ngIf=\"messageReceipt.getDeliveredAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"deliveredReceipt\"\n [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Delivered'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"messageReceipt.getDeliveredAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n <div class=\"cc-list-item__read-receipt\"\n *ngIf=\"messageReceipt.getReadAt()\">\n <div class=\"cc-list-item__receipt\">\n <cometchat-receipt [receipt]=\"readReceipt\"\n [receiptStyle]=\"receiptStyle\" [deliveredIcon]=\"deliveredIcon\"\n [readIcon]=\"readIcon\"></cometchat-receipt>\n <cometchat-label [text]=\"'Read'\"\n [labelStyle]=\"getSubtitleStyle()\"></cometchat-label>\n </div>\n <cometchat-date [timestamp]=\"messageReceipt.getReadAt()\"\n [dateStyle]=\"dateStyle\"></cometchat-date>\n </div>\n </div>\n </div>\n </ng-template>\n </cometchat-list-item>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n</ng-template>\n", styles: [".cc-message-information__wrapper{height:500px;width:500px;background-color:#fff;padding:8px;display:flex;overflow:hidden;flex-direction:column}*{margin:0;padding:0;box-sizing:border-box}.cc-message-information__title{display:flex;align-items:center;justify-content:center;height:-moz-fit-content;height:fit-content;width:100%;padding:8px 0}.cc-close-button{padding:8px 0}.cc-message-information__header{display:flex;flex-direction:row;justify-content:flex-end}.cc-message-information__bubble-header{display:flex;align-items:flex-start;justify-content:flex-start;padding-bottom:2px}.cc-message-information__bubble-view{overflow-y:auto;max-height:150px;overflow-x:hidden}.cc-message-information__bubble,.cc-message-information__list-item{margin:8px 0;overflow:hidden}.cc-list-item__delivered-receipt,.cc-list-item__read-receipt{display:flex;justify-content:space-between}.cc-list-item__receipt{display:flex}cometchat-label{display:flex;align-items:center;justify-content:flex-start}.cc-empty-state-view{display:flex;align-items:flex-start;justify-content:center}\n"] }]
|
|
253
269
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { closeIconURL: [{
|
|
254
270
|
type: Input
|
|
255
271
|
}], message: [{
|
|
@@ -291,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
291
307
|
}], errorStateView: [{
|
|
292
308
|
type: Input
|
|
293
309
|
}] } });
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRNZXNzYWdlSW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRNZXNzYWdlSW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFpRCxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUsc0JBQXNCLEVBQTRCLHVCQUF1QixFQUFnQixRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3SyxPQUFPLEVBQXlCLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQWEsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7OztBQUU1RTs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTyxvQ0FBb0M7SUF1RC9DLFlBQW9CLEdBQXNCLEVBQVUsWUFBbUM7UUFB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QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLCBDb21ldENoYXRVSUtpdENvbnN0YW50cywgRGF0ZVBhdHRlcm5zLCBSZWNlaXB0cywgU3RhdGVzLCBmb250SGVscGVyLCBsb2NhbGl6ZSB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzJztcbmltcG9ydCB7IERhdGVTdHlsZSwgTGFiZWxTdHlsZSwgTGlzdEl0ZW1TdHlsZSwgUmVjZWlwdFN0eWxlIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1lbGVtZW50cyc7XG5pbXBvcnQgeyBMaXN0U3R5bGUsIE1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLCBNZXNzYWdlUmVjZWlwdFV0aWxzIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWQnO1xuXG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tICdAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHQnO1xuaW1wb3J0IHsgQ29tZXRDaGF0RXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vU2hhcmVkL1V0aWxzL0NvbWVDaGF0RXhjZXB0aW9uJztcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFVJS2l0IH0gZnJvbSAnLi4vLi4vU2hhcmVkL0NvbWV0Q2hhdFVJa2l0L0NvbWV0Q2hhdFVJS2l0JztcblxuLyoqXG4qXG4qIENvbWV0Q2hhdE1lc3NhZ2VJbmZvcm1hdGlvbkNvbXBvbmVudCBpcyBhIHVzZWQgdG8gcmVuZGVyIGxpc3RpdGVtIGNvbXBvbmVudC5cbipcbiogQHZlcnNpb24gMS4wLjBcbiogQGF1dGhvciBDb21ldENoYXRUZWFtXG4qIEBjb3B5cmlnaHQgwqkgMjAyMiBDb21ldENoYXQgSW5jLlxuKlxuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvbWV0Y2hhdC1tZXNzYWdlLWluZm9ybWF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWV0Y2hhdC1tZXNzYWdlLWluZm9ybWF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0TWVzc2FnZUluZm9ybWF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjbG9zZUljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2Nsb3NlMnguc3ZnXCI7XG4gIEBJbnB1dCgpIG1lc3NhZ2UhOiBDb21ldENoYXQuQmFzZU1lc3NhZ2U7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBsb2NhbGl6ZShcIk1FU1NBR0VfSU5GT1JNQVRJT05cIik7XG4gIEBJbnB1dCgpIHRlbXBsYXRlITogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlO1xuICBASW5wdXQoKSBidWJibGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgc3VidGl0bGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgcmVjZWlwdERhdGVQYXR0ZXJuITogKHRpbWVzdGFtcDogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9uRXJyb3I6ICgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHZvaWQpIHwgbnVsbCA9IChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICB9XG4gIEBJbnB1dCgpIG1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlOiBNZXNzYWdlSW5mb3JtYXRpb25TdHlsZSA9IHtcbiAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICB3aWR0aDogXCI1MDBweFwiXG4gIH07XG4gIEBJbnB1dCgpIHJlYWRJY29uOiBzdHJpbmcgPSBcImFzc2V0cy9tZXNzYWdlLXJlYWQuc3ZnXCI7XG4gIEBJbnB1dCgpIGRlbGl2ZXJlZEljb246IHN0cmluZyA9IFwiYXNzZXRzL21lc3NhZ2UtZGVsaXZlcmVkLnN2Z1wiO1xuICBASW5wdXQoKSBvbkNsb3NlITogKCkgPT4gdm9pZDtcbiAgQElucHV0KCkgbGlzdEl0ZW1TdHlsZTogTGlzdEl0ZW1TdHlsZSA9IHt9O1xuICBASW5wdXQoKSBlbXB0eVN0YXRlVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJOT19SRUNJUElFTlRTXCIpXG4gIEBJbnB1dCgpIGVycm9yU3RhdGVUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIlNPTUVUSElOR19XUk9OR1wiKTtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBsb2FkaW5nSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvU3Bpbm5lci5zdmdcIjtcbiAgQElucHV0KCkgbG9hZGluZ1N0YXRlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGVycm9yU3RhdGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb25NZXNzYWdlc0RlbGl2ZXJlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25NZXNzYWdlc1JlYWQhOiBTdWJzY3JpcHRpb247XG4gIHJlY2VpcHRzOiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHRbXSA9IFtdO1xuICByZWNlaXB0U3R5bGUgPSBuZXcgUmVjZWlwdFN0eWxlKHtcbiAgICB3YWl0SWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgc2VudEljb25UaW50OiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIGRlbGl2ZXJlZEljb25UaW50OiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIHJlYWRJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgZXJyb3JJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRFcnJvcigpLFxuICAgIGhlaWdodDogXCIyMHB4XCIsXG4gICAgd2lkdGg6IFwiMjBweFwiLFxuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIlxuICB9KVxuICBpc1VzZXJUeXBlOiBib29sZWFuID0gZmFsc2U7XG4gIGRlbGl2ZXJlZFJlY2VpcHQ6IFJlY2VpcHRzID0gUmVjZWlwdHMuZGVsaXZlcmVkO1xuICByZWFkUmVjZWlwdDogUmVjZWlwdHMgPSBSZWNlaXB0cy5yZWFkO1xuICBsaXN0U3R5bGU6IExpc3RTdHlsZSA9IHt9O1xuICBtZXNzYWdlVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJNRVNTQUdFXCIpO1xuICByZWNlaXB0SW5mb1RleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiUkVDRUlQVF9JTkZPUk1BVElPTlwiKVxuICBlbXB0eUxhYmVsU3R5bGU6IExhYmVsU3R5bGUgPSB7XG4gICAgdGV4dEZvbnQ6ICc0MDAgMTFweCBJbnRlcicsXG4gICAgdGV4dENvbG9yOiBcImJsYWNrXCJcbiAgfVxuICBkYXRlU3R5bGU6IERhdGVTdHlsZSA9IHtcblxuICB9XG4gIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIgfCBudWxsID0gbnVsbDtcbiAgZGl2aWRlclN0eWxlOiBhbnkgPSB7fVxuICBzdGF0ZXM6IFN0YXRlcyA9IFN0YXRlcy5sb2FkaW5nXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IENvbWV0Q2hhdFRoZW1lU2VydmljZSkgeyB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblxuICB9XG4gIGdldERhdGVQYXR0ZXJuKHRpbWVzdGFtcDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucmVjZWlwdERhdGVQYXR0ZXJuKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWNlaXB0RGF0ZVBhdHRlcm4odGltZXN0YW1wKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VGhlbWUoKVxuICAgIENvbWV0Q2hhdFVJS2l0LmdldExvZ2dlZGluVXNlcigpIS50aGVuKCh1c2VyOiBDb21ldENoYXQuVXNlciB8IG51bGwpID0+IHtcbiAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICAgICAgdGhpcy5nZXRNZXNzYWdlUmVjZWlwdHMoKVxuICAgICAgICB0aGlzLmFkZE1lc3NhZ2VFdmVudExpc3RlbmVycygpXG4gICAgICB9XG4gICAgfSlcblxuXG4gIH1cbiAgc2V0VGhlbWUoKSB7XG4gICAgdGhpcy5zZXRNZXNzYWdlSW5mb1N0eWxlKClcbiAgICB0aGlzLnNldExpc3RJdGVtU3R5bGUoKVxuICAgIHRoaXMubGlzdFN0eWxlID0ge1xuICAgICAgdGl0bGVUZXh0Rm9udDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS50aXRsZVRleHRGb250LFxuICAgICAgdGl0bGVUZXh0Q29sb3I6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUudGl0bGVUZXh0Q29sb3IsXG4gICAgICBlbXB0eVN0YXRlVGV4dEZvbnQ6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuZW1wdHlTdGF0ZVRleHRGb250LFxuICAgICAgZW1wdHlTdGF0ZVRleHRDb2xvcjogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5lbXB0eVN0YXRlVGV4dENvbG9yLFxuICAgICAgZXJyb3JTdGF0ZVRleHRGb250OiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmVycm9yU3RhdGVUZXh0Rm9udCxcbiAgICAgIGVycm9yU3RhdGVUZXh0Q29sb3I6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuZXJyb3JTdGF0ZVRleHRDb2xvcixcbiAgICAgIGxvYWRpbmdJY29uVGludDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5sb2FkaW5nSWNvblRpbnQsXG4gICAgfVxuICAgIHRoaXMuZGl2aWRlclN0eWxlID0ge1xuICAgICAgYmFja2dyb3VuZDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5kaXZpZGVyVGludCxcbiAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICB9XG4gICAgdGhpcy5kYXRlU3R5bGUgPSB7XG4gICAgICB0ZXh0Rm9udDogJzQwMCAxMXB4IEludGVyJyxcbiAgICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgfVxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIHNldExpc3RJdGVtU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogTGlzdEl0ZW1TdHlsZSA9IG5ldyBMaXN0SXRlbVN0eWxlKHtcbiAgICAgIGhlaWdodDogXCJmaXQtY29udGVudFwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUyKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgc2VwYXJhdG9yQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCksXG4gICAgICBob3ZlckJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIlxuICAgIH0pXG4gICAgdGhpcy5saXN0SXRlbVN0eWxlID0geyAuLi5kZWZhdWx0U3R5bGUsIC4uLnRoaXMubGlzdEl0ZW1TdHlsZSB9XG4gIH1cbiAgc2V0TWVzc2FnZUluZm9TdHlsZSgpIHtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOiBNZXNzYWdlSW5mb3JtYXRpb25TdHlsZSA9IG5ldyBNZXNzYWdlSW5mb3JtYXRpb25TdHlsZSh7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NTAoKX1gLFxuICAgICAgdGl0bGVUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICB0aXRsZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSxcbiAgICAgIGVtcHR5U3RhdGVUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICBlbXB0eVN0YXRlVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgZXJyb3JTdGF0ZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIGVycm9yU3RhdGVUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBsb2FkaW5nSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBzdWJ0aXRsZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIHN1YnRpdGxlVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5jYXB0aW9uMiksXG4gICAgICBkaXZpZGVyVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgd2lkdGg6IFwiNTAwcHhcIixcbiAgICAgIGNhcHRpb25UZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBjYXB0aW9uVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5jYXB0aW9uMilcbiAgICB9KVxuICAgIHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUgPSB7IC4uLmRlZmF1bHRTdHlsZSwgLi4udGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZSB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbk1lc3NhZ2VzRGVsaXZlcmVkLnVuc3Vic2NyaWJlKClcbiAgICB0aGlzLm9uTWVzc2FnZXNSZWFkLnVuc3Vic2NyaWJlKClcbiAgfVxuICBhZGRNZXNzYWdlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25NZXNzYWdlc0RlbGl2ZXJlZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25NZXNzYWdlc0RlbGl2ZXJlZC5zdWJzY3JpYmUoKG1lc3NhZ2VSZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZT8uZ2V0SWQoKSA9PSBOdW1iZXIobWVzc2FnZVJlY2VpcHQuZ2V0TWVzc2FnZUlkKCkpKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlPy5zZXREZWxpdmVyZWRBdChtZXNzYWdlUmVjZWlwdC5nZXREZWxpdmVyZWRBdCgpKVxuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdGhpcy5vbk1lc3NhZ2VzUmVhZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25NZXNzYWdlc1JlYWQuc3Vic2NyaWJlKChtZXNzYWdlUmVjZWlwdDogQ29tZXRDaGF0Lk1lc3NhZ2VSZWNlaXB0KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2U/LmdldElkKCkgPT0gTnVtYmVyKG1lc3NhZ2VSZWNlaXB0LmdldE1lc3NhZ2VJZCgpKSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZT8uc2V0UmVhZEF0KG1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpKVxuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRBdmF0YXJVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNVc2VyVHlwZSA/ICh0aGlzLm1lc3NhZ2UuZ2V0UmVjZWl2ZXIoKSBhcyBDb21ldENoYXQuVXNlcikuZ2V0QXZhdGFyKCkgOiBcIlwiXG4gIH1cbiAgZ2V0VXNlclJlY2VpcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZS5nZXRSZWFkQXQoKSB8fCB0aGlzLm1lc3NhZ2UuZ2V0RGVsaXZlcmVkQXQoKVxuICB9XG4gIGdldE1lc3NhZ2VSZWNlaXB0KCkge1xuICAgIGxldCByZWNlaXB0ID0gTWVzc2FnZVJlY2VpcHRVdGlscy5nZXRSZWNlaXB0U3RhdHVzKHRoaXMubWVzc2FnZSlcbiAgICByZXR1cm4gcmVjZWlwdFxuICB9XG4gIGdldE1lc3NhZ2VSZWNlaXB0cygpIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlLmdldFJlY2VpdmVyVHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlcikge1xuICAgICAgdGhpcy5pc1VzZXJUeXBlID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW1wdHlTdGF0ZVRleHQgPSBsb2NhbGl6ZShcIk5PX1JFQ0lQSUVOVFwiKVxuICAgICAgdGhpcy5zdGF0ZXMgPSBTdGF0ZXMubG9hZGVkXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmVtcHR5U3RhdGVUZXh0ID0gbG9jYWxpemUoXCJOT19SRUNJUElFTlRTXCIpXG4gICAgICB0aGlzLnN0YXRlcyA9IFN0YXRlcy5sb2FkaW5nXG4gICAgICB0aGlzLmlzVXNlclR5cGUgPSBmYWxzZTtcbiAgICAgIENvbWV0Q2hhdC5nZXRNZXNzYWdlUmVjZWlwdHModGhpcy5tZXNzYWdlLmdldElkKCkpLnRoZW4oKHJlY2VpcHRzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5yZWNlaXB0cyA9IHJlY2VpcHRzLmZpbHRlcigocmVjZWlwdDogQ29tZXRDaGF0Lk1lc3NhZ2VSZWNlaXB0KSA9PiByZWNlaXB0LmdldFNlbmRlcigpLmdldFVpZCgpICE9PSB0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkpIGFzIENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdFtdO1xuICAgICAgICB0aGlzLnN0YXRlcyA9IHRoaXMucmVjZWlwdHMubGVuZ3RoID4gMCA/IFN0YXRlcy5sb2FkZWQgOiBTdGF0ZXMuZW1wdHk7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGF0ZXMgPSBTdGF0ZXMuZXJyb3JcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgfVxuICBjbG9zZUNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub25DbG9zZSkge1xuICAgICAgdGhpcy5vbkNsb3NlKClcbiAgICB9XG4gIH1cbiAgY2xvc2VCdXR0b25TdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICAgIHdpZHRoOiBcIjI0cHhcIixcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgYnV0dG9uSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpXG4gICAgfVxuICB9XG4gIGdldFN1YnRpdGxlU3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHRGb250OiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLnN1YnRpdGxlVGV4dEZvbnQsXG4gICAgICB0ZXh0Q29sb3I6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuc3VidGl0bGVUZXh0Q29sb3JcbiAgICB9XG4gIH1cbiAgZ2V0VGl0bGVTdHlsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dEZvbnQ6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUudGl0bGVUZXh0Rm9udCxcbiAgICAgIHRleHRDb2xvcjogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS50aXRsZVRleHRDb2xvclxuICAgIH1cbiAgfVxuICB3cmFwcGVyU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5oZWlnaHQsXG4gICAgICB3aWR0aDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS53aWR0aCxcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuYmFja2dyb3VuZCxcbiAgICAgIGJvcmRlcjogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuYm9yZGVyUmFkaXVzXG4gICAgfVxuICB9XG4gIGdldENhcHRpb25TdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dEZvbnQ6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuY2FwdGlvblRleHRGb250LFxuICAgICAgdGV4dENvbG9yOiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmNhcHRpb25UZXh0Q29sb3JcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2UtaW5mb3JtYXRpb25fX3dyYXBwZXJcIiBbbmdTdHlsZV09XCJ3cmFwcGVyU3R5bGUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2UtaW5mb3JtYXRpb25fX3RpdGxlXCI+XG4gICAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cInRpdGxlXCIgW2xhYmVsU3R5bGVdPVwiZ2V0VGl0bGVTdHlsZSgpXCIgID48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICAgPC9kaXY+XG4gICAgIDxkaXYgY2xhc3M9XCJjYy1jbG9zZS1idXR0b25cIj5cbiAgICAgIDxjb21ldGNoYXQtYnV0dG9uIFtpY29uVVJMXT1cImNsb3NlSWNvblVSTFwiIFtidXR0b25TdHlsZV09XCJjbG9zZUJ1dHRvblN0eWxlKClcIiAoY2MtYnV0dG9uLWNsaWNrZWQpPVwiY2xvc2VDbGlja2VkKClcIj5cbiAgICAgIDwvY29tZXRjaGF0LWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWluZm9ybWF0aW9uX19idWJibGVcIj5cbiAgICA8Y29tZXRjaGF0LWxhYmVsIGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9fY2FwdGlvblwiIFtsYWJlbFN0eWxlXT1cImdldENhcHRpb25TdHlsZSgpXCIgW3RleHRdPVwibWVzc2FnZVRleHRcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWluZm9ybWF0aW9uX19idWJibGUtdmlld1wiPlxuICAgIDxjb21ldGNoYXQtZGl2aWRlciBbZGl2aWRlclN0eWxlXT1cImRpdmlkZXJTdHlsZVwiPjwvY29tZXRjaGF0LWRpdmlkZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1YmJsZVZpZXc7IGNvbnRleHQ6eyAkaW1wbGljaXQ6IG1lc3NhZ2UgfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxjb21ldGNoYXQtZGl2aWRlciBbZGl2aWRlclN0eWxlXT1cImRpdmlkZXJTdHlsZVwiPjwvY29tZXRjaGF0LWRpdmlkZXI+XG4gICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWluZm9ybWF0aW9uX19saXN0LWl0ZW1cIj5cbiAgICA8Y29tZXRjaGF0LWxhYmVsIGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9fY2FwdGlvblwiIFtsYWJlbFN0eWxlXT1cImdldENhcHRpb25TdHlsZSgpXCIgW3RleHRdPVwicmVjZWlwdEluZm9UZXh0XCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2UtaW5mb3JtYXRpb25fX2J1YmJsZS12aWV3XCIgKm5nSWY9XCJpc1VzZXJUeXBlOyBlbHNlIGxpc3RWaWV3XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdEl0ZW1WaWV3OyBlbHNlIHVzZXJMaXN0aXRlbVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdEl0ZW1WaWV3OyBjb250ZXh0OnsgJGltcGxpY2l0OiBtZXNzYWdlIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXNlckxpc3RpdGVtPlxuICA8ZGl2ICpuZ0lmPVwiIWdldFVzZXJSZWNlaXB0KCk7IGVsc2UgdXNlclJlY2VpcHRWaWV3XCIgY2xhc3M9XCJjYy1lbXB0eS1zdGF0ZS12aWV3XCI+XG4gPGNvbWV0Y2hhdC1sYWJlbCAqbmdJZj1cIiFlbXB0eVN0YXRlVmlldyBlbHNlIGN1c3RvbUVtcHR5Vmlld1wiIFt0ZXh0XT1cImVtcHR5U3RhdGVUZXh0XCIgW2xhYmVsU3R5bGVdPVwiZW1wdHlMYWJlbFN0eWxlXCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gPG5nLXRlbXBsYXRlICNjdXN0b21FbXB0eVZpZXc+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVN0YXRlVmlld1wiPlxuICA8L25nLWNvbnRhaW5lcj5cbiA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICN1c2VyUmVjZWlwdFZpZXc+XG4gICAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbiAgICA8Y29tZXRjaGF0LWxpc3QtaXRlbSBbaGlkZVNlcGFyYXRvcl09XCJ0cnVlXCJcbiAgICBbaWRdPVwibWVzc2FnZS5nZXRJZCgpXCJcbiAgICAgW3RpdGxlXT1cIm1lc3NhZ2UuZ2V0UmVjZWl2ZXIoKS5nZXROYW1lKClcIlxuICAgIFtsaXN0SXRlbVN0eWxlXT1cImxpc3RJdGVtU3R5bGVcIiBbYXZhdGFyVVJMXT1cImdldEF2YXRhclVybCgpXCIgW2F2YXRhck5hbWVdPVwibWVzc2FnZS5nZXRSZWNlaXZlcigpLmdldE5hbWUoKVwiPlxuICAgICAgPGRpdiBzbG90PVwic3VidGl0bGVWaWV3XCIgKm5nSWY9XCJzdWJ0aXRsZVZpZXc7ZWxzZSB1c2VyU3VidGl0bGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1YnRpdGxlVmlld1wiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI3VzZXJTdWJ0aXRsZT5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19zdWJ0aXRsZS12aWV3IFwiIHNsb3Q9XCJzdWJ0aXRsZVZpZXdcIj5cbiAgPGRpdiBjbGFzcz1cImNjLWxpc3QtaXRlbV9fc3VidGl0bGVcIj5cbiAgIDxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX2RlbGl2ZXJlZC1yZWNlaXB0XCIgICpuZ0lmPVwibWVzc2FnZS5nZXREZWxpdmVyZWRBdCgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX3JlY2VpcHRcIj5cbiAgIDxjb21ldGNoYXQtcmVjZWlwdCAgW3JlY2VpcHRdPVwiZGVsaXZlcmVkUmVjZWlwdFwiIFtyZWNlaXB0U3R5bGVdPVwicmVjZWlwdFN0eWxlXCIgW2RlbGl2ZXJlZEljb25dPVwiZGVsaXZlcmVkSWNvblwiIFtyZWFkSWNvbl09XCJyZWFkSWNvblwiPjwvY29tZXRjaGF0LXJlY2VpcHQ+XG4gICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIidEZWxpdmVyZWQnXCIgW2xhYmVsU3R5bGVdPVwiZ2V0U3VidGl0bGVTdHlsZSgpXCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gIDwvZGl2PlxuICAgICA8Y29tZXRjaGF0LWRhdGUgIFt0aW1lc3RhbXBdPVwibWVzc2FnZS5nZXREZWxpdmVyZWRBdCgpXCIgW2RhdGVTdHlsZV09XCJkYXRlU3R5bGVcIj48L2NvbWV0Y2hhdC1kYXRlPlxuICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNjLWxpc3QtaXRlbV9fcmVhZC1yZWNlaXB0XCIgKm5nSWY9XCJtZXNzYWdlLmdldFJlYWRBdCgpXCI+XG4gICAgIDxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX3JlY2VpcHRcIj5cbiAgICAgICA8Y29tZXRjaGF0LXJlY2VpcHQgIFtyZWNlaXB0XT1cInJlYWRSZWNlaXB0XCIgW3JlY2VpcHRTdHlsZV09XCJyZWNlaXB0U3R5bGVcIiBbZGVsaXZlcmVkSWNvbl09XCJkZWxpdmVyZWRJY29uXCIgW3JlYWRJY29uXT1cInJlYWRJY29uXCI+PC9jb21ldGNoYXQtcmVjZWlwdD5cbiAgICAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIidSZWFkJ1wiIFtsYWJlbFN0eWxlXT1cImdldFN1YnRpdGxlU3R5bGUoKVwiPjwvY29tZXRjaGF0LWxhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgICA8Y29tZXRjaGF0LWRhdGUgIFt0aW1lc3RhbXBdPVwibWVzc2FnZS5nZXRSZWFkQXQoKVwiIFtkYXRlU3R5bGVdPVwiZGF0ZVN0eWxlXCI+PC9jb21ldGNoYXQtZGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2NvbWV0Y2hhdC1saXN0LWl0ZW0+XG4gICAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIGxpc3QgaXRlbSB2aWV3IC0tPlxuPG5nLXRlbXBsYXRlICNsaXN0Vmlldz5cbjxjb21ldGNoYXQtbGlzdFxuW2xpc3RdPVwicmVjZWlwdHNcIlxuW2xpc3RJdGVtVmlld109XCJsaXN0SXRlbVZpZXcgPyBsaXN0SXRlbVZpZXcgOiBsaXN0SXRlbVwiXG5baGlkZVNlYXJjaF09XCJ0cnVlXCJcbltzdGF0ZV09XCJzdGF0ZXNcIlxuW2VtcHR5U3RhdGVUZXh0XT1cImVtcHR5U3RhdGVUZXh0XCJcbltlcnJvclN0YXRlVGV4dF09XCJlcnJvclN0YXRlVGV4dFwiXG5bbG9hZGluZ0ljb25VUkxdPVwibG9hZGluZ0ljb25VUkxcIlxuW2xvYWRpbmdTdGF0ZVZpZXddPVwibG9hZGluZ1N0YXRlVmlld1wiXG5bZXJyb3JTdGF0ZVZpZXddPVwiZXJyb3JTdGF0ZVZpZXdcIlxuW2VtcHR5U3RhdGVWaWV3XT1cImVtcHR5U3RhdGVWaWV3XCJcblt0aXRsZV09XCInJ1wiXG4+PC9jb21ldGNoYXQtbGlzdD5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RJdGVtIGxldC1tZXNzYWdlUmVjZWlwdD5cbiAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbiAgPGNvbWV0Y2hhdC1saXN0LWl0ZW0gW2hpZGVTZXBhcmF0b3JdPVwidHJ1ZVwiXG4gICBbdGl0bGVdPVwibWVzc2FnZVJlY2VpcHQuZ2V0U2VuZGVyKCkuZ2V0TmFtZSgpXCJcbiAgW2xpc3RJdGVtU3R5bGVdPVwibGlzdEl0ZW1TdHlsZVwiIFthdmF0YXJVUkxdPVwibWVzc2FnZVJlY2VpcHQuZ2V0U2VuZGVyKCk/LmdldEF2YXRhcigpXCIgW2F2YXRhck5hbWVdPVwibWVzc2FnZVJlY2VpcHQuZ2V0U2VuZGVyKCkuZ2V0TmFtZSgpXCI+XG4gICAgPGRpdiBzbG90PVwic3VidGl0bGVWaWV3XCIgKm5nSWY9XCJzdWJ0aXRsZVZpZXc7ZWxzZSB1c2VyU3VidGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJ0aXRsZVZpZXdcIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICN1c2VyU3VidGl0bGU+XG4gIDxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX3N1YnRpdGxlLXZpZXcgXCIgc2xvdD1cInN1YnRpdGxlVmlld1wiPlxuPGRpdiBjbGFzcz1cImNjLWxpc3QtaXRlbV9fc3VidGl0bGVcIj5cbiA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19kZWxpdmVyZWQtcmVjZWlwdFwiICAqbmdJZj1cIm1lc3NhZ2VSZWNlaXB0LmdldERlbGl2ZXJlZEF0KClcIj5cbjxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX3JlY2VpcHRcIj5cbiA8Y29tZXRjaGF0LXJlY2VpcHQgIFtyZWNlaXB0XT1cImRlbGl2ZXJlZFJlY2VpcHRcIiBbcmVjZWlwdFN0eWxlXT1cInJlY2VpcHRTdHlsZVwiIFtkZWxpdmVyZWRJY29uXT1cImRlbGl2ZXJlZEljb25cIiBbcmVhZEljb25dPVwicmVhZEljb25cIj48L2NvbWV0Y2hhdC1yZWNlaXB0PlxuIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwiJ0RlbGl2ZXJlZCdcIiAgW2xhYmVsU3R5bGVdPVwiZ2V0U3VidGl0bGVTdHlsZSgpXCI+PC9jb21ldGNoYXQtbGFiZWw+XG48L2Rpdj5cbiAgIDxjb21ldGNoYXQtZGF0ZSAgW3RpbWVzdGFtcF09XCJtZXNzYWdlUmVjZWlwdC5nZXREZWxpdmVyZWRBdCgpXCIgW2RhdGVTdHlsZV09XCJkYXRlU3R5bGVcIiBbcGF0dGVybl09XCJkZWxpdmVyZWRSZWNlaXB0XCIgW2N1c3RvbURhdGVTdHJpbmddPVwiZ2V0RGF0ZVBhdHRlcm4obWVzc2FnZVJlY2VpcHQuZ2V0RGVsaXZlcmVkQXQoKSlcIj48L2NvbWV0Y2hhdC1kYXRlPlxuIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19yZWFkLXJlY2VpcHRcIiAqbmdJZj1cIm1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpXCI+XG4gICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19yZWNlaXB0XCI+XG4gICAgIDxjb21ldGNoYXQtcmVjZWlwdCAgW3JlY2VpcHRdPVwicmVhZFJlY2VpcHRcIiBbcmVjZWlwdFN0eWxlXT1cInJlY2VpcHRTdHlsZVwiIFtkZWxpdmVyZWRJY29uXT1cImRlbGl2ZXJlZEljb25cIiBbcmVhZEljb25dPVwicmVhZEljb25cIj48L2NvbWV0Y2hhdC1yZWNlaXB0PlxuICAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIidSZWFkJ1wiICBbbGFiZWxTdHlsZV09XCJnZXRTdWJ0aXRsZVN0eWxlKClcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8Y29tZXRjaGF0LWRhdGUgW3BhdHRlcm5dPVwicmVhZFJlY2VpcHRcIiBbdGltZXN0YW1wXT1cIm1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpXCIgW2RhdGVTdHlsZV09XCJkYXRlU3R5bGVcIiBbY3VzdG9tRGF0ZVN0cmluZ109XCJnZXREYXRlUGF0dGVybihtZXNzYWdlUmVjZWlwdC5nZXRSZWFkQXQoKSlcIj48L2NvbWV0Y2hhdC1kYXRlPlxuICA8L2Rpdj5cbjwvZGl2PlxuICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9jb21ldGNoYXQtbGlzdC1pdGVtPlxuICA8Y29tZXRjaGF0LWRpdmlkZXIgW2RpdmlkZXJTdHlsZV09XCJkaXZpZGVyU3R5bGVcIj48L2NvbWV0Y2hhdC1kaXZpZGVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRNZXNzYWdlSW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRNZXNzYWdlSW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFpRCxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUsc0JBQXNCLEVBQTRCLHVCQUF1QixFQUFnQixRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3SyxPQUFPLEVBQXlCLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQWEsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7OztBQUU1RTs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTyxvQ0FBb0M7SUF5RC9DLFlBQW9CLEdBQXNCLEVBQVUsWUFBbUM7UUFB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QWlCO1NBQzFELENBQUE7SUFDSCxDQUFDO0lBQ0QsYUFBYTtRQUNYLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWE7WUFDcEQsU0FBUyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjO1NBQ3ZELENBQUE7SUFDSCxDQUFDOztrSUF0UFUsb0NBQW9DO3NIQUFwQyxvQ0FBb0MsZ3NCQzFCakQsb3NPQW1KQTs0RkR6SGEsb0NBQW9DO2tCQU5oRCxTQUFTOytCQUNFLCtCQUErQixtQkFHeEIsdUJBQXVCLENBQUMsTUFBTTs0SUFHdEMsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFHRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLCBDb21ldENoYXRVSUtpdENvbnN0YW50cywgRGF0ZVBhdHRlcm5zLCBSZWNlaXB0cywgU3RhdGVzLCBmb250SGVscGVyLCBsb2NhbGl6ZSB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzJztcbmltcG9ydCB7IERhdGVTdHlsZSwgTGFiZWxTdHlsZSwgTGlzdEl0ZW1TdHlsZSwgUmVjZWlwdFN0eWxlIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1lbGVtZW50cyc7XG5pbXBvcnQgeyBMaXN0U3R5bGUsIE1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLCBNZXNzYWdlUmVjZWlwdFV0aWxzIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWQnO1xuXG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tICdAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHQnO1xuaW1wb3J0IHsgQ29tZXRDaGF0RXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vU2hhcmVkL1V0aWxzL0NvbWVDaGF0RXhjZXB0aW9uJztcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFVJS2l0IH0gZnJvbSAnLi4vLi4vU2hhcmVkL0NvbWV0Q2hhdFVJa2l0L0NvbWV0Q2hhdFVJS2l0JztcblxuLyoqXG4qXG4qIENvbWV0Q2hhdE1lc3NhZ2VJbmZvcm1hdGlvbkNvbXBvbmVudCBpcyBhIHVzZWQgdG8gcmVuZGVyIGxpc3RpdGVtIGNvbXBvbmVudC5cbipcbiogQHZlcnNpb24gMS4wLjBcbiogQGF1dGhvciBDb21ldENoYXRUZWFtXG4qIEBjb3B5cmlnaHQgwqkgMjAyMiBDb21ldENoYXQgSW5jLlxuKlxuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvbWV0Y2hhdC1tZXNzYWdlLWluZm9ybWF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWV0Y2hhdC1tZXNzYWdlLWluZm9ybWF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tZXRjaGF0LW1lc3NhZ2UtaW5mb3JtYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0TWVzc2FnZUluZm9ybWF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjbG9zZUljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2Nsb3NlMnguc3ZnXCI7XG4gIEBJbnB1dCgpIG1lc3NhZ2UhOiBDb21ldENoYXQuQmFzZU1lc3NhZ2U7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBsb2NhbGl6ZShcIk1FU1NBR0VfSU5GT1JNQVRJT05cIik7XG4gIEBJbnB1dCgpIHRlbXBsYXRlITogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlO1xuICBASW5wdXQoKSBidWJibGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgc3VidGl0bGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgcmVjZWlwdERhdGVQYXR0ZXJuITogKHRpbWVzdGFtcDogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9uRXJyb3I6ICgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHZvaWQpIHwgbnVsbCA9IChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICB9XG4gIEBJbnB1dCgpIG1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlOiBNZXNzYWdlSW5mb3JtYXRpb25TdHlsZSA9IHtcbiAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICB3aWR0aDogXCI1MDBweFwiXG4gIH07XG4gIEBJbnB1dCgpIHJlYWRJY29uOiBzdHJpbmcgPSBcImFzc2V0cy9tZXNzYWdlLXJlYWQuc3ZnXCI7XG4gIEBJbnB1dCgpIGRlbGl2ZXJlZEljb246IHN0cmluZyA9IFwiYXNzZXRzL21lc3NhZ2UtZGVsaXZlcmVkLnN2Z1wiO1xuICBASW5wdXQoKSBvbkNsb3NlITogKCkgPT4gdm9pZDtcbiAgQElucHV0KCkgbGlzdEl0ZW1TdHlsZTogTGlzdEl0ZW1TdHlsZSA9IHt9O1xuICBASW5wdXQoKSBlbXB0eVN0YXRlVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJOT19SRUNJUElFTlRTXCIpXG4gIEBJbnB1dCgpIGVycm9yU3RhdGVUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIlNPTUVUSElOR19XUk9OR1wiKTtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBsb2FkaW5nSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvU3Bpbm5lci5zdmdcIjtcbiAgQElucHV0KCkgbG9hZGluZ1N0YXRlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGVycm9yU3RhdGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb25NZXNzYWdlc0RlbGl2ZXJlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25NZXNzYWdlc1JlYWQhOiBTdWJzY3JpcHRpb247XG4gIG9uTWVzc2FnZXNSZWFkQnlBbGwhOiBTdWJzY3JpcHRpb247XG4gIG9uTWVzc2FnZXNEZWxpdmVyZWRUb0FsbCE6IFN1YnNjcmlwdGlvbjtcbiAgcmVjZWlwdHM6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdFtdID0gW107XG4gIHJlY2VpcHRTdHlsZSA9IG5ldyBSZWNlaXB0U3R5bGUoe1xuICAgIHdhaXRJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICBzZW50SWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgZGVsaXZlcmVkSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgcmVhZEljb25UaW50OiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICBlcnJvckljb25UaW50OiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEVycm9yKCksXG4gICAgaGVpZ2h0OiBcIjIwcHhcIixcbiAgICB3aWR0aDogXCIyMHB4XCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gIH0pXG4gIGlzVXNlclR5cGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGVsaXZlcmVkUmVjZWlwdDogUmVjZWlwdHMgPSBSZWNlaXB0cy5kZWxpdmVyZWQ7XG4gIHJlYWRSZWNlaXB0OiBSZWNlaXB0cyA9IFJlY2VpcHRzLnJlYWQ7XG4gIGxpc3RTdHlsZTogTGlzdFN0eWxlID0ge307XG4gIG1lc3NhZ2VUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIk1FU1NBR0VcIik7XG4gIHJlY2VpcHRJbmZvVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJSRUNFSVBUX0lORk9STUFUSU9OXCIpXG4gIGVtcHR5TGFiZWxTdHlsZTogTGFiZWxTdHlsZSA9IHtcbiAgICB0ZXh0Rm9udDogJzQwMCAxMXB4IEludGVyJyxcbiAgICB0ZXh0Q29sb3I6IFwiYmxhY2tcIlxuICB9XG4gIGRhdGVTdHlsZTogRGF0ZVN0eWxlID0ge1xuXG4gIH1cbiAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlciB8IG51bGwgPSBudWxsO1xuICBkaXZpZGVyU3R5bGU6IGFueSA9IHt9XG4gIHN0YXRlczogU3RhdGVzID0gU3RhdGVzLmxvYWRpbmdcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRoZW1lU2VydmljZTogQ29tZXRDaGF0VGhlbWVTZXJ2aWNlKSB7IH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gIH1cbiAgZ2V0RGF0ZVBhdHRlcm4odGltZXN0YW1wOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5yZWNlaXB0RGF0ZVBhdHRlcm4pIHtcbiAgICAgIHJldHVybiB0aGlzLnJlY2VpcHREYXRlUGF0dGVybih0aW1lc3RhbXApXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRUaGVtZSgpXG4gICAgQ29tZXRDaGF0VUlLaXQuZ2V0TG9nZ2VkaW5Vc2VyKCkhLnRoZW4oKHVzZXI6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgICB0aGlzLmdldE1lc3NhZ2VSZWNlaXB0cygpXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZUV2ZW50TGlzdGVuZXJzKClcbiAgICAgIH1cbiAgICB9KVxuXG5cbiAgfVxuICBzZXRUaGVtZSgpIHtcbiAgICB0aGlzLnNldE1lc3NhZ2VJbmZvU3R5bGUoKVxuICAgIHRoaXMuc2V0TGlzdEl0ZW1TdHlsZSgpXG4gICAgdGhpcy5saXN0U3R5bGUgPSB7XG4gICAgICB0aXRsZVRleHRGb250OiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLnRpdGxlVGV4dEZvbnQsXG4gICAgICB0aXRsZVRleHRDb2xvcjogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS50aXRsZVRleHRDb2xvcixcbiAgICAgIGVtcHR5U3RhdGVUZXh0Rm9udDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5lbXB0eVN0YXRlVGV4dEZvbnQsXG4gICAgICBlbXB0eVN0YXRlVGV4dENvbG9yOiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmVtcHR5U3RhdGVUZXh0Q29sb3IsXG4gICAgICBlcnJvclN0YXRlVGV4dEZvbnQ6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuZXJyb3JTdGF0ZVRleHRGb250LFxuICAgICAgZXJyb3JTdGF0ZVRleHRDb2xvcjogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5lcnJvclN0YXRlVGV4dENvbG9yLFxuICAgICAgbG9hZGluZ0ljb25UaW50OiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmxvYWRpbmdJY29uVGludCxcbiAgICB9XG4gICAgdGhpcy5kaXZpZGVyU3R5bGUgPSB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmRpdmlkZXJUaW50LFxuICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIH1cbiAgICB0aGlzLmRhdGVTdHlsZSA9IHtcbiAgICAgIHRleHRGb250OiAnNDAwIDExcHggSW50ZXInLFxuICAgICAgdGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICB9XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbiAgc2V0TGlzdEl0ZW1TdHlsZSgpIHtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOiBMaXN0SXRlbVN0eWxlID0gbmV3IExpc3RJdGVtU3R5bGUoe1xuICAgICAgaGVpZ2h0OiBcImZpdC1jb250ZW50XCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGFjdGl2ZUJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTIpLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSxcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBzZXBhcmF0b3JDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKSxcbiAgICAgIGhvdmVyQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gICAgfSlcbiAgICB0aGlzLmxpc3RJdGVtU3R5bGUgPSB7IC4uLmRlZmF1bHRTdHlsZSwgLi4udGhpcy5saXN0SXRlbVN0eWxlIH1cbiAgfVxuICBzZXRNZXNzYWdlSW5mb1N0eWxlKCkge1xuICAgIGxldCBkZWZhdWx0U3R5bGU6IE1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlID0gbmV3IE1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlKHtcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ1MCgpfWAsXG4gICAgICB0aXRsZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIHRpdGxlVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgZW1wdHlTdGF0ZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIGVtcHR5U3RhdGVUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBlcnJvclN0YXRlVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgICAgZXJyb3JTdGF0ZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGxvYWRpbmdJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIHN1YnRpdGxlVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgc3VidGl0bGVUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24yKSxcbiAgICAgIGRpdmlkZXJUaW50OiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICB3aWR0aDogXCI1MDBweFwiLFxuICAgICAgY2FwdGlvblRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGNhcHRpb25UZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24yKVxuICAgIH0pXG4gICAgdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZSA9IHsgLi4uZGVmYXVsdFN0eWxlLCAuLi50aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uTWVzc2FnZXNEZWxpdmVyZWQudW5zdWJzY3JpYmUoKVxuICAgIHRoaXMub25NZXNzYWdlc1JlYWQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uTWVzc2FnZXNSZWFkQnlBbGwudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uTWVzc2FnZXNEZWxpdmVyZWRUb0FsbC51bnN1YnNjcmliZSgpXG4gIH1cbiAgYWRkTWVzc2FnZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm9uTWVzc2FnZXNEZWxpdmVyZWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uTWVzc2FnZXNEZWxpdmVyZWQuc3Vic2NyaWJlKChtZXNzYWdlUmVjZWlwdDogQ29tZXRDaGF0Lk1lc3NhZ2VSZWNlaXB0KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2U/LmdldElkKCkgPT0gTnVtYmVyKG1lc3NhZ2VSZWNlaXB0LmdldE1lc3NhZ2VJZCgpKSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlUmVjZWlwdChtZXNzYWdlUmVjZWlwdClcbiAgICAgICAgICB0aGlzLm1lc3NhZ2U/LnNldERlbGl2ZXJlZEF0KG1lc3NhZ2VSZWNlaXB0LmdldERlbGl2ZXJlZEF0KCkpXG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLm9uTWVzc2FnZXNSZWFkID0gQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5vbk1lc3NhZ2VzUmVhZC5zdWJzY3JpYmUoKG1lc3NhZ2VSZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZT8uZ2V0SWQoKSA9PSBOdW1iZXIobWVzc2FnZVJlY2VpcHQuZ2V0TWVzc2FnZUlkKCkpKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVSZWNlaXB0KG1lc3NhZ2VSZWNlaXB0KVxuICAgICAgICAgIHRoaXMubWVzc2FnZT8uc2V0UmVhZEF0KG1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpKVxuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRBdmF0YXJVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNVc2VyVHlwZSA/ICh0aGlzLm1lc3NhZ2UuZ2V0UmVjZWl2ZXIoKSBhcyBDb21ldENoYXQuVXNlcikuZ2V0QXZhdGFyKCkgOiBcIlwiXG4gIH1cbiAgZ2V0VXNlclJlY2VpcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZS5nZXRSZWFkQXQoKSB8fCB0aGlzLm1lc3NhZ2UuZ2V0RGVsaXZlcmVkQXQoKVxuICB9XG4gIGdldE1lc3NhZ2VSZWNlaXB0KCkge1xuICAgIGxldCByZWNlaXB0ID0gTWVzc2FnZVJlY2VpcHRVdGlscy5nZXRSZWNlaXB0U3RhdHVzKHRoaXMubWVzc2FnZSlcbiAgICByZXR1cm4gcmVjZWlwdFxuICB9XG4gIHVwZGF0ZVJlY2VpcHQocmVjZWlwdDogQ29tZXRDaGF0Lk1lc3NhZ2VSZWNlaXB0KSB7XG4gICAgbGV0IG1lc3NhZ2VLZXkgPSB0aGlzLnJlY2VpcHRzLmZpbmRJbmRleChcbiAgICAgIChtOiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IG0uZ2V0U2VuZGVyKCkuZ2V0VWlkKCkgPT09IHJlY2VpcHQuZ2V0U2VuZGVyKCkuZ2V0VWlkKClcbiAgICApO1xuICAgIGlmIChtZXNzYWdlS2V5ID4gLTEpIHtcbiAgICAgIGlmIChyZWNlaXB0LmdldFJlY2VpcHRUeXBlKCkgPT0gcmVjZWlwdC5SRUNFSVBUX1RZUEUuUkVBRF9SRUNFSVBUKSB7XG4gICAgICAgIHRoaXMucmVjZWlwdHNbbWVzc2FnZUtleV0uc2V0UmVhZEF0KHJlY2VpcHQuZ2V0UmVhZEF0KCkpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWNlaXB0c1ttZXNzYWdlS2V5XS5zZXREZWxpdmVyZWRBdChyZWNlaXB0LmdldERlbGl2ZXJlZEF0KCkpXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgZ2V0TWVzc2FnZVJlY2VpcHRzKCkge1xuICAgIGlmICh0aGlzLm1lc3NhZ2UuZ2V0UmVjZWl2ZXJUeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyKSB7XG4gICAgICB0aGlzLmlzVXNlclR5cGUgPSB0cnVlO1xuICAgICAgdGhpcy5lbXB0eVN0YXRlVGV4dCA9IGxvY2FsaXplKFwiTk9fUkVDSVBJRU5UXCIpXG4gICAgICB0aGlzLnN0YXRlcyA9IFN0YXRlcy5sb2FkZWRcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuZW1wdHlTdGF0ZVRleHQgPSBsb2NhbGl6ZShcIk5PX1JFQ0lQSUVOVFNcIilcbiAgICAgIHRoaXMuc3RhdGVzID0gU3RhdGVzLmxvYWRpbmdcbiAgICAgIHRoaXMuaXNVc2VyVHlwZSA9IGZhbHNlO1xuICAgICAgQ29tZXRDaGF0LmdldE1lc3NhZ2VSZWNlaXB0cyh0aGlzLm1lc3NhZ2UuZ2V0SWQoKSkudGhlbigocmVjZWlwdHM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnJlY2VpcHRzID0gcmVjZWlwdHMuZmlsdGVyKChyZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHJlY2VpcHQuZ2V0U2VuZGVyKCkuZ2V0VWlkKCkgIT09IHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSkgYXMgQ29tZXRDaGF0Lk1lc3NhZ2VSZWNlaXB0W107XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5yZWNlaXB0cy5sZW5ndGggPiAwID8gU3RhdGVzLmxvYWRlZCA6IFN0YXRlcy5lbXB0eTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnI6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXRlcyA9IFN0YXRlcy5lcnJvclxuICAgICAgICB9KVxuICAgIH1cblxuICB9XG4gIGNsb3NlQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vbkNsb3NlKSB7XG4gICAgICB0aGlzLm9uQ2xvc2UoKVxuICAgIH1cbiAgfVxuICBjbG9zZUJ1dHRvblN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IFwiMjRweFwiLFxuICAgICAgd2lkdGg6IFwiMjRweFwiLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBidXR0b25JY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgICB9XG4gIH1cbiAgZ2V0U3VidGl0bGVTdHlsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dEZvbnQ6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuc3VidGl0bGVUZXh0Rm9udCxcbiAgICAgIHRleHRDb2xvcjogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5zdWJ0aXRsZVRleHRDb2xvclxuICAgIH1cbiAgfVxuICBnZXRUaXRsZVN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0Rm9udDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS50aXRsZVRleHRGb250LFxuICAgICAgdGV4dENvbG9yOiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLnRpdGxlVGV4dENvbG9yXG4gICAgfVxuICB9XG4gIHdyYXBwZXJTdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLndpZHRoLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5iYWNrZ3JvdW5kLFxuICAgICAgYm9yZGVyOiB0aGlzLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmJvcmRlcixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbiAgZ2V0Q2FwdGlvblN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0Rm9udDogdGhpcy5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5jYXB0aW9uVGV4dEZvbnQsXG4gICAgICB0ZXh0Q29sb3I6IHRoaXMubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuY2FwdGlvblRleHRDb2xvclxuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9fd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWluZm9ybWF0aW9uX19oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9fdGl0bGVcIj5cbiAgICAgIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwidGl0bGVcIlxuICAgICAgICBbbGFiZWxTdHlsZV09XCJnZXRUaXRsZVN0eWxlKClcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtY2xvc2UtYnV0dG9uXCI+XG4gICAgICA8Y29tZXRjaGF0LWJ1dHRvbiBbaWNvblVSTF09XCJjbG9zZUljb25VUkxcIlxuICAgICAgICBbYnV0dG9uU3R5bGVdPVwiY2xvc2VCdXR0b25TdHlsZSgpXCIgKGNjLWJ1dHRvbi1jbGlja2VkKT1cImNsb3NlQ2xpY2tlZCgpXCI+XG4gICAgICA8L2NvbWV0Y2hhdC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9fYnViYmxlXCI+XG4gICAgPGNvbWV0Y2hhdC1sYWJlbCBjbGFzcz1cImNjLW1lc3NhZ2UtaW5mb3JtYXRpb25fX2NhcHRpb25cIlxuICAgICAgW2xhYmVsU3R5bGVdPVwiZ2V0Q2FwdGlvblN0eWxlKClcIiBbdGV4dF09XCJtZXNzYWdlVGV4dFwiPjwvY29tZXRjaGF0LWxhYmVsPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWluZm9ybWF0aW9uX19idWJibGUtdmlld1wiPlxuICAgICAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWJibGVWaWV3OyBjb250ZXh0OnsgJGltcGxpY2l0OiBtZXNzYWdlIH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWluZm9ybWF0aW9uX19saXN0LWl0ZW1cIj5cbiAgICA8Y29tZXRjaGF0LWxhYmVsIGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9fY2FwdGlvblwiXG4gICAgICBbbGFiZWxTdHlsZV09XCJnZXRDYXB0aW9uU3R5bGUoKVwiXG4gICAgICBbdGV4dF09XCJyZWNlaXB0SW5mb1RleHRcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1pbmZvcm1hdGlvbl9fYnViYmxlLXZpZXdcIlxuICAgICAgKm5nSWY9XCJpc1VzZXJUeXBlOyBlbHNlIGxpc3RWaWV3XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdEl0ZW1WaWV3OyBlbHNlIHVzZXJMaXN0aXRlbVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbVZpZXc7IGNvbnRleHQ6eyAkaW1wbGljaXQ6IG1lc3NhZ2UgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICN1c2VyTGlzdGl0ZW0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZ2V0VXNlclJlY2VpcHQoKTsgZWxzZSB1c2VyUmVjZWlwdFZpZXdcIlxuICAgICAgICAgIGNsYXNzPVwiY2MtZW1wdHktc3RhdGUtdmlld1wiPlxuICAgICAgICAgIDxjb21ldGNoYXQtbGFiZWwgKm5nSWY9XCIhZW1wdHlTdGF0ZVZpZXcgZWxzZSBjdXN0b21FbXB0eVZpZXdcIlxuICAgICAgICAgICAgW3RleHRdPVwiZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgW2xhYmVsU3R5bGVdPVwiZW1wdHlMYWJlbFN0eWxlXCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21FbXB0eVZpZXc+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlTdGF0ZVZpZXdcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI3VzZXJSZWNlaXB0Vmlldz5cbiAgICAgICAgICA8Y29tZXRjaGF0LWRpdmlkZXIgW2RpdmlkZXJTdHlsZV09XCJkaXZpZGVyU3R5bGVcIj48L2NvbWV0Y2hhdC1kaXZpZGVyPlxuICAgICAgICAgIDxjb21ldGNoYXQtbGlzdC1pdGVtIFtoaWRlU2VwYXJhdG9yXT1cInRydWVcIiBbaWRdPVwibWVzc2FnZS5nZXRJZCgpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJtZXNzYWdlLmdldFJlY2VpdmVyKCkuZ2V0TmFtZSgpXCJcbiAgICAgICAgICAgIFtsaXN0SXRlbVN0eWxlXT1cImxpc3RJdGVtU3R5bGVcIiBbYXZhdGFyVVJMXT1cImdldEF2YXRhclVybCgpXCJcbiAgICAgICAgICAgIFthdmF0YXJOYW1lXT1cIm1lc3NhZ2UuZ2V0UmVjZWl2ZXIoKS5nZXROYW1lKClcIj5cbiAgICAgICAgICAgIDxkaXYgc2xvdD1cInN1YnRpdGxlVmlld1wiICpuZ0lmPVwic3VidGl0bGVWaWV3O2Vsc2UgdXNlclN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJ0aXRsZVZpZXdcIj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdXNlclN1YnRpdGxlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19zdWJ0aXRsZS12aWV3IFwiIHNsb3Q9XCJzdWJ0aXRsZVZpZXdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNjLWxpc3QtaXRlbV9fZGVsaXZlcmVkLXJlY2VpcHRcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2UuZ2V0RGVsaXZlcmVkQXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19yZWNlaXB0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvbWV0Y2hhdC1yZWNlaXB0IFtyZWNlaXB0XT1cImRlbGl2ZXJlZFJlY2VpcHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlY2VpcHRTdHlsZV09XCJyZWNlaXB0U3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RlbGl2ZXJlZEljb25dPVwiZGVsaXZlcmVkSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZEljb25dPVwicmVhZEljb25cIj48L2NvbWV0Y2hhdC1yZWNlaXB0PlxuICAgICAgICAgICAgICAgICAgICAgIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwiJ0RlbGl2ZXJlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsU3R5bGVdPVwiZ2V0U3VidGl0bGVTdHlsZSgpXCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8Y29tZXRjaGF0LWRhdGUgW3RpbWVzdGFtcF09XCJtZXNzYWdlLmdldERlbGl2ZXJlZEF0KClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkYXRlU3R5bGVdPVwiZGF0ZVN0eWxlXCI+PC9jb21ldGNoYXQtZGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNjLWxpc3QtaXRlbV9fcmVhZC1yZWNlaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlLmdldFJlYWRBdCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX3JlY2VpcHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Y29tZXRjaGF0LXJlY2VpcHQgW3JlY2VpcHRdPVwicmVhZFJlY2VpcHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlY2VpcHRTdHlsZV09XCJyZWNlaXB0U3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RlbGl2ZXJlZEljb25dPVwiZGVsaXZlcmVkSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZEljb25dPVwicmVhZEljb25cIj48L2NvbWV0Y2hhdC1yZWNlaXB0PlxuICAgICAgICAgICAgICAgICAgICAgIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwiJ1JlYWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFN0eWxlXT1cImdldFN1YnRpdGxlU3R5bGUoKVwiPjwvY29tZXRjaGF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGNvbWV0Y2hhdC1kYXRlIFt0aW1lc3RhbXBdPVwibWVzc2FnZS5nZXRSZWFkQXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGVTdHlsZV09XCJkYXRlU3R5bGVcIj48L2NvbWV0Y2hhdC1kYXRlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2NvbWV0Y2hhdC1saXN0LWl0ZW0+XG4gICAgICAgICAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIGxpc3QgaXRlbSB2aWV3IC0tPlxuPG5nLXRlbXBsYXRlICNsaXN0Vmlldz5cbiAgPGNvbWV0Y2hhdC1saXN0IFtsaXN0XT1cInJlY2VpcHRzXCJcbiAgICBbbGlzdEl0ZW1WaWV3XT1cImxpc3RJdGVtVmlldyA/IGxpc3RJdGVtVmlldyA6IGxpc3RJdGVtXCIgW2hpZGVTZWFyY2hdPVwidHJ1ZVwiXG4gICAgW3N0YXRlXT1cInN0YXRlc1wiIFtlbXB0eVN0YXRlVGV4dF09XCJlbXB0eVN0YXRlVGV4dFwiXG4gICAgW2Vycm9yU3RhdGVUZXh0XT1cImVycm9yU3RhdGVUZXh0XCIgW2xvYWRpbmdJY29uVVJMXT1cImxvYWRpbmdJY29uVVJMXCJcbiAgICBbbG9hZGluZ1N0YXRlVmlld109XCJsb2FkaW5nU3RhdGVWaWV3XCIgW2Vycm9yU3RhdGVWaWV3XT1cImVycm9yU3RhdGVWaWV3XCJcbiAgICBbZW1wdHlTdGF0ZVZpZXddPVwiZW1wdHlTdGF0ZVZpZXdcIiBbdGl0bGVdPVwiJydcIj48L2NvbWV0Y2hhdC1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LW1lc3NhZ2VSZWNlaXB0PlxuICA8Y29tZXRjaGF0LWRpdmlkZXIgW2RpdmlkZXJTdHlsZV09XCJkaXZpZGVyU3R5bGVcIj48L2NvbWV0Y2hhdC1kaXZpZGVyPlxuICA8Y29tZXRjaGF0LWxpc3QtaXRlbSBbaGlkZVNlcGFyYXRvcl09XCJ0cnVlXCJcbiAgICBbdGl0bGVdPVwibWVzc2FnZVJlY2VpcHQuZ2V0U2VuZGVyKCkuZ2V0TmFtZSgpXCJcbiAgICBbbGlzdEl0ZW1TdHlsZV09XCJsaXN0SXRlbVN0eWxlXCJcbiAgICBbYXZhdGFyVVJMXT1cIm1lc3NhZ2VSZWNlaXB0LmdldFNlbmRlcigpPy5nZXRBdmF0YXIoKVwiXG4gICAgW2F2YXRhck5hbWVdPVwibWVzc2FnZVJlY2VpcHQuZ2V0U2VuZGVyKCkuZ2V0TmFtZSgpXCI+XG4gICAgPGRpdiBzbG90PVwic3VidGl0bGVWaWV3XCIgKm5nSWY9XCJzdWJ0aXRsZVZpZXc7ZWxzZSB1c2VyU3VidGl0bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJ0aXRsZVZpZXdcIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjdXNlclN1YnRpdGxlPlxuICAgICAgPGRpdiBjbGFzcz1cImNjLWxpc3QtaXRlbV9fc3VidGl0bGUtdmlldyBcIiBzbG90PVwic3VidGl0bGVWaWV3XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX3N1YnRpdGxlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNjLWxpc3QtaXRlbV9fZGVsaXZlcmVkLXJlY2VpcHRcIlxuICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlUmVjZWlwdC5nZXREZWxpdmVyZWRBdCgpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19yZWNlaXB0XCI+XG4gICAgICAgICAgICAgIDxjb21ldGNoYXQtcmVjZWlwdCBbcmVjZWlwdF09XCJkZWxpdmVyZWRSZWNlaXB0XCJcbiAgICAgICAgICAgICAgICBbcmVjZWlwdFN0eWxlXT1cInJlY2VpcHRTdHlsZVwiIFtkZWxpdmVyZWRJY29uXT1cImRlbGl2ZXJlZEljb25cIlxuICAgICAgICAgICAgICAgIFtyZWFkSWNvbl09XCJyZWFkSWNvblwiPjwvY29tZXRjaGF0LXJlY2VpcHQ+XG4gICAgICAgICAgICAgIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwiJ0RlbGl2ZXJlZCdcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFN0eWxlXT1cImdldFN1YnRpdGxlU3R5bGUoKVwiPjwvY29tZXRjaGF0LWxhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Y29tZXRjaGF0LWRhdGUgW3RpbWVzdGFtcF09XCJtZXNzYWdlUmVjZWlwdC5nZXREZWxpdmVyZWRBdCgpXCJcbiAgICAgICAgICAgICAgW2RhdGVTdHlsZV09XCJkYXRlU3R5bGVcIj48L2NvbWV0Y2hhdC1kYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1saXN0LWl0ZW1fX3JlYWQtcmVjZWlwdFwiXG4gICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdC1pdGVtX19yZWNlaXB0XCI+XG4gICAgICAgICAgICAgIDxjb21ldGNoYXQtcmVjZWlwdCBbcmVjZWlwdF09XCJyZWFkUmVjZWlwdFwiXG4gICAgICAgICAgICAgICAgW3JlY2VpcHRTdHlsZV09XCJyZWNlaXB0U3R5bGVcIiBbZGVsaXZlcmVkSWNvbl09XCJkZWxpdmVyZWRJY29uXCJcbiAgICAgICAgICAgICAgICBbcmVhZEljb25dPVwicmVhZEljb25cIj48L2NvbWV0Y2hhdC1yZWNlaXB0PlxuICAgICAgICAgICAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIidSZWFkJ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsU3R5bGVdPVwiZ2V0U3VidGl0bGVTdHlsZSgpXCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxjb21ldGNoYXQtZGF0ZSBbdGltZXN0YW1wXT1cIm1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpXCJcbiAgICAgICAgICAgICAgW2RhdGVTdHlsZV09XCJkYXRlU3R5bGVcIj48L2NvbWV0Y2hhdC1kYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvY29tZXRjaGF0LWxpc3QtaXRlbT5cbiAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|