@cometchat/chat-uikit-angular 4.0.0-beta.1

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.
Files changed (249) hide show
  1. package/Calls/CallingExtension.d.ts +5 -0
  2. package/Calls/CallingExtensionDecorator.d.ts +17 -0
  3. package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +75 -0
  4. package/Calls/CometChatCallButtons/cometchat-call-buttons.module.d.ts +11 -0
  5. package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +80 -0
  6. package/Calls/CometChatIncomingCall/cometchat-incoming-call.module.d.ts +11 -0
  7. package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +26 -0
  8. package/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.d.ts +9 -0
  9. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +58 -0
  10. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.d.ts +10 -0
  11. package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +109 -0
  12. package/CometChatAddMembers/cometchat-add-members.module.d.ts +12 -0
  13. package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +140 -0
  14. package/CometChatBannedMembers/cometchat-banned-members.module.d.ts +13 -0
  15. package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +335 -0
  16. package/CometChatConversations/cometchat-conversations.module.d.ts +10 -0
  17. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +86 -0
  18. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +12 -0
  19. package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +149 -0
  20. package/CometChatDetails/cometchat-details.module.d.ts +12 -0
  21. package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +145 -0
  22. package/CometChatGroupMembers/cometchat-group-members.module.d.ts +13 -0
  23. package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +136 -0
  24. package/CometChatGroups/cometchat-groups.module.d.ts +10 -0
  25. package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +100 -0
  26. package/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.d.ts +13 -0
  27. package/CometChatList/cometchat-list.component.d.ts +87 -0
  28. package/CometChatList/cometchat-list.module.d.ts +10 -0
  29. package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +62 -0
  30. package/CometChatMessageBubble/cometchat-message-bubble.module.d.ts +8 -0
  31. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +165 -0
  32. package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +9 -0
  33. package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +85 -0
  34. package/CometChatMessageHeader/cometchat-message-header.module.d.ts +9 -0
  35. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +510 -0
  36. package/CometChatMessageList/cometchat-message-list.module.d.ts +11 -0
  37. package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +136 -0
  38. package/CometChatMessages/cometchat-messages.module.d.ts +15 -0
  39. package/CometChatTheme.service.d.ts +7 -0
  40. package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +73 -0
  41. package/CometChatThreadedMessages/cometchat-threaded-messages.module.d.ts +12 -0
  42. package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +88 -0
  43. package/CometChatTransferOwnership/cometchat-transfer-ownership.module.d.ts +10 -0
  44. package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +105 -0
  45. package/CometChatUsers/cometchat-users.module.d.ts +11 -0
  46. package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +71 -0
  47. package/CometChatUsersWithMessages/cometchat-users-with-messages.module.d.ts +12 -0
  48. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +9 -0
  49. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +17 -0
  50. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +9 -0
  51. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +17 -0
  52. package/Extensions/ImageModeration/ImageModerationExtension.d.ts +5 -0
  53. package/Extensions/ImageModeration/ImageModerationExtensionDecorator.d.ts +6 -0
  54. package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +5 -0
  55. package/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.d.ts +6 -0
  56. package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +9 -0
  57. package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +12 -0
  58. package/Extensions/PollsExtension/PollsExtension.d.ts +5 -0
  59. package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +15 -0
  60. package/Extensions/Reactions/ReactionExtension.d.ts +5 -0
  61. package/Extensions/Reactions/ReactionExtensionDecorator.d.ts +10 -0
  62. package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +9 -0
  63. package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +16 -0
  64. package/Extensions/Stickers/StickersExtension.d.ts +9 -0
  65. package/Extensions/Stickers/StickersExtensionDecorator.d.ts +27 -0
  66. package/Extensions/TextModerator/TextModeratorExtension.d.ts +5 -0
  67. package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +9 -0
  68. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +5 -0
  69. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.d.ts +6 -0
  70. package/README.md +60 -0
  71. package/Shared/CometChatUIkit/CometChatUIKit.d.ts +18 -0
  72. package/Shared/Framework/ChatConfigurator.d.ts +8 -0
  73. package/Shared/Framework/DataSource.d.ts +29 -0
  74. package/Shared/Framework/DataSourceDecorator.d.ts +32 -0
  75. package/Shared/Framework/ExtensionDataSource.d.ts +3 -0
  76. package/Shared/Utils/MessageUtils.d.ts +43 -0
  77. package/assets/.gitkeep +0 -0
  78. package/assets/Audio-Call.svg +11 -0
  79. package/assets/Audio-Call2x.svg +11 -0
  80. package/assets/Copy.svg +17 -0
  81. package/assets/Grid-layout.svg +1 -0
  82. package/assets/Heart.svg +11 -0
  83. package/assets/Imagemoderation.svg +14 -0
  84. package/assets/Info.svg +13 -0
  85. package/assets/Locked.svg +10 -0
  86. package/assets/More@2x.svg +9 -0
  87. package/assets/Plus.svg +13 -0
  88. package/assets/Private.svg +10 -0
  89. package/assets/Reactionsicon.svg +9 -0
  90. package/assets/Send.svg +12 -0
  91. package/assets/Spinner.svg +15 -0
  92. package/assets/Stickers.svg +16 -0
  93. package/assets/Stipop.svg +9 -0
  94. package/assets/Video-call.svg +12 -0
  95. package/assets/Video-call2x.svg +12 -0
  96. package/assets/activity.svg +22 -0
  97. package/assets/addreaction.svg +9 -0
  98. package/assets/animals.svg +15 -0
  99. package/assets/attachment-file.svg +14 -0
  100. package/assets/audio-file.svg +12 -0
  101. package/assets/back.png +0 -0
  102. package/assets/backbutton.svg +12 -0
  103. package/assets/call.svg +1 -0
  104. package/assets/chats.svg +1 -0
  105. package/assets/checkmark.svg +11 -0
  106. package/assets/close.svg +12 -0
  107. package/assets/close2x.svg +12 -0
  108. package/assets/collaborativedocument.svg +13 -0
  109. package/assets/collaborativewhiteboard.svg +12 -0
  110. package/assets/create-button.svg +12 -0
  111. package/assets/declaration.d.ts +3 -0
  112. package/assets/delete.svg +7 -0
  113. package/assets/deleteicon.svg +15 -0
  114. package/assets/down-arrow.svg +1 -0
  115. package/assets/download.svg +13 -0
  116. package/assets/editicon.svg +14 -0
  117. package/assets/emoji.svg +2693 -0
  118. package/assets/file-upload.svg +2693 -0
  119. package/assets/flags.svg +12 -0
  120. package/assets/food.svg +26 -0
  121. package/assets/group.svg +40 -0
  122. package/assets/heart-reaction.png +0 -0
  123. package/assets/heart.png +0 -0
  124. package/assets/image.svg +2693 -0
  125. package/assets/incomingcall.wav +0 -0
  126. package/assets/increase-size.svg +6 -0
  127. package/assets/location.svg +2693 -0
  128. package/assets/message-delivered.png +0 -0
  129. package/assets/message-delivered.svg +4 -0
  130. package/assets/message-read.png +0 -0
  131. package/assets/message-read.svg +4 -0
  132. package/assets/message-sent.png +0 -0
  133. package/assets/message-sent.svg +3 -0
  134. package/assets/moreicon.svg +9 -0
  135. package/assets/objects.svg +13 -0
  136. package/assets/open-thread.svg +11 -0
  137. package/assets/password-protected-group.svg +3 -0
  138. package/assets/photolibrary.svg +11 -0
  139. package/assets/placeholder.png +0 -0
  140. package/assets/plus-rotated.svg +13 -0
  141. package/assets/polls.svg +14 -0
  142. package/assets/privacy.svg +4 -0
  143. package/assets/private-group.svg +9 -0
  144. package/assets/public.svg +3 -0
  145. package/assets/reduce-size.svg +6 -0
  146. package/assets/right-arrow.svg +6 -0
  147. package/assets/search.png +0 -0
  148. package/assets/search.svg +4 -0
  149. package/assets/side-arrow.svg +1 -0
  150. package/assets/smileys.svg +16 -0
  151. package/assets/start-chat.svg +1 -0
  152. package/assets/symbols.svg +16 -0
  153. package/assets/thread-arrow.svg +1 -0
  154. package/assets/thread-icon.svg +38 -0
  155. package/assets/threadicon.svg +14 -0
  156. package/assets/translation.svg +16 -0
  157. package/assets/travel.svg +18 -0
  158. package/assets/unsafe-content.svg +23 -0
  159. package/assets/user.svg +31 -0
  160. package/assets/video-upload.svg +2693 -0
  161. package/assets/video.svg +12 -0
  162. package/assets/wait.png +0 -0
  163. package/assets/wait.svg +4 -0
  164. package/assets/warning-small.png +0 -0
  165. package/assets/warning-small.svg +5 -0
  166. package/cometchat-chat-uikit-angular.d.ts +5 -0
  167. package/esm2020/Calls/CallingExtension.mjs +11 -0
  168. package/esm2020/Calls/CallingExtensionDecorator.mjs +114 -0
  169. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +358 -0
  170. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons.module.mjs +32 -0
  171. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +423 -0
  172. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call.module.mjs +32 -0
  173. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +54 -0
  174. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.mjs +27 -0
  175. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +196 -0
  176. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.mjs +28 -0
  177. package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +353 -0
  178. package/esm2020/CometChatAddMembers/cometchat-add-members.module.mjs +23 -0
  179. package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +446 -0
  180. package/esm2020/CometChatBannedMembers/cometchat-banned-members.module.mjs +24 -0
  181. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +1400 -0
  182. package/esm2020/CometChatConversations/cometchat-conversations.module.mjs +28 -0
  183. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +272 -0
  184. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +39 -0
  185. package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +696 -0
  186. package/esm2020/CometChatDetails/cometchat-details.module.mjs +27 -0
  187. package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +676 -0
  188. package/esm2020/CometChatGroupMembers/cometchat-group-members.module.mjs +24 -0
  189. package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +564 -0
  190. package/esm2020/CometChatGroups/cometchat-groups.module.mjs +28 -0
  191. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +430 -0
  192. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.mjs +43 -0
  193. package/esm2020/CometChatList/cometchat-list.component.mjs +210 -0
  194. package/esm2020/CometChatList/cometchat-list.module.mjs +28 -0
  195. package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +157 -0
  196. package/esm2020/CometChatMessageBubble/cometchat-message-bubble.module.mjs +23 -0
  197. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +930 -0
  198. package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +24 -0
  199. package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +420 -0
  200. package/esm2020/CometChatMessageHeader/cometchat-message-header.module.mjs +26 -0
  201. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +2598 -0
  202. package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +34 -0
  203. package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +393 -0
  204. package/esm2020/CometChatMessages/cometchat-messages.module.mjs +48 -0
  205. package/esm2020/CometChatTheme.service.mjs +17 -0
  206. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +304 -0
  207. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages.module.mjs +36 -0
  208. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +337 -0
  209. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership.module.mjs +21 -0
  210. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +447 -0
  211. package/esm2020/CometChatUsers/cometchat-users.module.mjs +32 -0
  212. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +185 -0
  213. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages.module.mjs +39 -0
  214. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +11 -0
  215. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +89 -0
  216. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +11 -0
  217. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +89 -0
  218. package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +10 -0
  219. package/esm2020/Extensions/ImageModeration/ImageModerationExtensionDecorator.mjs +10 -0
  220. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +10 -0
  221. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.mjs +10 -0
  222. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +11 -0
  223. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +33 -0
  224. package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +10 -0
  225. package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +75 -0
  226. package/esm2020/Extensions/Reactions/ReactionExtension.mjs +10 -0
  227. package/esm2020/Extensions/Reactions/ReactionExtensionDecorator.mjs +30 -0
  228. package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +11 -0
  229. package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +117 -0
  230. package/esm2020/Extensions/Stickers/StickersExtension.mjs +15 -0
  231. package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +118 -0
  232. package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +10 -0
  233. package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +32 -0
  234. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +10 -0
  235. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.mjs +10 -0
  236. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +180 -0
  237. package/esm2020/Shared/Framework/ChatConfigurator.mjs +20 -0
  238. package/esm2020/Shared/Framework/DataSource.mjs +3 -0
  239. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +80 -0
  240. package/esm2020/Shared/Framework/ExtensionDataSource.mjs +4 -0
  241. package/esm2020/Shared/Utils/MessageUtils.mjs +342 -0
  242. package/esm2020/cometchat-chat-uikit-angular.mjs +5 -0
  243. package/esm2020/public-api.mjs +93 -0
  244. package/fesm2015/cometchat-chat-uikit-angular.mjs +13683 -0
  245. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -0
  246. package/fesm2020/cometchat-chat-uikit-angular.mjs +13586 -0
  247. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -0
  248. package/package.json +51 -0
  249. package/public-api.d.ts +79 -0
