@projectcor/maia-components 2.44.5-0 → 2.44.5

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 (427) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +51 -5
  4. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +76 -18
  5. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +31 -3
  6. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -2
  7. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +255 -15
  8. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +34 -5
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  10. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  11. package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -4
  12. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +60 -8
  13. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +15 -3
  14. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  15. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +16 -21
  16. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +5 -7
  17. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +52 -72
  18. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +1 -6
  19. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -36
  20. package/lib/components/index.js +1 -2
  21. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +29 -5
  22. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +40 -6
  23. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +90 -18
  24. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +15 -5
  25. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  26. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -21
  27. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +47 -19
  28. package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -29
  29. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +4 -147
  30. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +108 -64
  31. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +2 -3
  32. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  33. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  34. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +86 -76
  35. package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -5
  36. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +44 -9
  37. package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
  38. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +171 -56
  39. package/lib/constants/permissions/index.js +2 -2
  40. package/lib/constants/permissions/utils.js +1 -4
  41. package/lib/dev/DevReasoningTimeline.js +37 -68
  42. package/lib/dev/Providers.js +3 -5
  43. package/lib/hooks/useChatManager/useChatManager.js +351 -76
  44. package/lib/hooks/useChatMessages/useChatMessages.js +82 -12
  45. package/lib/hooks/useClientSearch.js +32 -4
  46. package/lib/hooks/useContextMentions.js +163 -2
  47. package/lib/hooks/useContextPinPopover.js +75 -16
  48. package/lib/hooks/useEntitySearch.js +391 -38
  49. package/lib/hooks/useFrequentlyUsedActions.js +22 -60
  50. package/lib/hooks/useMentionPopover.js +35 -9
  51. package/lib/hooks/useMinimizedPillBottomOffset.js +45 -15
  52. package/lib/hooks/useProjectSearch.js +58 -4
  53. package/lib/hooks/useProjectSummaryConfig.js +52 -14
  54. package/lib/hooks/useRecentClientsSearch.js +32 -4
  55. package/lib/index.js +2 -5
  56. package/lib/lang/br/index.js +9 -26
  57. package/lib/lang/en/index.js +9 -26
  58. package/lib/lang/es/index.js +9 -26
  59. package/lib/lang/fr/index.js +9 -26
  60. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  61. package/lib/services/maia/Agents/getAgents.js +242 -78
  62. package/lib/services/maia/Orchestrator/orchestrator.js +121 -38
  63. package/lib/store/sessions/sessionNotifications.js +41 -35
  64. package/lib/store/sessions/sessionStreamManager.js +52 -40
  65. package/lib/styles/cascade.js +3 -29
  66. package/lib/styles/transitions.js +1 -3
  67. package/lib/types/agentModal.js +1 -1
  68. package/lib/types/global.d.js +1 -1
  69. package/lib/utils/hoursPlannerQuickActionType.js +1 -74
  70. package/lib/utils/imagePreprocessor.js +37 -12
  71. package/lib/utils/streamActivityMessages.js +21 -32
  72. package/package.json +1 -1
  73. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  74. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  75. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  76. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
  77. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  78. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +0 -65
  79. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
  80. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
  81. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  82. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +0 -55
  83. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
  84. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
  85. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  86. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +0 -31
  87. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
  88. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
  89. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +0 -4
  90. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  91. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  92. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  93. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  94. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  95. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  96. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  97. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  98. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
  99. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  100. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  101. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +0 -227
  102. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
  103. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  104. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +0 -31
  105. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
  106. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
  107. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  108. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  109. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  110. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  111. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  112. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  113. package/lib/components/atoms/Fade/Fade.spec.js +0 -31
  114. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  115. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  116. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  117. package/lib/components/atoms/HelpButton.spec.js +0 -87
  118. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  119. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  120. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  121. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  122. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  123. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  124. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  125. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  126. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +0 -12
  127. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
  128. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -430
  129. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +0 -50
  130. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
  131. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
  132. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
  133. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  134. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  135. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  136. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  137. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  138. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  139. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  140. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  141. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +0 -17
  142. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
  143. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
  144. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
  145. package/lib/components/atoms/PrimaryButton.spec.js +0 -42
  146. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
  147. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
  148. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
  149. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -132
  150. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -162
  151. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
  152. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
  153. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -4
  154. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +0 -10
  155. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  156. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  157. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  158. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  159. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  160. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  161. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
  162. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  163. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  164. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
  165. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  166. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  167. package/lib/components/atoms/WithAppCfg.spec.js +0 -60
  168. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +0 -37
  169. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  170. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -371
  171. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +0 -39
  172. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
  173. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
  174. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +0 -86
  175. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
  176. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
  177. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +0 -17
  178. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  179. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  180. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  181. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  182. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  183. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  184. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  185. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  186. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  187. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  188. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  189. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  190. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  191. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
  192. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
  193. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  194. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +0 -54
  195. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
  196. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -410
  197. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  198. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
  199. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
  200. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +0 -5
  201. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  202. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  203. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  204. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +0 -30
  205. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
  206. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  207. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  208. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  209. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  210. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  211. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  212. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
  213. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  214. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  215. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -355
  216. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  217. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +0 -48
  218. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
  219. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  220. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  221. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  222. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  223. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  224. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  225. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  226. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
  227. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +0 -198
  228. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -385
  229. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1125
  230. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  231. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
  232. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  233. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  234. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -231
  235. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  236. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  237. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
  238. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  239. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -267
  240. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -261
  241. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -194
  242. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -105
  243. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -73
  244. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  245. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  246. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  247. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  248. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  249. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  250. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  251. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  252. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  253. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  254. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  255. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  256. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  257. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  258. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  259. package/lib/constants/permissions/utils.spec.js +0 -128
  260. package/lib/dev/DevMaiaPage.js +0 -30
  261. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  262. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  263. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  264. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  265. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
  266. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  267. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
  268. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  269. package/lib/hooks/useCaretPosition.spec.js +0 -58
  270. package/lib/hooks/useChatManager/useChatManager.helpers.js +0 -353
  271. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
  272. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
  273. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +0 -109
  274. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
  275. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
  276. package/lib/hooks/useChats/useChats.spec.js +0 -208
  277. package/lib/hooks/useClientSearch.helpers.js +0 -36
  278. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  279. package/lib/hooks/useClientSearch.spec.js +0 -86
  280. package/lib/hooks/useContextMentions.helpers.js +0 -152
  281. package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
  282. package/lib/hooks/useContextMentions.spec.js +0 -239
  283. package/lib/hooks/useContextMentions.types.js +0 -2
  284. package/lib/hooks/useContextPinPopover.helpers.js +0 -95
  285. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
  286. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  287. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  288. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  289. package/lib/hooks/useDebounce.spec.js +0 -42
  290. package/lib/hooks/useEntitySearch.helpers.js +0 -359
  291. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
  292. package/lib/hooks/useEntitySearch.spec.js +0 -443
  293. package/lib/hooks/useEvent.spec.js +0 -45
  294. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
  295. package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
  296. package/lib/hooks/useIsMaiaPageRoute.js +0 -26
  297. package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
  298. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
  299. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
  300. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
  301. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
  302. package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
  303. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
  304. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  305. package/lib/hooks/useMentionPopover.helpers.js +0 -41
  306. package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
  307. package/lib/hooks/useMentionPopover.spec.js +0 -215
  308. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +0 -47
  309. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
  310. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
  311. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
  312. package/lib/hooks/useModal/useModal.spec.js +0 -73
  313. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
  314. package/lib/hooks/useProjectSearch.helpers.js +0 -61
  315. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
  316. package/lib/hooks/useProjectSearch.spec.js +0 -91
  317. package/lib/hooks/useProjectSummary.spec.js +0 -193
  318. package/lib/hooks/useProjectSummaryConfig.helpers.js +0 -62
  319. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
  320. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  321. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  322. package/lib/hooks/useRecentClientsSearch.helpers.js +0 -33
  323. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  324. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  325. package/lib/hooks/useRecentContexts.spec.js +0 -139
  326. package/lib/hooks/useResize.spec.js +0 -37
  327. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  328. package/lib/hooks/useSlashCommands.spec.js +0 -139
  329. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  330. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  331. package/lib/hooks/useStreamResponse.spec.js +0 -199
  332. package/lib/hooks/useT.spec.js +0 -20
  333. package/lib/hooks/useToggle.spec.js +0 -33
  334. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  335. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  336. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
  337. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  338. package/lib/services/maia/Agents/connectors.spec.js +0 -359
  339. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  340. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  341. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  342. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  343. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  344. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  345. package/lib/services/maia/Agents/getAgents.helpers.js +0 -181
  346. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
  347. package/lib/services/maia/Agents/getAgents.spec.js +0 -697
  348. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  349. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  350. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  351. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  352. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  353. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  354. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  355. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  356. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  357. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  358. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  359. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  360. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  361. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +0 -130
  362. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
  363. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  364. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  365. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  366. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  367. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  368. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  369. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  370. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  371. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  372. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  373. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  374. package/lib/services/maia/client.spec.js +0 -56
  375. package/lib/services/utils/fetchCOR.spec.js +0 -211
  376. package/lib/services/utils/getCookie.spec.js +0 -20
  377. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  378. package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
  379. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  380. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  381. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  382. package/lib/store/sessions/sessionNotifications.helpers.js +0 -45
  383. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  384. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  385. package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
  386. package/lib/store/sessions/sessions.types.spec.js +0 -16
  387. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  388. package/lib/store/useChatsStore.spec.js +0 -619
  389. package/lib/store/useFaqsStore.spec.js +0 -57
  390. package/lib/test/mockSseStream.js +0 -121
  391. package/lib/test/streamdownCodeMock.js +0 -6
  392. package/lib/test/streamdownMock.js +0 -12
  393. package/lib/utils/actionCategoryMap.spec.js +0 -18
  394. package/lib/utils/agentDisplayName.spec.js +0 -44
  395. package/lib/utils/autoApproveStorage.spec.js +0 -25
  396. package/lib/utils/chatInputFiles.spec.js +0 -39
  397. package/lib/utils/contextMentionIcons.spec.js +0 -41
  398. package/lib/utils/contextMentionLabel.spec.js +0 -13
  399. package/lib/utils/contextMentionTriggers.spec.js +0 -38
  400. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  401. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  402. package/lib/utils/entityLinkRender.spec.js +0 -72
  403. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  404. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  405. package/lib/utils/formatUnreadCount.spec.js +0 -12
  406. package/lib/utils/getUnitFileSize.spec.js +0 -18
  407. package/lib/utils/hitlAnalytics.spec.js +0 -100
  408. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  409. package/lib/utils/imagePreprocessor.helpers.js +0 -28
  410. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  411. package/lib/utils/imagePreprocessor.spec.js +0 -112
  412. package/lib/utils/maiaPageRoute.js +0 -24
  413. package/lib/utils/maiaPageRoute.spec.js +0 -23
  414. package/lib/utils/mapBackendLang.spec.js +0 -19
  415. package/lib/utils/navigateContextEntity.spec.js +0 -50
  416. package/lib/utils/normalizeAgentConnectors.spec.js +0 -107
  417. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  418. package/lib/utils/reasoningMappers.spec.js +0 -103
  419. package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
  420. package/lib/utils/renderContextMentions.spec.js +0 -158
  421. package/lib/utils/retryCompletion.spec.js +0 -99
  422. package/lib/utils/skillContentSize.spec.js +0 -13
  423. package/lib/utils/slashCommandMarker.spec.js +0 -43
  424. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  425. package/lib/utils/sseStreamContent.spec.js +0 -31
  426. package/lib/utils/streamActivityMessages.spec.js +0 -227
  427. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -9,8 +9,8 @@ import { CONTEXT_MENTION_CHIP_CLASS } from '../../../types/contextMention';
