@projectcor/maia-components 2.11.110-1 → 2.26.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 (668) hide show
  1. package/README.md +2 -0
  2. package/package.json +3 -3
  3. package/CHANGELOG.md +0 -642
  4. package/lib/App.js +0 -55
  5. package/lib/components/atoms/ActionableButton.js +0 -60
  6. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +0 -89
  7. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +0 -21
  8. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +0 -9
  9. package/lib/components/atoms/AgentActivityIndicator/index.js +0 -2
  10. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +0 -209
  11. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +0 -93
  12. package/lib/components/atoms/ApprovalBox/index.js +0 -2
  13. package/lib/components/atoms/AttachmentCard/AttachmentCard.js +0 -218
  14. package/lib/components/atoms/AttachmentCard/AttachmentCard.styles.js +0 -52
  15. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +0 -448
  16. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.styles.js +0 -58
  17. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +0 -55
  18. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.styles.js +0 -14
  19. package/lib/components/atoms/AttachmentCard/index.js +0 -4
  20. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +0 -442
  21. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.styles.js +0 -119
  22. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +0 -222
  23. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +0 -313
  24. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +0 -128
  25. package/lib/components/atoms/AttachmentPreviewModal/index.js +0 -2
  26. package/lib/components/atoms/Backdrop/Backdrop.js +0 -17
  27. package/lib/components/atoms/Backdrop/Backdrop.styles.js +0 -9
  28. package/lib/components/atoms/Backdrop/index.js +0 -2
  29. package/lib/components/atoms/CardItem.js +0 -7
  30. package/lib/components/atoms/CardMenu/CardMenu.js +0 -131
  31. package/lib/components/atoms/CardMenu/index.js +0 -2
  32. package/lib/components/atoms/CardMenu/styles.js +0 -21
  33. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +0 -77
  34. package/lib/components/atoms/ChatClientSelector/index.js +0 -2
  35. package/lib/components/atoms/ChatDisclaimerMessage/ChatDisclaimerMessage.js +0 -9
  36. package/lib/components/atoms/ChatDisclaimerMessage/index.js +0 -2
  37. package/lib/components/atoms/ChatDisclaimerMessage/styles.js +0 -6
  38. package/lib/components/atoms/Checkbox/Checkbox.js +0 -34
  39. package/lib/components/atoms/Checkbox/index.js +0 -2
  40. package/lib/components/atoms/Checkbox/styles.js +0 -39
  41. package/lib/components/atoms/Chip/Chip.js +0 -150
  42. package/lib/components/atoms/Chip/index.js +0 -2
  43. package/lib/components/atoms/Chip/styles.js +0 -43
  44. package/lib/components/atoms/ChipLlm/ChipLlm.js +0 -45
  45. package/lib/components/atoms/ChipLlm/ChipLlm.style.js +0 -21
  46. package/lib/components/atoms/ChipLlm/index.js +0 -2
  47. package/lib/components/atoms/ChipStatus/ChipStatus.interface.js +0 -2
  48. package/lib/components/atoms/ChipStatus/ChipStatus.js +0 -14
  49. package/lib/components/atoms/ChipStatus/ChipStatus.styles.js +0 -27
  50. package/lib/components/atoms/ChipStatus/index.js +0 -2
  51. package/lib/components/atoms/ClearButton.js +0 -6
  52. package/lib/components/atoms/ClientSelector/ClientSelector.js +0 -146
  53. package/lib/components/atoms/ClientSelector/ClientSelector.styles.js +0 -15
  54. package/lib/components/atoms/ClientSelector/index.js +0 -2
  55. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -38
  56. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -188
  57. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +0 -39
  58. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -445
  59. package/lib/components/atoms/ContextMentionChip/index.js +0 -4
  60. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -533
  61. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -10
  62. package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
  63. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -282
  64. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -148
  65. package/lib/components/atoms/ContextMentionItem/index.js +0 -2
  66. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -290
  67. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -108
  68. package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
  69. package/lib/components/atoms/CopyToClipboard.js +0 -70
  70. package/lib/components/atoms/EditableLabel/EditableLabel.js +0 -110
  71. package/lib/components/atoms/EditableLabel/index.js +0 -2
  72. package/lib/components/atoms/EditableLabel/styles.js +0 -7
  73. package/lib/components/atoms/EmptySearchClients/EmptySearchClients.js +0 -22
  74. package/lib/components/atoms/EmptySearchClients/EmptySearchClients.styles.js +0 -18
  75. package/lib/components/atoms/EmptySearchClients/index.js +0 -2
  76. package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.js +0 -19
  77. package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.styles.js +0 -15
  78. package/lib/components/atoms/EmptySearchProjects/index.js +0 -2
  79. package/lib/components/atoms/EntitySelector/EntitySelector.js +0 -247
  80. package/lib/components/atoms/EntitySelector/EntitySelector.skeleton.js +0 -38
  81. package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +0 -67
  82. package/lib/components/atoms/EntitySelector/index.js +0 -2
  83. package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.js +0 -14
  84. package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.styles.js +0 -15
  85. package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.js +0 -14
  86. package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.style.js +0 -15
  87. package/lib/components/atoms/ErrorSearchFaqs/index.js +0 -2
  88. package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +0 -18
  89. package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.style.js +0 -15
  90. package/lib/components/atoms/ErrorSearchProjects/index.js +0 -2
  91. package/lib/components/atoms/Expand/Expand.js +0 -32
  92. package/lib/components/atoms/Expand/index.js +0 -2
  93. package/lib/components/atoms/Fade/Fade.js +0 -56
  94. package/lib/components/atoms/Fade/index.js +0 -2
  95. package/lib/components/atoms/FeedbackButton/FeedbackButton.js +0 -59
  96. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +0 -14
  97. package/lib/components/atoms/FeedbackButton/index.js +0 -2
  98. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +0 -138
  99. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.skeleton.js +0 -44
  100. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +0 -43
  101. package/lib/components/atoms/FrequentlyAskedQuestions/index.js +0 -2
  102. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +0 -122
  103. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.skeleton.js +0 -43
  104. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +0 -62
  105. package/lib/components/atoms/FrequentlyUsedActions/index.js +0 -2
  106. package/lib/components/atoms/GoBackButton.js +0 -24
  107. package/lib/components/atoms/HelpButton.js +0 -44
  108. package/lib/components/atoms/IconButton.js +0 -56
  109. package/lib/components/atoms/ImagePreview/ImagePreview.js +0 -96
  110. package/lib/components/atoms/ImagePreview/ImagePreview.styles.js +0 -70
  111. package/lib/components/atoms/Input/CustomInput.interface.js +0 -2
  112. package/lib/components/atoms/Input/CustomInput.js +0 -91
  113. package/lib/components/atoms/Input/CustomInput.styles.js +0 -39
  114. package/lib/components/atoms/Input/index.js +0 -2
  115. package/lib/components/atoms/ListMenuOption/ListMenuOption.js +0 -41
  116. package/lib/components/atoms/ListMenuOption/index.js +0 -2
  117. package/lib/components/atoms/ListMenuOption/styles.js +0 -9
  118. package/lib/components/atoms/Loader.js +0 -41
  119. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.js +0 -11
  120. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.style.js +0 -6
  121. package/lib/components/atoms/LoadingFaqs/index.js +0 -2
  122. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.js +0 -11
  123. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.styles.js +0 -6
  124. package/lib/components/atoms/LoadingSearchClients/index.js +0 -2
  125. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.js +0 -14
  126. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.style.js +0 -10
  127. package/lib/components/atoms/LoadingSearchProjects/index.js +0 -2
  128. package/lib/components/atoms/LoadingText/LoadingText.js +0 -18
  129. package/lib/components/atoms/LoadingText/index.js +0 -2
  130. package/lib/components/atoms/LoadingText/styles.js +0 -7
  131. package/lib/components/atoms/MAIAButton/MAIAButton.js +0 -33
  132. package/lib/components/atoms/MAIAButton/index.js +0 -2
  133. package/lib/components/atoms/MAIAError/MAIAError.js +0 -15
  134. package/lib/components/atoms/MAIAError/index.js +0 -2
  135. package/lib/components/atoms/MAIAInput/MAIAInput.js +0 -1233
  136. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +0 -266
  137. package/lib/components/atoms/MAIAInput/index.js +0 -2
  138. package/lib/components/atoms/MAIAInput/maiaInputLayout.js +0 -25
  139. package/lib/components/atoms/MAIAInput/styles.js +0 -186
  140. package/lib/components/atoms/MAIAMessage/MAIAMessage.interfaces.js +0 -2
  141. package/lib/components/atoms/MAIAMessage/MAIAMessage.js +0 -22
  142. package/lib/components/atoms/MAIAMessage/index.js +0 -2
  143. package/lib/components/atoms/MAIAMessage/styles.js +0 -7
  144. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.config.js +0 -23
  145. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.interfaces.js +0 -2
  146. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.js +0 -51
  147. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.styles.js +0 -26
  148. package/lib/components/atoms/MaiaStreamdown/index.js +0 -2
  149. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.js +0 -18
  150. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +0 -84
  151. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.js +0 -15
  152. package/lib/components/atoms/MaiaWrapper/index.js +0 -3
  153. package/lib/components/atoms/MaiaWrapper/styles.js +0 -21
  154. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.interface.js +0 -2
  155. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.js +0 -84
  156. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.styles.js +0 -53
  157. package/lib/components/atoms/ModalClientAccess/index.js +0 -2
  158. package/lib/components/atoms/ModalInfo/ModalInfo.js +0 -52
  159. package/lib/components/atoms/ModalInfo/ModalInfoContent.js +0 -7
  160. package/lib/components/atoms/ModalInfo/index.js +0 -3
  161. package/lib/components/atoms/ModalInfo/styles.js +0 -7
  162. package/lib/components/atoms/ModalProject/ModalProject.interface.js +0 -2
  163. package/lib/components/atoms/ModalProject/ModalProject.js +0 -112
  164. package/lib/components/atoms/ModalProject/ModalProject.style.js +0 -59
  165. package/lib/components/atoms/ModalProject/index.js +0 -2
  166. package/lib/components/atoms/NextPageLoader.js +0 -33
  167. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.js +0 -28
  168. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +0 -180
  169. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.styles.js +0 -34
  170. package/lib/components/atoms/OnboardingModalButton/index.js +0 -3
  171. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +0 -131
  172. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.styles.js +0 -59
  173. package/lib/components/atoms/OptionAccessibility/index.js +0 -2
  174. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +0 -27
  175. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +0 -18
  176. package/lib/components/atoms/OptionCorPermission/index.js +0 -2
  177. package/lib/components/atoms/PrimaryButton.js +0 -31
  178. package/lib/components/atoms/ProjectSelector/ProjectSelector.js +0 -77
  179. package/lib/components/atoms/ProjectSelector/ProjectSelector.styles.js +0 -61
  180. package/lib/components/atoms/ProjectSelector/index.js +0 -2
  181. package/lib/components/atoms/SecondaryButton.js +0 -20
  182. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +0 -20
  183. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +0 -20
  184. package/lib/components/atoms/SessionGeneratingDot/index.js +0 -2
  185. package/lib/components/atoms/Skeleton/Skeleton.js +0 -36
  186. package/lib/components/atoms/Skeleton/index.js +0 -2
  187. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  188. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  189. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  190. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.js +0 -16
  191. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.styles.js +0 -24
  192. package/lib/components/atoms/SlashCommandChip/buildSlashChipElement.js +0 -18
  193. package/lib/components/atoms/SlashCommandChip/index.js +0 -4
  194. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +0 -210
  195. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +0 -53
  196. package/lib/components/atoms/SlashCommandDropdown/index.js +0 -2
  197. package/lib/components/atoms/Switch/Switch.js +0 -27
  198. package/lib/components/atoms/Switch/Switch.styles.js +0 -22
  199. package/lib/components/atoms/Switch/index.js +0 -2
  200. package/lib/components/atoms/TextArea/CustomTextArea.interface.js +0 -2
  201. package/lib/components/atoms/TextArea/CustomTextArea.js +0 -93
  202. package/lib/components/atoms/TextArea/CustomTextArea.styles.js +0 -25
  203. package/lib/components/atoms/TextArea/TextArea.interfaces.js +0 -2
  204. package/lib/components/atoms/TextArea/TextArea.js +0 -172
  205. package/lib/components/atoms/TextArea/TextArea.styles.js +0 -16
  206. package/lib/components/atoms/TextArea/index.js +0 -2
  207. package/lib/components/atoms/ThirdButton.js +0 -19
  208. package/lib/components/atoms/VideoModal/VideoModal.js +0 -76
  209. package/lib/components/atoms/VideoModal/index.js +0 -2
  210. package/lib/components/atoms/WithAppCfg.js +0 -26
  211. package/lib/components/atoms/WithFeatureValidation.js +0 -23
  212. package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.js +0 -9
  213. package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.styles.js +0 -6
  214. package/lib/components/atoms/WrapperCenterIcon/index.js +0 -2
  215. package/lib/components/atoms/icons/AIIcon.js +0 -23
  216. package/lib/components/atoms/icons/AacFile.js +0 -39
  217. package/lib/components/atoms/icons/AccessibilityIcon.js +0 -42
  218. package/lib/components/atoms/icons/ActionAssignIcon.js +0 -111
  219. package/lib/components/atoms/icons/ActionCalendarIcon.js +0 -112
  220. package/lib/components/atoms/icons/ActionChargeHoursIcon.js +0 -111
  221. package/lib/components/atoms/icons/ActionChatIcon.js +0 -71
  222. package/lib/components/atoms/icons/ActionCreateIcon.js +0 -91
  223. package/lib/components/atoms/icons/ActionCreateReworkIcon.js +0 -39
  224. package/lib/components/atoms/icons/ActionCreateSubtaskIcon.js +0 -37
  225. package/lib/components/atoms/icons/ActionEditIcon.js +0 -39
  226. package/lib/components/atoms/icons/ActionSummaryMessagesIcon.js +0 -88
  227. package/lib/components/atoms/icons/ActionSummaryTaskIcon.js +0 -37
  228. package/lib/components/atoms/icons/ActionTimeBackIcon.js +0 -112
  229. package/lib/components/atoms/icons/AgentMaiaIcon.js +0 -31
  230. package/lib/components/atoms/icons/Brain.js +0 -77
  231. package/lib/components/atoms/icons/CorAccessIcon.js +0 -41
  232. package/lib/components/atoms/icons/CorLogo.js +0 -76
  233. package/lib/components/atoms/icons/CsvFile.js +0 -41
  234. package/lib/components/atoms/icons/DocFile.js +0 -41
  235. package/lib/components/atoms/icons/DocxFile.js +0 -41
  236. package/lib/components/atoms/icons/EmptyClientIllustration.js +0 -67
  237. package/lib/components/atoms/icons/EmptyHistory.js +0 -46
  238. package/lib/components/atoms/icons/EmptySearchIllustration.js +0 -37
  239. package/lib/components/atoms/icons/EmptyState.js +0 -84
  240. package/lib/components/atoms/icons/EmptyStateAgents.js +0 -58
  241. package/lib/components/atoms/icons/ErrorIcon.js +0 -14
  242. package/lib/components/atoms/icons/ErrorSearchIllustration.js +0 -52
  243. package/lib/components/atoms/icons/ErrorState.js +0 -51
  244. package/lib/components/atoms/icons/FaqChevronIcon.js +0 -39
  245. package/lib/components/atoms/icons/FaqsIcon.js +0 -51
  246. package/lib/components/atoms/icons/FlacIcon.js +0 -39
  247. package/lib/components/atoms/icons/FolderIcon.js +0 -29
  248. package/lib/components/atoms/icons/HomeIcon.js +0 -30
  249. package/lib/components/atoms/icons/ImageFile.js +0 -46
  250. package/lib/components/atoms/icons/M4aFile.js +0 -39
  251. package/lib/components/atoms/icons/MAIAIcon.js +0 -20
  252. package/lib/components/atoms/icons/MAIAIsologo.js +0 -65
  253. package/lib/components/atoms/icons/MDFile.js +0 -41
  254. package/lib/components/atoms/icons/MaiaChatLayoutFloatingIcon.js +0 -41
  255. package/lib/components/atoms/icons/MaiaChatLayoutFullscreenIcon.js +0 -41
  256. package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +0 -33
  257. package/lib/components/atoms/icons/MaiaChatLayoutSidebarIcon.js +0 -41
  258. package/lib/components/atoms/icons/MaiaInputAddIcon.js +0 -42
  259. package/lib/components/atoms/icons/MaiaInputAttachIcon.js +0 -29
  260. package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +0 -33
  261. package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +0 -35
  262. package/lib/components/atoms/icons/MaiaInputMentionIcon.js +0 -44
  263. package/lib/components/atoms/icons/MaiaInputRobotIcon.js +0 -29
  264. package/lib/components/atoms/icons/MaiaInputSendIcon.js +0 -29
  265. package/lib/components/atoms/icons/MaiaInputSlashIcon.js +0 -29
  266. package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +0 -35
  267. package/lib/components/atoms/icons/MaiaSettingsProject.js +0 -111
  268. package/lib/components/atoms/icons/MaiaSettingsProjectV2.js +0 -193
  269. package/lib/components/atoms/icons/MaiaSparkleIcon.js +0 -75
  270. package/lib/components/atoms/icons/MaiaStoreIcon.js +0 -31
  271. package/lib/components/atoms/icons/Mp3File.js +0 -39
  272. package/lib/components/atoms/icons/Mp4File.js +0 -39
  273. package/lib/components/atoms/icons/MyAgentsNavIcon.js +0 -51
  274. package/lib/components/atoms/icons/NewChat.js +0 -29
  275. package/lib/components/atoms/icons/NotionIcon.js +0 -36
  276. package/lib/components/atoms/icons/OgaFile.js +0 -39
  277. package/lib/components/atoms/icons/OggFile.js +0 -39
  278. package/lib/components/atoms/icons/PdfFile.js +0 -39
  279. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  280. package/lib/components/atoms/icons/PptFile.js +0 -47
  281. package/lib/components/atoms/icons/PptxFile.js +0 -49
  282. package/lib/components/atoms/icons/RetryIcon.js +0 -34
  283. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  284. package/lib/components/atoms/icons/SkillIcon.js +0 -30
  285. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  286. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  287. package/lib/components/atoms/icons/SkillsNavIcon.js +0 -24
  288. package/lib/components/atoms/icons/SubtaskIcon.js +0 -36
  289. package/lib/components/atoms/icons/TaskLinkIcon.js +0 -27
  290. package/lib/components/atoms/icons/TelescopeIcon.js +0 -60
  291. package/lib/components/atoms/icons/TemplateGradientIcon.js +0 -42
  292. package/lib/components/atoms/icons/TextFile.js +0 -41
  293. package/lib/components/atoms/icons/WavFile.js +0 -39
  294. package/lib/components/atoms/icons/WebmFile.js +0 -50
  295. package/lib/components/atoms/icons/XlsFile.js +0 -42
  296. package/lib/components/atoms/icons/XlsxFile.js +0 -42
  297. package/lib/components/atoms/icons/index.js +0 -54
  298. package/lib/components/atoms/index.js +0 -42
  299. package/lib/components/index.js +0 -11
  300. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.interface.js +0 -2
  301. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +0 -149
  302. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +0 -53
  303. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +0 -415
  304. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +0 -152
  305. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +0 -374
  306. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +0 -106
  307. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +0 -92
  308. package/lib/components/molecules/AbmSection/AbmLoaderFiles.styles.js +0 -57
  309. package/lib/components/molecules/AbmSection/index.js +0 -4
  310. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +0 -52
  311. package/lib/components/molecules/ChatAIClientSelector/index.js +0 -2
  312. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +0 -119
  313. package/lib/components/molecules/ChatAIContent/ChatAIContent.skeleton.js +0 -187
  314. package/lib/components/molecules/ChatAIContent/ChatAIContent.styles.js +0 -6
  315. package/lib/components/molecules/ChatAIContent/index.js +0 -2
  316. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +0 -241
  317. package/lib/components/molecules/ChatAIHistory/index.js +0 -2
  318. package/lib/components/molecules/ChatAIHistory/styles.js +0 -22
  319. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +0 -649
  320. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +0 -115
  321. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +0 -95
  322. package/lib/components/molecules/ChatAIHome/index.js +0 -2
  323. package/lib/components/molecules/ChatAIHome/styles.js +0 -335
  324. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +0 -137
  325. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +0 -853
  326. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +0 -47
  327. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +0 -37
  328. package/lib/components/molecules/ChatAIMessages/README.md +0 -101
  329. package/lib/components/molecules/ChatAIMessages/index.js +0 -2
  330. package/lib/components/molecules/ChatAIMessages/newStyles.js +0 -131
  331. package/lib/components/molecules/ChatAIMessages/styles.js +0 -94
  332. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +0 -1254
  333. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +0 -58
  334. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +0 -127
  335. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +0 -34
  336. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/index.js +0 -2
  337. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +0 -189
  338. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +0 -26
  339. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/index.js +0 -2
  340. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +0 -453
  341. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +0 -108
  342. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/index.js +0 -2
  343. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +0 -48
  344. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +0 -38
  345. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +0 -2
  346. package/lib/components/molecules/ChatAIModal/constants.js +0 -40
  347. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +0 -16
  348. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +0 -12
  349. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +0 -13
  350. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +0 -3
  351. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +0 -57
  352. package/lib/components/molecules/ChatAIModal/index.js +0 -2
  353. package/lib/components/molecules/ChatAIModal/layout.js +0 -74
  354. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +0 -457
  355. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +0 -218
  356. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +0 -430
  357. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +0 -169
  358. package/lib/components/molecules/ChatAIMySkills/index.js +0 -2
  359. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +0 -48
  360. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.styles.js +0 -49
  361. package/lib/components/molecules/ChatAIProjectSelector/index.js +0 -2
  362. package/lib/components/molecules/ChatFooter/ChatFooter.js +0 -337
  363. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.js +0 -32
  364. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.styles.js +0 -14
  365. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +0 -201
  366. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.styles.js +0 -51
  367. package/lib/components/molecules/ChatFooter/index.js +0 -2
  368. package/lib/components/molecules/ChatFooter/styles.js +0 -23
  369. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -60
  370. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
  371. package/lib/components/molecules/ContextMentionInput/index.js +0 -2
  372. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +0 -118
  373. package/lib/components/molecules/MessageFeedback/index.js +0 -2
  374. package/lib/components/molecules/MessageFeedback/styles.js +0 -14
  375. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.js +0 -127
  376. package/lib/components/molecules/ProjectSummaryChat/index.js +0 -2
  377. package/lib/components/molecules/ProjectSummaryChat/styles.js +0 -8
  378. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.js +0 -152
  379. package/lib/components/molecules/ProjectSummaryConfig/index.js +0 -2
  380. package/lib/components/molecules/ProjectSummaryConfig/styles.js +0 -86
  381. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.js +0 -49
  382. package/lib/components/molecules/ProjectSummaryContent/index.js +0 -2
  383. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.js +0 -19
  384. package/lib/components/molecules/ProjectSummaryModal/index.js +0 -2
  385. package/lib/components/molecules/ProjectSummaryModal/styles.js +0 -2
  386. package/lib/components/molecules/Sidebar/Sidebar.js +0 -716
  387. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +0 -157
  388. package/lib/components/molecules/Sidebar/Sidebar.skeleton.js +0 -48
  389. package/lib/components/molecules/Sidebar/Sidebar.styles.js +0 -75
  390. package/lib/components/molecules/Sidebar/index.js +0 -2
  391. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +0 -1420
  392. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +0 -93
  393. package/lib/components/organisms/AbmAgentModal/index.js +0 -2
  394. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +0 -182
  395. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +0 -34
  396. package/lib/components/organisms/AbmSkillGenerateModal/index.js +0 -2
  397. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +0 -585
  398. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +0 -154
  399. package/lib/components/organisms/AbmSkillModal/index.js +0 -2
  400. package/lib/components/organisms/ChatAI/ChatAI.js +0 -167
  401. package/lib/components/organisms/ChatAI/index.js +0 -2
  402. package/lib/components/organisms/ChatAI/styles.js +0 -7
  403. package/lib/components/organisms/ClientAIButton/ClientAIButton.js +0 -23
  404. package/lib/components/organisms/ClientAIButton/index.js +0 -2
  405. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.js +0 -86
  406. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.styles.js +0 -39
  407. package/lib/components/organisms/DeleteAgentModal/index.js +0 -2
  408. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +0 -122
  409. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.styles.js +0 -47
  410. package/lib/components/organisms/DeleteQuestionModal/index.js +0 -2
  411. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +0 -138
  412. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.styles.js +0 -69
  413. package/lib/components/organisms/EditQuestionModal/index.js +0 -2
  414. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.js +0 -113
  415. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.styles.js +0 -54
  416. package/lib/components/organisms/ModalFileExceeds/index.js +0 -2
  417. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +0 -26
  418. package/lib/components/organisms/ProjectAIButton/index.js +0 -2
  419. package/lib/components/organisms/ProjectSummary/ProjectSummary.js +0 -60
  420. package/lib/components/organisms/ProjectSummary/index.js +0 -2
  421. package/lib/components/organisms/ProjectSummary/styles.js +0 -7
  422. package/lib/components/organisms/SnackBar/Snackbar.interface.js +0 -2
  423. package/lib/components/organisms/SnackBar/Snackbar.js +0 -73
  424. package/lib/components/organisms/SnackBar/Snackbar.styles.js +0 -9
  425. package/lib/components/organisms/SnackBar/index.js +0 -2
  426. package/lib/components/organisms/SourcesInformation/SourceItem.js +0 -18
  427. package/lib/components/organisms/SourcesInformation/SourceItem.styles.js +0 -14
  428. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +0 -66
  429. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.styles.js +0 -27
  430. package/lib/components/organisms/SourcesInformation/index.js +0 -2
  431. package/lib/constants/config.js +0 -10
  432. package/lib/constants/formatExtensions.js +0 -55
  433. package/lib/constants/gqlClient.js +0 -4
  434. package/lib/constants/maiaHourAgentAccess.js +0 -15
  435. package/lib/constants/maiaTaskPanelAccess.js +0 -24
  436. package/lib/constants/maiaTaskPanelOutsideClick.js +0 -9
  437. package/lib/constants/maiaTaskPanelZIndex.js +0 -19
  438. package/lib/constants/permissions/config.js +0 -72
  439. package/lib/constants/permissions/index.js +0 -3
  440. package/lib/constants/permissions/types.js +0 -2
  441. package/lib/constants/permissions/utils.js +0 -18
  442. package/lib/constants/plannerSyncEvents.js +0 -15
  443. package/lib/constants/taskLinkIcon.js +0 -15
  444. package/lib/constants/taskUrls.js +0 -11
  445. package/lib/context/cor-user.js +0 -31
  446. package/lib/context/global-context.js +0 -39
  447. package/lib/dev/DevChatAI.js +0 -101
  448. package/lib/dev/DevContextMentionInput.js +0 -67
  449. package/lib/dev/ProjectSummary.js +0 -9
  450. package/lib/dev/Providers.js +0 -27
  451. package/lib/exports.js +0 -2
  452. package/lib/hooks/README.md +0 -192
  453. package/lib/hooks/index.js +0 -30
  454. package/lib/hooks/useAccessClient/index.js +0 -2
  455. package/lib/hooks/useAccessClient/useAccessClient.js +0 -81
  456. package/lib/hooks/useAgentModel/index.js +0 -2
  457. package/lib/hooks/useAgentModel/useAgentModel.js +0 -62
  458. package/lib/hooks/useAgentModel/useCreateAgent.js +0 -128
  459. package/lib/hooks/useAgentModel/useDeleteAgent.js +0 -88
  460. package/lib/hooks/useAgentModel/useUpdateAgent.js +0 -129
  461. package/lib/hooks/useAgentSuggestions.js +0 -60
  462. package/lib/hooks/useCaretPosition.js +0 -65
  463. package/lib/hooks/useChatManager/index.js +0 -2
  464. package/lib/hooks/useChatManager/useChatManager.interface.js +0 -2
  465. package/lib/hooks/useChatManager/useChatManager.js +0 -1782
  466. package/lib/hooks/useChatMessages/index.js +0 -2
  467. package/lib/hooks/useChatMessages/useChatMessages.interface.js +0 -2
  468. package/lib/hooks/useChatMessages/useChatMessages.js +0 -722
  469. package/lib/hooks/useChats/index.js +0 -2
  470. package/lib/hooks/useChats/useChats.interfaces.js +0 -2
  471. package/lib/hooks/useChats/useChats.js +0 -187
  472. package/lib/hooks/useClientSearch.js +0 -163
  473. package/lib/hooks/useContextMentions.js +0 -500
  474. package/lib/hooks/useContextPinPopover.js +0 -228
  475. package/lib/hooks/useDebounce.js +0 -18
  476. package/lib/hooks/useEntitySearch.js +0 -1053
  477. package/lib/hooks/useEvent.js +0 -93
  478. package/lib/hooks/useFrequentlyAskedQuestions.js +0 -150
  479. package/lib/hooks/useFrequentlyUsedActions.js +0 -94
  480. package/lib/hooks/useKnowledge/deleteKnowledge.js +0 -69
  481. package/lib/hooks/useKnowledge/downloadKnowledge.js +0 -81
  482. package/lib/hooks/useKnowledge/index.js +0 -4
  483. package/lib/hooks/useKnowledge/saveKnowledge.js +0 -107
  484. package/lib/hooks/useKnowledge/useKnowledgeOperations.js +0 -156
  485. package/lib/hooks/useMaiaTaskPanelZIndex.js +0 -17
  486. package/lib/hooks/useMentionAllowedTypes.js +0 -120
  487. package/lib/hooks/useMentionPopover.js +0 -342
  488. package/lib/hooks/useMinimizedPillBottomOffset.js +0 -110
  489. package/lib/hooks/useModal/index.js +0 -2
  490. package/lib/hooks/useModal/useModal.interfaces.js +0 -2
  491. package/lib/hooks/useModal/useModal.js +0 -47
  492. package/lib/hooks/useOnboardingNavigation.js +0 -20
  493. package/lib/hooks/useOrchestratorStream/index.js +0 -2
  494. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +0 -2
  495. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +0 -269
  496. package/lib/hooks/useProjectSearch.js +0 -183
  497. package/lib/hooks/useProjectSummary.js +0 -101
  498. package/lib/hooks/useProjectSummaryConfig.js +0 -211
  499. package/lib/hooks/useProjects.js +0 -46
  500. package/lib/hooks/useRecentClientsSearch.js +0 -150
  501. package/lib/hooks/useRecentContexts.js +0 -86
  502. package/lib/hooks/useResize.js +0 -29
  503. package/lib/hooks/useSkillsCatalog.js +0 -66
  504. package/lib/hooks/useSlashCommands.js +0 -84
  505. package/lib/hooks/useSmoothStreamText/index.js +0 -2
  506. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +0 -197
  507. package/lib/hooks/useSnackBarManager/useSnackBarManager.js +0 -41
  508. package/lib/hooks/useStreamResponse.js +0 -112
  509. package/lib/hooks/useStreamdownStyles.js +0 -13
  510. package/lib/hooks/useStreamingMessage/index.js +0 -2
  511. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +0 -18
  512. package/lib/hooks/useT.js +0 -17
  513. package/lib/hooks/useTabTaskDefault.js +0 -33
  514. package/lib/hooks/useTaskPanel.js +0 -22
  515. package/lib/hooks/useTextOverflowEllipsisTooltip.js +0 -34
  516. package/lib/hooks/useToggle.js +0 -19
  517. package/lib/hooks/useToggleFavorite/index.js +0 -2
  518. package/lib/hooks/useToggleFavorite/useToggleFavorite.js +0 -83
  519. package/lib/index.css +0 -76
  520. package/lib/index.js +0 -30
  521. package/lib/lang/br/index.js +0 -785
  522. package/lib/lang/en/index.js +0 -785
  523. package/lib/lang/es/index.js +0 -786
  524. package/lib/lang/fr/index.js +0 -606
  525. package/lib/lang/index.js +0 -24
  526. package/lib/lang/utils.js +0 -33
  527. package/lib/mocks/mockChats.js +0 -395
  528. package/lib/mocks/mockOrchestrator.js +0 -5
  529. package/lib/mocks/mockProject.js +0 -11
  530. package/lib/mocks/mockProjectSummary.js +0 -6
  531. package/lib/mocks/mockedUser.js +0 -169
  532. package/lib/services/apolloClient.js +0 -3
  533. package/lib/services/appcues.js +0 -19
  534. package/lib/services/corpilot/ProjectSummary/getProjectSummary.js +0 -31
  535. package/lib/services/corpilot/ProjectSummary/index.js +0 -5
  536. package/lib/services/corpilot/client.js +0 -27
  537. package/lib/services/corpilot/index.js +0 -5
  538. package/lib/services/maia/Access/updateAccess.js +0 -59
  539. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +0 -46
  540. package/lib/services/maia/Actions/getSlashCommands.js +0 -39
  541. package/lib/services/maia/Actions/index.js +0 -7
  542. package/lib/services/maia/Agents/createAgent.js +0 -39
  543. package/lib/services/maia/Agents/deleteAgent.js +0 -38
  544. package/lib/services/maia/Agents/fetchAgentDetail.js +0 -122
  545. package/lib/services/maia/Agents/getAgentById.js +0 -162
  546. package/lib/services/maia/Agents/getAgentModels.js +0 -112
  547. package/lib/services/maia/Agents/getAgentSuggestions.js +0 -44
  548. package/lib/services/maia/Agents/getAgents.js +0 -718
  549. package/lib/services/maia/Agents/setAgentToolGroups.js +0 -42
  550. package/lib/services/maia/Agents/toggleFavorite.js +0 -34
  551. package/lib/services/maia/Agents/updateAgent.js +0 -39
  552. package/lib/services/maia/Chats/deleteChat.js +0 -32
  553. package/lib/services/maia/Chats/getChatMessages.js +0 -144
  554. package/lib/services/maia/Chats/getChatsByUserId.js +0 -82
  555. package/lib/services/maia/Chats/index.js +0 -15
  556. package/lib/services/maia/Chats/markSessionAsRead.js +0 -32
  557. package/lib/services/maia/Chats/patchChat.js +0 -43
  558. package/lib/services/maia/Chats/wasHelpfulChat.js +0 -31
  559. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +0 -55
  560. package/lib/services/maia/Faqs/index.js +0 -5
  561. package/lib/services/maia/Knowledge/delete.js +0 -41
  562. package/lib/services/maia/Knowledge/download.js +0 -48
  563. package/lib/services/maia/Knowledge/index.js +0 -3
  564. package/lib/services/maia/Knowledge/save.js +0 -43
  565. package/lib/services/maia/Orchestrator/index.js +0 -7
  566. package/lib/services/maia/Orchestrator/orchestrator.js +0 -246
  567. package/lib/services/maia/RecentClients/getRecentClients.js +0 -43
  568. package/lib/services/maia/RecentClients/index.js +0 -6
  569. package/lib/services/maia/RecentContexts/getRecentContexts.js +0 -54
  570. package/lib/services/maia/RecentContexts/index.js +0 -6
  571. package/lib/services/maia/RecentProjects/getRecentProjects.js +0 -55
  572. package/lib/services/maia/RecentProjects/index.js +0 -6
  573. package/lib/services/maia/RecentTasks/getRecentTasks.js +0 -54
  574. package/lib/services/maia/RecentTasks/index.js +0 -6
  575. package/lib/services/maia/RecentUsers/getRecentUsers.js +0 -59
  576. package/lib/services/maia/RecentUsers/index.js +0 -6
  577. package/lib/services/maia/Skills/createSkill.js +0 -39
  578. package/lib/services/maia/Skills/deleteSkill.js +0 -38
  579. package/lib/services/maia/Skills/generateSkill.js +0 -41
  580. package/lib/services/maia/Skills/getSkills.js +0 -120
  581. package/lib/services/maia/Skills/updateSkill.js +0 -39
  582. package/lib/services/maia/client.js +0 -27
  583. package/lib/services/maia/index.js +0 -17
  584. package/lib/services/query/ClientSearchQuery.js +0 -5
  585. package/lib/services/query/entitySearchQuery.js +0 -18
  586. package/lib/services/query/index.js +0 -2
  587. package/lib/services/query/projectSearchByValueQuery.js +0 -5
  588. package/lib/services/query/taskUserTabQuery.js +0 -8
  589. package/lib/services/query/usersDirectoryQuery.js +0 -19
  590. package/lib/services/types.js +0 -6
  591. package/lib/services/utils/fetchCOR.js +0 -117
  592. package/lib/services/utils/getCookie.js +0 -10
  593. package/lib/services/utils/index.js +0 -3
  594. package/lib/services/utils/mapChatMessages.js +0 -287
  595. package/lib/services/utils/validateIsMaia.js +0 -4
  596. package/lib/store/chatsSidebarOptimistic.js +0 -92
  597. package/lib/store/chatsStore.types.js +0 -2
  598. package/lib/store/chatsStoreLifecycle.js +0 -8
  599. package/lib/store/faqsStore.types.js +0 -2
  600. package/lib/store/index.js +0 -4
  601. package/lib/store/maiaLastChatPersistence.js +0 -35
  602. package/lib/store/sessions/activeView.js +0 -22
  603. package/lib/store/sessions/index.js +0 -9
  604. package/lib/store/sessions/sessionHitlContext.js +0 -15
  605. package/lib/store/sessions/sessionNotificationSound.js +0 -57
  606. package/lib/store/sessions/sessionNotifications.js +0 -110
  607. package/lib/store/sessions/sessionNotifications.types.js +0 -2
  608. package/lib/store/sessions/sessionStreamManager.js +0 -715
  609. package/lib/store/sessions/sessionStreamingText.js +0 -80
  610. package/lib/store/sessions/sessions.types.js +0 -35
  611. package/lib/store/sessions/useSessionMeta.js +0 -39
  612. package/lib/store/sessions/useSessionStreamingText.js +0 -18
  613. package/lib/store/sessions/useSessionsStore.js +0 -197
  614. package/lib/store/useChatsStore.js +0 -387
  615. package/lib/store/useFaqsStore.js +0 -27
  616. package/lib/streamdownStyles.js +0 -9
  617. package/lib/styles/StyledCleanContainer.js +0 -7
  618. package/lib/styles/cascade.js +0 -14
  619. package/lib/styles/config.js +0 -47
  620. package/lib/styles/shared/scrollable.js +0 -3
  621. package/lib/styles/transitions.js +0 -21
  622. package/lib/types/Action.js +0 -2
  623. package/lib/types/AgentSuggestion.js +0 -2
  624. package/lib/types/Chat.js +0 -10
  625. package/lib/types/Client.js +0 -2
  626. package/lib/types/FrequentlyAskedQuestion.js +0 -2
  627. package/lib/types/Project.js +0 -2
  628. package/lib/types/ProjectSummaryConfigKeys.js +0 -9
  629. package/lib/types/Task.js +0 -2
  630. package/lib/types/agent.js +0 -2
  631. package/lib/types/agentModal.js +0 -2
  632. package/lib/types/contextMention.js +0 -37
  633. package/lib/types/global.d.js +0 -2
  634. package/lib/types/skill.js +0 -2
  635. package/lib/types/streamActivity.js +0 -2
  636. package/lib/types/userType.d.js +0 -2
  637. package/lib/utils/actionCategoryMap.js +0 -37
  638. package/lib/utils/actionIconMap.js +0 -61
  639. package/lib/utils/agentDisplayName.js +0 -42
  640. package/lib/utils/chatInputFiles.js +0 -52
  641. package/lib/utils/contextMentionIcons.js +0 -134
  642. package/lib/utils/contextMentionLabel.js +0 -4
  643. package/lib/utils/contextMentionTriggers.js +0 -51
  644. package/lib/utils/contextMentionTypeLabel.js +0 -17
  645. package/lib/utils/corConnectorMentionTypes.js +0 -41
  646. package/lib/utils/ensureStreamdownStyles.js +0 -21
  647. package/lib/utils/entityLinkRender.js +0 -135
  648. package/lib/utils/fileDownloadHelper.js +0 -40
  649. package/lib/utils/formatQuickActionMessage.js +0 -16
  650. package/lib/utils/formatUnreadCount.js +0 -6
  651. package/lib/utils/getUnitFileSize.js +0 -13
  652. package/lib/utils/hitlAnalytics.js +0 -65
  653. package/lib/utils/hoursPlannerQuickActionType.js +0 -64
  654. package/lib/utils/imagePreprocessor.js +0 -108
  655. package/lib/utils/index.js +0 -3
  656. package/lib/utils/maiaHostOpen.js +0 -19
  657. package/lib/utils/maiaStreamdownRehypePlugins.js +0 -27
  658. package/lib/utils/mapBackendLang.js +0 -8
  659. package/lib/utils/normalizeAgentConnectors.js +0 -70
  660. package/lib/utils/openTaskInCorPanel.js +0 -22
  661. package/lib/utils/orchestratorSubagents.js +0 -11
  662. package/lib/utils/renderContextMentions.js +0 -420
  663. package/lib/utils/retryCompletion.js +0 -85
  664. package/lib/utils/slashCommandMarker.js +0 -30
  665. package/lib/utils/sortManagerHoursHomeFuas.js +0 -14
  666. package/lib/utils/sseStreamContent.js +0 -17
  667. package/lib/utils/streamActivityMessages.js +0 -359
  668. package/lib/utils/validateTrimmedFields.js +0 -8