@@ -0,0 +1,28 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { CometChatGroupsComponent } from "./cometchat-groups/cometchat-groups.component";
4
+ import { CometChatList } from "../CometChatList/cometchat-list.module";
5
+ import "@cometchat/uikit-elements";
6
+ import * as i0 from "@angular/core";
7
+ export class CometChatGroups {
8
+ }
9
+ CometChatGroups.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroups, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ CometChatGroups.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroups, declarations: [CometChatGroupsComponent], imports: [CommonModule,
11
+ CometChatList], exports: [CometChatGroupsComponent] });
12
+ CometChatGroups.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroups, imports: [[
13
+ CommonModule,
14
+ CometChatList,
15
+ ]] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroups, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ declarations: [CometChatGroupsComponent],
20
+ imports: [
21
+ CommonModule,
22
+ CometChatList,
23
+ ],
24
+ exports: [CometChatGroupsComponent],
25
+ schemas: [CUSTOM_ELEMENTS_SCHEMA]
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWdyb3Vwcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdEdyb3Vwcy9jb21ldGNoYXQtZ3JvdXBzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkUsT0FBUSwyQkFBMkIsQ0FBQzs7QUFVcEMsTUFBTSxPQUFPLGVBQWU7OzZHQUFmLGVBQWU7OEdBQWYsZUFBZSxpQkFSWCx3QkFBd0IsYUFFckMsWUFBWTtRQUNoQixhQUFhLGFBRUQsd0JBQXdCOzhHQUd2QixlQUFlLFlBUGpCO1lBQ1AsWUFBWTtZQUNoQixhQUFhO1NBQ1Y7NEZBSVUsZUFBZTtrQkFUM0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDeEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ2hCLGFBQWE7cUJBQ1Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ25DLE9BQU8sRUFBQyxDQUFDLHNCQUFzQixDQUFDO2lCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbWV0Q2hhdEdyb3Vwc0NvbXBvbmVudCB9IGZyb20gXCIuL2NvbWV0Y2hhdC1ncm91cHMvY29tZXRjaGF0LWdyb3Vwcy5jb21wb25lbnRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdExpc3QgfSBmcm9tIFwiLi4vQ29tZXRDaGF0TGlzdC9jb21ldGNoYXQtbGlzdC5tb2R1bGVcIjtcbmltcG9ydCAgXCJAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzXCI7XG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtDb21ldENoYXRHcm91cHNDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuQ29tZXRDaGF0TGlzdCxcbiAgXSxcbiAgZXhwb3J0czogW0NvbWV0Q2hhdEdyb3Vwc0NvbXBvbmVudF0sXG4gIHNjaGVtYXM6W0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdEdyb3VwcyB7fVxuIl19
@@ -0,0 +1,430 @@
1
+ import { Component, ViewChild, Input, ChangeDetectionStrategy } from "@angular/core";
2
+ import { CometChat } from "@cometchat-pro/chat";
3
+ import { WithMessagesStyle, MessagesConfiguration, GroupsConfiguration, CreateGroupConfiguration, JoinGroupConfiguration, MessageHeaderStyle } from '@cometchat/uikit-shared';
4
+ import '@cometchat/uikit-elements';
5
+ import { CreateGroupStyle, JoinGroupStyle, ListItemStyle } from "@cometchat/uikit-elements";
6
+ import { localize, CometChatTheme, CometChatUIKitConstants, fontHelper, CometChatGroupEvents } from "@cometchat/uikit-resources";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../CometChatTheme.service";
9
+ import * as i2 from "../../CometChatGroups/cometchat-groups/cometchat-groups.component";
10
+ import * as i3 from "../../CometChatMessages/cometchat-messages/cometchat-messages.component";
11
+ import * as i4 from "../../CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component";
12
+ import * as i5 from "@angular/common";
13
+ /**
14
+ *
15
+ * CometChatGroupsWithMessagesComponent is a wrapper component for CometChatMessagesComponent and CometChatConversations component to show chats and messages in one screen
16
+ *
17
+ * @version 1.0.0
18
+ * @author CometChatTeam
19
+ * @copyright © 2022 CometChat Inc.
20
+ *
21
+ */
22
+ export class CometChatGroupsWithMessagesComponent {
23
+ constructor(elementRef, ref, themeService) {
24
+ this.elementRef = elementRef;
25
+ this.ref = ref;
26
+ this.themeService = themeService;
27
+ this.isMobileView = false;
28
+ this.hideCreateGroup = false;
29
+ this.messageText = localize("NO_GROUPS_SELECTED");
30
+ this.groupsWithMessagesStyle = {
31
+ width: "100%",
32
+ height: "100%",
33
+ borderRadius: "none",
34
+ border: "none",
35
+ };
36
+ this.messagesConfiguration = new MessagesConfiguration({});
37
+ this.createGroupConfiguration = new CreateGroupConfiguration({});
38
+ this.joinGroupConfiguration = new JoinGroupConfiguration({});
39
+ this.groupsConfiguration = new GroupsConfiguration({});
40
+ this.onError = (error) => {
41
+ console.log(error);
42
+ };
43
+ this.theme = new CometChatTheme({});
44
+ this.backdropStyle = {};
45
+ this.createGroupStyle = {};
46
+ this.joinGroupStyle = {};
47
+ this.messageHeaderStyle = {};
48
+ this.listItemStyle = {};
49
+ /**
50
+ * Properties for internal use
51
+ */
52
+ this.createIconURL = "assets/create-button.svg";
53
+ this.createGroupButtonStyle = {
54
+ height: "24px",
55
+ width: "24px",
56
+ border: "none",
57
+ borderRadius: '0',
58
+ background: "transparent",
59
+ buttonIconTint: "RGB(51, 153, 255)"
60
+ };
61
+ this.labelStyle = {
62
+ background: "transparent",
63
+ textFont: "700 22px Inter",
64
+ textColor: "rgba(20, 20, 20, 0.33)"
65
+ };
66
+ this.openCreateGroupPage = false;
67
+ this.openPasswordModal = false;
68
+ this.onBack = () => {
69
+ this.group = null;
70
+ };
71
+ this.closeCreateGroup = () => {
72
+ this.openCreateGroupPage = false;
73
+ this.ref.detectChanges();
74
+ };
75
+ this.closeJoinGroup = () => {
76
+ this.openPasswordModal = false;
77
+ };
78
+ this.onItemClick = (group) => {
79
+ this.openPasswordModal = false;
80
+ if (group.getHasJoined()) {
81
+ this.group = group;
82
+ this.ref.detectChanges();
83
+ return;
84
+ }
85
+ if (group.getType() == CometChatUIKitConstants.GroupTypes.password) {
86
+ this.group = null;
87
+ this.protectedGroup = group;
88
+ this.openPasswordModal = true;
89
+ this.ref.detectChanges();
90
+ return;
91
+ }
92
+ CometChat.joinGroup(group).then(() => {
93
+ CometChatGroupEvents.ccGroupMemberJoined.next({
94
+ joinedGroup: group,
95
+ joinedUser: this.loggedInUser
96
+ });
97
+ group.setHasJoined(true);
98
+ this.ref.detectChanges();
99
+ this.group = group;
100
+ this.ref.detectChanges();
101
+ })
102
+ .catch((error) => {
103
+ if (this.onError) {
104
+ this.onError(error);
105
+ }
106
+ });
107
+ };
108
+ this.setCreateGroupStyles = () => {
109
+ let defaultStyle = new CreateGroupStyle({
110
+ boxShadow: `${this.themeService.theme.palette.getAccent100()} 4px 16px 32px 4px`,
111
+ groupTypeTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
112
+ groupTypeBorder: `1px solid ${this.themeService.theme.palette.getAccent600()}`,
113
+ groupTypeBorderRadius: "0",
114
+ groupTypeTextColor: this.themeService.theme.palette.getAccent(),
115
+ groupTypeTextBackground: "transparent",
116
+ groupTypeBackground: this.themeService.theme.palette.getAccent100(),
117
+ groupTypeBoxShadow: "",
118
+ activeGroupTypeTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
119
+ activeGroupTypeTextColor: this.themeService.theme.palette.getAccent(),
120
+ activeGroupTypeBackground: this.themeService.theme.palette.getAccent900(),
121
+ activeGroupTypeBoxShadow: `${this.themeService.theme.palette.getAccent200()} 0 3px 8px 0`,
122
+ activeGroupTypeBorderRadius: "8px",
123
+ activeGroupTypeBorder: "none",
124
+ groupTypeTextBoxShadow: "none",
125
+ groupTypeTextBorderRadius: "0",
126
+ closeIconTint: this.themeService.theme.palette.getPrimary(),
127
+ titleTextFont: fontHelper(this.themeService.theme.typography.title1),
128
+ titleTextColor: this.themeService.theme.palette.getAccent(),
129
+ errorTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
130
+ errorTextBackground: this.themeService.theme.palette.getError(),
131
+ errorTextBorderRadius: "8px",
132
+ errorTextBorder: "none",
133
+ errorTextColor: this.themeService.theme.palette.getError(),
134
+ nameInputPlaceholderTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
135
+ nameInputPlaceholderTextColor: this.themeService.theme.palette.getAccent600(),
136
+ nameInputBackground: this.themeService.theme.palette.getAccent100(),
137
+ nameInputTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
138
+ nameInputTextColor: this.themeService.theme.palette.getAccent(),
139
+ nameInputBorder: "none",
140
+ nameInputBorderRadius: "8px",
141
+ nameInputBoxShadow: `${this.themeService.theme.palette.getAccent100()} 0 0 0 1px`,
142
+ passwordInputPlaceholderTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
143
+ passwordInputPlaceholderTextColor: this.themeService.theme.palette.getAccent600(),
144
+ passwordInputBackground: this.themeService.theme.palette.getAccent100(),
145
+ passwordInputBorder: "none",
146
+ passwordInputBorderRadius: "8px",
147
+ passwordInputBoxShadow: `${this.themeService.theme.palette.getAccent100()} 0 0 0 1px`,
148
+ passwordInputTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
149
+ passwordInputTextColor: this.themeService.theme.palette.getAccent(),
150
+ createGroupButtonTextFont: fontHelper(this.themeService.theme.typography.text2),
151
+ createGroupButtonTextColor: this.themeService.theme.palette.getAccent900("light"),
152
+ createGroupButtonBackground: this.themeService.theme.palette.getPrimary(),
153
+ createGroupButtonBorderRadius: "8px",
154
+ createGroupButtonBorder: "none",
155
+ height: "620px",
156
+ width: "360px",
157
+ borderRadius: "8px",
158
+ background: this.themeService.theme.palette.getBackground()
159
+ });
160
+ this.createGroupStyle = { ...defaultStyle, ...this.createGroupConfiguration.createGroupStyle };
161
+ };
162
+ this.setJoinGroupStyles = () => {
163
+ let defaultStyle = new JoinGroupStyle({
164
+ boxShadow: `${this.themeService.theme.palette.getAccent100()} 0px 16px 32px 0px`,
165
+ titleTextFont: fontHelper(this.themeService.theme.typography.title1),
166
+ titleTextColor: this.themeService.theme.palette.getAccent(),
167
+ passwordInputPlaceholderTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
168
+ passwordInputPlaceholderTextColor: this.themeService.theme.palette.getAccent600(),
169
+ passwordInputBackground: this.themeService.theme.palette.getAccent100(),
170
+ passwordInputBorder: "none",
171
+ passwordInputBorderRadius: "8px",
172
+ passwordInputBoxShadow: `${this.themeService.theme.palette.getAccent100()} 0 0 0 1px`,
173
+ passwordInputTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
174
+ passwordInputTextColor: this.themeService.theme.palette.getAccent(),
175
+ height: "100%",
176
+ width: "100%",
177
+ joinButtonTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
178
+ joinButtonTextColor: this.themeService.theme.palette.getAccent("dark"),
179
+ joinButtonBackground: this.themeService.theme.palette.getPrimary(),
180
+ joinButtonBorderRadius: "8px",
181
+ joinButtonBorder: "none",
182
+ background: this.themeService.theme.palette.getBackground()
183
+ });
184
+ this.joinGroupStyle = { ...defaultStyle, ...this.joinGroupConfiguration.joinGroupStyle };
185
+ };
186
+ this.onGroupJoined = (event) => {
187
+ let group = event?.detail?.response;
188
+ this.openPasswordModal = false;
189
+ this.protectedGroup = null;
190
+ if (group) {
191
+ this.group = group;
192
+ }
193
+ };
194
+ this.emptyMessageStyle = () => {
195
+ return {
196
+ background: this.groupsWithMessagesStyle.background || this.themeService.theme.palette.getBackground(),
197
+ height: this.groupsWithMessagesStyle.height,
198
+ width: `calc(${this.groupsWithMessagesStyle.width} - 280px)`,
199
+ border: this.groupsWithMessagesStyle.border,
200
+ borderRadius: this.groupsWithMessagesStyle.borderRadius,
201
+ };
202
+ };
203
+ this.groupsWrapperStyles = () => {
204
+ return {
205
+ height: this.groupsWithMessagesStyle.height,
206
+ width: this.groupsWithMessagesStyle.width,
207
+ border: this.groupsWithMessagesStyle.border,
208
+ borderRadius: this.groupsWithMessagesStyle.borderRadius,
209
+ background: this.groupsWithMessagesStyle.background || this.themeService.theme.palette.getBackground(),
210
+ };
211
+ };
212
+ }
213
+ ngOnChanges(changes) {
214
+ if (changes["isMobileView"]) {
215
+ if (this.isMobileView) {
216
+ this.messagesConfiguration.messageHeaderConfiguration.hideBackButton = false;
217
+ this.messagesConfiguration.messageHeaderConfiguration = { ...this.messagesConfiguration.messageHeaderConfiguration };
218
+ this.messagesConfiguration = { ...this.messagesConfiguration };
219
+ this.joinGroupConfiguration.messageHeaderConfiguration.hideBackButton = false;
220
+ this.joinGroupConfiguration.messageHeaderConfiguration = { ...this.joinGroupConfiguration.messageHeaderConfiguration };
221
+ this.joinGroupConfiguration = { ...this.joinGroupConfiguration };
222
+ }
223
+ else if (!this.isMobileView) {
224
+ this.messagesConfiguration.messageHeaderConfiguration.hideBackButton = true;
225
+ this.messagesConfiguration.messageHeaderConfiguration = { ...this.messagesConfiguration.messageHeaderConfiguration };
226
+ this.messagesConfiguration = { ...this.messagesConfiguration };
227
+ this.joinGroupConfiguration.messageHeaderConfiguration.hideBackButton = true;
228
+ this.joinGroupConfiguration.messageHeaderConfiguration = { ...this.joinGroupConfiguration.messageHeaderConfiguration };
229
+ this.joinGroupConfiguration = { ...this.joinGroupConfiguration };
230
+ }
231
+ this.updateBackdropHeight();
232
+ }
233
+ }
234
+ ngAfterViewInit() {
235
+ this.updateBackdropHeight();
236
+ }
237
+ openCreateGroup() {
238
+ this.openCreateGroupPage = true;
239
+ }
240
+ updateBackdropHeight() {
241
+ const divHeight = this.elementRef.nativeElement.offsetHeight;
242
+ const divWidth = this.elementRef.nativeElement.offsetWidth;
243
+ let backdropStyle = {
244
+ height: divHeight + "px",
245
+ width: divWidth + "px",
246
+ background: "rgba(0, 0, 0, 0.5)"
247
+ };
248
+ this.backdropStyle = backdropStyle;
249
+ this.messagesConfiguration.messageListConfiguration.backdropStyle = backdropStyle;
250
+ this.messagesConfiguration.detailsConfiguration.backdropStyle = backdropStyle;
251
+ this.messagesConfiguration.messageComposerConfiguration.backdropStyle = backdropStyle;
252
+ this.messagesConfiguration.detailsConfiguration.groupMembersConfiguration.backdropStyle = backdropStyle;
253
+ this.ref.detectChanges();
254
+ }
255
+ ngOnInit() {
256
+ this.setWithMessagesStyle();
257
+ this.setCreateGroupStyles();
258
+ this.setListItemStyle();
259
+ this.setJoinGroupStyles();
260
+ if (!this.messagesConfiguration.messageHeaderConfiguration.onBack) {
261
+ this.messagesConfiguration.messageHeaderConfiguration.onBack = this.onBack;
262
+ }
263
+ this.subscribeToEvents();
264
+ CometChat.getLoggedinUser()
265
+ .then((user) => {
266
+ this.loggedInUser = user;
267
+ })
268
+ .catch((error) => {
269
+ if (this.onError) {
270
+ this.onError(error);
271
+ }
272
+ });
273
+ }
274
+ setWithMessagesStyle() {
275
+ let defaultStyle = new WithMessagesStyle({
276
+ width: "100%",
277
+ height: "100%",
278
+ background: this.themeService.theme.palette.getBackground(),
279
+ borderRadius: "none",
280
+ border: "none",
281
+ messageTextColor: this.themeService.theme.palette.getAccent600(),
282
+ messageTextFont: fontHelper(this.themeService.theme.typography.title1),
283
+ });
284
+ this.groupsWithMessagesStyle = {
285
+ ...defaultStyle,
286
+ ...this.groupsWithMessagesStyle
287
+ };
288
+ this.labelStyle.textFont = this.groupsWithMessagesStyle.messageTextFont;
289
+ this.labelStyle.textColor = this.groupsWithMessagesStyle.messageTextColor;
290
+ }
291
+ setHeadersStyle() {
292
+ let defaultStyle = new MessageHeaderStyle({
293
+ background: this.themeService.theme.palette.getBackground(),
294
+ border: `none`,
295
+ onlineStatusColor: this.themeService.theme.palette.getSuccess(),
296
+ privateGroupIconBackground: this.themeService.theme.palette.getSuccess(),
297
+ passwordGroupIconBackground: "RGB(247, 165, 0)",
298
+ backButtonIconTint: this.themeService.theme.palette.getPrimary(),
299
+ subtitleTextColor: this.themeService.theme.palette.getAccent600(),
300
+ subtitleTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
301
+ typingIndicatorTextColor: this.themeService.theme.palette.getPrimary(),
302
+ typingIndicatorTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
303
+ });
304
+ this.messageHeaderStyle = { ...defaultStyle, ...this.joinGroupConfiguration.messageHeaderConfiguration.messageHeaderStyle };
305
+ }
306
+ setListItemStyle() {
307
+ let defaultStyle = new ListItemStyle({
308
+ height: "45px",
309
+ width: "100%",
310
+ background: this.themeService.theme.palette.getBackground(),
311
+ activeBackground: "transparent",
312
+ borderRadius: "0",
313
+ titleFont: fontHelper(this.themeService.theme.typography.title2),
314
+ titleColor: this.themeService.theme.palette.getAccent(),
315
+ border: "none",
316
+ separatorColor: "",
317
+ hoverBackground: "transparent"
318
+ });
319
+ this.listItemStyle = { ...defaultStyle, ...this.joinGroupConfiguration.messageHeaderConfiguration.listItemStyle };
320
+ }
321
+ ngOnDestroy() {
322
+ this.unsubscribeToEvents();
323
+ }
324
+ updatedCreatedGroup(event) {
325
+ let group = event?.detail?.group;
326
+ if (group) {
327
+ this.group = group;
328
+ this.openCreateGroupPage = false;
329
+ this.ref.detectChanges();
330
+ CometChatGroupEvents.ccGroupCreated.next(group);
331
+ }
332
+ }
333
+ // subscribe to global events
334
+ subscribeToEvents() {
335
+ this.ccGroupDeleted = CometChatGroupEvents.ccGroupDeleted.subscribe((group) => {
336
+ if (this.group && group.getGuid() == this.group.getGuid()) {
337
+ this.group = null;
338
+ this.ref.detectChanges();
339
+ }
340
+ });
341
+ this.ccGroupCreated = CometChatGroupEvents.ccGroupCreated.subscribe((group) => {
342
+ if (group) {
343
+ this.group = group;
344
+ this.openCreateGroupPage = false;
345
+ this.ref.detectChanges();
346
+ }
347
+ });
348
+ this.ccGroupMemberAdded = CometChatGroupEvents.ccGroupMemberAdded.subscribe((item) => {
349
+ if (this.group && this.group.getGuid() == item?.userAddedIn.getGuid()) {
350
+ this.group = item?.userAddedIn;
351
+ this.ref.detectChanges();
352
+ }
353
+ });
354
+ this.ccGroupMemberBanned = CometChatGroupEvents.ccGroupMemberBanned.subscribe((item) => {
355
+ if (this.group && this.group.getGuid() == item?.kickedFrom.getGuid()) {
356
+ this.group = item?.kickedFrom;
357
+ this.ref.detectChanges();
358
+ }
359
+ });
360
+ this.ccGroupMemberJoined = CometChatGroupEvents.ccGroupMemberJoined.subscribe((item) => {
361
+ if (this.protectedGroup && this.protectedGroup.getGuid() == item?.joinedGroup.getGuid()) {
362
+ this.openPasswordModal = false;
363
+ this.protectedGroup = null;
364
+ this.group = item?.joinedGroup;
365
+ this.ref.detectChanges();
366
+ }
367
+ });
368
+ this.ccGroupMemberKicked = CometChatGroupEvents.ccGroupMemberKicked.subscribe((item) => {
369
+ if (this.group && this.group.getGuid() == item?.kickedFrom.getGuid()) {
370
+ this.group = item?.kickedFrom;
371
+ this.ref.detectChanges();
372
+ }
373
+ });
374
+ this.ccOwnershipChanged = CometChatGroupEvents.ccOwnershipChanged.subscribe((item) => {
375
+ if (this.group && this.group.getGuid() == item?.group.getGuid()) {
376
+ this.group = item?.group;
377
+ this.ref.detectChanges();
378
+ }
379
+ });
380
+ this.ccGroupLeft = CometChatGroupEvents.ccGroupLeft.subscribe((item) => {
381
+ if (this.group && this.group.getGuid() == item?.leftGroup.getGuid() && this.loggedInUser?.getUid() == item?.userLeft?.getUid()) {
382
+ this.group = item?.leftGroup;
383
+ this.ref.detectChanges();
384
+ }
385
+ });
386
+ }
387
+ // unsubscribe to subscribed events.
388
+ unsubscribeToEvents() {
389
+ this.ccGroupDeleted?.unsubscribe();
390
+ this.ccGroupMemberAdded?.unsubscribe();
391
+ this.ccGroupMemberBanned?.unsubscribe();
392
+ this.ccGroupMemberJoined?.unsubscribe();
393
+ this.ccGroupMemberKicked?.unsubscribe();
394
+ this.ccOwnershipChanged?.unsubscribe();
395
+ this.ccGroupLeft?.unsubscribe();
396
+ }
397
+ }
398
+ CometChatGroupsWithMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroupsWithMessagesComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
399
+ CometChatGroupsWithMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatGroupsWithMessagesComponent, selector: "cometchat-groups-with-messages", inputs: { group: "group", isMobileView: "isMobileView", hideCreateGroup: "hideCreateGroup", messageText: "messageText", groupsWithMessagesStyle: "groupsWithMessagesStyle", messagesConfiguration: "messagesConfiguration", createGroupConfiguration: "createGroupConfiguration", joinGroupConfiguration: "joinGroupConfiguration", groupsConfiguration: "groupsConfiguration", onError: "onError" }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["groupRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messagesRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"groupsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\">\n <cometchat-groups\n #groupRef\n [activeGroup]=\"group\"\n [hideSearch]=\"groupsConfiguration.hideSearch\"\n [searchIconURL]=\"groupsConfiguration.searchIconURL\"\n [searchRequestBuilder]=\"groupsConfiguration.searchRequestBuilder\"\n [onItemClick]=\"groupsConfiguration.onItemClick || onItemClick\"\n [groupsStyle]=\"groupsConfiguration.groupsStyle\"\n [subtitleView]=\"groupsConfiguration.subtitleView\"\n [options]=\"groupsConfiguration.options\"\n [privateGroupIcon]=\"groupsConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"groupsConfiguration.protectedGroupIcon\"\n [groupsRequestBuilder]=\"groupsConfiguration.groupsRequestBuilder\"\n [emptyStateView]=\"groupsConfiguration.emptyStateView\"\n [onSelect]=\"groupsConfiguration.onSelect\"\n [loadingIconURL]=\"groupsConfiguration.loadingIconURL\"\n [errorStateView]=\"groupsConfiguration.errorStateView\"\n [loadingStateView]=\"groupsConfiguration.loadingStateView\"\n [titleAlignment]=\"groupsConfiguration.titleAlignment\"\n [listItemView]=\"groupsConfiguration.listItemView\"\n [menu]=\"groupsConfiguration.menu || createGroupButton\"\n [hideSeparator]=\"groupsConfiguration.hideSeparator\"\n [hideError]=\"groupsConfiguration.hideError\"\n [selectionMode]=\"groupsConfiguration.selectionMode\"\n [listItemStyle]=\"groupsConfiguration.listItemStyle\"\n\n ></cometchat-groups>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"group && !openPasswordModal\">\n <!--Message List Screen-->\n <cometchat-messages\n #messagesRef\n [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n >\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-decorator__message--empty\" *ngIf=\"!group && !openPasswordModal\" [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\" [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <div class=\"cc-with-messages__joingroup\" *ngIf=\"openPasswordModal && !group\" [ngStyle]=\"emptyMessageStyle()\" [ngClass]=\"{mobile : isMobileView}\">\n <cometchat-join-group\n [group]=\"protectedGroup!\"\n [joinGroupStyle]=\"joinGroupStyle\"\n (cc-joingroup-joined)=\"onGroupJoined($event)\"\n [errorCallback]=\"joinGroupConfiguration.onError\"\n [joinClick]=\"joinGroupConfiguration.joinClick\"\n >\n <cometchat-message-header slot=\"headerView\" [group]=\"protectedGroup!\" [subtitleView]=\"joinGroupConfiguration.messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"joinGroupConfiguration.messageHeaderConfiguration.disableUsersPresence\" [protectedGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.protectedGroupIcon\" [privateGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.privateGroupIcon\" [menu]=\"joinGroupConfiguration.messageHeaderConfiguration.menu\" [messageHeaderStyle]=\"messageHeaderStyle\"\n [backButtonIconURL]=\"joinGroupConfiguration.messageHeaderConfiguration.backButtonIconURL\" [hideBackButton]=\"joinGroupConfiguration.messageHeaderConfiguration.hideBackButton\" [onError]=\"joinGroupConfiguration.messageHeaderConfiguration.onError\" [onBack]=\"joinGroupConfiguration.messageHeaderConfiguration.onBack || closeJoinGroup\" [listItemStyle]=\"listItemStyle\" [statusIndicatorStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.avatarStyle\"\n >\n </cometchat-message-header>\n </cometchat-join-group>\n </div>\n</div>\n <ng-template #createGroupButton>\n <cometchat-button *ngIf=\"!hideCreateGroup\" [iconURL]=\"createIconURL\" [buttonStyle]=\"createGroupButtonStyle\" (cc-button-clicked)=\"openCreateGroup()\"></cometchat-button>\n\n </ng-template>\n<cometchat-backdrop *ngIf=\"openCreateGroupPage\" [backdropStyle]=\"backdropStyle\">\n <cometchat-create-group [createGroupStyle]=\"createGroupStyle\" [hideCloseButton]=\"createGroupConfiguration.hideCloseButton\" [closeButtonIconURL]=\"createGroupConfiguration.closeButtonIconURL\" [createClick]=\"createGroupConfiguration.createClick\" [closeCallback]=\"closeCreateGroup\">\n\n </cometchat-create-group>\n</cometchat-backdrop>", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}.cc-with-messages__joingroup{width:calc(100% - 280px);height:100%}\n"], components: [{ type: i2.CometChatGroupsComponent, selector: "cometchat-groups", inputs: ["groupsRequestBuilder", "searchRequestBuilder", "subtitleView", "listItemView", "menu", "options", "activeGroup", "hideSeparator", "selectionMode", "searchPlaceholder", "hideError", "searchIconURL", "hideSearch", "title", "onError", "onSelect", "emptyStateView", "errorStateView", "loadingIconURL", "privateGroupIcon", "protectedGroupIcon", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "statusIndicatorStyle", "avatarStyle", "groupsStyle", "listItemStyle", "onItemClick"] }, { type: i3.CometChatMessagesComponent, selector: "cometchat-messages", inputs: ["user", "group", "hideMessageComposer", "disableTyping", "messageHeaderConfiguration", "messageListConfiguration", "messageComposerConfiguration", "threadedMessageConfiguration", "detailsConfiguration", "customSoundForIncomingMessages", "customSoundForOutgoingMessages", "disableSoundForMessages", "messagesStyle", "messageHeaderView", "messageComposerView", "messageListView", "hideMessageHeader", "hideDetails", "auxiliaryMenu"] }, { type: i4.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }], directives: [{ type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
400
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatGroupsWithMessagesComponent, decorators: [{
401
+ type: Component,
402
+ args: [{ selector: "cometchat-groups-with-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"groupsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\">\n <cometchat-groups\n #groupRef\n [activeGroup]=\"group\"\n [hideSearch]=\"groupsConfiguration.hideSearch\"\n [searchIconURL]=\"groupsConfiguration.searchIconURL\"\n [searchRequestBuilder]=\"groupsConfiguration.searchRequestBuilder\"\n [onItemClick]=\"groupsConfiguration.onItemClick || onItemClick\"\n [groupsStyle]=\"groupsConfiguration.groupsStyle\"\n [subtitleView]=\"groupsConfiguration.subtitleView\"\n [options]=\"groupsConfiguration.options\"\n [privateGroupIcon]=\"groupsConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"groupsConfiguration.protectedGroupIcon\"\n [groupsRequestBuilder]=\"groupsConfiguration.groupsRequestBuilder\"\n [emptyStateView]=\"groupsConfiguration.emptyStateView\"\n [onSelect]=\"groupsConfiguration.onSelect\"\n [loadingIconURL]=\"groupsConfiguration.loadingIconURL\"\n [errorStateView]=\"groupsConfiguration.errorStateView\"\n [loadingStateView]=\"groupsConfiguration.loadingStateView\"\n [titleAlignment]=\"groupsConfiguration.titleAlignment\"\n [listItemView]=\"groupsConfiguration.listItemView\"\n [menu]=\"groupsConfiguration.menu || createGroupButton\"\n [hideSeparator]=\"groupsConfiguration.hideSeparator\"\n [hideError]=\"groupsConfiguration.hideError\"\n [selectionMode]=\"groupsConfiguration.selectionMode\"\n [listItemStyle]=\"groupsConfiguration.listItemStyle\"\n\n ></cometchat-groups>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"group && !openPasswordModal\">\n <!--Message List Screen-->\n <cometchat-messages\n #messagesRef\n [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n >\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-decorator__message--empty\" *ngIf=\"!group && !openPasswordModal\" [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\" [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <div class=\"cc-with-messages__joingroup\" *ngIf=\"openPasswordModal && !group\" [ngStyle]=\"emptyMessageStyle()\" [ngClass]=\"{mobile : isMobileView}\">\n <cometchat-join-group\n [group]=\"protectedGroup!\"\n [joinGroupStyle]=\"joinGroupStyle\"\n (cc-joingroup-joined)=\"onGroupJoined($event)\"\n [errorCallback]=\"joinGroupConfiguration.onError\"\n [joinClick]=\"joinGroupConfiguration.joinClick\"\n >\n <cometchat-message-header slot=\"headerView\" [group]=\"protectedGroup!\" [subtitleView]=\"joinGroupConfiguration.messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"joinGroupConfiguration.messageHeaderConfiguration.disableUsersPresence\" [protectedGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.protectedGroupIcon\" [privateGroupIcon]=\"joinGroupConfiguration.messageHeaderConfiguration.privateGroupIcon\" [menu]=\"joinGroupConfiguration.messageHeaderConfiguration.menu\" [messageHeaderStyle]=\"messageHeaderStyle\"\n [backButtonIconURL]=\"joinGroupConfiguration.messageHeaderConfiguration.backButtonIconURL\" [hideBackButton]=\"joinGroupConfiguration.messageHeaderConfiguration.hideBackButton\" [onError]=\"joinGroupConfiguration.messageHeaderConfiguration.onError\" [onBack]=\"joinGroupConfiguration.messageHeaderConfiguration.onBack || closeJoinGroup\" [listItemStyle]=\"listItemStyle\" [statusIndicatorStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"joinGroupConfiguration.messageHeaderConfiguration.avatarStyle\"\n >\n </cometchat-message-header>\n </cometchat-join-group>\n </div>\n</div>\n <ng-template #createGroupButton>\n <cometchat-button *ngIf=\"!hideCreateGroup\" [iconURL]=\"createIconURL\" [buttonStyle]=\"createGroupButtonStyle\" (cc-button-clicked)=\"openCreateGroup()\"></cometchat-button>\n\n </ng-template>\n<cometchat-backdrop *ngIf=\"openCreateGroupPage\" [backdropStyle]=\"backdropStyle\">\n <cometchat-create-group [createGroupStyle]=\"createGroupStyle\" [hideCloseButton]=\"createGroupConfiguration.hideCloseButton\" [closeButtonIconURL]=\"createGroupConfiguration.closeButtonIconURL\" [createClick]=\"createGroupConfiguration.createClick\" [closeCallback]=\"closeCreateGroup\">\n\n </cometchat-create-group>\n</cometchat-backdrop>", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}.cc-with-messages__joingroup{width:calc(100% - 280px);height:100%}\n"] }]
403
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { groupRef: [{
404
+ type: ViewChild,
405
+ args: ["groupRef", { static: false }]
406
+ }], messageListRef: [{
407
+ type: ViewChild,
408
+ args: ["messagesRef", { static: false }]
409
+ }], group: [{
410
+ type: Input
411
+ }], isMobileView: [{
412
+ type: Input
413
+ }], hideCreateGroup: [{
414
+ type: Input
415
+ }], messageText: [{
416
+ type: Input
417
+ }], groupsWithMessagesStyle: [{
418
+ type: Input
419
+ }], messagesConfiguration: [{
420
+ type: Input
421
+ }], createGroupConfiguration: [{
422
+ type: Input
423
+ }], joinGroupConfiguration: [{
424
+ type: Input
425
+ }], groupsConfiguration: [{
426
+ type: Input
427
+ }], onError: [{
428
+ type: Input
429
+ }] } });
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWdyb3Vwcy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0R3JvdXBzV2l0aE1lc3NhZ2VzL2NvbWV0Y2hhdC1ncm91cHMtd2l0aC1tZXNzYWdlcy9jb21ldGNoYXQtZ3JvdXBzLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRHcm91cHNXaXRoTWVzc2FnZXMvY29tZXRjaGF0LWdyb3Vwcy13aXRoLW1lc3NhZ2VzL2NvbWV0Y2hhdC1ncm91cHMtd2l0aC1tZXNzYWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQTJELE1BQU0sZUFBZSxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdoRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUMsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUMxSyxPQUFPLDJCQUEyQixDQUFBO0FBRWxDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFrRyxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBQy9OOzs7Ozs7OztFQVFDO0FBT0gsTUFBTSxPQUFPLG9DQUFvQztJQTZEL0MsWUFBb0IsVUFBc0IsRUFBUyxHQUFzQixFQUFT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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQtcHJvL2NoYXRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdE1lc3NhZ2VzQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21ldENoYXRDb252ZXJzYXRpb25zQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdENvbnZlcnNhdGlvbnMvY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMvY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMuY29tcG9uZW50XCI7XG5pbXBvcnQge1dpdGhNZXNzYWdlc1N0eWxlLCBNZXNzYWdlc0NvbmZpZ3VyYXRpb24sR3JvdXBzQ29uZmlndXJhdGlvbiwgQ3JlYXRlR3JvdXBDb25maWd1cmF0aW9uLCBKb2luR3JvdXBDb25maWd1cmF0aW9uLCBNZXNzYWdlSGVhZGVyU3R5bGV9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtc2hhcmVkJ1xuaW1wb3J0ICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENyZWF0ZUdyb3VwU3R5bGUsIEpvaW5Hcm91cFN0eWxlLCBMaXN0SXRlbVN0eWxlIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtZWxlbWVudHNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRUaGVtZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBsb2NhbGl6ZSwgQ29tZXRDaGF0VGhlbWUsIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLCBmb250SGVscGVyLCBDb21ldENoYXRHcm91cEV2ZW50cywgSUdyb3VwTWVtYmVyQWRkZWQsIElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCwgSUdyb3VwTWVtYmVySm9pbmVkLCBJT3duZXJzaGlwQ2hhbmdlZCwgSUdyb3VwTGVmdCB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuICAvKipcbiAqXG4gKiBDb21ldENoYXRHcm91cHNXaXRoTWVzc2FnZXNDb21wb25lbnQgaXMgYSB3cmFwcGVyIGNvbXBvbmVudCBmb3IgQ29tZXRDaGF0TWVzc2FnZXNDb21wb25lbnQgYW5kIENvbWV0Q2hhdENvbnZlcnNhdGlvbnMgY29tcG9uZW50IHRvIHNob3cgY2hhdHMgYW5kIG1lc3NhZ2VzIGluIG9uZSBzY3JlZW5cbiAqXG4gKiBAdmVyc2lvbiAxLjAuMFxuICogQGF1dGhvciBDb21ldENoYXRUZWFtXG4gKiBAY29weXJpZ2h0IMKpIDIwMjIgQ29tZXRDaGF0IEluYy5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb21ldGNoYXQtZ3JvdXBzLXdpdGgtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtZ3JvdXBzLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NvbWV0Y2hhdC1ncm91cHMtd2l0aC1tZXNzYWdlcy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdEdyb3Vwc1dpdGhNZXNzYWdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gdGFraW5nIHJlZmVyZW5jZSBvZiBjb252ZXJzYXRpb25Db21wb25lbnQgYW5kIE1lc3NhZ2VzQ29tcG9uZW50XG4gIEBWaWV3Q2hpbGQoXCJncm91cFJlZlwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBSZWYhOiBDb21ldENoYXRDb252ZXJzYXRpb25zQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKFwibWVzc2FnZXNSZWZcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG1lc3NhZ2VMaXN0UmVmITogQ29tZXRDaGF0TWVzc2FnZXNDb21wb25lbnQ7XG4gIEBJbnB1dCgpIGdyb3VwITogQ29tZXRDaGF0Lkdyb3VwIHwgbnVsbDtcbiAgQElucHV0KCkgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVDcmVhdGVHcm91cDpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIk5PX0dST1VQU19TRUxFQ1RFRFwiKTtcbiAgQElucHV0KCkgZ3JvdXBzV2l0aE1lc3NhZ2VzU3R5bGU6IFdpdGhNZXNzYWdlc1N0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgfTtcbiAgQElucHV0KCkgbWVzc2FnZXNDb25maWd1cmF0aW9uOiBNZXNzYWdlc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWVzc2FnZXNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgY3JlYXRlR3JvdXBDb25maWd1cmF0aW9uOiBDcmVhdGVHcm91cENvbmZpZ3VyYXRpb24gPSBuZXcgQ3JlYXRlR3JvdXBDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgam9pbkdyb3VwQ29uZmlndXJhdGlvbjogSm9pbkdyb3VwQ29uZmlndXJhdGlvbiA9IG5ldyBKb2luR3JvdXBDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgZ3JvdXBzQ29uZmlndXJhdGlvbjogR3JvdXBzQ29uZmlndXJhdGlvbiA9IG5ldyBHcm91cHNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgb25FcnJvcjooKGVycm9yOmFueSk9PnZvaWQgKSB8IG51bGw9IChlcnJvcjphbnkpPT57XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gIH1cbiAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSA9IG5ldyBDb21ldENoYXRUaGVtZSh7fSk7XG4gICBiYWNrZHJvcFN0eWxlOmFueSA9IHtcblxuICAgfVxuICAgY3JlYXRlR3JvdXBTdHlsZTpDcmVhdGVHcm91cFN0eWxlID0ge31cbiAgIGpvaW5Hcm91cFN0eWxlOkpvaW5Hcm91cFN0eWxlID0ge31cbiAgIG1lc3NhZ2VIZWFkZXJTdHlsZTpNZXNzYWdlSGVhZGVyU3R5bGUgPSB7fVxuICAgbGlzdEl0ZW1TdHlsZTpMaXN0SXRlbVN0eWxlID0ge31cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0aWVzIGZvciBpbnRlcm5hbCB1c2VcbiAgICAgKi9cbiAgICBjcmVhdGVJY29uVVJMOnN0cmluZyA9IFwiYXNzZXRzL2NyZWF0ZS1idXR0b24uc3ZnXCJcbiAgcHVibGljIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgY3JlYXRlR3JvdXBCdXR0b25TdHlsZTphbnkgPSB7XG4gICAgaGVpZ2h0OlwiMjRweFwiLFxuICAgIHdpZHRoOlwiMjRweFwiLFxuICAgIGJvcmRlcjpcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6JzAnLFxuICAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvbkljb25UaW50OlwiUkdCKDUxLCAxNTMsIDI1NSlcIlxuICB9XG4gIGxhYmVsU3R5bGU6YW55ID0ge1xuICAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLFxuICAgIHRleHRGb250OlwiNzAwIDIycHggSW50ZXJcIixcbiAgICB0ZXh0Q29sb3I6XCJyZ2JhKDIwLCAyMCwgMjAsIDAuMzMpXCJcbiAgfVxuICBwdWJsaWMgb3BlbkNyZWF0ZUdyb3VwUGFnZTpib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBvcGVuUGFzc3dvcmRNb2RhbDpib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBwcm90ZWN0ZWRHcm91cCE6Q29tZXRDaGF0Lkdyb3VwIHwgbnVsbDtcbiAgICAgLyoqXG4gICAgICogRXZlbnRzXG4gICAgICovXG4gIGNjR3JvdXBNZW1iZXJBZGRlZCE6U3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwTGVmdCE6U3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwTWVtYmVySm9pbmVkITpTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJLaWNrZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlckJhbm5lZCE6U3Vic2NyaXB0aW9uO1xuICBjY093bmVyc2hpcENoYW5nZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cERlbGV0ZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cENyZWF0ZWQhOlN1YnNjcmlwdGlvbjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixwcml2YXRlIHRoZW1lU2VydmljZTpDb21ldENoYXRUaGVtZVNlcnZpY2UpIHtcbiAgIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmKGNoYW5nZXNbXCJpc01vYmlsZVZpZXdcIl0pe1xuICAgICAgaWYgKHRoaXMuaXNNb2JpbGVWaWV3KSB7XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uaGlkZUJhY2tCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPSB7Li4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb259XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiB9XG4gICAgICAgIHRoaXMuam9pbkdyb3VwQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5qb2luR3JvdXBDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uID0gey4uLnRoaXMuam9pbkdyb3VwQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbn1cbiAgICAgIHRoaXMuam9pbkdyb3VwQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5qb2luR3JvdXBDb25maWd1cmF0aW9uIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCF0aGlzLmlzTW9iaWxlVmlldykge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uID0gey4uLnRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9ufVxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24gfVxuICAgICAgICB0aGlzLmpvaW5Hcm91cENvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uaGlkZUJhY2tCdXR0b24gPSB0cnVlO1xuICAgICAgICB0aGlzLmpvaW5Hcm91cENvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPSB7Li4udGhpcy5qb2luR3JvdXBDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9ufVxuICAgICAgICB0aGlzLmpvaW5Hcm91cENvbmZpZ3VyYXRpb24gPSB7IC4uLnRoaXMuam9pbkdyb3VwQ29uZmlndXJhdGlvbiB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUJhY2tkcm9wSGVpZ2h0KClcbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlQmFja2Ryb3BIZWlnaHQoKVxuICAgICAgfVxuICBvbkJhY2sgPSAoKT0+e1xuICAgIHRoaXMuZ3JvdXAgPSBudWxsXG4gIH1cbiAgb3BlbkNyZWF0ZUdyb3VwKCl7XG4gICAgdGhpcy5vcGVuQ3JlYXRlR3JvdXBQYWdlID0gdHJ1ZVxuICB9XG5cbiAgY2xvc2VDcmVhdGVHcm91cCA9KCk9PntcbiAgICB0aGlzLm9wZW5DcmVhdGVHcm91cFBhZ2UgPSBmYWxzZVxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIGNsb3NlSm9pbkdyb3VwID0gKCk9PntcbiAgICB0aGlzLm9wZW5QYXNzd29yZE1vZGFsID0gZmFsc2VcbiAgfVxuICAgb25JdGVtQ2xpY2s6ICgoZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwKT0+dm9pZCkgPSAoZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwKT0+e1xuICAgICB0aGlzLm9wZW5QYXNzd29yZE1vZGFsID0gZmFsc2U7XG4gICBpZihncm91cC5nZXRIYXNKb2luZWQoKSl7XG4gICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm47XG4gICB9XG4gICAgaWYoZ3JvdXAuZ2V0VHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLkdyb3VwVHlwZXMucGFzc3dvcmQpe1xuICAgICAgdGhpcy5ncm91cCA9IG51bGw7XG4gICAgICB0aGlzLnByb3RlY3RlZEdyb3VwID0gZ3JvdXA7XG4gICAgICB0aGlzLm9wZW5QYXNzd29yZE1vZGFsID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQ29tZXRDaGF0LmpvaW5Hcm91cChncm91cCkudGhlbigoKT0+e1xuICAgICAgICBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVySm9pbmVkLm5leHQoe1xuICAgICAgICAgIGpvaW5lZEdyb3VwOmdyb3VwLFxuICAgICAgICAgIGpvaW5lZFVzZXI6dGhpcy5sb2dnZWRJblVzZXIhXG4gICAgICAgIH0pXG4gICAgICBncm91cC5zZXRIYXNKb2luZWQodHJ1ZSlcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOmFueSk9PntcbiAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9O1xuXG4gIHVwZGF0ZUJhY2tkcm9wSGVpZ2h0KCl7XG4gICAgY29uc3QgZGl2SGVpZ2h0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGRpdldpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgbGV0IGJhY2tkcm9wU3R5bGUgPSAge1xuICAgICAgaGVpZ2h0OmRpdkhlaWdodCArIFwicHhcIixcbiAgICAgIHdpZHRoOmRpdldpZHRoICsgXCJweFwiLFxuICAgICAgYmFja2dyb3VuZDpcInJnYmEoMCwgMCwgMCwgMC41KVwiXG4gICAgfVxuICAgIHRoaXMuYmFja2Ryb3BTdHlsZSA9IGJhY2tkcm9wU3R5bGVcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IGJhY2tkcm9wU3R5bGVcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlID0gYmFja2Ryb3BTdHlsZVxuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IGJhY2tkcm9wU3R5bGVcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSBiYWNrZHJvcFN0eWxlXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRXaXRoTWVzc2FnZXNTdHlsZSgpXG4gICAgdGhpcy5zZXRDcmVhdGVHcm91cFN0eWxlcygpXG4gICAgdGhpcy5zZXRMaXN0SXRlbVN0eWxlKClcbiAgICB0aGlzLnNldEpvaW5Hcm91cFN0eWxlcygpXG4gICAgaWYoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFjayl7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkJhY2sgPSB0aGlzLm9uQmFja1xuICAgIH1cbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgICBDb21ldENoYXQuZ2V0TG9nZ2VkaW5Vc2VyKClcbiAgICAgICAgLnRoZW4oKHVzZXI6Q29tZXRDaGF0LlVzZXIgfCBudWxsKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOmFueSkgPT4ge1xuICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICB9XG4gIHNldFdpdGhNZXNzYWdlc1N0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpXaXRoTWVzc2FnZXNTdHlsZSA9IG5ldyBXaXRoTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIG1lc3NhZ2VUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBtZXNzYWdlVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgIH0pXG4gICAgdGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZSA9IHtcbiAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAgICAgIC4uLnRoaXMuZ3JvdXBzV2l0aE1lc3NhZ2VzU3R5bGVcbiAgICB9XG4gICAgdGhpcy5sYWJlbFN0eWxlLnRleHRGb250ID0gdGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZS5tZXNzYWdlVGV4dEZvbnRcbiAgICB0aGlzLmxhYmVsU3R5bGUudGV4dENvbG9yID0gdGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZS5tZXNzYWdlVGV4dENvbG9yXG4gIH1cbiAgc2V0Q3JlYXRlR3JvdXBTdHlsZXMgPSAoKT0+e1xuICAgIGxldCBkZWZhdWx0U3R5bGU6Q3JlYXRlR3JvdXBTdHlsZSA9IG5ldyBDcmVhdGVHcm91cFN0eWxlKHtcbiAgICAgIGJveFNoYWRvdzogYCR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKX0gNHB4IDE2cHggMzJweCA0cHhgLFxuICAgICAgZ3JvdXBUeXBlVGV4dEZvbnQ6ICBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUyKSxcbiAgICAgIGdyb3VwVHlwZUJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCl9YCxcbiAgICAgIGdyb3VwVHlwZUJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgICBncm91cFR5cGVUZXh0Q29sb3I6ICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgZ3JvdXBUeXBlVGV4dEJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIGdyb3VwVHlwZUJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgICBncm91cFR5cGVCb3hTaGFkb3c6IFwiXCIsXG4gICAgICBhY3RpdmVHcm91cFR5cGVUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMiksXG4gICAgICBhY3RpdmVHcm91cFR5cGVUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBhY3RpdmVHcm91cFR5cGVCYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgICAgYWN0aXZlR3JvdXBUeXBlQm94U2hhZG93OiBgJHt0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDIwMCgpfSAwIDNweCA4cHggMGAsXG4gICAgICBhY3RpdmVHcm91cFR5cGVCb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBhY3RpdmVHcm91cFR5cGVCb3JkZXI6IFwibm9uZVwiLFxuICAgICAgZ3JvdXBUeXBlVGV4dEJveFNoYWRvdzogXCJub25lXCIsXG4gICAgICBncm91cFR5cGVUZXh0Qm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICAgIGNsb3NlSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgdGl0bGVUZXh0Rm9udDogIGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgICAgdGl0bGVUZXh0Q29sb3I6ICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgZXJyb3JUZXh0Rm9udDogIGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgZXJyb3JUZXh0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRFcnJvcigpLFxuICAgICAgZXJyb3JUZXh0Qm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgZXJyb3JUZXh0Qm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIGVycm9yVGV4dENvbG9yOiAgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRFcnJvcigpLFxuICAgICAgbmFtZUlucHV0UGxhY2Vob2xkZXJUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICBuYW1lSW5wdXRQbGFjZWhvbGRlclRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG5hbWVJbnB1dEJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgICBuYW1lSW5wdXRUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICBuYW1lSW5wdXRUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBuYW1lSW5wdXRCb3JkZXI6ICBcIm5vbmVcIixcbiAgICAgIG5hbWVJbnB1dEJvcmRlclJhZGl1czogIFwiOHB4XCIsXG4gICAgICBuYW1lSW5wdXRCb3hTaGFkb3c6IGAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCl9IDAgMCAwIDFweGAsXG4gICAgICBwYXNzd29yZElucHV0UGxhY2Vob2xkZXJUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICBwYXNzd29yZElucHV0UGxhY2Vob2xkZXJUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBwYXNzd29yZElucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICAgIHBhc3N3b3JkSW5wdXRCb3JkZXI6ICBcIm5vbmVcIixcbiAgICAgIHBhc3N3b3JkSW5wdXRCb3JkZXJSYWRpdXM6ICBcIjhweFwiLFxuICAgICAgcGFzc3dvcmRJbnB1dEJveFNoYWRvdzogYCR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKX0gMCAwIDAgMXB4YCxcbiAgICAgIHBhc3N3b3JkSW5wdXRUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICBwYXNzd29yZElucHV0VGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgY3JlYXRlR3JvdXBCdXR0b25UZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRleHQyKSxcbiAgICAgIGNyZWF0ZUdyb3VwQnV0dG9uVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMChcImxpZ2h0XCIpLFxuICAgICAgY3JlYXRlR3JvdXBCdXR0b25CYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgIGNyZWF0ZUdyb3VwQnV0dG9uQm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgY3JlYXRlR3JvdXBCdXR0b25Cb3JkZXI6IFwibm9uZVwiLFxuICAgICAgaGVpZ2h0OlwiNjIwcHhcIixcbiAgICAgIHdpZHRoOlwiMzYwcHhcIixcbiAgICAgIGJvcmRlclJhZGl1czpcIjhweFwiLFxuICAgICAgYmFja2dyb3VuZDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKVxuICAgIH0pXG4gICAgdGhpcy5jcmVhdGVHcm91cFN0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLmNyZWF0ZUdyb3VwQ29uZmlndXJhdGlvbi5jcmVhdGVHcm91cFN0eWxlfVxuXG4gIH1cbiAgc2V0Sm9pbkdyb3VwU3R5bGVzID0gKCk9PntcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkpvaW5Hcm91cFN0eWxlID0gbmV3IEpvaW5Hcm91cFN0eWxlKHtcbiAgICAgIGJveFNoYWRvdzogYCR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKX0gMHB4IDE2cHggMzJweCAwcHhgLFxuICAgICAgdGl0bGVUZXh0Rm9udDogIGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgICAgdGl0bGVUZXh0Q29sb3I6ICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgcGFzc3dvcmRJbnB1dFBsYWNlaG9sZGVyVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgcGFzc3dvcmRJbnB1dFBsYWNlaG9sZGVyVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgcGFzc3dvcmRJbnB1dEJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgICBwYXNzd29yZElucHV0Qm9yZGVyOiAgXCJub25lXCIsXG4gICAgICBwYXNzd29yZElucHV0Qm9yZGVyUmFkaXVzOiAgXCI4cHhcIixcbiAgICAgIHBhc3N3b3JkSW5wdXRCb3hTaGFkb3c6IGAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCl9IDAgMCAwIDFweGAsXG4gICAgICBwYXNzd29yZElucHV0VGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgcGFzc3dvcmRJbnB1dFRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSxcbiAgICAgIGhlaWdodDpcIjEwMCVcIixcbiAgICAgIHdpZHRoOlwiMTAwJVwiLFxuam9pbkJ1dHRvblRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbmpvaW5CdXR0b25UZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KFwiZGFya1wiKSxcbmpvaW5CdXR0b25CYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbmpvaW5CdXR0b25Cb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG5qb2luQnV0dG9uQm9yZGVyOiBcIm5vbmVcIixcbmJhY2tncm91bmQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKClcbiAgICB9KVxuICAgIHRoaXMuam9pbkdyb3VwU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuam9pbkdyb3VwQ29uZmlndXJhdGlvbi5qb2luR3JvdXBTdHlsZX1cblxuICB9XG4gIHNldEhlYWRlcnNTdHlsZSgpe1xuICAgIGxldCBkZWZhdWx0U3R5bGU6TWVzc2FnZUhlYWRlclN0eWxlID0gbmV3IE1lc3NhZ2VIZWFkZXJTdHlsZSh7XG4gICAgICBiYWNrZ3JvdW5kOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYm9yZGVyOmBub25lYCxcbiAgICAgIG9ubGluZVN0YXR1c0NvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U3VjY2VzcygpLFxuICAgICAgcHJpdmF0ZUdyb3VwSWNvbkJhY2tncm91bmQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTdWNjZXNzKCksXG4gICAgICBwYXNzd29yZEdyb3VwSWNvbkJhY2tncm91bmQ6XCJSR0IoMjQ3LCAxNjUsIDApXCIsXG4gICAgICBiYWNrQnV0dG9uSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgc3VidGl0bGVUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBzdWJ0aXRsZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUyKSxcbiAgICAgIHR5cGluZ0luZGljYXRvclRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICB0eXBpbmdJbmRpY2F0b3JUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgfSlcbiAgICB0aGlzLm1lc3NhZ2VIZWFkZXJTdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5qb2luR3JvdXBDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJTdHlsZX1cbiAgfVxuICBzZXRMaXN0SXRlbVN0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpMaXN0SXRlbVN0eWxlID0gbmV3IExpc3RJdGVtU3R5bGUoe1xuICAgICAgaGVpZ2h0OiBcIjQ1cHhcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYWN0aXZlQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMiksXG4gICAgICB0aXRsZUNvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHNlcGFyYXRvckNvbG9yOlwiXCIsXG4gICAgICBob3ZlckJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiXG4gICAgfSlcbiAgICB0aGlzLmxpc3RJdGVtU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuam9pbkdyb3VwQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5saXN0SXRlbVN0eWxlfVxuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVUb0V2ZW50cygpO1xuICB9XG4gIG9uR3JvdXBKb2luZWQgPSAoZXZlbnQ6YW55KT0+e1xuICAgIGxldCBncm91cDpDb21ldENoYXQuR3JvdXAgPSBldmVudD8uZGV0YWlsPy5yZXNwb25zZVxuICAgIHRoaXMub3BlblBhc3N3b3JkTW9kYWwgPSBmYWxzZTtcbiAgICB0aGlzLnByb3RlY3RlZEdyb3VwID0gbnVsbDtcbiAgICBpZihncm91cCl7XG4gICAgICB0aGlzLmdyb3VwID0gZ3JvdXBcbiAgICB9XG5cbiAgfVxuICB1cGRhdGVkQ3JlYXRlZEdyb3VwKGV2ZW50OmFueSl7XG4gICAgbGV0IGdyb3VwOkNvbWV0Q2hhdC5Hcm91cCA9IGV2ZW50Py5kZXRhaWw/Lmdyb3VwXG4gICAgaWYoZ3JvdXApe1xuICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgdGhpcy5vcGVuQ3JlYXRlR3JvdXBQYWdlID0gZmFsc2VcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBDcmVhdGVkLm5leHQoZ3JvdXApXG4gICAgfVxuXG4gIH1cbiAgLy8gc3Vic2NyaWJlIHRvIGdsb2JhbCBldmVudHNcbiAgc3Vic2NyaWJlVG9FdmVudHMoKSB7XG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBEZWxldGVkLnN1YnNjcmliZSgoZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICAgaWYodGhpcy5ncm91cCAmJiBncm91cC5nZXRHdWlkKCkgPT0gdGhpcy5ncm91cC5nZXRHdWlkKCkpe1xuICAgICAgICAgdGhpcy5ncm91cCA9IG51bGw7XG4gICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBDcmVhdGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cENyZWF0ZWQuc3Vic2NyaWJlKChncm91cDpDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICAgIGlmKGdyb3VwKXtcbiAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgICB0aGlzLm9wZW5DcmVhdGVHcm91cFBhZ2UgPSBmYWxzZVxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlckFkZGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckFkZGVkLnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTWVtYmVyQWRkZWQpID0+IHtcbiAgICAgICAgICBpZih0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LnVzZXJBZGRlZEluIS5nZXRHdWlkKCkpe1xuICAgICAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LnVzZXJBZGRlZEluO1xuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckJhbm5lZC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCkgPT4ge1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5raWNrZWRGcm9tIS5nZXRHdWlkKCkpe1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8ua2lja2VkRnJvbTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJKb2luZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVySm9pbmVkLnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTWVtYmVySm9pbmVkKSA9PiB7XG4gICAgICBpZih0aGlzLnByb3RlY3RlZEdyb3VwICYmIHRoaXMucHJvdGVjdGVkR3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LmpvaW5lZEdyb3VwIS5nZXRHdWlkKCkpe1xuICAgICAgICB0aGlzLm9wZW5QYXNzd29yZE1vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvdGVjdGVkR3JvdXAgPSBudWxsO1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8uam9pbmVkR3JvdXA7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyS2lja2VkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlcktpY2tlZC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCkgPT4ge1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5raWNrZWRGcm9tIS5nZXRHdWlkKCkpe1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8ua2lja2VkRnJvbTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjT3duZXJzaGlwQ2hhbmdlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjT3duZXJzaGlwQ2hhbmdlZC5zdWJzY3JpYmUoKGl0ZW06IElPd25lcnNoaXBDaGFuZ2VkKSA9PiB7XG4gICAgICBpZih0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/Lmdyb3VwIS5nZXRHdWlkKCkpe1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8uZ3JvdXA7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cExlZnQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTGVmdC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cExlZnQpID0+IHtcbiAgICAgIGlmKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8ubGVmdEdyb3VwIS5nZXRHdWlkKCkgJiYgdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpID09IGl0ZW0/LnVzZXJMZWZ0Py5nZXRVaWQoKSl7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5sZWZ0R3JvdXA7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgfVxuICAvLyB1bnN1YnNjcmliZSB0byBzdWJzY3JpYmVkIGV2ZW50cy5cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckFkZGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckJhbm5lZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJKb2luZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyS2lja2VkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NPd25lcnNoaXBDaGFuZ2VkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cExlZnQ/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgZW1wdHlNZXNzYWdlU3R5bGUgPSAoKT0+e1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLmdyb3Vwc1dpdGhNZXNzYWdlc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBoZWlnaHQ6dGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZS5oZWlnaHQsXG4gICAgICB3aWR0aDpgY2FsYygke3RoaXMuZ3JvdXBzV2l0aE1lc3NhZ2VzU3R5bGUud2lkdGh9IC0gMjgwcHgpYCxcbiAgICAgIGJvcmRlcjp0aGlzLmdyb3Vwc1dpdGhNZXNzYWdlc1N0eWxlLmJvcmRlcixcbiAgICAgIGJvcmRlclJhZGl1czp0aGlzLmdyb3Vwc1dpdGhNZXNzYWdlc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICB9XG4gIH1cbiAgZ3JvdXBzV3JhcHBlclN0eWxlcyA9ICAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogdGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZS5oZWlnaHQsXG4gICAgICB3aWR0aDogdGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZS53aWR0aCxcbiAgICAgIGJvcmRlcjogdGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMuZ3JvdXBzV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyUmFkaXVzLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5ncm91cHNXaXRoTWVzc2FnZXNTdHlsZS5iYWNrZ3JvdW5kIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX3dyYXBwZXJcIiBbbmdTdHlsZV09XCJncm91cHNXcmFwcGVyU3R5bGVzKClcIj5cbiAgPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX3NpZGViYXJcIiBbbmdDbGFzc109XCJ7bW9iaWxlIDogaXNNb2JpbGVWaWV3fVwiPlxuICAgIDxjb21ldGNoYXQtZ3JvdXBzXG4gICAgI2dyb3VwUmVmXG4gICAgW2FjdGl2ZUdyb3VwXT1cImdyb3VwXCJcbiAgICBbaGlkZVNlYXJjaF09XCJncm91cHNDb25maWd1cmF0aW9uLmhpZGVTZWFyY2hcIlxuICAgIFtzZWFyY2hJY29uVVJMXT1cImdyb3Vwc0NvbmZpZ3VyYXRpb24uc2VhcmNoSWNvblVSTFwiXG4gICAgW3NlYXJjaFJlcXVlc3RCdWlsZGVyXT1cImdyb3Vwc0NvbmZpZ3VyYXRpb24uc2VhcmNoUmVxdWVzdEJ1aWxkZXJcIlxuICAgIFtvbkl0ZW1DbGlja109XCJncm91cHNDb25maWd1cmF0aW9uLm9uSXRlbUNsaWNrIHx8IG9uSXRlbUNsaWNrXCJcbiAgICBbZ3JvdXBzU3R5bGVdPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5ncm91cHNTdHlsZVwiXG4gICAgW3N1YnRpdGxlVmlld109XCJncm91cHNDb25maWd1cmF0aW9uLnN1YnRpdGxlVmlld1wiXG4gICAgW29wdGlvbnNdPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5vcHRpb25zXCJcbiAgICBbcHJpdmF0ZUdyb3VwSWNvbl09XCJncm91cHNDb25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgIFtwcm90ZWN0ZWRHcm91cEljb25dPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5wcm90ZWN0ZWRHcm91cEljb25cIlxuICAgIFtncm91cHNSZXF1ZXN0QnVpbGRlcl09XCJncm91cHNDb25maWd1cmF0aW9uLmdyb3Vwc1JlcXVlc3RCdWlsZGVyXCJcbiAgICBbZW1wdHlTdGF0ZVZpZXddPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgW29uU2VsZWN0XT1cImdyb3Vwc0NvbmZpZ3VyYXRpb24ub25TZWxlY3RcIlxuICAgIFtsb2FkaW5nSWNvblVSTF09XCJncm91cHNDb25maWd1cmF0aW9uLmxvYWRpbmdJY29uVVJMXCJcbiAgICBbZXJyb3JTdGF0ZVZpZXddPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gICAgW2xvYWRpbmdTdGF0ZVZpZXddPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5sb2FkaW5nU3RhdGVWaWV3XCJcbiAgICBbdGl0bGVBbGlnbm1lbnRdPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi50aXRsZUFsaWdubWVudFwiXG4gICAgW2xpc3RJdGVtVmlld109XCJncm91cHNDb25maWd1cmF0aW9uLmxpc3RJdGVtVmlld1wiXG4gICAgW21lbnVdPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5tZW51IHx8IGNyZWF0ZUdyb3VwQnV0dG9uXCJcbiAgICBbaGlkZVNlcGFyYXRvcl09XCJncm91cHNDb25maWd1cmF0aW9uLmhpZGVTZXBhcmF0b3JcIlxuICAgIFtoaWRlRXJyb3JdPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5oaWRlRXJyb3JcIlxuICAgIFtzZWxlY3Rpb25Nb2RlXT1cImdyb3Vwc0NvbmZpZ3VyYXRpb24uc2VsZWN0aW9uTW9kZVwiXG4gICAgW2xpc3RJdGVtU3R5bGVdPVwiZ3JvdXBzQ29uZmlndXJhdGlvbi5saXN0SXRlbVN0eWxlXCJcblxuICAgID48L2NvbWV0Y2hhdC1ncm91cHM+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fbWFpblwiIFtuZ0NsYXNzXT1cInttb2JpbGUgOiBpc01vYmlsZVZpZXd9XCIgKm5nSWY9XCJncm91cCAmJiAhb3BlblBhc3N3b3JkTW9kYWxcIj5cbiAgICA8IS0tTWVzc2FnZSBMaXN0IFNjcmVlbi0tPlxuICAgIDxjb21ldGNoYXQtbWVzc2FnZXNcbiAgICAjbWVzc2FnZXNSZWZcbiAgICBbZ3JvdXBdPVwiZ3JvdXAhXCJcbiAgICBbbWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb25dPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uXCJcbiAgICBbbWVzc2FnZUxpc3RDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb25cIlxuICAgIFttZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXCJcbiAgICBbbWVzc2FnZXNTdHlsZV09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZXNTdHlsZVwiXG4gICAgW2N1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlc109XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uY3VzdG9tU291bmRGb3JJbmNvbWluZ01lc3NhZ2VzXCJcbiAgICBbY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5jdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNcIlxuICAgIFtkZXRhaWxzQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb25cIlxuICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgIFtkaXNhYmxlVHlwaW5nXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kaXNhYmxlVHlwaW5nXCJcbiAgICBbaGlkZU1lc3NhZ2VDb21wb3Nlcl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uaGlkZU1lc3NhZ2VDb21wb3NlclwiXG4gICAgW2hpZGVNZXNzYWdlSGVhZGVyXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlTWVzc2FnZUhlYWRlclwiXG4gICAgW21lc3NhZ2VDb21wb3NlclZpZXddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclZpZXdcIlxuICAgIFttZXNzYWdlSGVhZGVyVmlld109XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlclZpZXdcIlxuICAgIFttZXNzYWdlTGlzdFZpZXddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Vmlld1wiXG4gICAgPlxuICAgIDwvY29tZXRjaGF0LW1lc3NhZ2VzPlxuICAgIDwhLS1NZXNzYWdlIExpc3QgU2NyZWVuIEVORFMtLT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1kZWNvcmF0b3JfX21lc3NhZ2UtLWVtcHR5XCIgKm5nSWY9XCIhZ3JvdXAgICYmICFvcGVuUGFzc3dvcmRNb2RhbFwiIFtuZ1N0eWxlXT1cImVtcHR5TWVzc2FnZVN0eWxlKClcIj5cbiAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIm1lc3NhZ2VUZXh0XCIgW2xhYmVsU3R5bGVdPVwibGFiZWxTdHlsZVwiPjwvY29tZXRjaGF0LWxhYmVsPlxuICAgPC9kaXY+XG4gICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fam9pbmdyb3VwXCIgKm5nSWY9XCJvcGVuUGFzc3dvcmRNb2RhbCAmJiAhZ3JvdXBcIiBbbmdTdHlsZV09XCJlbXB0eU1lc3NhZ2VTdHlsZSgpXCIgW25nQ2xhc3NdPVwie21vYmlsZSA6IGlzTW9iaWxlVmlld31cIj5cbiAgICA8Y29tZXRjaGF0LWpvaW4tZ3JvdXBcbiAgICBbZ3JvdXBdPVwicHJvdGVjdGVkR3JvdXAhXCJcbiAgICBbam9pbkdyb3VwU3R5bGVdPVwiam9pbkdyb3VwU3R5bGVcIlxuICAgIChjYy1qb2luZ3JvdXAtam9pbmVkKT1cIm9uR3JvdXBKb2luZWQoJGV2ZW50KVwiXG4gICAgW2Vycm9yQ2FsbGJhY2tdPVwiam9pbkdyb3VwQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICBbam9pbkNsaWNrXT1cImpvaW5Hcm91cENvbmZpZ3VyYXRpb24uam9pbkNsaWNrXCJcbiAgICA+XG4gICAgPGNvbWV0Y2hhdC1tZXNzYWdlLWhlYWRlciBzbG90PVwiaGVhZGVyVmlld1wiICBbZ3JvdXBdPVwicHJvdGVjdGVkR3JvdXAhXCIgW3N1YnRpdGxlVmlld109XCJqb2luR3JvdXBDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnN1YnRpdGxlVmlld1wiXG4gICAgW2Rpc2FibGVVc2Vyc1ByZXNlbmNlXT1cImpvaW5Hcm91cENvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uZGlzYWJsZVVzZXJzUHJlc2VuY2VcIiBbcHJvdGVjdGVkR3JvdXBJY29uXT1cImpvaW5Hcm91cENvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ucHJvdGVjdGVkR3JvdXBJY29uXCIgW3ByaXZhdGVHcm91cEljb25dPVwiam9pbkdyb3VwQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wcml2YXRlR3JvdXBJY29uXCIgW21lbnVdPVwiam9pbkdyb3VwQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51XCIgW21lc3NhZ2VIZWFkZXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyU3R5bGVcIlxuICAgIFtiYWNrQnV0dG9uSWNvblVSTF09XCJqb2luR3JvdXBDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmJhY2tCdXR0b25JY29uVVJMXCIgW2hpZGVCYWNrQnV0dG9uXT1cImpvaW5Hcm91cENvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uaGlkZUJhY2tCdXR0b25cIiBbb25FcnJvcl09XCJqb2luR3JvdXBDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uRXJyb3JcIiBbb25CYWNrXT1cImpvaW5Hcm91cENvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25CYWNrIHx8IGNsb3NlSm9pbkdyb3VwXCIgW2xpc3RJdGVtU3R5bGVdPVwibGlzdEl0ZW1TdHlsZVwiIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJqb2luR3JvdXBDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgICBbYXZhdGFyU3R5bGVdPVwiam9pbkdyb3VwQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiXG4gICAgPlxuICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtaGVhZGVyPlxuICAgIDwvY29tZXRjaGF0LWpvaW4tZ3JvdXA+XG4gIDwvZGl2PlxuPC9kaXY+XG4gICA8bmctdGVtcGxhdGUgI2NyZWF0ZUdyb3VwQnV0dG9uPlxuICAgICA8Y29tZXRjaGF0LWJ1dHRvbiAqbmdJZj1cIiFoaWRlQ3JlYXRlR3JvdXBcIiBbaWNvblVSTF09XCJjcmVhdGVJY29uVVJMXCIgW2J1dHRvblN0eWxlXT1cImNyZWF0ZUdyb3VwQnV0dG9uU3R5bGVcIiAoY2MtYnV0dG9uLWNsaWNrZWQpPVwib3BlbkNyZWF0ZUdyb3VwKClcIj48L2NvbWV0Y2hhdC1idXR0b24+XG5cbiAgIDwvbmctdGVtcGxhdGU+XG48Y29tZXRjaGF0LWJhY2tkcm9wICpuZ0lmPVwib3BlbkNyZWF0ZUdyb3VwUGFnZVwiIFtiYWNrZHJvcFN0eWxlXT1cImJhY2tkcm9wU3R5bGVcIj5cbiAgPGNvbWV0Y2hhdC1jcmVhdGUtZ3JvdXAgW2NyZWF0ZUdyb3VwU3R5bGVdPVwiY3JlYXRlR3JvdXBTdHlsZVwiIFtoaWRlQ2xvc2VCdXR0b25dPVwiY3JlYXRlR3JvdXBDb25maWd1cmF0aW9uLmhpZGVDbG9zZUJ1dHRvblwiIFtjbG9zZUJ1dHRvbkljb25VUkxdPVwiY3JlYXRlR3JvdXBDb25maWd1cmF0aW9uLmNsb3NlQnV0dG9uSWNvblVSTFwiIFtjcmVhdGVDbGlja109XCJjcmVhdGVHcm91cENvbmZpZ3VyYXRpb24uY3JlYXRlQ2xpY2tcIiAgW2Nsb3NlQ2FsbGJhY2tdPVwiY2xvc2VDcmVhdGVHcm91cFwiPlxuXG4gIDwvY29tZXRjaGF0LWNyZWF0ZS1ncm91cD5cbjwvY29tZXRjaGF0LWJhY2tkcm9wPiJdfQ==