9
9
  import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
10
10
  import { normalizeContextMentionLabel } from '../../../utils/contextMentionLabel';
11
11
  import { openTaskInCorPanel } from '../../../utils/openTaskInCorPanel';
12
+ import { SLASH_COMMAND_CHIP_BASE_STYLE } from '../SlashCommandChip/SlashCommandChip.styles';
12
13
  import { applyMentionChipStyles, MENTION_CHIP_COLORS } from './ContextMentionChip.styles';
13
- import { buildSkillMentionChipElement, buildUserMentionTooltipElement, splitLabelFirstWord } from './buildChipElement.helpers';
14
14
  var EDITABLE_NON_TASK_LABEL_STYLE = {
15
15
  display: 'inline',
16
16
  lineHeight: '20px',
@@ -45,6 +45,22 @@ var createEditableMentionLabelEl = function createEditableMentionLabelEl(isTask,
45
45
  style: EDITABLE_TASK_LABEL_STYLE
46
46
  }, mentionLabel);
47
47
  };
48
+ var splitLabelFirstWord = function splitLabelFirstWord(label) {
49
+ var normalized = label.trim();
50
+ if (!normalized) return {
51
+ firstWord: '',
52
+ rest: ''
53
+ };
54
+ var firstWhitespaceIdx = normalized.search(/\s/);
55
+ if (firstWhitespaceIdx < 0) return {
56
+ firstWord: normalized,
57
+ rest: ''
58
+ };
59
+ return {
60
+ firstWord: normalized.slice(0, firstWhitespaceIdx),
61
+ rest: normalized.slice(firstWhitespaceIdx)
62
+ };
63
+ };
48
64
  var EditableMentionChip = function EditableMentionChip(_ref) {
49
65
  var mention = _ref.mention;
50
66
  var mentionLabel = normalizeContextMentionLabel(mention.label);
@@ -102,6 +118,213 @@ var EditableMentionChip = function EditableMentionChip(_ref) {
102
118
  style: restStyle
103
119
  }, rest) : null);
104
120
  };