@@ -1,716 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
- import _regeneratorRuntime from "@babel/runtime/regenerator";
5
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
- /* eslint-disable camelcase */
8
- /* eslint-disable no-undef */
9
- /* eslint-disable no-param-reassign */
10
- /* eslint-disable @typescript-eslint/no-shadow */
11
- /* eslint-disable @typescript-eslint/no-explicit-any */
12
- /* eslint-disable no-nested-ternary */
13
- /* eslint-disable jsx-a11y/click-events-have-key-events */
14
- /* eslint-disable jsx-a11y/no-static-element-interactions */
15
- import { useEffect, useMemo, useRef, useState } from 'react';
16
- import { ChevronDoubleLeft } from '@projectcor/icons/lib/components/ChevronDoubleLeft';
17
- import { History } from '@projectcor/icons/lib/components/History';
18
- import { CUButton } from '@projectcor/button/lib/components/CUButton';
19
- import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
20
- import { Pencil } from '@projectcor/icons/lib/components/Pencil';
21
- import { Trash } from '@projectcor/icons/lib/components/Trash';
22
- import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
23
- import { EmptyHistoryIcon } from '../../atoms/icons/EmptyHistory';
24
- import { useResizeListener } from '../../../hooks/useResize';
25
- import { useChats } from '../../../hooks/useChats';
26
- import { SidebarChatsSkeleton } from './Sidebar.skeleton';
27
- import { ErrorState, MAIAIcon, MaiaStoreIcon, MyAgentsNavIcon, SkillsNavIcon, NewChat } from '../../atoms/icons';
28
- import { EVENTS, useEvent } from '../../../hooks/useEvent';
29
- import { useT } from '../../../hooks/useT';
30
- import { OptionItem } from '../../atoms/CardMenu/CardMenu';
31
- import { EditQuestionModal } from '../../organisms/EditQuestionModal';
32
- import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal';
33
- import { ErrorIcon } from '../../atoms/icons/ErrorIcon';
34
- import { useUser } from '../../../context/cor-user';
35
- import { FeedbackButton } from '../../atoms/FeedbackButton';
36
- import { useGlobalContext } from '../../../context/global-context';
37
- import { fetchMaia } from '../../../services/maia/client';
38
- import { canAccessToSkills } from '../../../constants/permissions';
39
- import { mapCORLang } from '../../../lang/utils';
40
- import { formatChatListTitleMentions } from '../../../utils/renderContextMentions';
41
- import { getAgentDisplayName, isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
42
- import { APPCUES_EVENTS, APPCUES_SELECTORS, trackAppcuesEvent } from '../../../services/appcues';
43
- import { formatUnreadCount } from '../../../utils/formatUnreadCount';
44
- import { SessionGeneratingDot } from '../../atoms/SessionGeneratingDot';
45
- import { useIsSessionGenerating, useSessionMeta } from '../../../store/sessions/useSessionMeta';
46
- import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
47
- import { SCLHCWrapper, SCLHCWrapperAgent, SCLHCWrapperAgentText, SCLHCWrapperButtonActions, SCLHCWrapperContent, SCLHCWrapperTitle, SCLHCWrapperTitleRow, SCSWrapperCollapsedButton, SCSWrapperNewChatIcon, SCSWrapperAgentsNavIcon } from './Sidebar.styles';
48
- import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarMaiakerNavBadgeNew, SCSSidebarConversationsHeading, SCSSidebarConversationsHeadingRow, SCSSidebarUnreadAnchor, SCSSidebarUnreadCount, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions, SCSSidebarCollapsedDivider } from './Sidebar.layout.styles';
49
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
50
- var actions = {
51
- edit: function edit(props) {
52
- return /*#__PURE__*/_jsx(EditQuestionModal, _objectSpread({}, props));
53
- },
54
- "delete": function _delete(props) {
55
- return /*#__PURE__*/_jsx(DeleteQuestionModal, _objectSpread({}, props));
56
- }
57
- };
58
-
59
- /** Abrevia "especialista"/"especialist" → "Esp." (ES/PT) y "specialist" → "Spec." (EN) en el nombre del agente. */
60
- function abbreviateSpecialistInAgentName(agentName) {
61
- if (!agentName || typeof agentName !== 'string') return agentName;
62
- return agentName.replace(/\b(especialista|especialist)\b/gi, 'Esp.').replace(/\bspecialist\b/gi, 'Spec.');
63
- }
64
- var ListHistoryChat = function ListHistoryChat(_ref) {
65
- var chat = _ref.chat,
66
- _onClick = _ref.onClick,
67
- isModalOpen = _ref.isModalOpen,
68
- onOpenModal = _ref.onOpenModal,
69
- onCloseModal = _ref.onCloseModal,
70
- handlers = _ref.handlers,
71
- isSelected = _ref.isSelected,
72
- index = _ref.index,
73
- tooltipZIndex = _ref.tooltipZIndex;
74
- var textRef = useRef(null);
75
- var agentRef = useRef(null);
76
- var displayTitle = useMemo(function () {
77
- return formatChatListTitleMentions(chat.title);
78
- }, [chat.title]);
79
- var displayAgent = getAgentDisplayName(chat.agentType, chat.agent);
80
- var contextName = chat.projectName || chat.clientName;
81
- var _useResizeListener = useResizeListener(textRef, [displayTitle]),
82
- showTooltip = _useResizeListener.showTooltip;
83
- var _useResizeListener2 = useResizeListener(agentRef, [chat.agent]),
84
- showTooltipAgent = _useResizeListener2.showTooltip;
85
- var _useT = useT(),
86
- t = _useT.t;
87
- var _useState = useState(null),
88
- _useState2 = _slicedToArray(_useState, 2),
89
- action = _useState2[0],
90
- setAction = _useState2[1];
91
- var isGenerating = useIsSessionGenerating(chat.sessionExternalId);
92
- var sessionMeta = useSessionMeta(chat.sessionExternalId);
93
- var isUnread = chat.isRead === false && !isGenerating;
94
- var menuItems = [{
95
- label: t('history.menu.rename'),
96
- onClickItem: function onClickItem(chatId) {
97
- setAction('edit');
98
- onOpenModal(chatId);
99
- },
100
- Icon: Pencil,
101
- eventKey: EVENTS.pmAiMenuEdit
102
- }, {
103
- label: t('history.menu.delete'),
104
- onClickItem: function onClickItem(chatId) {
105
- setAction('delete');
106
- onOpenModal(chatId);
107
- },
108
- Icon: Trash,
109
- eventKey: EVENTS.pmAiMenuDelete
110
- }];
111
- var handleConfirmAction = function handleConfirmAction(chatData) {
112
- if (action === 'edit') {
113
- handlers.handleUpdateChat(chatData);
114
- } else {
115
- handlers.handleDeleteChat(chatData);
116
- }
117
- setAction(null);
118
- onCloseModal();
119
- };
120
- return /*#__PURE__*/_jsxs(_Fragment, {
121
- children: [/*#__PURE__*/_jsxs(SCLHCWrapperContent, {
122
- onClick: function onClick(e) {
123
- e.stopPropagation();
124
- _onClick(chat);
125
- },
126
- isModalOpen: isModalOpen,
127
- isSelected: isSelected,
128
- $index: index,
129
- children: [/*#__PURE__*/_jsxs(SCLHCWrapper, {
130
- children: [/*#__PURE__*/_jsxs(SCLHCWrapperTitleRow, {
131
- children: [isGenerating || isUnread ? /*#__PURE__*/_jsx(SessionGeneratingDot, {
132
- ariaLabel: isGenerating ? t('conversations.generating') : t('conversations.unreadLabel'),
133
- isWriting: isGenerating && (sessionMeta === null || sessionMeta === void 0 ? void 0 : sessionMeta.isWriting),
134
- animated: isGenerating
135
- }) : null, /*#__PURE__*/_jsx(Tooltip, {
136
- title: showTooltip ? displayTitle : '',
137
- zIndex: tooltipZIndex,
138
- children: /*#__PURE__*/_jsx(SCLHCWrapperTitle, {
139
- ref: textRef,
140
- $unread: isUnread,
141
- children: displayTitle || t('conversations.emptyLabel')
142
- })
143
- })]
144
- }), /*#__PURE__*/_jsx(Tooltip, {
145
- title: showTooltipAgent ? displayAgent + (contextName ? " - ".concat(contextName) : '') : '',
146
- zIndex: tooltipZIndex,
147
- children: /*#__PURE__*/_jsxs(SCLHCWrapperAgent, {
148
- children: [chat.agentType === 'clone' || chat.agentType === 'orchestrator' ? /*#__PURE__*/_jsx(MAIAIcon, {
149
- width: 14,
150
- height: 14
151
- }) : /*#__PURE__*/_jsx("span", {
152
- style: {
153
- fontSize: '14px'
154
- },
155
- children: chat.emoji
156
- }), /*#__PURE__*/_jsxs(SCLHCWrapperAgentText, {
157
- ref: agentRef,
158
- children: [chat.agentType === 'clone' || chat.agentType === 'orchestrator' ? abbreviateSpecialistInAgentName(chat.agent) : chat.agent, chat.projectName && " - ".concat(chat.projectName)]
159
- })]
160
- })
161
- })]
162
- }), /*#__PURE__*/_jsxs(SCLHCWrapperButtonActions, {
163
- children: [/*#__PURE__*/_jsx(CUButton, {
164
- iconOnly: true,
165
- size: "small",
166
- variant: "text",
167
- onClick: function onClick(event) {
168
- event.stopPropagation();
169
- onOpenModal(chat.id);
170
- },
171
- children: /*#__PURE__*/_jsx(MenuDots, {
172
- width: 20,
173
- height: 20
174
- })
175
- }), isModalOpen && !action && /*#__PURE__*/_jsx("div", {
176
- "data-modal-container": true,
177
- style: {
178
- position: 'absolute',
179
- top: '32px',
180
- right: '16px',
181
- backgroundColor: 'white',
182
- zIndex: 1000,
183
- display: 'flex',
184
- flexDirection: 'column',
185
- borderRadius: '4px',
186
- border: '1px solid rgba(224, 224, 224, 1)',
187
- minWidth: '124px'
188
- },
189
- children: menuItems.map(function (_ref2) {
190
- var label = _ref2.label,
191
- onClickItem = _ref2.onClickItem,
192
- Icon = _ref2.Icon,
193
- eventKey = _ref2.eventKey;
194
- return /*#__PURE__*/_jsx(OptionItem, {
195
- label: label,
196
- onClick: function onClick() {
197
- return onClickItem(chat.id);
198
- },
199
- Icon: Icon,
200
- eventKey: eventKey
201
- }, label);
202
- })
203
- })]
204
- })]
205
- }, "conversation-".concat(chat.sessionExternalId)), !!action && actions[action]({
206
- onClose: function onClose() {
207
- onCloseModal();
208
- setAction(null);
209
- },
210
- chat: chat,
211
- handlers: {
212
- handleConfirmAction: handleConfirmAction,
213
- handleSetIsOpenModal: onCloseModal
214
- }
215
- })]
216
- });
217
- };
218
- export var Sidebar = function Sidebar(_ref3) {
219
- var _user$permissions;
220
- var onGoToChat = _ref3.onGoToChat,
221
- _ref3$onError = _ref3.onError,
222
- onError = _ref3$onError === void 0 ? function () {
223
- return null;
224
- } : _ref3$onError,
225
- handleGoToHome = _ref3.handleGoToHome,
226
- handleStartNewChat = _ref3.handleStartNewChat,
227
- handleOpenMarketplace = _ref3.handleOpenMarketplace,
228
- handleOpenSkills = _ref3.handleOpenSkills,
229
- showNewChat = _ref3.showNewChat,
230
- refetchChats = _ref3.refetchChats,
231
- handleSetRefetchChats = _ref3.handleSetRefetchChats,
232
- hasError = _ref3.hasError,
233
- resetSelectedChatRef = _ref3.resetSelectedChatRef,
234
- _ref3$agentsNavActive = _ref3.agentsNavActive,
235
- agentsNavActive = _ref3$agentsNavActive === void 0 ? null : _ref3$agentsNavActive,
236
- _ref3$isLegacyContext = _ref3.isLegacyContextSession,
237
- isLegacyContextSession = _ref3$isLegacyContext === void 0 ? false : _ref3$isLegacyContext;
238
- var _useT2 = useT(),
239
- t = _useT2.t,
240
- i18n = _useT2.i18n;
241
- var tooltipZIndex = useMaiaTaskPanelZIndex(1500, 'overlay');
242
- var _useState3 = useState(false),
243
- _useState4 = _slicedToArray(_useState3, 2),
244
- isOpen = _useState4[0],
245
- setIsOpen = _useState4[1];
246
- var _useState5 = useState(null),
247
- _useState6 = _slicedToArray(_useState5, 2),
248
- isOpenModal = _useState6[0],
249
- setIsOpenModal = _useState6[1];
250
- var _useState7 = useState(null),
251
- _useState8 = _slicedToArray(_useState7, 2),
252
- selectedChat = _useState8[0],
253
- setSelectedChat = _useState8[1];
254
- var chatsFetchedRef = useRef(false);
255
- var chatsContainerRef = useRef(null);
256
- var user = useUser();
257
- var eventAmplitude = useEvent();
258
- var _useGlobalContext = useGlobalContext(),
259
- selectedAgent = _useGlobalContext.agent,
260
- selectAgent = _useGlobalContext.selectAgent,
261
- setProject = _useGlobalContext.setProject,
262
- setClient = _useGlobalContext.setClient,
263
- setTask = _useGlobalContext.setTask;
264
- var _useChats = useChats({
265
- onError: onError
266
- }),
267
- loadingChats = _useChats.loadingChats,
268
- chats = _useChats.chats,
269
- deleteChat = _useChats.deleteChat,
270
- updateChat = _useChats.updateChat,
271
- fetchChats = _useChats.fetchChats,
272
- limit = _useChats.limit,
273
- offset = _useChats.offset,
274
- hasMoreChats = _useChats.hasMoreChats,
275
- loadMoreChats = _useChats.loadMoreChats,
276
- isLoadingMoreChats = _useChats.isLoadingMoreChats,
277
- unreadCount = _useChats.unreadCount,
278
- setUnreadCount = _useChats.setUnreadCount,
279
- setChatReadState = _useChats.setChatReadState;
280
- var unreadSubscribedRef = useRef(false);
281
- useEffect(function () {
282
- if (!(user !== null && user !== void 0 && user.id) || typeof $_sc === 'undefined' || !$_sc) return undefined;
283
- var channel = "sessions.unread:".concat(user.id);
284
- var handleUnreadEvent = function handleUnreadEvent(_ref4) {
285
- var modelData = _ref4.model_data;
286
- if (typeof (modelData === null || modelData === void 0 ? void 0 : modelData.unread_count) === 'number') {
287
- setUnreadCount(modelData.unread_count);
288
- }
289
- if (modelData !== null && modelData !== void 0 && modelData.session_id && typeof (modelData === null || modelData === void 0 ? void 0 : modelData.is_read) === 'boolean') {
290
- setChatReadState(modelData.session_id, modelData.is_read);
291
- }
292
- };
293
- $_sc.subscribeHandler(channel, handleUnreadEvent);
294
- if (!unreadSubscribedRef.current) {
295
- var _$_sc$actionType, _$_sc$channelType;
296
- $_sc.updateConnectionModel({
297
- model_hash: channel,
298
- action: (_$_sc$actionType = $_sc.actionType) === null || _$_sc$actionType === void 0 ? void 0 : _$_sc$actionType.SUBSCRIBE
299
- }, channel, user, user, (_$_sc$channelType = $_sc.channelType) === null || _$_sc$channelType === void 0 ? void 0 : _$_sc$channelType.MODEL_CHANNEL);
300
- unreadSubscribedRef.current = true;
301
- }
302
- return undefined;
303
- }, [user, setUnreadCount, setChatReadState]);
304
- var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
305
- var canCreateAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
306
- var hasMultiAgentsFeatureAccess = !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
307
- var canViewAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.view) && hasMultiAgentsFeatureAccess;
308
- var canViewSkills = canAccessToSkills(user);
309
- var showMarketplaceSidebarButton = !!canCreateAgents && hasMultiAgentsFeatureAccess;
310
- var agentNavButtonCount = (showMarketplaceSidebarButton ? 1 : 0) + (canViewAgents ? 1 : 0) + (canViewSkills ? 1 : 0);
311
- var showAgentsNavBlock = showMarketplaceSidebarButton || canViewAgents || canViewSkills;
312
- var myAgentsSidebarTrackedRef = useRef(false);
313
- useEffect(function () {
314
- if (!canViewAgents || myAgentsSidebarTrackedRef.current) return;
315
- myAgentsSidebarTrackedRef.current = true;
316
- trackAppcuesEvent(APPCUES_EVENTS.maiaSidebarMyAgents);
317
- }, [canViewAgents]);
318
- useEffect(function () {
319
- if (resetSelectedChatRef) {
320
- resetSelectedChatRef.current = function () {
321
- return setSelectedChat(null);
322
- };
323
- }
324
- return function () {
325
- if (resetSelectedChatRef) {
326
- resetSelectedChatRef.current = null;
327
- }
328
- };
329
- }, [resetSelectedChatRef]);
330
- useEffect(function () {
331
- var handleSelectSession = function handleSelectSession(evt) {
332
- var _detail;
333
- var _ref5 = (_detail = evt.detail) !== null && _detail !== void 0 ? _detail : {},
334
- sessionId = _ref5.sessionId;
335
- if (sessionId) {
336
- setSelectedChat(sessionId);
337
- }
338
- };
339
- document.addEventListener('sidebar-select-session', handleSelectSession);
340
- return function () {
341
- document.removeEventListener('sidebar-select-session', handleSelectSession);
342
- };
343
- }, []);
344
- var handleDeleteChat = /*#__PURE__*/function () {
345
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
346
- return _regeneratorRuntime.wrap(function (_context) {
347
- while (1) switch (_context.prev = _context.next) {
348
- case 0:
349
- deleteChat(chat.sessionExternalId);
350
- setIsOpenModal(null);
351
- handleGoToHome();
352
- case 1:
353
- case "end":
354
- return _context.stop();
355
- }
356
- }, _callee);
357
- }));
358
- return function handleDeleteChat(_x) {
359
- return _ref6.apply(this, arguments);
360
- };
361
- }();
362
- var handleUpdateChat = function handleUpdateChat(chat) {
363
- updateChat(chat);
364
- setIsOpenModal(null);
365
- };
366
- var handleOpenModal = function handleOpenModal(chatId) {
367
- if (isOpenModal && isOpenModal !== chatId) {
368
- setIsOpenModal(null);
369
- } else {
370
- setIsOpenModal(chatId);
371
- }
372
- };
373
- var handleCloseModal = function handleCloseModal() {
374
- setIsOpenModal(null);
375
- };
376
- useEffect(function () {
377
- var handleClickOutside = function handleClickOutside(event) {
378
- if (isOpenModal && !event.target.closest('[data-modal-container]')) {
379
- setIsOpenModal(null);
380
- }
381
- };
382
- if (isOpenModal) {
383
- document.addEventListener('mousedown', handleClickOutside);
384
- }
385
- return function () {
386
- document.removeEventListener('mousedown', handleClickOutside);
387
- };
388
- }, [isOpenModal]);
389
- var handleToggleSidebar = function handleToggleSidebar() {
390
- if (isOpenModal) {
391
- setIsOpenModal(null);
392
- }
393
- eventAmplitude(EVENTS.aiChatSidebar, {
394
- action: isOpen ? 'close' : 'open'
395
- });
396
- setIsOpen(function (prev) {
397
- return !prev;
398
- });
399
- };
400
- var handleOpenCreateAgent = /*#__PURE__*/function () {
401
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
402
- var response, data, maiakerAgent, _t;
403
- return _regeneratorRuntime.wrap(function (_context2) {
404
- while (1) switch (_context2.prev = _context2.next) {
405
- case 0:
406
- _context2.prev = 0;
407
- _context2.next = 1;
408
- return fetchMaia({
409
- path: "agents?agent_type=clone&entity=global&lang=".concat(mapCORLang(i18n.language)),
410
- method: 'GET'
411
- });
412
- case 1:
413
- response = _context2.sent;
414
- _context2.next = 2;
415
- return response.json();
416
- case 2:
417
- data = _context2.sent;
418
- maiakerAgent = (data.data || []).find(function (agentItem) {
419
- return isMarketplaceGlobalCloneAgent(agentItem);
420
- });
421
- if (maiakerAgent) {
422
- _context2.next = 3;
423
- break;
424
- }
425
- return _context2.abrupt("return");
426
- case 3:
427
- setProject(null);
428
- setClient === null || setClient === void 0 || setClient(null);
429
- setTask(null);
430
- // handleGoToHome puede reseleccionar agents.data[0] si el agente global aun esta en null
431
- // (closure stale de la seccion "Mis agentes"), por eso selectAgent(maiakerAgent) va despues.
432
- handleGoToHome();
433
- selectAgent(maiakerAgent);
434
- _context2.next = 5;
435
- break;
436
- case 4:
437
- _context2.prev = 4;
438
- _t = _context2["catch"](0);
439
- onError();
440
- case 5:
441
- case "end":
442
- return _context2.stop();
443
- }
444
- }, _callee2, null, [[0, 4]]);
445
- }));
446
- return function handleOpenCreateAgent() {
447
- return _ref7.apply(this, arguments);
448
- };
449
- }();
450
- useEffect(function () {
451
- if (!chatsFetchedRef.current) {
452
- chatsFetchedRef.current = true;
453
- fetchChats({
454
- limit: limit,
455
- offset: offset
456
- });
457
- return;
458
- }
459
- // Refetch solicitado por prop: se ejecuta aunque el sidebar esté colapsado.
460
- if (refetchChats) {
461
- fetchChats({
462
- limit: limit,
463
- offset: offset
464
- });
465
- handleSetRefetchChats(false);
466
- }
467
- }, [refetchChats, handleSetRefetchChats, fetchChats, limit, offset]);
468
- useEffect(function () {
469
- var handleScroll = function handleScroll() {
470
- if (!chatsContainerRef.current || !hasMoreChats || isLoadingMoreChats || hasError) {
471
- return;
472
- }
473
- var _chatsContainerRef$cu = chatsContainerRef.current,
474
- scrollTop = _chatsContainerRef$cu.scrollTop,
475
- scrollHeight = _chatsContainerRef$cu.scrollHeight,
476
- clientHeight = _chatsContainerRef$cu.clientHeight;
477
- var isAtBottom = scrollTop + clientHeight >= scrollHeight - 10;
478
- if (isAtBottom) {
479
- loadMoreChats();
480
- }
481
- };
482
- var container = chatsContainerRef.current;
483
- if (container) {
484
- container.addEventListener('scroll', handleScroll);
485
- }
486
- return function () {
487
- if (container) {
488
- container.removeEventListener('scroll', handleScroll);
489
- }
490
- };
491
- }, [hasMoreChats, isLoadingMoreChats, loadMoreChats, hasError]);
492
- var handleNewChat = function handleNewChat() {
493
- eventAmplitude(EVENTS.aiSidebarNewChat);
494
- if (isOpenModal) {
495
- setIsOpenModal(null);
496
- }
497
- setSelectedChat(null);
498
- if (handleStartNewChat) {
499
- handleStartNewChat();
500
- return;
501
- }
502
- handleGoToHome();
503
- };
504
- useEffect(function () {
505
- // Al crear/actualizar una conversación refrescamos la lista aunque el sidebar esté colapsado.
506
- var handleRefetchSession = function handleRefetchSession() {
507
- chatsFetchedRef.current = true;
508
- fetchChats({
509
- limit: 20,
510
- offset: 0,
511
- background: true
512
- });
513
- };
514
- document.addEventListener('refetch-session', handleRefetchSession);
515
- return function () {
516
- document.removeEventListener('refetch-session', handleRefetchSession);
517
- };
518
- }, [fetchChats]);
519
- var isAgentsHubSection = showNewChat && (agentsNavActive === 'myAgents' || agentsNavActive === 'maiaker');
520
- var showNewChatButton = isAgentsHubSection || !showNewChat && !hasError && !loadingChats && !isLegacyContextSession && ((userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access) || !(userPermissions !== null && userPermissions !== void 0 && userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access));
521
- return /*#__PURE__*/_jsxs(SCSSidebarRoot, {
522
- $isOpen: isOpen,
523
- children: [/*#__PURE__*/_jsxs(SCSSidebarToolbar, {
524
- $isOpen: isOpen,
525
- children: [/*#__PURE__*/_jsx(Tooltip, {
526
- title: isOpen ? t('conversations.collapse') : t('history.tooltip'),
527
- zIndex: tooltipZIndex,
528
- children: /*#__PURE__*/_jsx(SCSWrapperCollapsedButton, {
529
- onClick: handleToggleSidebar,
530
- isOpen: isOpen,
531
- children: isOpen ? /*#__PURE__*/_jsx(ChevronDoubleLeft, {
532
- color: "rgba(102, 102, 102, 1)",
533
- width: 16,
534
- height: 16
535
- }) : /*#__PURE__*/_jsxs(SCSSidebarUnreadAnchor, {
536
- children: [/*#__PURE__*/_jsx(History, {
537
- color: "rgba(13, 13, 13, 1)",
538
- width: 20,
539
- height: 20
540
- }), unreadCount > 0 ? /*#__PURE__*/_jsx(SCSSidebarUnreadCount, {
541
- $floating: true,
542
- "aria-label": t('conversations.unreadLabel'),
543
- children: formatUnreadCount(unreadCount)
544
- }) : null]
545
- })
546
- })
547
- }), showNewChatButton ? /*#__PURE__*/_jsx(Tooltip, {
548
- title: t('conversations.newChat'),
549
- zIndex: tooltipZIndex,
550
- children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
551
- onClick: handleNewChat,
552
- children: /*#__PURE__*/_jsx(NewChat, {
553
- width: 16,
554
- height: 16
555
- })
556
- })
557
- }) : null, !isOpen && showAgentsNavBlock ? /*#__PURE__*/_jsxs(_Fragment, {
558
- children: [/*#__PURE__*/_jsx(SCSSidebarCollapsedDivider, {}), showMarketplaceSidebarButton ? /*#__PURE__*/_jsx(Tooltip, {
559
- title: t('conversations.maiakerNav'),
560
- zIndex: tooltipZIndex,
561
- children: /*#__PURE__*/_jsx(SCSWrapperAgentsNavIcon, {
562
- $active: agentsNavActive === 'maiaker',
563
- onClick: function onClick() {
564
- eventAmplitude(EVENTS.aiChatMpOpen);
565
- handleOpenCreateAgent();
566
- },
567
- children: /*#__PURE__*/_jsx(MaiaStoreIcon, {
568
- size: 16
569
- })
570
- })
571
- }) : null, canViewAgents ? /*#__PURE__*/_jsx(Tooltip, {
572
- title: t('conversations.myAgentsNav'),
573
- zIndex: tooltipZIndex,
574
- children: /*#__PURE__*/_jsx(SCSWrapperAgentsNavIcon, {
575
- $active: agentsNavActive === 'myAgents',
576
- "data-appcues": APPCUES_SELECTORS.maiaSidebarMyAgents,
577
- onClick: function onClick() {
578
- eventAmplitude(EVENTS.aiSidebarMyAgents);
579
- handleOpenMarketplace();
580
- },
581
- children: /*#__PURE__*/_jsx(MyAgentsNavIcon, {
582
- size: 16
583
- })
584
- })
585
- }) : null, canViewSkills ? /*#__PURE__*/_jsx(Tooltip, {
586
- title: t('conversations.mySkillsNav'),
587
- zIndex: tooltipZIndex,
588
- children: /*#__PURE__*/_jsx(SCSWrapperAgentsNavIcon, {
589
- $active: agentsNavActive === 'mySkills',
590
- onClick: handleOpenSkills,
591
- children: /*#__PURE__*/_jsx(SkillsNavIcon, {
592
- size: 16
593
- })
594
- })
595
- }) : null]
596
- }) : null]
597
- }), /*#__PURE__*/_jsxs(SCSSidebarBody, {
598
- $isOpen: isOpen,
599
- children: [isOpen ? /*#__PURE__*/_jsxs(SCSSidebarOpenPanel, {
600
- children: [/*#__PURE__*/_jsxs(SCSSidebarAgentsBlock, {
601
- children: [showAgentsNavBlock ? /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
602
- children: [showMarketplaceSidebarButton ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
603
- type: "button",
604
- onClick: function onClick() {
605
- eventAmplitude(EVENTS.aiChatMpOpen);
606
- handleOpenCreateAgent();
607
- },
608
- $active: agentsNavActive === 'maiaker',
609
- children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
610
- size: 16
611
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
612
- children: t('conversations.maiakerNav')
613
- })]
614
- }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
615
- type: "button",
616
- "data-appcues": APPCUES_SELECTORS.maiaSidebarMyAgents,
617
- onClick: function onClick() {
618
- eventAmplitude(EVENTS.aiSidebarMyAgents);
619
- handleOpenMarketplace();
620
- },
621
- $active: agentsNavActive === 'myAgents',
622
- children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
623
- size: 16
624
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
625
- children: t('conversations.myAgentsNav')
626
- })]
627
- }) : null, canViewSkills ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
628
- type: "button",
629
- onClick: handleOpenSkills,
630
- $active: agentsNavActive === 'mySkills',
631
- children: [/*#__PURE__*/_jsx(SkillsNavIcon, {
632
- size: 16
633
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
634
- children: t('conversations.mySkillsNav')
635
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavBadgeNew, {
636
- children: t('homeMenu.maiaker.badgeNew')
637
- })]
638
- }) : null]
639
- }) : null, /*#__PURE__*/_jsxs(SCSSidebarConversationsHeadingRow, {
640
- children: [/*#__PURE__*/_jsx(SCSSidebarConversationsHeading, {
641
- children: t('conversations.title')
642
- }), unreadCount > 0 ? /*#__PURE__*/_jsx(SCSSidebarUnreadCount, {
643
- "aria-label": t('conversations.unreadLabel'),
644
- children: formatUnreadCount(unreadCount)
645
- }) : null]
646
- })]
647
- }), /*#__PURE__*/_jsx(SCSSidebarChatsScroll, {
648
- ref: chatsContainerRef,
649
- $hasChats: chats.length > 0,
650
- $offsetVariant: hasError ? 'error' : 'default',
651
- $agentNavButtonCount: agentNavButtonCount,
652
- children: hasError && !chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
653
- children: [/*#__PURE__*/_jsx(SCSSidebarErrorStateTop, {
654
- children: /*#__PURE__*/_jsx(ErrorState, {})
655
- }), /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
656
- children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
657
- children: /*#__PURE__*/_jsx(ErrorIcon, {})
658
- }), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
659
- children: t('conversations.error')
660
- })]
661
- })]
662
- }) : loadingChats ? /*#__PURE__*/_jsx(SCSSidebarLoadingArea, {
663
- children: /*#__PURE__*/_jsx(SidebarChatsSkeleton, {})
664
- }) : chats.length ? /*#__PURE__*/_jsxs(_Fragment, {
665
- children: [chats.map(function (chat, index) {
666
- return /*#__PURE__*/_jsx(ListHistoryChat, {
667
- index: index,
668
- chat: chat,
669
- onClick: function onClick(chatData) {
670
- if (isOpenModal) {
671
- setIsOpenModal(null);
672
- }
673
- setSelectedChat(chatData.sessionExternalId);
674
- onGoToChat(chatData);
675
- },
676
- isModalOpen: isOpenModal === chat.id,
677
- onOpenModal: handleOpenModal,
678
- onCloseModal: handleCloseModal,
679
- handlers: {
680
- handleDeleteChat: handleDeleteChat,
681
- handleUpdateChat: handleUpdateChat
682
- },
683
- isSelected: selectedChat === chat.sessionExternalId,
684
- tooltipZIndex: tooltipZIndex
685
- }, chat.id);
686
- }), isLoadingMoreChats && /*#__PURE__*/_jsx(SCSSidebarLoadMoreRow, {
687
- children: /*#__PURE__*/_jsx(SidebarChatsSkeleton, {
688
- count: 2
689
- })
690
- })]
691
- }) : /*#__PURE__*/_jsxs(SCSSidebarEmptyChats, {
692
- children: [/*#__PURE__*/_jsx(EmptyHistoryIcon, {}), /*#__PURE__*/_jsx(SCSSidebarEmptyChatsText, {
693
- children: t('conversations.empty')
694
- })]
695
- })
696
- }), /*#__PURE__*/_jsx(SCSSidebarChatsFooter, {
697
- children: hasError && chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
698
- children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
699
- children: /*#__PURE__*/_jsx(ErrorIcon, {})
700
- }), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
701
- children: t('conversations.error')
702
- })]
703
- }) : null
704
- })]
705
- }) : null, /*#__PURE__*/_jsx(SCSSidebarFooterActions, {
706
- $isOpen: isOpen,
707
- $justifyBetween: !!selectedAgent,
708
- children: selectedAgent ? /*#__PURE__*/_jsx(FeedbackButton, {
709
- selectedAgent: selectedAgent,
710
- isOpen: isOpen
711
- }) : null
712
- })]
713
- })]
714
- });
715
- };
716
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJDaGV2cm9uRG91YmxlTGVmdCIsIkhpc3RvcnkiLCJDVUJ1dHRvbiIsIk1lbnVEb3RzIiwiUGVuY2lsIiwiVHJhc2giLCJUb29sdGlwIiwiRW1wdHlIaXN0b3J5SWNvbiIsInVzZVJlc2l6ZUxpc3RlbmVyIiwidXNlQ2hhdHMiLCJTaWRlYmFyQ2hhdHNTa2VsZXRvbiIsIkVycm9yU3RhdGUiLCJNQUlBSWNvbiIsIk1haWFTdG9yZUljb24iLCJNeUFnZW50c05hdkljb24iLCJTa2lsbHNOYXZJY29uIiwiTmV3Q2hhdCIsIkVWRU5UUyIsInVzZUV2ZW50IiwidXNlVCIsIk9wdGlvbkl0ZW0iLCJFZGl0UXVlc3Rpb25Nb2RhbCIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJFcnJvckljb24iLCJ1c2VVc2VyIiwiRmVlZGJhY2tCdXR0b24iLCJ1c2VHbG9iYWxDb250ZXh0IiwiZmV0Y2hNYWlhIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJtYXBDT1JMYW5nIiwiZm9ybWF0Q2hhdExpc3RUaXRsZU1lbnRpb25zIiwiZ2V0QWdlbnREaXNwbGF5TmFtZSIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IiwiQVBQQ1VFU19FVkVOVFMiLCJBUFBDVUVTX1NFTEVDVE9SUyIsInRyYWNrQXBwY3Vlc0V2ZW50IiwiZm9ybWF0VW5yZWFkQ291bnQiLCJTZXNzaW9uR2VuZXJhdGluZ0RvdCIsInVzZUlzU2Vzc2lvbkdlbmVyYXRpbmciLCJ1c2VTZXNzaW9uTWV0YSIsInVzZU1haWFUYXNrUGFuZWxaSW5kZXgiLCJTQ0xIQ1dyYXBwZXIiLCJTQ0xIQ1dyYXBwZXJBZ2VudCIsIlNDTEhDV3JhcHBlckFnZW50VGV4dCIsIlNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMiLCJTQ0xIQ1dyYXBwZXJDb250ZW50IiwiU0NMSENXcmFwcGVyVGl0bGUiLCJTQ0xIQ1dyYXBwZXJUaXRsZVJvdyIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJTQ1NXcmFwcGVyQWdlbnRzTmF2SWNvbiIsIlNDU1NpZGViYXJSb290IiwiU0NTU2lkZWJhclRvb2xiYXIiLCJTQ1NTaWRlYmFyQm9keSIsIlNDU1NpZGViYXJPcGVuUGFuZWwiLCJTQ1NTaWRlYmFyQWdlbnRzQmxvY2siLCJTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucyIsIlNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uIiwiU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCIsIlNDU1NpZGViYXJNYWlha2VyTmF2QmFkZ2VOZXciLCJTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmciLCJTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmdSb3ciLCJTQ1NTaWRlYmFyVW5yZWFkQW5jaG9yIiwiU0NTU2lkZWJhclVucmVhZENvdW50IiwiU0NTU2lkZWJhckNoYXRzU2Nyb2xsIiwiU0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4iLCJTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCIsIlNDU1NpZGViYXJFcnJvckJhbm5lciIsIlNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwIiwiU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSIsIlNDU1NpZGViYXJMb2FkaW5nQXJlYSIsIlNDU1NpZGViYXJMb2FkTW9yZVJvdyIsIlNDU1NpZGViYXJFbXB0eUNoYXRzIiwiU0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0IiwiU0NTU2lkZWJhckNoYXRzRm9vdGVyIiwiU0NTU2lkZWJhckZvb3RlckFjdGlvbnMiLCJTQ1NTaWRlYmFyQ29sbGFwc2VkRGl2aWRlciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImFjdGlvbnMiLCJlZGl0IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiZGVsZXRlIiwiYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZSIsImFnZW50TmFtZSIsInJlcGxhY2UiLCJMaXN0SGlzdG9yeUNoYXQiLCJfcmVmIiwiY2hhdCIsIm9uQ2xpY2siLCJpc01vZGFsT3BlbiIsIm9uT3Blbk1vZGFsIiwib25DbG9zZU1vZGFsIiwiaGFuZGxlcnMiLCJpc1NlbGVjdGVkIiwiaW5kZXgiLCJ0b29sdGlwWkluZGV4IiwidGV4dFJlZiIsImFnZW50UmVmIiwiZGlzcGxheVRpdGxlIiwidGl0bGUiLCJkaXNwbGF5QWdlbnQiLCJhZ2VudFR5cGUiLCJhZ2VudCIsImNvbnRleHROYW1lIiwicHJvamVjdE5hbWUiLCJjbGllbnROYW1lIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwic2hvd1Rvb2x0aXAiLCJfdXNlUmVzaXplTGlzdGVuZXIyIiwic2hvd1Rvb2x0aXBBZ2VudCIsIl91c2VUIiwidCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImFjdGlvbiIsInNldEFjdGlvbiIsImlzR2VuZXJhdGluZyIsInNlc3Npb25FeHRlcm5hbElkIiwic2Vzc2lvbk1ldGEiLCJpc1VucmVhZCIsImlzUmVhZCIsIm1lbnVJdGVtcyIsImxhYmVsIiwib25DbGlja0l0ZW0iLCJjaGF0SWQiLCJJY29uIiwiZXZlbnRLZXkiLCJwbUFpTWVudUVkaXQiLCJwbUFpTWVudURlbGV0ZSIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJjaGF0RGF0YSIsImhhbmRsZVVwZGF0ZUNoYXQiLCJoYW5kbGVEZWxldGVDaGF0IiwiY2hpbGRyZW4iLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiJGluZGV4IiwiYXJpYUxhYmVsIiwiaXNXcml0aW5nIiwiYW5pbWF0ZWQiLCJ6SW5kZXgiLCJyZWYiLCIkdW5yZWFkIiwiY29uY2F0Iiwid2lkdGgiLCJoZWlnaHQiLCJzdHlsZSIsImZvbnRTaXplIiwiZW1vamkiLCJpY29uT25seSIsInNpemUiLCJ2YXJpYW50IiwiZXZlbnQiLCJpZCIsInBvc2l0aW9uIiwidG9wIiwicmlnaHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsIm1pbldpZHRoIiwibWFwIiwiX3JlZjIiLCJvbkNsb3NlIiwiaGFuZGxlU2V0SXNPcGVuTW9kYWwiLCJTaWRlYmFyIiwiX3JlZjMiLCJfdXNlciRwZXJtaXNzaW9ucyIsIm9uR29Ub0NoYXQiLCJfcmVmMyRvbkVycm9yIiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlU3RhcnROZXdDaGF0IiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiaGFuZGxlT3BlblNraWxscyIsInNob3dOZXdDaGF0IiwicmVmZXRjaENoYXRzIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwiaGFzRXJyb3IiLCJyZXNldFNlbGVjdGVkQ2hhdFJlZiIsIl9yZWYzJGFnZW50c05hdkFjdGl2ZSIsImFnZW50c05hdkFjdGl2ZSIsIl9yZWYzJGlzTGVnYWN5Q29udGV4dCIsImlzTGVnYWN5Q29udGV4dFNlc3Npb24iLCJfdXNlVDIiLCJpMThuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3Blbk1vZGFsIiwic2V0SXNPcGVuTW9kYWwiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsImNoYXRzQ29udGFpbmVyUmVmIiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RlZEFnZW50Iiwic2VsZWN0QWdlbnQiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50Iiwic2V0VGFzayIsIl91c2VDaGF0cyIsImxvYWRpbmdDaGF0cyIsImNoYXRzIiwiZGVsZXRlQ2hhdCIsInVwZGF0ZUNoYXQiLCJmZXRjaENoYXRzIiwibGltaXQiLCJvZmZzZXQiLCJoYXNNb3JlQ2hhdHMiLCJsb2FkTW9yZUNoYXRzIiwiaXNMb2FkaW5nTW9yZUNoYXRzIiwidW5yZWFkQ291bnQiLCJzZXRVbnJlYWRDb3VudCIsInNldENoYXRSZWFkU3RhdGUiLCJ1bnJlYWRTdWJzY3JpYmVkUmVmIiwiJF9zYyIsInVuZGVmaW5lZCIsImNoYW5uZWwiLCJoYW5kbGVVbnJlYWRFdmVudCIsIl9yZWY0IiwibW9kZWxEYXRhIiwibW9kZWxfZGF0YSIsInVucmVhZF9jb3VudCIsInNlc3Npb25faWQiLCJpc19yZWFkIiwic3Vic2NyaWJlSGFuZGxlciIsImN1cnJlbnQiLCJfJF9zYyRhY3Rpb25UeXBlIiwiXyRfc2MkY2hhbm5lbFR5cGUiLCJ1cGRhdGVDb25uZWN0aW9uTW9kZWwiLCJtb2RlbF9oYXNoIiwiYWN0aW9uVHlwZSIsIlNVQlNDUklCRSIsImNoYW5uZWxUeXBlIiwiTU9ERUxfQ0hBTk5FTCIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY2FuQ3JlYXRlQWdlbnRzIiwiY3JlYXRlIiwiaGFzTXVsdGlBZ2VudHNGZWF0dXJlQWNjZXNzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImNhblZpZXdBZ2VudHMiLCJ2aWV3IiwiY2FuVmlld1NraWxscyIsInNob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24iLCJhZ2VudE5hdkJ1dHRvbkNvdW50Iiwic2hvd0FnZW50c05hdkJsb2NrIiwibXlBZ2VudHNTaWRlYmFyVHJhY2tlZFJlZiIsIm1haWFTaWRlYmFyTXlBZ2VudHMiLCJoYW5kbGVTZWxlY3RTZXNzaW9uIiwiZXZ0IiwiX2RldGFpbCIsIl9yZWY1IiwiZGV0YWlsIiwic2Vzc2lvbklkIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9yZWY2IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlT3Blbk1vZGFsIiwiaGFuZGxlQ2xvc2VNb2RhbCIsImhhbmRsZUNsaWNrT3V0c2lkZSIsInRhcmdldCIsImNsb3Nlc3QiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiYWlDaGF0U2lkZWJhciIsImhhbmRsZU9wZW5DcmVhdGVBZ2VudCIsIl9yZWY3IiwiX2NhbGxlZTIiLCJyZXNwb25zZSIsImRhdGEiLCJtYWlha2VyQWdlbnQiLCJfdCIsIl9jb250ZXh0MiIsInBhdGgiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiZmluZCIsImFnZW50SXRlbSIsImFicnVwdCIsImhhbmRsZVNjcm9sbCIsIl9jaGF0c0NvbnRhaW5lclJlZiRjdSIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImlzQXRCb3R0b20iLCJjb250YWluZXIiLCJoYW5kbGVOZXdDaGF0IiwiYWlTaWRlYmFyTmV3Q2hhdCIsImhhbmRsZVJlZmV0Y2hTZXNzaW9uIiwiYmFja2dyb3VuZCIsImlzQWdlbnRzSHViU2VjdGlvbiIsInNob3dOZXdDaGF0QnV0dG9uIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsIiRpc09wZW4iLCJjb2xvciIsIiRmbG9hdGluZyIsIiRhY3RpdmUiLCJhaUNoYXRNcE9wZW4iLCJhaVNpZGViYXJNeUFnZW50cyIsInR5cGUiLCIkaGFzQ2hhdHMiLCJsZW5ndGgiLCIkb2Zmc2V0VmFyaWFudCIsIiRhZ2VudE5hdkJ1dHRvbkNvdW50IiwiY291bnQiLCIkanVzdGlmeUJldHdlZW4iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvU2lkZWJhci9TaWRlYmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgTXV0YWJsZVJlZk9iamVjdCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uRG91YmxlTGVmdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3VibGVMZWZ0J1xuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0hpc3RvcnknXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IE1lbnVEb3RzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTWVudURvdHMnXG5pbXBvcnQgeyBQZW5jaWwgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QZW5jaWwnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7IEVtcHR5SGlzdG9yeUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FbXB0eUhpc3RvcnknXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IHVzZUNoYXRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdHMnXG5pbXBvcnQgeyBTaWRlYmFyQ2hhdHNTa2VsZXRvbiB9IGZyb20gJy4vU2lkZWJhci5za2VsZXRvbidcbmltcG9ydCB7IEVycm9yU3RhdGUsIE1BSUFJY29uLCBNYWlhU3RvcmVJY29uLCBNeUFnZW50c05hdkljb24sIFNraWxsc05hdkljb24sIE5ld0NoYXQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgT3B0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2F0b21zL0NhcmRNZW51L0NhcmRNZW51J1xuaW1wb3J0IHsgRWRpdFF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRWRpdFF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBFcnJvckljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FcnJvckljb24nXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEZlZWRiYWNrQnV0dG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmVlZGJhY2tCdXR0b24nXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgY2FuQWNjZXNzVG9Ta2lsbHMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvcGVybWlzc2lvbnMnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcbmltcG9ydCB7IGZvcm1hdENoYXRMaXN0VGl0bGVNZW50aW9ucyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IGdldEFnZW50RGlzcGxheU5hbWUsIGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFQUENVRVNfRVZFTlRTLCBBUFBDVUVTX1NFTEVDVE9SUywgdHJhY2tBcHBjdWVzRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBjdWVzJ1xuaW1wb3J0IHsgZm9ybWF0VW5yZWFkQ291bnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9mb3JtYXRVbnJlYWRDb3VudCdcbmltcG9ydCB7IFNlc3Npb25HZW5lcmF0aW5nRG90IH0gZnJvbSAnLi4vLi4vYXRvbXMvU2Vzc2lvbkdlbmVyYXRpbmdEb3QnXG5pbXBvcnQgeyB1c2VJc1Nlc3Npb25HZW5lcmF0aW5nLCB1c2VTZXNzaW9uTWV0YSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25NZXRhJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQge1xuICBTQ0xIQ1dyYXBwZXIsXG4gIFNDTEhDV3JhcHBlckFnZW50LFxuICBTQ0xIQ1dyYXBwZXJBZ2VudFRleHQsXG4gIFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMsXG4gIFNDTEhDV3JhcHBlckNvbnRlbnQsXG4gIFNDTEhDV3JhcHBlclRpdGxlLFxuICBTQ0xIQ1dyYXBwZXJUaXRsZVJvdyxcbiAgU0NTV3JhcHBlckNvbGxhcHNlZEJ1dHRvbixcbiAgU0NTV3JhcHBlck5ld0NoYXRJY29uLFxuICBTQ1NXcmFwcGVyQWdlbnRzTmF2SWNvbixcbn0gZnJvbSAnLi9TaWRlYmFyLnN0eWxlcydcbmltcG9ydCB7XG4gIFNDU1NpZGViYXJSb290LFxuICBTQ1NTaWRlYmFyVG9vbGJhcixcbiAgU0NTU2lkZWJhckJvZHksXG4gIFNDU1NpZGViYXJPcGVuUGFuZWwsXG4gIFNDU1NpZGViYXJBZ2VudHNCbG9jayxcbiAgU0NTU2lkZWJhckFnZW50c0FjdGlvbnMsXG4gIFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkJhZGdlTmV3LFxuICBTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmcsXG4gIFNDU1NpZGViYXJDb252ZXJzYXRpb25zSGVhZGluZ1JvdyxcbiAgU0NTU2lkZWJhclVucmVhZEFuY2hvcixcbiAgU0NTU2lkZWJhclVucmVhZENvdW50LFxuICBTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwsXG4gIFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyLFxuICBTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSxcbiAgU0NTU2lkZWJhckxvYWRpbmdBcmVhLFxuICBTQ1NTaWRlYmFyTG9hZE1vcmVSb3csXG4gIFNDU1NpZGViYXJFbXB0eUNoYXRzLFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQsXG4gIFNDU1NpZGViYXJDaGF0c0Zvb3RlcixcbiAgU0NTU2lkZWJhckZvb3RlckFjdGlvbnMsXG4gIFNDU1NpZGViYXJDb2xsYXBzZWREaXZpZGVyLFxufSBmcm9tICcuL1NpZGViYXIubGF5b3V0LnN0eWxlcydcblxuY29uc3QgYWN0aW9ucyA9IHtcbiAgZWRpdDogKHByb3BzOiBhbnkpID0+IDxFZGl0UXVlc3Rpb25Nb2RhbCB7Li4ucHJvcHN9IC8+LFxuICBkZWxldGU6IChwcm9wczogYW55KSA9PiA8RGVsZXRlUXVlc3Rpb25Nb2RhbCB7Li4ucHJvcHN9IC8+LFxufVxuXG4vKiogQWJyZXZpYSBcImVzcGVjaWFsaXN0YVwiL1wiZXNwZWNpYWxpc3RcIiDihpIgXCJFc3AuXCIgKEVTL1BUKSB5IFwic3BlY2lhbGlzdFwiIOKGkiBcIlNwZWMuXCIgKEVOKSBlbiBlbCBub21icmUgZGVsIGFnZW50ZS4gKi9cbmZ1bmN0aW9uIGFiYnJldmlhdGVTcGVjaWFsaXN0SW5BZ2VudE5hbWUoYWdlbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWFnZW50TmFtZSB8fCB0eXBlb2YgYWdlbnROYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIGFnZW50TmFtZVxuICByZXR1cm4gYWdlbnROYW1lLnJlcGxhY2UoL1xcYihlc3BlY2lhbGlzdGF8ZXNwZWNpYWxpc3QpXFxiL2dpLCAnRXNwLicpLnJlcGxhY2UoL1xcYnNwZWNpYWxpc3RcXGIvZ2ksICdTcGVjLicpXG59XG5cbmNvbnN0IExpc3RIaXN0b3J5Q2hhdCA9ICh7XG4gIGNoYXQsXG4gIG9uQ2xpY2ssXG4gIGlzTW9kYWxPcGVuLFxuICBvbk9wZW5Nb2RhbCxcbiAgb25DbG9zZU1vZGFsLFxuICBoYW5kbGVycyxcbiAgaXNTZWxlY3RlZCxcbiAgaW5kZXgsXG4gIHRvb2x0aXBaSW5kZXgsXG59OiB7XG4gIGNoYXQ6IGFueVxuICBvbkNsaWNrOiAoY2hhdDogYW55KSA9PiB2b2lkXG4gIGlzTW9kYWxPcGVuOiBib29sZWFuXG4gIG9uT3Blbk1vZGFsOiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25DbG9zZU1vZGFsOiAoKSA9PiB2b2lkXG4gIGhhbmRsZXJzOiB7XG4gICAgaGFuZGxlRGVsZXRlQ2hhdDogKGNoYXQ6IGFueSkgPT4gdm9pZFxuICAgIGhhbmRsZVVwZGF0ZUNoYXQ6IChjaGF0OiBhbnkpID0+IHZvaWRcbiAgfVxuICBpc1NlbGVjdGVkOiBib29sZWFuXG4gIGluZGV4OiBudW1iZXJcbiAgdG9vbHRpcFpJbmRleDogbnVtYmVyXG59KSA9PiB7XG4gIGNvbnN0IHRleHRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGFnZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBkaXNwbGF5VGl0bGUgPSB1c2VNZW1vKCgpID0+IGZvcm1hdENoYXRMaXN0VGl0bGVNZW50aW9ucyhjaGF0LnRpdGxlKSwgW2NoYXQudGl0bGVdKVxuICBjb25zdCBkaXNwbGF5QWdlbnQgPSBnZXRBZ2VudERpc3BsYXlOYW1lKGNoYXQuYWdlbnRUeXBlLCBjaGF0LmFnZW50KVxuICBjb25zdCBjb250ZXh0TmFtZSA9IGNoYXQucHJvamVjdE5hbWUgfHwgY2hhdC5jbGllbnROYW1lXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXAgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKHRleHRSZWYsIFtkaXNwbGF5VGl0bGVdKVxuICBjb25zdCB7IHNob3dUb29sdGlwOiBzaG93VG9vbHRpcEFnZW50IH0gPSB1c2VSZXNpemVMaXN0ZW5lcihhZ2VudFJlZiwgW2NoYXQuYWdlbnRdKVxuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBbYWN0aW9uLCBzZXRBY3Rpb25dID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNHZW5lcmF0aW5nID0gdXNlSXNTZXNzaW9uR2VuZXJhdGluZyhjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICBjb25zdCBzZXNzaW9uTWV0YSA9IHVzZVNlc3Npb25NZXRhKGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQpXG4gIGNvbnN0IGlzVW5yZWFkID0gY2hhdC5pc1JlYWQgPT09IGZhbHNlICYmICFpc0dlbmVyYXRpbmdcblxuICBjb25zdCBtZW51SXRlbXMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5yZW5hbWUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdlZGl0JylcbiAgICAgICAgb25PcGVuTW9kYWwoY2hhdElkKVxuICAgICAgfSxcbiAgICAgIEljb246IFBlbmNpbCxcbiAgICAgIGV2ZW50S2V5OiBFVkVOVFMucG1BaU1lbnVFZGl0LFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5kZWxldGUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdkZWxldGUnKVxuICAgICAgICBvbk9wZW5Nb2RhbChjaGF0SWQpXG4gICAgICB9LFxuICAgICAgSWNvbjogVHJhc2gsXG4gICAgICBldmVudEtleTogRVZFTlRTLnBtQWlNZW51RGVsZXRlLFxuICAgIH0sXG4gIF1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gKGNoYXREYXRhOiBhbnkpID0+IHtcbiAgICBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZVVwZGF0ZUNoYXQoY2hhdERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZURlbGV0ZUNoYXQoY2hhdERhdGEpXG4gICAgfVxuICAgIHNldEFjdGlvbihudWxsKVxuICAgIG9uQ2xvc2VNb2RhbCgpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U0NMSENXcmFwcGVyQ29udGVudFxuICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgb25DbGljayhjaGF0KVxuICAgICAgICB9fVxuICAgICAgICBrZXk9e2Bjb252ZXJzYXRpb24tJHtjaGF0LnNlc3Npb25FeHRlcm5hbElkfWB9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc01vZGFsT3Blbn1cbiAgICAgICAgaXNTZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgJGluZGV4PXtpbmRleH1cbiAgICAgID5cbiAgICAgICAgPFNDTEhDV3JhcHBlcj5cbiAgICAgICAgICA8U0NMSENXcmFwcGVyVGl0bGVSb3c+XG4gICAgICAgICAgICB7aXNHZW5lcmF0aW5nIHx8IGlzVW5yZWFkID8gKFxuICAgICAgICAgICAgICA8U2Vzc2lvbkdlbmVyYXRpbmdEb3RcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw9e2lzR2VuZXJhdGluZyA/IHQoJ2NvbnZlcnNhdGlvbnMuZ2VuZXJhdGluZycpIDogdCgnY29udmVyc2F0aW9ucy51bnJlYWRMYWJlbCcpfVxuICAgICAgICAgICAgICAgIGlzV3JpdGluZz17aXNHZW5lcmF0aW5nICYmIHNlc3Npb25NZXRhPy5pc1dyaXRpbmd9XG4gICAgICAgICAgICAgICAgYW5pbWF0ZWQ9e2lzR2VuZXJhdGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Nob3dUb29sdGlwID8gZGlzcGxheVRpdGxlIDogJyd9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJUaXRsZSByZWY9e3RleHRSZWZ9ICR1bnJlYWQ9e2lzVW5yZWFkfT5cbiAgICAgICAgICAgICAgICB7ZGlzcGxheVRpdGxlIHx8IHQoJ2NvbnZlcnNhdGlvbnMuZW1wdHlMYWJlbCcpfVxuICAgICAgICAgICAgICA8L1NDTEhDV3JhcHBlclRpdGxlPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvU0NMSENXcmFwcGVyVGl0bGVSb3c+XG4gICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgIHRpdGxlPXtzaG93VG9vbHRpcEFnZW50ID8gZGlzcGxheUFnZW50ICsgKGNvbnRleHROYW1lID8gYCAtICR7Y29udGV4dE5hbWV9YCA6ICcnKSA6ICcnfVxuICAgICAgICAgICAgekluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJBZ2VudD5cbiAgICAgICAgICAgICAge2NoYXQuYWdlbnRUeXBlID09PSAnY2xvbmUnIHx8IGNoYXQuYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJyA/IChcbiAgICAgICAgICAgICAgICA8TUFJQUljb24gd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcgfX0+e2NoYXQuZW1vaml9PC9zcGFuPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJBZ2VudFRleHQgcmVmPXthZ2VudFJlZn0+XG4gICAgICAgICAgICAgICAge2NoYXQuYWdlbnRUeXBlID09PSAnY2xvbmUnIHx8IGNoYXQuYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuICAgICAgICAgICAgICAgICAgPyBhYmJyZXZpYXRlU3BlY2lhbGlzdEluQWdlbnROYW1lKGNoYXQuYWdlbnQpXG4gICAgICAgICAgICAgICAgICA6IGNoYXQuYWdlbnR9XG4gICAgICAgICAgICAgICAge2NoYXQucHJvamVjdE5hbWUgJiYgYCAtICR7Y2hhdC5wcm9qZWN0TmFtZX1gfVxuICAgICAgICAgICAgICA8L1NDTEhDV3JhcHBlckFnZW50VGV4dD5cbiAgICAgICAgICAgIDwvU0NMSENXcmFwcGVyQWdlbnQ+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1NDTEhDV3JhcHBlcj5cbiAgICAgICAgPFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnM+XG4gICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICBpY29uT25seVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgb25PcGVuTW9kYWwoY2hhdC5pZClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1lbnVEb3RzIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgIHtpc01vZGFsT3BlbiAmJiAhYWN0aW9uICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS1tb2RhbC1jb250YWluZXJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0b3A6ICczMnB4JyxcbiAgICAgICAgICAgICAgICByaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDAsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjI0LCAyMjQsIDIyNCwgMSknLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTI0cHgnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVudUl0ZW1zLm1hcCgoeyBsYWJlbCwgb25DbGlja0l0ZW0sIEljb24sIGV2ZW50S2V5IH0pID0+IChcbiAgICAgICAgICAgICAgICA8T3B0aW9uSXRlbVxuICAgICAgICAgICAgICAgICAga2V5PXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xpY2tJdGVtKGNoYXQuaWQpfVxuICAgICAgICAgICAgICAgICAgSWNvbj17SWNvbn1cbiAgICAgICAgICAgICAgICAgIGV2ZW50S2V5PXtldmVudEtleX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucz5cbiAgICAgIDwvU0NMSENXcmFwcGVyQ29udGVudD5cbiAgICAgIHshIWFjdGlvbiAmJlxuICAgICAgICBhY3Rpb25zW2FjdGlvbl0oe1xuICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgIG9uQ2xvc2VNb2RhbCgpXG4gICAgICAgICAgICBzZXRBY3Rpb24obnVsbClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYXQsXG4gICAgICAgICAgaGFuZGxlcnM6IHtcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb24sXG4gICAgICAgICAgICBoYW5kbGVTZXRJc09wZW5Nb2RhbDogb25DbG9zZU1vZGFsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pfVxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBTaWRlYmFyID0gKHtcbiAgb25Hb1RvQ2hhdCxcbiAgb25FcnJvciA9ICgpID0+IG51bGwsXG4gIGhhbmRsZUdvVG9Ib21lLFxuICBoYW5kbGVTdGFydE5ld0NoYXQsXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZSxcbiAgaGFuZGxlT3BlblNraWxscyxcbiAgc2hvd05ld0NoYXQsXG4gIHJlZmV0Y2hDaGF0cyxcbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzLFxuICBoYXNFcnJvcixcbiAgcmVzZXRTZWxlY3RlZENoYXRSZWYsXG4gIGFnZW50c05hdkFjdGl2ZSA9IG51bGwsXG4gIGlzTGVnYWN5Q29udGV4dFNlc3Npb24gPSBmYWxzZSxcbn06IHtcbiAgb25Hb1RvQ2hhdDogKGNoYXRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgaGFuZGxlR29Ub0hvbWU6ICgpID0+IHZvaWRcbiAgLyoqIEluaWNpYSB1biBjaGF0IG51ZXZvOyBlbiBNaXMgYWdlbnRlcyAvIENyZWFkb3IgZGUgYWdlbnRlcyB1c2EgZWwgcHJpbWVyIGFnZW50ZSBkZSBsYSBsaXN0YS4gKi9cbiAgaGFuZGxlU3RhcnROZXdDaGF0PzogKCkgPT4gdm9pZFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2U6ICgpID0+IHZvaWRcbiAgaGFuZGxlT3BlblNraWxsczogKCkgPT4gdm9pZFxuICBzaG93TmV3Q2hhdDogYm9vbGVhblxuICByZWZldGNoQ2hhdHM6IGJvb2xlYW5cbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzOiAocmVmZXRjaDogYm9vbGVhbikgPT4gdm9pZFxuICBoYXNFcnJvcjogYm9vbGVhblxuICByZXNldFNlbGVjdGVkQ2hhdFJlZj86IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgbnVsbD5cbiAgLyoqIFJlc2FsdGEgTWFpYWtlciwgTWlzIGFnZW50ZXMgbyBNaXMgc2tpbGxzICovXG4gIGFnZW50c05hdkFjdGl2ZT86ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCAnbXlTa2lsbHMnIHwgbnVsbFxuICAvKiogQ29udmVyc2FjacOzbiBkZSB1biBjbG9uZSBsZWdhY3kgKGFnZW50X3R5cGUgY2xvbmUgKyBlbnRpdHkgcHJvamVjdC9jbGllbnQvdGFzayk6IG9jdWx0YSBcIm51ZXZvIGNoYXRcIi4gKi9cbiAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj86IGJvb2xlYW5cbn0pID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUKClcbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc09wZW5Nb2RhbCwgc2V0SXNPcGVuTW9kYWxdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkQ2hhdCwgc2V0U2VsZWN0ZWRDaGF0XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNoYXRzRmV0Y2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgY2hhdHNDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgYWdlbnQ6IHNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldFRhc2sgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7XG4gICAgbG9hZGluZ0NoYXRzLFxuICAgIGNoYXRzLFxuICAgIGRlbGV0ZUNoYXQsXG4gICAgdXBkYXRlQ2hhdCxcbiAgICBmZXRjaENoYXRzLFxuICAgIGxpbWl0LFxuICAgIG9mZnNldCxcbiAgICBoYXNNb3JlQ2hhdHMsXG4gICAgbG9hZE1vcmVDaGF0cyxcbiAgICBpc0xvYWRpbmdNb3JlQ2hhdHMsXG4gICAgdW5yZWFkQ291bnQsXG4gICAgc2V0VW5yZWFkQ291bnQsXG4gICAgc2V0Q2hhdFJlYWRTdGF0ZSxcbiAgfSA9IHVzZUNoYXRzKHtcbiAgICBvbkVycm9yLFxuICB9KVxuXG4gIGNvbnN0IHVucmVhZFN1YnNjcmliZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXVzZXI/LmlkIHx8IHR5cGVvZiAkX3NjID09PSAndW5kZWZpbmVkJyB8fCAhJF9zYykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgY2hhbm5lbCA9IGBzZXNzaW9ucy51bnJlYWQ6JHt1c2VyLmlkfWBcbiAgICBjb25zdCBoYW5kbGVVbnJlYWRFdmVudCA9ICh7XG4gICAgICBtb2RlbF9kYXRhOiBtb2RlbERhdGEsXG4gICAgfToge1xuICAgICAgbW9kZWxfZGF0YT86IHsgdW5yZWFkX2NvdW50PzogbnVtYmVyOyBzZXNzaW9uX2lkPzogc3RyaW5nOyBpc19yZWFkPzogYm9vbGVhbiB9XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBtb2RlbERhdGE/LnVucmVhZF9jb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VW5yZWFkQ291bnQobW9kZWxEYXRhLnVucmVhZF9jb3VudClcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbERhdGE/LnNlc3Npb25faWQgJiYgdHlwZW9mIG1vZGVsRGF0YT8uaXNfcmVhZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHNldENoYXRSZWFkU3RhdGUobW9kZWxEYXRhLnNlc3Npb25faWQsIG1vZGVsRGF0YS5pc19yZWFkKVxuICAgICAgfVxuICAgIH1cblxuICAgICRfc2Muc3Vic2NyaWJlSGFuZGxlcihjaGFubmVsLCBoYW5kbGVVbnJlYWRFdmVudClcblxuICAgIGlmICghdW5yZWFkU3Vic2NyaWJlZFJlZi5jdXJyZW50KSB7XG4gICAgICAkX3NjLnVwZGF0ZUNvbm5lY3Rpb25Nb2RlbChcbiAgICAgICAge1xuICAgICAgICAgIG1vZGVsX2hhc2g6IGNoYW5uZWwsXG4gICAgICAgICAgYWN0aW9uOiAkX3NjLmFjdGlvblR5cGU/LlNVQlNDUklCRSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgdXNlcixcbiAgICAgICAgdXNlcixcbiAgICAgICAgJF9zYy5jaGFubmVsVHlwZT8uTU9ERUxfQ0hBTk5FTFxuICAgICAgKVxuICAgICAgdW5yZWFkU3Vic2NyaWJlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSwgW3VzZXIsIHNldFVucmVhZENvdW50LCBzZXRDaGF0UmVhZFN0YXRlXSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZUFnZW50cyA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGVcbiAgY29uc3QgaGFzTXVsdGlBZ2VudHNGZWF0dXJlQWNjZXNzID0gISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5WaWV3QWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiYgaGFzTXVsdGlBZ2VudHNGZWF0dXJlQWNjZXNzXG4gIGNvbnN0IGNhblZpZXdTa2lsbHMgPSBjYW5BY2Nlc3NUb1NraWxscyh1c2VyKVxuICBjb25zdCBzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uID0gISFjYW5DcmVhdGVBZ2VudHMgJiYgaGFzTXVsdGlBZ2VudHNGZWF0dXJlQWNjZXNzXG4gIGNvbnN0IGFnZW50TmF2QnV0dG9uQ291bnQgPSAoKHNob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAxIDogMCkgK1xuICAgIChjYW5WaWV3QWdlbnRzID8gMSA6IDApICtcbiAgICAoY2FuVmlld1NraWxscyA/IDEgOiAwKSkgYXMgMCB8IDEgfCAyIHwgM1xuICBjb25zdCBzaG93QWdlbnRzTmF2QmxvY2sgPSBzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uIHx8IGNhblZpZXdBZ2VudHMgfHwgY2FuVmlld1NraWxsc1xuICBjb25zdCBteUFnZW50c1NpZGViYXJUcmFja2VkUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjYW5WaWV3QWdlbnRzIHx8IG15QWdlbnRzU2lkZWJhclRyYWNrZWRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBteUFnZW50c1NpZGViYXJUcmFja2VkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgdHJhY2tBcHBjdWVzRXZlbnQoQVBQQ1VFU19FVkVOVFMubWFpYVNpZGViYXJNeUFnZW50cylcbiAgfSwgW2NhblZpZXdBZ2VudHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50ID0gKCkgPT4gc2V0U2VsZWN0ZWRDaGF0KG51bGwpXG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYpIHtcbiAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyZXNldFNlbGVjdGVkQ2hhdFJlZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZWxlY3RTZXNzaW9uID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkIH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgc2Vzc2lvbklkPzogc3RyaW5nIH0+KS5kZXRhaWwgPz8ge31cbiAgICAgIGlmIChzZXNzaW9uSWQpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRDaGF0KHNlc3Npb25JZClcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2lkZWJhci1zZWxlY3Qtc2Vzc2lvbicsIGhhbmRsZVNlbGVjdFNlc3Npb24pXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NpZGViYXItc2VsZWN0LXNlc3Npb24nLCBoYW5kbGVTZWxlY3RTZXNzaW9uKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQ2hhdCA9IGFzeW5jIChjaGF0OiBhbnkpID0+IHtcbiAgICBkZWxldGVDaGF0KGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVVcGRhdGVDaGF0ID0gKGNoYXQ6IGFueSkgPT4ge1xuICAgIHVwZGF0ZUNoYXQoY2hhdClcbiAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT3Blbk1vZGFsID0gKGNoYXRJZDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzT3Blbk1vZGFsICYmIGlzT3Blbk1vZGFsICE9PSBjaGF0SWQpIHtcbiAgICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldElzT3Blbk1vZGFsKGNoYXRJZClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZU1vZGFsID0gKCkgPT4ge1xuICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGlzT3Blbk1vZGFsICYmICEoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoJ1tkYXRhLW1vZGFsLWNvbnRhaW5lcl0nKSkge1xuICAgICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuICB9LCBbaXNPcGVuTW9kYWxdKVxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVNpZGViYXIgPSAoKSA9PiB7XG4gICAgaWYgKGlzT3Blbk1vZGFsKSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgIH1cbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U2lkZWJhciwgeyBhY3Rpb246IGlzT3BlbiA/ICdjbG9zZScgOiAnb3BlbicgfSlcbiAgICBzZXRJc09wZW4ocHJldiA9PiAhcHJldilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5DcmVhdGVBZ2VudCA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgIGNvbnN0IG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGFnZW50SXRlbTogeyB0eXBlPzogc3RyaW5nOyBlbnRpdHk/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnRJdGVtKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIC8vIGhhbmRsZUdvVG9Ib21lIHB1ZWRlIHJlc2VsZWNjaW9uYXIgYWdlbnRzLmRhdGFbMF0gc2kgZWwgYWdlbnRlIGdsb2JhbCBhdW4gZXN0YSBlbiBudWxsXG4gICAgICAvLyAoY2xvc3VyZSBzdGFsZSBkZSBsYSBzZWNjaW9uIFwiTWlzIGFnZW50ZXNcIiksIHBvciBlc28gc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KSB2YSBkZXNwdWVzLlxuICAgICAgaGFuZGxlR29Ub0hvbWUoKVxuICAgICAgc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKClcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0LCBvZmZzZXQgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyBSZWZldGNoIHNvbGljaXRhZG8gcG9yIHByb3A6IHNlIGVqZWN1dGEgYXVucXVlIGVsIHNpZGViYXIgZXN0w6kgY29sYXBzYWRvLlxuICAgIGlmIChyZWZldGNoQ2hhdHMpIHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0IH0pXG4gICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHMoZmFsc2UpXG4gICAgfVxuICB9LCBbcmVmZXRjaENoYXRzLCBoYW5kbGVTZXRSZWZldGNoQ2hhdHMsIGZldGNoQ2hhdHMsIGxpbWl0LCBvZmZzZXRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgaWYgKCFjaGF0c0NvbnRhaW5lclJlZi5jdXJyZW50IHx8ICFoYXNNb3JlQ2hhdHMgfHwgaXNMb2FkaW5nTW9yZUNoYXRzIHx8IGhhc0Vycm9yKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNoYXRzQ29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMTBcblxuICAgICAgaWYgKGlzQXRCb3R0b20pIHtcbiAgICAgICAgbG9hZE1vcmVDaGF0cygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdHNDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtoYXNNb3JlQ2hhdHMsIGlzTG9hZGluZ01vcmVDaGF0cywgbG9hZE1vcmVDaGF0cywgaGFzRXJyb3JdKVxuXG4gIGNvbnN0IGhhbmRsZU5ld0NoYXQgPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpU2lkZWJhck5ld0NoYXQpXG4gICAgaWYgKGlzT3Blbk1vZGFsKSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgIH1cbiAgICBzZXRTZWxlY3RlZENoYXQobnVsbClcbiAgICBpZiAoaGFuZGxlU3RhcnROZXdDaGF0KSB7XG4gICAgICBoYW5kbGVTdGFydE5ld0NoYXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGhhbmRsZUdvVG9Ib21lKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gQWwgY3JlYXIvYWN0dWFsaXphciB1bmEgY29udmVyc2FjacOzbiByZWZyZXNjYW1vcyBsYSBsaXN0YSBhdW5xdWUgZWwgc2lkZWJhciBlc3TDqSBjb2xhcHNhZG8uXG4gICAgY29uc3QgaGFuZGxlUmVmZXRjaFNlc3Npb24gPSAoKSA9PiB7XG4gICAgICBjaGF0c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogMjAsIG9mZnNldDogMCwgYmFja2dyb3VuZDogdHJ1ZSB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbZmV0Y2hDaGF0c10pXG5cbiAgY29uc3QgaXNBZ2VudHNIdWJTZWN0aW9uID0gc2hvd05ld0NoYXQgJiYgKGFnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJyB8fCBhZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJylcblxuICBjb25zdCBzaG93TmV3Q2hhdEJ1dHRvbiA9XG4gICAgaXNBZ2VudHNIdWJTZWN0aW9uIHx8XG4gICAgKCFzaG93TmV3Q2hhdCAmJlxuICAgICAgIWhhc0Vycm9yICYmXG4gICAgICAhbG9hZGluZ0NoYXRzICYmXG4gICAgICAhaXNMZWdhY3lDb250ZXh0U2Vzc2lvbiAmJlxuICAgICAgKCh1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzKSB8fFxuICAgICAgICAoIXVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgICAgICFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkICYmXG4gICAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpKSlcblxuICByZXR1cm4gKFxuICAgIDxTQ1NTaWRlYmFyUm9vdCAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgPFNDU1NpZGViYXJUb29sYmFyICRpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIDxUb29sdGlwIHRpdGxlPXtpc09wZW4gPyB0KCdjb252ZXJzYXRpb25zLmNvbGxhcHNlJykgOiB0KCdoaXN0b3J5LnRvb2x0aXAnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICA8U0NTV3JhcHBlckNvbGxhcHNlZEJ1dHRvbiBvbkNsaWNrPXtoYW5kbGVUb2dnbGVTaWRlYmFyfSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgICAgICB7aXNPcGVuID8gKFxuICAgICAgICAgICAgICA8Q2hldnJvbkRvdWJsZUxlZnQgY29sb3I9XCJyZ2JhKDEwMiwgMTAyLCAxMDIsIDEpXCIgd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFNDU1NpZGViYXJVbnJlYWRBbmNob3I+XG4gICAgICAgICAgICAgICAgPEhpc3RvcnkgY29sb3I9XCJyZ2JhKDEzLCAxMywgMTMsIDEpXCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgIHt1bnJlYWRDb3VudCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhclVucmVhZENvdW50ICRmbG9hdGluZyBhcmlhLWxhYmVsPXt0KCdjb252ZXJzYXRpb25zLnVucmVhZExhYmVsJyl9PlxuICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0VW5yZWFkQ291bnQodW5yZWFkQ291bnQpfVxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyVW5yZWFkQ291bnQ+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvU0NTU2lkZWJhclVucmVhZEFuY2hvcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIHtzaG93TmV3Q2hhdEJ1dHRvbiA/IChcbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY29udmVyc2F0aW9ucy5uZXdDaGF0Jyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICA8U0NTV3JhcHBlck5ld0NoYXRJY29uIG9uQ2xpY2s9e2hhbmRsZU5ld0NoYXR9PlxuICAgICAgICAgICAgICA8TmV3Q2hhdCB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgICA8L1NDU1dyYXBwZXJOZXdDaGF0SWNvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IWlzT3BlbiAmJiBzaG93QWdlbnRzTmF2QmxvY2sgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ29sbGFwc2VkRGl2aWRlciAvPlxuICAgICAgICAgICAge3Nob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAoXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjb252ZXJzYXRpb25zLm1haWFrZXJOYXYnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICA8U0NTV3JhcHBlckFnZW50c05hdkljb25cbiAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2FnZW50c05hdkFjdGl2ZSA9PT0gJ21haWFrZXInfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0TXBPcGVuKVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQoKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8TWFpYVN0b3JlSWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICA8L1NDU1dyYXBwZXJBZ2VudHNOYXZJY29uPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtjYW5WaWV3QWdlbnRzID8gKFxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY29udmVyc2F0aW9ucy5teUFnZW50c05hdicpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgIDxTQ1NXcmFwcGVyQWdlbnRzTmF2SWNvblxuICAgICAgICAgICAgICAgICAgJGFjdGl2ZT17YWdlbnRzTmF2QWN0aXZlID09PSAnbXlBZ2VudHMnfVxuICAgICAgICAgICAgICAgICAgZGF0YS1hcHBjdWVzPXtBUFBDVUVTX1NFTEVDVE9SUy5tYWlhU2lkZWJhck15QWdlbnRzfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlTaWRlYmFyTXlBZ2VudHMpXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZSgpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxNeUFnZW50c05hdkljb24gc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICAgICAgPC9TQ1NXcmFwcGVyQWdlbnRzTmF2SWNvbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7Y2FuVmlld1NraWxscyA/IChcbiAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NvbnZlcnNhdGlvbnMubXlTa2lsbHNOYXYnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICA8U0NTV3JhcHBlckFnZW50c05hdkljb24gJGFjdGl2ZT17YWdlbnRzTmF2QWN0aXZlID09PSAnbXlTa2lsbHMnfSBvbkNsaWNrPXtoYW5kbGVPcGVuU2tpbGxzfT5cbiAgICAgICAgICAgICAgICAgIDxTa2lsbHNOYXZJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgIDwvU0NTV3JhcHBlckFnZW50c05hdkljb24+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NTU2lkZWJhclRvb2xiYXI+XG4gICAgICA8U0NTU2lkZWJhckJvZHkgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2lzT3BlbiA/IChcbiAgICAgICAgICA8U0NTU2lkZWJhck9wZW5QYW5lbD5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQWdlbnRzQmxvY2s+XG4gICAgICAgICAgICAgIHtzaG93QWdlbnRzTmF2QmxvY2sgPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAge3Nob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRNcE9wZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQoKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZT17YWdlbnRzTmF2QWN0aXZlID09PSAnbWFpYWtlcid9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8TWFpYVN0b3JlSWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD57dCgnY29udmVyc2F0aW9ucy5tYWlha2VyTmF2Jyl9PC9TQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICB7Y2FuVmlld0FnZW50cyA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1hcHBjdWVzPXtBUFBDVUVTX1NFTEVDVE9SUy5tYWlhU2lkZWJhck15QWdlbnRzfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haVNpZGViYXJNeUFnZW50cylcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZSgpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cyd9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8TXlBZ2VudHNOYXZJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm15QWdlbnRzTmF2Jyl9PC9TQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICB7Y2FuVmlld1NraWxscyA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlT3BlblNraWxsc31cbiAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdteVNraWxscyd9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U2tpbGxzTmF2SWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD57dCgnY29udmVyc2F0aW9ucy5teVNraWxsc05hdicpfTwvU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZCYWRnZU5ldz57dCgnaG9tZU1lbnUubWFpYWtlci5iYWRnZU5ldycpfTwvU0NTU2lkZWJhck1haWFrZXJOYXZCYWRnZU5ldz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0FjdGlvbnM+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8U0NTU2lkZWJhckNvbnZlcnNhdGlvbnNIZWFkaW5nUm93PlxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmc+e3QoJ2NvbnZlcnNhdGlvbnMudGl0bGUnKX08L1NDU1NpZGViYXJDb252ZXJzYXRpb25zSGVhZGluZz5cbiAgICAgICAgICAgICAgICB7dW5yZWFkQ291bnQgPiAwID8gKFxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJVbnJlYWRDb3VudCBhcmlhLWxhYmVsPXt0KCdjb252ZXJzYXRpb25zLnVucmVhZExhYmVsJyl9PlxuICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0VW5yZWFkQ291bnQodW5yZWFkQ291bnQpfVxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyVW5yZWFkQ291bnQ+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvU0NTU2lkZWJhckNvbnZlcnNhdGlvbnNIZWFkaW5nUm93PlxuICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzQmxvY2s+XG4gICAgICAgICAgICA8U0NTU2lkZWJhckNoYXRzU2Nyb2xsXG4gICAgICAgICAgICAgIHJlZj17Y2hhdHNDb250YWluZXJSZWZ9XG4gICAgICAgICAgICAgICRoYXNDaGF0cz17Y2hhdHMubGVuZ3RoID4gMH1cbiAgICAgICAgICAgICAgJG9mZnNldFZhcmlhbnQ9e2hhc0Vycm9yID8gJ2Vycm9yJyA6ICdkZWZhdWx0J31cbiAgICAgICAgICAgICAgJGFnZW50TmF2QnV0dG9uQ291bnQ9e2FnZW50TmF2QnV0dG9uQ291bnR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiAhY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcD5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yU3RhdGUgLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT57dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfTwvU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICkgOiBsb2FkaW5nQ2hhdHMgPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJMb2FkaW5nQXJlYT5cbiAgICAgICAgICAgICAgICAgIDxTaWRlYmFyQ2hhdHNTa2VsZXRvbiAvPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckxvYWRpbmdBcmVhPlxuICAgICAgICAgICAgICApIDogY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7Y2hhdHMubWFwKChjaGF0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0SGlzdG9yeUNoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y2hhdC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXQ9e2NoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtjaGF0RGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDaGF0KGNoYXREYXRhLnNlc3Npb25FeHRlcm5hbElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkdvVG9DaGF0KGNoYXREYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTW9kYWxPcGVuPXtpc09wZW5Nb2RhbCA9PT0gY2hhdC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uT3Blbk1vZGFsPXtoYW5kbGVPcGVuTW9kYWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlTW9kYWw9e2hhbmRsZUNsb3NlTW9kYWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZWxldGVDaGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVVcGRhdGVDaGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkQ2hhdCA9PT0gY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nTW9yZUNoYXRzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8U2lkZWJhckNoYXRzU2tlbGV0b24gY291bnQ9ezJ9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckxvYWRNb3JlUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICAgICA8RW1wdHlIaXN0b3J5SWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD57dCgnY29udmVyc2F0aW9ucy5lbXB0eScpfTwvU0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0PlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c1Njcm9sbD5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ2hhdHNGb290ZXI+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPnt0KCdjb252ZXJzYXRpb25zLmVycm9yJyl9PC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgIDwvU0NTU2lkZWJhck9wZW5QYW5lbD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyAkaXNPcGVuPXtpc09wZW59ICRqdXN0aWZ5QmV0d2Vlbj17ISFzZWxlY3RlZEFnZW50fT5cbiAgICAgICAgICB7c2VsZWN0ZWRBZ2VudCA/IDxGZWVkYmFja0J1dHRvbiBzZWxlY3RlZEFnZW50PXtzZWxlY3RlZEFnZW50fSBpc09wZW49e2lzT3Blbn0gLz4gOiBudWxsfVxuICAgICAgICA8L1NDU1NpZGViYXJGb290ZXJBY3Rpb25zPlxuICAgICAgPC9TQ1NTaWRlYmFyQm9keT5cbiAgICA8L1NDU1NpZGViYXJSb290PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUEyQkEsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDOUUsU0FBU0MsaUJBQWlCLFFBQVEsb0RBQW9EO0FBQ3RGLFNBQVNDLE9BQU8sUUFBUSwwQ0FBMEM7QUFDbEUsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFTQyxRQUFRLFFBQVEsMkNBQTJDO0FBQ3BFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUU5RCxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBRXRFLFNBQVNDLGdCQUFnQixRQUFRLGdDQUFnQztBQUNqRSxTQUFTQyxpQkFBaUIsUUFBUSwwQkFBMEI7QUFDNUQsU0FBU0MsUUFBUSxRQUFRLHlCQUF5QjtBQUNsRCxTQUFTQyxvQkFBb0IsUUFBUSxvQkFBb0I7QUFDekQsU0FBU0MsVUFBVSxFQUFFQyxRQUFRLEVBQUVDLGFBQWEsRUFBRUMsZUFBZSxFQUFFQyxhQUFhLEVBQUVDLE9BQU8sUUFBUSxtQkFBbUI7QUFDaEgsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEseUJBQXlCO0FBQzFELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsVUFBVSxRQUFRLCtCQUErQjtBQUMxRCxTQUFTQyxpQkFBaUIsUUFBUSxtQ0FBbUM7QUFDckUsU0FBU0MsbUJBQW1CLFFBQVEscUNBQXFDO0FBQ3pFLFNBQVNDLFNBQVMsUUFBUSw2QkFBNkI7QUFDdkQsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxjQUFjLFFBQVEsNEJBQTRCO0FBQzNELFNBQVNDLGdCQUFn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