121
+ var initialsFromName = function initialsFromName(name) {
122
+ var _parts$2;
123
+ var trimmed = name.trim();
124
+ if (!trimmed) return '?';
125
+ var parts = trimmed.split(/\s+/).filter(Boolean);
126
+ if (parts.length >= 2) {
127
+ var _parts$0$charAt, _parts$, _parts$charAt, _parts;
128
+ var first = (_parts$0$charAt = (_parts$ = parts[0]) === null || _parts$ === void 0 ? void 0 : _parts$.charAt(0)) !== null && _parts$0$charAt !== void 0 ? _parts$0$charAt : '';
129
+ var last = (_parts$charAt = (_parts = parts[parts.length - 1]) === null || _parts === void 0 ? void 0 : _parts.charAt(0)) !== null && _parts$charAt !== void 0 ? _parts$charAt : '';
130
+ return "".concat(first).concat(last).toUpperCase();
131
+ }
132
+ var single = (_parts$2 = parts[0]) !== null && _parts$2 !== void 0 ? _parts$2 : '';
133
+ return single.length >= 2 ? single.slice(0, 2).toUpperCase() : (single.charAt(0) || '?').toUpperCase();
134
+ };
135
+ var TOOLTIP_FONT = "var(--cor-typography-font-family, 'Work Sans')";
136
+ var TOOLTIP_SECONDARY_COLOR = 'var(--Text-Secondary-Dark, #666)';
137
+ var TOOLTIP_SECONDARY_STYLE = {
138
+ fontFamily: TOOLTIP_FONT,
139
+ fontSize: '14px',
140
+ fontWeight: '400',
141
+ lineHeight: '20px',
142
+ color: TOOLTIP_SECONDARY_COLOR
143
+ };
144
+ var normalizeTrimmedString = function normalizeTrimmedString(value) {
145
+ if (typeof value !== 'string') return '';
146
+ return value.trim();
147
+ };
148
+
149
+ /** Ancho mínimo del tooltip (incl. padding horizontal 8+8). */
150
+ var USER_TOOLTIP_MIN_WIDTH_PX = 292;
151
+ /** Padding horizontal total del tooltip. */
152
+ var USER_TOOLTIP_PAD_X_PX = 16;
153
+ /** Avatar 24px + gap 8px respecto a la columna de texto. */
154
+ var USER_TOOLTIP_AVATAR_GAP_PX = 32;
155
+ /**
156
+ * Ancho máximo de la fila nombre | posición: mismo hueco que con tooltip fijo 292px,
157
+ * para que solo el email ensanche el contenedor.
158
+ */
159
+ var USER_TOOLTIP_NAME_ROW_MAX_PX = USER_TOOLTIP_MIN_WIDTH_PX - USER_TOOLTIP_PAD_X_PX - USER_TOOLTIP_AVATAR_GAP_PX;
160
+ /**
161
+ * Tope de ancho del nombre en la fila: por debajo del máximo de fila para que el ellipsis
162
+ * del nombre aparezca antes y quede más espacio visible para posición/cargo.
163
+ */
164
+ var USER_TOOLTIP_NAME_MAX_WIDTH_PX = Math.floor(USER_TOOLTIP_NAME_ROW_MAX_PX * 0.42);
165
+ var createUserTooltipEl = function createUserTooltipEl(mention) {
166
+ var label = mention.label,
167
+ metadata = mention.metadata;
168
+ var picture = typeof (metadata === null || metadata === void 0 ? void 0 : metadata.picture) === 'string' ? metadata.picture : null;
169
+ var positionName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.positionName);
170
+ var positionLine = positionName || i18n.t('contextMention.userNoPosition', {
171
+ defaultValue: 'Sin posición'
172
+ });
173
+ var email = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.email);
174
+ /** Misma fuente que `ContextMentionItem` (avatar): nombre de query, no el label del chip (ej. "Yo"). */
175
+ var metadataName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.name);
176
+ var nameForInitials = (metadataName || normalizeTrimmedString(label) || '?').trim();
177
+ var tooltip = document.createElement('div');
178
+ Object.assign(tooltip.style, {
179
+ position: 'fixed',
180
+ zIndex: '9999',
181
+ minWidth: "".concat(USER_TOOLTIP_MIN_WIDTH_PX, "px"),
182
+ width: 'max-content',
183
+ maxWidth: 'min(560px, calc(100vw - 24px))',
184
+ padding: '12px 8px',
185
+ display: 'flex',
186
+ flexDirection: 'column',
187
+ alignItems: 'flex-start',
188
+ borderRadius: '4px',
189
+ border: '1px solid var(--Color-Light-Gray, #E0E0E0)',
190
+ background: '#FFF',
191
+ boxShadow: '0 1px 4px 0 rgba(0,0,0,0.08), 0 1px 4px 0 rgba(0,0,0,0.04)',
192
+ boxSizing: 'border-box',
193
+ pointerEvents: 'none',
194
+ overflow: 'hidden'
195
+ });
196
+ var row = document.createElement('div');
197
+ Object.assign(row.style, {
198
+ display: 'flex',
199
+ alignItems: 'center',
200
+ gap: '8px',
201
+ width: 'max-content',
202
+ maxWidth: '100%',
203
+ minWidth: '0'
204
+ });
205
+
206
+ // Avatar circular (foto o iniciales)
207
+ var avatarWrap = document.createElement('div');
208
+ Object.assign(avatarWrap.style, {
209
+ width: '24px',
210
+ height: '24px',
211
+ minWidth: '24px',
212
+ borderRadius: '24px',
213
+ overflow: 'hidden',
214
+ display: 'flex',
215
+ alignItems: 'center',
216
+ justifyContent: 'center',
217
+ /** Mismo fondo que `SCMUserAvatarFallback` en la fila de usuario del modal. */
218
+ background: 'var(--cor-color-grey-200, #e0e0e0)',
219
+ flexShrink: '0'
220
+ });
221
+ var initials = initialsFromName(nameForInitials);
222
+ var createInitialsFallback = function createInitialsFallback() {
223
+ var fb = document.createElement('span');
224
+ fb.textContent = initials;
225
+ Object.assign(fb.style, {
226
+ fontSize: '10px',
227
+ fontWeight: '600',
228
+ /** Mismo color que `SCMUserAvatarFallback` en la fila de usuario del modal. */
229
+ color: 'var(--cor-color-text-secondary, #666)',
230
+ lineHeight: '1',
231
+ fontFamily: TOOLTIP_FONT
232
+ });
233
+ return fb;
234
+ };
235
+ if (picture) {
236
+ var img = document.createElement('img');
237
+ img.src = picture;
238
+ img.alt = '';
239
+ img.draggable = false;
240
+ Object.assign(img.style, {
241
+ width: '24px',
242
+ height: '24px',
243
+ objectFit: 'cover',
244
+ display: 'block',
245
+ borderRadius: '24px'
246
+ });
247
+ img.onerror = function () {
248
+ img.remove();
249
+ avatarWrap.appendChild(createInitialsFallback());
250
+ };
251
+ avatarWrap.appendChild(img);
252
+ } else {
253
+ avatarWrap.appendChild(createInitialsFallback());
254
+ }
255
+
256
+ // Columna de info: ancho = max(fila nombre, email); sin forzar 244px si el contenido es más corto.
257
+ var infoCol = document.createElement('div');
258
+ Object.assign(infoCol.style, {
259
+ display: 'flex',
260
+ flexDirection: 'column',
261
+ justifyContent: 'center',
262
+ alignItems: 'flex-start',
263
+ gap: '2px',
264
+ minWidth: '0',
265
+ width: 'max-content',
266
+ maxWidth: '100%'
267
+ });
268
+
269
+ // Fila: nombre | posición — max-content para no dejar hueco entre nombre corto y el pipe (evitar flex 50/50).
270
+ var nameRow = document.createElement('div');
271
+ Object.assign(nameRow.style, {
272
+ display: 'flex',
273
+ alignItems: 'flex-start',
274
+ gap: '4px',
275
+ minWidth: '0',
276
+ width: 'max-content',
277
+ maxWidth: "".concat(USER_TOOLTIP_NAME_ROW_MAX_PX, "px")
278
+ });
279
+ var nameSpan = document.createElement('span');
280
+ nameSpan.textContent = label;
281
+ Object.assign(nameSpan.style, {
282
+ flex: '0 1 auto',
283
+ minWidth: '0',
284
+ maxWidth: "".concat(USER_TOOLTIP_NAME_MAX_WIDTH_PX, "px"),
285
+ overflow: 'hidden',
286
+ textOverflow: 'ellipsis',
287
+ whiteSpace: 'nowrap',
288
+ color: 'var(--Text-Primary-Dark, #20201F)',
289
+ fontFamily: TOOLTIP_FONT,
290
+ fontSize: '14px',
291
+ fontWeight: '500',
292
+ lineHeight: '130%'
293
+ });
294
+ nameRow.appendChild(nameSpan);
295
+ var sep = document.createElement('span');
296
+ sep.textContent = '|';
297
+ Object.assign(sep.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
298
+ flexShrink: '0'
299
+ }));
300
+ nameRow.appendChild(sep);
301
+ var posSpan = document.createElement('span');
302
+ posSpan.textContent = positionLine;
303
+ Object.assign(posSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
304
+ flex: '0 1 auto',
305
+ minWidth: '0',
306
+ overflow: 'hidden',
307
+ textOverflow: 'ellipsis',
308
+ whiteSpace: 'nowrap'
309
+ }));
310
+ nameRow.appendChild(posSpan);
311
+ infoCol.appendChild(nameRow);
312
+ if (email) {
313
+ var emailSpan = document.createElement('span');
314
+ emailSpan.textContent = email;
315
+ Object.assign(emailSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
316
+ whiteSpace: 'nowrap',
317
+ maxWidth: '100%',
318
+ overflow: 'hidden',
319
+ textOverflow: 'ellipsis'
320
+ }));
321
+ infoCol.appendChild(emailSpan);
322
+ }
323
+ row.appendChild(avatarWrap);
324
+ row.appendChild(infoCol);
325
+ tooltip.appendChild(row);
326
+ return tooltip;
327
+ };
105
328
 
106
329
  /**
107
330
  * Crea un `<span>` atómico listo para insertarse dentro del contenteditable
@@ -112,26 +335,45 @@ var EditableMentionChip = function EditableMentionChip(_ref) {
112
335
  * `applyMentionChipStyles`, asegurando una única fuente de verdad visual.
113
336
  */
114
337
  export var buildChipElement = function buildChipElement(mention) {
115
- if (mention.type === 'skill') {
116
- return buildSkillMentionChipElement(mention);
117
- }
118
338
  var chip = document.createElement('span');
119
339
  chip.setAttribute('contenteditable', 'false');
120
340
  chip.setAttribute('data-mention-chip', 'true');
121
341
  chip.className = CONTEXT_MENTION_CHIP_CLASS;
122
342
  chip.setAttribute('data-mention-type', mention.type);
123
343
  chip.setAttribute('data-mention-surface', 'editor');
344
+
345
+ // Las skills se ven como los slash commands (texto plano `#nombre`), no como chip con fondo.
346
+ if (mention.type === 'skill') {
347
+ Object.assign(chip.style, SLASH_COMMAND_CHIP_BASE_STYLE, {
348
+ boxSizing: 'border-box',
349
+ maxWidth: '100%'
350
+ });
351
+ chip.textContent = normalizeContextMentionLabel(mention.label);
352
+ return chip;
353
+ }
124
354
  applyMentionChipStyles(chip, mention.type);
125
- Object.assign(chip.style, {
355
+ var isTask = mention.type === 'task';
356
+ var common = {
126
357
  boxSizing: 'border-box',
127
358
  verticalAlign: 'baseline',
128
359
  overflow: 'visible',
129
- maxWidth: '100%',
130
- lineHeight: '20px',
131
- height: 'auto',
132
- minHeight: 'auto',
133
- maxHeight: 'none'
134
- });
360
+ maxWidth: '100%'
361
+ };
362
+ if (isTask) {
363
+ Object.assign(chip.style, common, {
364
+ lineHeight: '20px',
365
+ height: 'auto',
366
+ minHeight: 'auto',
367
+ maxHeight: 'none'
368
+ });
369
+ } else {
370
+ Object.assign(chip.style, common, {
371
+ lineHeight: '20px',
372
+ height: 'auto',
373
+ minHeight: 'auto',
374
+ maxHeight: 'none'
375
+ });
376
+ }
135
377
  var mountNode = document.createElement('span');
136
378
  mountNode.style.display = 'inline';
137
379
  mountNode.style.maxWidth = '100%';
@@ -187,9 +429,7 @@ export var buildChipElement = function buildChipElement(mention) {
187
429
  };
188
430
  chip.addEventListener('mouseenter', function () {
189
431
  if (tooltipEl) return;
190
- tooltipEl = buildUserMentionTooltipElement(mention, function (key, opts) {
191
- return i18n.t(key, opts);
192
- });
432
+ tooltipEl = createUserTooltipEl(mention);
193
433
  var rect = chip.getBoundingClientRect();
194
434
  var left = Math.max(8, Math.min(window.innerWidth - 300, rect.left));
195
435
  tooltipEl.style.top = "".concat(rect.top, "px");
@@ -202,4 +442,4 @@ export var buildChipElement = function buildChipElement(mention) {
202
442
  }
203
443
  return chip;
204
444
  };
205
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJhcHBseU1lbnRpb25DaGlwU3R5bGVzIiwiTUVOVElPTl9DSElQX0NPTE9SUyIsImJ1aWxkU2tpbGxNZW50aW9uQ2hpcEVsZW1lbnQiLCJidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQiLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwiRWRpdGFibGVNZW50aW9uQ2hpcCIsIl9yZWYiLCJtZW50aW9uIiwibGFiZWwiLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJmaXJzdFdvcmQiLCJyZXN0IiwibGVhZGluZ1N0eWxlIiwiYWxpZ25JdGVtcyIsImxlYWRpbmdXb3JkU3R5bGUiLCJfb2JqZWN0U3ByZWFkIiwicmVzdFN0eWxlIiwibWFyZ2luUmlnaHQiLCJ3aWR0aCIsImlkIiwiYnVpbGRDaGlwRWxlbWVudCIsImNoaXAiLCJkb2N1bWVudCIsInNldEF0dHJpYnV0ZSIsImNsYXNzTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsIm92ZXJmbG93IiwiaGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwiYXBwZW5kQ2hpbGQiLCJyb290IiwicmVuZGVyIiwiY3Vyc29yIiwib25jbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIndpbmRvdyIsIm9wZW4iLCJjb25jYXQiLCJ0b29sdGlwRWwiLCJjaGlwUmVtb3ZlZE9ic2VydmVyIiwicmVtb3ZlVXNlclRvb2x0aXAiLCJfY2hpcFJlbW92ZWRPYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW1vdmUiLCJ3YXRjaENoaXBSZW1vdmVkRnJvbURvbSIsIl9jaGlwUmVtb3ZlZE9ic2VydmVyMiIsInBhcmVudCIsInBhcmVudE5vZGUiLCJNdXRhdGlvbk9ic2VydmVyIiwiaXNDb25uZWN0ZWQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJrZXkiLCJvcHRzIiwidCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsZWZ0IiwiTWF0aCIsIm1heCIsIm1pbiIsImlubmVyV2lkdGgiLCJ0b3AiLCJ0cmFuc2Zvcm0iLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25DaGlwL2J1aWxkQ2hpcEVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdHlwZSBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCdcbmltcG9ydCBpMThuIGZyb20gJy4uLy4uLy4uL2xhbmcnXG5pbXBvcnQgeyBDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUywgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY29udGV4dE1lbnRpb25MYWJlbCdcbmltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL29wZW5UYXNrSW5Db3JQYW5lbCdcbmltcG9ydCB7IGFwcGx5TWVudGlvbkNoaXBTdHlsZXMsIE1FTlRJT05fQ0hJUF9DT0xPUlMgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQge1xuICBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50LFxuICBidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQsXG4gIHNwbGl0TGFiZWxGaXJzdFdvcmQsXG59IGZyb20gJy4vYnVpbGRDaGlwRWxlbWVudC5oZWxwZXJzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG50eXBlIEVkaXRhYmxlTWVudGlvbkNoaXBQcm9wcyA9IHtcbiAgbWVudGlvbjogQ29udGV4dE1lbnRpb25cbn1cblxuY29uc3QgRWRpdGFibGVNZW50aW9uQ2hpcCA9ICh7IG1lbnRpb24gfTogRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzKSA9PiB7XG4gIGNvbnN0IG1lbnRpb25MYWJlbCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgY29uc3QgaWNvbkNvbG9yID0gTUVOVElPTl9DSElQX0NPTE9SU1ttZW50aW9uLnR5cGVdLmZnXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IG1lbnRpb24udHlwZSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IGljb25TaXplID0gaXNUYXNrID8gMTYgOiAxNFxuICBjb25zdCBsYWJlbEVsID0gY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbChpc1Rhc2ssIG1lbnRpb25MYWJlbClcblxuICBjb25zdCBvdXRlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cblxuICBpZiAoaXNUYXNrIHx8IGlzUHJvamVjdCkge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LCBsYWJlbEVsKVxuICB9XG5cbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobWVudGlvbkxhYmVsKVxuICBjb25zdCBsZWFkaW5nU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICB9XG4gIGNvbnN0IGxlYWRpbmdXb3JkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIH1cbiAgY29uc3QgcmVzdFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLkVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3NwYW4nLFxuICAgIHsgc3R5bGU6IG91dGVyU3R5bGUgfSxcbiAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgJ3NwYW4nLFxuICAgICAgeyBzdHlsZTogbGVhZGluZ1N0eWxlIH0sXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMnB4JyxcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTRweCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKG1lbnRpb24udHlwZSwgaWNvbkNvbG9yLCBtZW50aW9uLmlkLCBpY29uU2l6ZSlcbiAgICAgICksXG4gICAgICBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogbGVhZGluZ1dvcmRTdHlsZSB9LCBmaXJzdFdvcmQpXG4gICAgKSxcbiAgICByZXN0ID8gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IHJlc3RTdHlsZSB9LCByZXN0KSA6IG51bGxcbiAgKVxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50KG1lbnRpb24pXG4gIH1cblxuICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWNoaXAnLCAndHJ1ZScpXG4gIGNoaXAuY2xhc3NOYW1lID0gQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1NcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLXN1cmZhY2UnLCAnZWRpdG9yJylcblxuICBhcHBseU1lbnRpb25DaGlwU3R5bGVzKGNoaXAsIG1lbnRpb24udHlwZSlcbiAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgdmVydGljYWxBbGlnbjogJ2Jhc2VsaW5lJyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgIG1heEhlaWdodDogJ25vbmUnLFxuICB9KVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gYnVpbGRVc2VyTWVudGlvblRvb2x0aXBFbGVtZW50KG1lbnRpb24sIChrZXksIG9wdHMpID0+IGkxOG4udChrZXksIG9wdHMpKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLHNCQUFzQixFQUFFQyxtQkFBbUIsUUFBUSw2QkFBNkI7QUFDekYsU0FDRUMsNEJBQTRCLEVBQzVCQyw4QkFBOEIsRUFDOUJDLG1CQUFtQixRQUNkLDRCQUE0QjtBQUVuQyxJQUFNQyw2QkFBNEMsR0FB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
445
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSIsImFwcGx5TWVudGlvbkNoaXBTdHlsZXMiLCJNRU5USU9OX0NISVBfQ09MT1JTIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwic3BsaXRMYWJlbEZpcnN0V29yZCIsImxhYmVsIiwibm9ybWFsaXplZCIsInRyaW0iLCJmaXJzdFdvcmQiLCJyZXN0IiwiZmlyc3RXaGl0ZXNwYWNlSWR4Iiwic2VhcmNoIiwic2xpY2UiLCJFZGl0YWJsZU1lbnRpb25DaGlwIiwiX3JlZiIsIm1lbnRpb24iLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJsZWFkaW5nU3R5bGUiLCJhbGlnbkl0ZW1zIiwibGVhZGluZ1dvcmRTdHlsZSIsIl9vYmplY3RTcHJlYWQiLCJyZXN0U3R5bGUiLCJtYXJnaW5SaWdodCIsIndpZHRoIiwiaWQiLCJpbml0aWFsc0Zyb21OYW1lIiwibmFtZSIsIl9wYXJ0cyQyIiwidHJpbW1lZCIsInBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiX3BhcnRzJDAkY2hhckF0IiwiX3BhcnRzJCIsIl9wYXJ0cyRjaGFyQXQiLCJfcGFydHMiLCJmaXJzdCIsImNoYXJBdCIsImxhc3QiLCJjb25jYXQiLCJ0b1VwcGVyQ2FzZSIsInNpbmdsZSIsIlRPT0xUSVBfRk9OVCIsIlRPT0xUSVBfU0VDT05EQVJZX0NPTE9SIiwiVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUiLCJmb250RmFtaWx5Iiwibm9ybWFsaXplVHJpbW1lZFN0cmluZyIsInZhbHVlIiwiVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCIsIlVTRVJfVE9PTFRJUF9QQURfWF9QWCIsIlVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYIiwiVVNFUl9UT09MVElQX05BTUVfUk9XX01BWF9QWCIsIlVTRVJfVE9PTFRJUF9OQU1FX01BWF9XSURUSF9QWCIsIk1hdGgiLCJmbG9vciIsImNyZWF0ZVVzZXJUb29sdGlwRWwiLCJtZXRhZGF0YSIsInBpY3R1cmUiLCJwb3NpdGlvbk5hbWUiLCJwb3NpdGlvbkxpbmUiLCJ0IiwiZGVmYXVsdFZhbHVlIiwiZW1haWwiLCJtZXRhZGF0YU5hbWUiLCJuYW1lRm9ySW5pdGlhbHMiLCJ0b29sdGlwIiwiZG9jdW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJ6SW5kZXgiLCJwYWRkaW5nIiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsImJhY2tncm91bmQiLCJib3hTaGFkb3ciLCJwb2ludGVyRXZlbnRzIiwib3ZlcmZsb3ciLCJyb3ciLCJnYXAiLCJhdmF0YXJXcmFwIiwiaGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJmbGV4U2hyaW5rIiwiaW5pdGlhbHMiLCJjcmVhdGVJbml0aWFsc0ZhbGxiYWNrIiwiZmIiLCJ0ZXh0Q29udGVudCIsImltZyIsInNyYyIsImFsdCIsImRyYWdnYWJsZSIsIm9iamVjdEZpdCIsIm9uZXJyb3IiLCJyZW1vdmUiLCJhcHBlbmRDaGlsZCIsImluZm9Db2wiLCJuYW1lUm93IiwibmFtZVNwYW4iLCJmbGV4IiwidGV4dE92ZXJmbG93Iiwic2VwIiwicG9zU3BhbiIsImVtYWlsU3BhbiIsImJ1aWxkQ2hpcEVsZW1lbnQiLCJjaGlwIiwic2V0QXR0cmlidXRlIiwiY2xhc3NOYW1lIiwiY29tbW9uIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwicm9vdCIsInJlbmRlciIsImN1cnNvciIsIm9uY2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ3aW5kb3ciLCJvcGVuIiwidG9vbHRpcEVsIiwiY2hpcFJlbW92ZWRPYnNlcnZlciIsInJlbW92ZVVzZXJUb29sdGlwIiwiX2NoaXBSZW1vdmVkT2JzZXJ2ZXIiLCJkaXNjb25uZWN0Iiwid2F0Y2hDaGlwUmVtb3ZlZEZyb21Eb20iLCJfY2hpcFJlbW92ZWRPYnNlcnZlcjIiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwiTXV0YXRpb25PYnNlcnZlciIsImlzQ29ubmVjdGVkIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxlZnQiLCJtYXgiLCJtaW4iLCJpbm5lcldpZHRoIiwidG9wIiwidHJhbnNmb3JtIiwiYm9keSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uQ2hpcC9idWlsZENoaXBFbGVtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi9sYW5nJ1xuaW1wb3J0IHsgQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1MsIENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uTGFiZWwnXG5pbXBvcnQgeyBvcGVuVGFza0luQ29yUGFuZWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9vcGVuVGFza0luQ29yUGFuZWwnXG5pbXBvcnQgeyBTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSB9IGZyb20gJy4uL1NsYXNoQ29tbWFuZENoaXAvU2xhc2hDb21tYW5kQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBhcHBseU1lbnRpb25DaGlwU3R5bGVzLCBNRU5USU9OX0NISVBfQ09MT1JTIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkNoaXAuc3R5bGVzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG5jb25zdCBzcGxpdExhYmVsRmlyc3RXb3JkID0gKGxhYmVsOiBzdHJpbmcpOiB7IGZpcnN0V29yZDogc3RyaW5nOyByZXN0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYWJlbC50cmltKClcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4geyBmaXJzdFdvcmQ6ICcnLCByZXN0OiAnJyB9XG4gIGNvbnN0IGZpcnN0V2hpdGVzcGFjZUlkeCA9IG5vcm1hbGl6ZWQuc2VhcmNoKC9cXHMvKVxuICBpZiAoZmlyc3RXaGl0ZXNwYWNlSWR4IDwgMCkgcmV0dXJuIHsgZmlyc3RXb3JkOiBub3JtYWxpemVkLCByZXN0OiAnJyB9XG4gIHJldHVybiB7XG4gICAgZmlyc3RXb3JkOiBub3JtYWxpemVkLnNsaWNlKDAsIGZpcnN0V2hpdGVzcGFjZUlkeCksXG4gICAgcmVzdDogbm9ybWFsaXplZC5zbGljZShmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICB9XG59XG5cbnR5cGUgRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzID0ge1xuICBtZW50aW9uOiBDb250ZXh0TWVudGlvblxufVxuXG5jb25zdCBFZGl0YWJsZU1lbnRpb25DaGlwID0gKHsgbWVudGlvbiB9OiBFZGl0YWJsZU1lbnRpb25DaGlwUHJvcHMpID0+IHtcbiAgY29uc3QgbWVudGlvbkxhYmVsID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChtZW50aW9uLmxhYmVsKVxuICBjb25zdCBpY29uQ29sb3IgPSBNRU5USU9OX0NISVBfQ09MT1JTW21lbnRpb24udHlwZV0uZmdcbiAgY29uc3QgaXNUYXNrID0gbWVudGlvbi50eXBlID09PSAndGFzaydcbiAgY29uc3QgaXNQcm9qZWN0ID0gbWVudGlvbi50eXBlID09PSAncHJvamVjdCdcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IGxhYmVsRWwgPSBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsKGlzVGFzaywgbWVudGlvbkxhYmVsKVxuXG4gIGNvbnN0IG91dGVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdiYXNlbGluZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfVxuXG4gIGlmIChpc1Rhc2sgfHwgaXNQcm9qZWN0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBvdXRlclN0eWxlIH0sIGxhYmVsRWwpXG4gIH1cblxuICBjb25zdCB7IGZpcnN0V29yZCwgcmVzdCB9ID0gc3BsaXRMYWJlbEZpcnN0V29yZChtZW50aW9uTGFiZWwpXG4gIGNvbnN0IGxlYWRpbmdTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cbiAgY29uc3QgbGVhZGluZ1dvcmRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi5FRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRSxcbiAgICBkaXNwbGF5OiAnaW5saW5lJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfVxuICBjb25zdCByZXN0U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIH1cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAnc3BhbicsXG4gICAgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LFxuICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAnc3BhbicsXG4gICAgICB7IHN0eWxlOiBsZWFkaW5nU3R5bGUgfSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcycHgnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogJzEnLFxuICAgICAgICAgICAgd2lkdGg6ICcxNHB4JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBnZXRDb250ZXh0TWVudGlvbkljb24obWVudGlvbi50eXBlLCBpY29uQ29sb3IsIG1lbnRpb24uaWQsIGljb25TaXplKVxuICAgICAgKSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBsZWFkaW5nV29yZFN0eWxlIH0sIGZpcnN0V29yZClcbiAgICApLFxuICAgIHJlc3QgPyBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogcmVzdFN0eWxlIH0sIHJlc3QpIDogbnVsbFxuICApXG59XG5cbmNvbnN0IGluaXRpYWxzRnJvbU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IG5hbWUudHJpbSgpXG4gIGlmICghdHJpbW1lZCkgcmV0dXJuICc/J1xuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWQuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbilcbiAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgY29uc3QgZmlyc3QgPSBwYXJ0c1swXT8uY2hhckF0KDApID8/ICcnXG4gICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdPy5jaGFyQXQoMCkgPz8gJydcbiAgICByZXR1cm4gYCR7Zmlyc3R9JHtsYXN0fWAudG9VcHBlckNhc2UoKVxuICB9XG4gIGNvbnN0IHNpbmdsZSA9IHBhcnRzWzBdID8/ICcnXG4gIHJldHVybiBzaW5nbGUubGVuZ3RoID49IDIgPyBzaW5nbGUuc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKSA6IChzaW5nbGUuY2hhckF0KDApIHx8ICc/JykudG9VcHBlckNhc2UoKVxufVxuXG5jb25zdCBUT09MVElQX0ZPTlQgPSBgdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKWBcbmNvbnN0IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SID0gJ3ZhcigtLVRleHQtU2Vjb25kYXJ5LURhcmssICM2NjYpJ1xuY29uc3QgVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUgPSB7XG4gIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgZm9udFNpemU6ICcxNHB4JyxcbiAgZm9udFdlaWdodDogJzQwMCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgY29sb3I6IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SLFxufVxuXG5jb25zdCBub3JtYWxpemVUcmltbWVkU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJ1xuICByZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKiBBbmNobyBtw61uaW1vIGRlbCB0b29sdGlwIChpbmNsLiBwYWRkaW5nIGhvcml6b250YWwgOCs4KS4gKi9cbmNvbnN0IFVTRVJfVE9PTFRJUF9NSU5fV0lEVEhfUFggPSAyOTJcbi8qKiBQYWRkaW5nIGhvcml6b250YWwgdG90YWwgZGVsIHRvb2x0aXAuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfUEFEX1hfUFggPSAxNlxuLyoqIEF2YXRhciAyNHB4ICsgZ2FwIDhweCByZXNwZWN0byBhIGxhIGNvbHVtbmEgZGUgdGV4dG8uICovXG5jb25zdCBVU0VSX1RPT0xUSVBfQVZBVEFSX0dBUF9QWCA9IDMyXG4vKipcbiAqIEFuY2hvIG3DoXhpbW8gZGUgbGEgZmlsYSBub21icmUgfCBwb3NpY2nDs246IG1pc21vIGh1ZWNvIHF1ZSBjb24gdG9vbHRpcCBmaWpvIDI5MnB4LFxuICogcGFyYSBxdWUgc29sbyBlbCBlbWFpbCBlbnNhbmNoZSBlbCBjb250ZW5lZG9yLlxuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYID0gVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCAtIFVTRVJfVE9PTFRJUF9QQURfWF9QWCAtIFVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYXG4vKipcbiAqIFRvcGUgZGUgYW5jaG8gZGVsIG5vbWJyZSBlbiBsYSBmaWxhOiBwb3IgZGViYWpvIGRlbCBtw6F4aW1vIGRlIGZpbGEgcGFyYSBxdWUgZWwgZWxsaXBzaXNcbiAqIGRlbCBub21icmUgYXBhcmV6Y2EgYW50ZXMgeSBxdWVkZSBtw6FzIGVzcGFjaW8gdmlzaWJsZSBwYXJhIHBvc2ljacOzbi9jYXJnby5cbiAqL1xuY29uc3QgVVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYID0gTWF0aC5mbG9vcihVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYICogMC40MilcblxuY29uc3QgY3JlYXRlVXNlclRvb2x0aXBFbCA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IEhUTUxFbGVtZW50ID0+IHtcbiAgY29uc3QgeyBsYWJlbCwgbWV0YWRhdGEgfSA9IG1lbnRpb25cbiAgY29uc3QgcGljdHVyZSA9IHR5cGVvZiBtZXRhZGF0YT8ucGljdHVyZSA9PT0gJ3N0cmluZycgPyBtZXRhZGF0YS5waWN0dXJlIDogbnVsbFxuICBjb25zdCBwb3NpdGlvbk5hbWUgPSBub3JtYWxpemVUcmltbWVkU3RyaW5nKG1ldGFkYXRhPy5wb3NpdGlvbk5hbWUpXG4gIGNvbnN0IHBvc2l0aW9uTGluZSA9XG4gICAgcG9zaXRpb25OYW1lIHx8XG4gICAgaTE4bi50KCdjb250ZXh0TWVudGlvbi51c2VyTm9Qb3NpdGlvbicsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ1NpbiBwb3NpY2nDs24nLFxuICAgIH0pXG4gIGNvbnN0IGVtYWlsID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8uZW1haWwpXG4gIC8qKiBNaXNtYSBmdWVudGUgcXVlIGBDb250ZXh0TWVudGlvbkl0ZW1gIChhdmF0YXIpOiBub21icmUgZGUgcXVlcnksIG5vIGVsIGxhYmVsIGRlbCBjaGlwIChlai4gXCJZb1wiKS4gKi9cbiAgY29uc3QgbWV0YWRhdGFOYW1lID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8ubmFtZSlcbiAgY29uc3QgbmFtZUZvckluaXRpYWxzID0gKG1ldGFkYXRhTmFtZSB8fCBub3JtYWxpemVUcmltbWVkU3RyaW5nKGxhYmVsKSB8fCAnPycpLnRyaW0oKVxuXG4gIGNvbnN0IHRvb2x0aXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKHRvb2x0aXAuc3R5bGUsIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB6SW5kZXg6ICc5OTk5JyxcbiAgICBtaW5XaWR0aDogYCR7VVNFUl9UT09MVElQX01JTl9XSURUSF9QWH1weGAsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICdtaW4oNTYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSknLFxuICAgIHBhZGRpbmc6ICcxMnB4IDhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCB2YXIoLS1Db2xvci1MaWdodC1HcmF5LCAjRTBFMEUwKScsXG4gICAgYmFja2dyb3VuZDogJyNGRkYnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wOCksIDAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wNCknLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH0pXG5cbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihyb3cuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICB3aWR0aDogJ21heC1jb250ZW50JyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gIH0pXG5cbiAgLy8gQXZhdGFyIGNpcmN1bGFyIChmb3RvIG8gaW5pY2lhbGVzKVxuICBjb25zdCBhdmF0YXJXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihhdmF0YXJXcmFwLnN0eWxlLCB7XG4gICAgd2lkdGg6ICcyNHB4JyxcbiAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICBtaW5XaWR0aDogJzI0cHgnLFxuICAgIGJvcmRlclJhZGl1czogJzI0cHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIC8qKiBNaXNtbyBmb25kbyBxdWUgYFNDTVVzZXJBdmF0YXJGYWxsYmFja2AgZW4gbGEgZmlsYSBkZSB1c3VhcmlvIGRlbCBtb2RhbC4gKi9cbiAgICBiYWNrZ3JvdW5kOiAndmFyKC0tY29yLWNvbG9yLWdyZXktMjAwLCAjZTBlMGUwKScsXG4gICAgZmxleFNocmluazogJzAnLFxuICB9KVxuXG4gIGNvbnN0IGluaXRpYWxzID0gaW5pdGlhbHNGcm9tTmFtZShuYW1lRm9ySW5pdGlhbHMpXG5cbiAgY29uc3QgY3JlYXRlSW5pdGlhbHNGYWxsYmFjayA9ICgpOiBIVE1MRWxlbWVudCA9PiB7XG4gICAgY29uc3QgZmIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBmYi50ZXh0Q29udGVudCA9IGluaXRpYWxzXG4gICAgT2JqZWN0LmFzc2lnbihmYi5zdHlsZSwge1xuICAgICAgZm9udFNpemU6ICcxMHB4JyxcbiAgICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICAgICAgLyoqIE1pc21vIGNvbG9yIHF1ZSBgU0NNVXNlckF2YXRhckZhbGxiYWNrYCBlbiBsYSBmaWxhIGRlIHVzdWFyaW8gZGVsIG1vZGFsLiAqL1xuICAgICAgY29sb3I6ICd2YXIoLS1jb3ItY29sb3ItdGV4dC1zZWNvbmRhcnksICM2NjYpJyxcbiAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgICB9KVxuICAgIHJldHVybiBmYlxuICB9XG5cbiAgaWYgKHBpY3R1cmUpIHtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKVxuICAgIGltZy5zcmMgPSBwaWN0dXJlXG4gICAgaW1nLmFsdCA9ICcnXG4gICAgaW1nLmRyYWdnYWJsZSA9IGZhbHNlXG4gICAgT2JqZWN0LmFzc2lnbihpbWcuc3R5bGUsIHtcbiAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICB9KVxuICAgIGltZy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaW1nLnJlbW92ZSgpXG4gICAgICBhdmF0YXJXcmFwLmFwcGVuZENoaWxkKGNyZWF0ZUluaXRpYWxzRmFsbGJhY2soKSlcbiAgICB9XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChpbWcpXG4gIH0gZWxzZSB7XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChjcmVhdGVJbml0aWFsc0ZhbGxiYWNrKCkpXG4gIH1cblxuICAvLyBDb2x1bW5hIGRlIGluZm86IGFuY2hvID0gbWF4KGZpbGEgbm9tYnJlLCBlbWFpbCk7IHNpbiBmb3J6YXIgMjQ0cHggc2kgZWwgY29udGVuaWRvIGVzIG3DoXMgY29ydG8uXG4gIGNvbnN0IGluZm9Db2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKGluZm9Db2wuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICcycHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSlcblxuICAvLyBGaWxhOiBub21icmUgfCBwb3NpY2nDs24g4oCUIG1heC1jb250ZW50IHBhcmEgbm8gZGVqYXIgaHVlY28gZW50cmUgbm9tYnJlIGNvcnRvIHkgZWwgcGlwZSAoZXZpdGFyIGZsZXggNTAvNTApLlxuICBjb25zdCBuYW1lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihuYW1lUm93LnN0eWxlLCB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICc0cHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6IGAke1VTRVJfVE9PTFRJUF9OQU1FX1JPV19NQVhfUFh9cHhgLFxuICB9KVxuXG4gIGNvbnN0IG5hbWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIG5hbWVTcGFuLnRleHRDb250ZW50ID0gbGFiZWxcbiAgT2JqZWN0LmFzc2lnbihuYW1lU3Bhbi5zdHlsZSwge1xuICAgIGZsZXg6ICcwIDEgYXV0bycsXG4gICAgbWluV2lkdGg6ICcwJyxcbiAgICBtYXhXaWR0aDogYCR7VVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYfXB4YCxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGNvbG9yOiAndmFyKC0tVGV4dC1QcmltYXJ5LURhcmssICMyMDIwMUYpJyxcbiAgICBmb250RmFtaWx5OiBUT09MVElQX0ZPTlQsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBsaW5lSGVpZ2h0OiAnMTMwJScsXG4gIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQobmFtZVNwYW4pXG5cbiAgY29uc3Qgc2VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIHNlcC50ZXh0Q29udGVudCA9ICd8J1xuICBPYmplY3QuYXNzaWduKHNlcC5zdHlsZSwgeyAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSwgZmxleFNocmluazogJzAnIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQoc2VwKVxuXG4gIGNvbnN0IHBvc1NwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgcG9zU3Bhbi50ZXh0Q29udGVudCA9IHBvc2l0aW9uTGluZVxuICBPYmplY3QuYXNzaWduKHBvc1NwYW4uc3R5bGUsIHtcbiAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICBmbGV4OiAnMCAxIGF1dG8nLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfSlcbiAgbmFtZVJvdy5hcHBlbmRDaGlsZChwb3NTcGFuKVxuXG4gIGluZm9Db2wuYXBwZW5kQ2hpbGQobmFtZVJvdylcblxuICBpZiAoZW1haWwpIHtcbiAgICBjb25zdCBlbWFpbFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBlbWFpbFNwYW4udGV4dENvbnRlbnQgPSBlbWFpbFxuICAgIE9iamVjdC5hc3NpZ24oZW1haWxTcGFuLnN0eWxlLCB7XG4gICAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB9KVxuICAgIGluZm9Db2wuYXBwZW5kQ2hpbGQoZW1haWxTcGFuKVxuICB9XG5cbiAgcm93LmFwcGVuZENoaWxkKGF2YXRhcldyYXApXG4gIHJvdy5hcHBlbmRDaGlsZChpbmZvQ29sKVxuICB0b29sdGlwLmFwcGVuZENoaWxkKHJvdylcblxuICByZXR1cm4gdG9vbHRpcFxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgY29uc3QgY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1jaGlwJywgJ3RydWUnKVxuICBjaGlwLmNsYXNzTmFtZSA9IENPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1zdXJmYWNlJywgJ2VkaXRvcicpXG5cbiAgLy8gTGFzIHNraWxscyBzZSB2ZW4gY29tbyBsb3Mgc2xhc2ggY29tbWFuZHMgKHRleHRvIHBsYW5vIGAjbm9tYnJlYCksIG5vIGNvbW8gY2hpcCBjb24gZm9uZG8uXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICdza2lsbCcpIHtcbiAgICBPYmplY3QuYXNzaWduKGNoaXAuc3R5bGUsIFNMQVNIX0NPTU1BTkRfQ0hJUF9CQVNFX1NUWUxFLCB7IGJveFNpemluZzogJ2JvcmRlci1ib3gnLCBtYXhXaWR0aDogJzEwMCUnIH0pXG4gICAgY2hpcC50ZXh0Q29udGVudCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgICByZXR1cm4gY2hpcFxuICB9XG5cbiAgYXBwbHlNZW50aW9uQ2hpcFN0eWxlcyhjaGlwLCBtZW50aW9uLnR5cGUpXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSBhcyBjb25zdFxuICBpZiAoaXNUYXNrKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCBjb21tb24sIHtcbiAgICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgbWluSGVpZ2h0OiAnYXV0bycsXG4gICAgICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24oY2hpcC5zdHlsZSwgY29tbW9uLCB7XG4gICAgICBsaW5lSGVpZ2h0OiAnMjBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgICAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gICAgfSlcbiAgfVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gY3JlYXRlVXNlclRvb2x0aXBFbChtZW50aW9uKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLDZCQUE2QixRQUFRLDZDQUE2QztBQUMzRixTQUFTQyxzQkFBc0IsRUFBRUMsbUJBQW1CLFFBQVEsNkJBQTZCO0FBRXpGLElBQU1DLDZCQUE0QyxHQUFHO0VBQ25EQyxPQUFPLEVBQUUsUUFBUTtFQUNqQkMsVUFBVSxFQUFFLE1BQU07RUFDbEJDLFNBQVMsRUFBRSxVQUFVO0VBQ3JCQyxRQUFRLEVBQUUsQ0FBQztF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