@projectcor/maia-components 2.47.0 → 2.48.1-0

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 (440) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ActionableButton.spec.js +111 -0
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
  4. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
  5. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  6. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  7. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
  8. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
  9. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  12. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
  13. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
  14. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  17. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
  18. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  23. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  24. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  25. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  26. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  27. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  28. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  29. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  30. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  31. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
  32. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  33. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  34. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  35. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
  36. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  37. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  38. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
  39. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
  40. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
  41. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
  42. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  43. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  44. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  45. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  46. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  47. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  48. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  49. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  50. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  51. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  52. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  53. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  54. package/lib/components/atoms/HelpButton.spec.js +87 -0
  55. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  56. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  57. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  58. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  59. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  60. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  61. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  62. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  63. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
  64. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
  65. package/lib/components/atoms/MAIAInput/MAIAInput.js +8 -12
  66. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +444 -0
  67. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
  68. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
  70. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
  71. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
  72. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  73. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  74. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
  75. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
  76. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
  77. package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
  78. package/lib/components/atoms/NextPageLoader.spec.js +37 -0
  79. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
  80. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  81. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
  82. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  83. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  84. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
  85. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +36 -8
  86. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +23 -5
  87. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  88. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  89. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  90. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  91. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  92. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
  93. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  94. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
  95. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  96. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  97. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  98. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  99. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  100. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
  101. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  102. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  103. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  104. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  105. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  106. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  107. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  108. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  109. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  110. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  111. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  112. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  113. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  114. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  115. package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
  116. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  117. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  118. package/lib/components/atoms/WithAppCfg.spec.js +60 -0
  119. package/lib/components/index.js +2 -1
  120. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  121. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  122. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +129 -39
  123. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +495 -0
  124. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
  125. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
  126. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
  127. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
  128. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
  129. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
  130. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
  131. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
  132. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  133. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  134. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  135. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  136. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  137. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  138. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  139. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  140. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  141. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  142. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  143. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  144. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  145. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  146. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  147. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  148. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +92 -73
  149. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  150. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  151. package/lib/components/molecules/ChatAIHome/styles.js +85 -78
  152. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  153. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
  154. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
  155. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +39 -57
  156. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +445 -0
  157. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  158. package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
  159. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
  160. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
  161. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
  162. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
  163. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  164. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  165. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  166. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  167. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  168. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  169. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  170. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  171. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
  172. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
  173. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
  174. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  175. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  176. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  177. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  178. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  179. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  180. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
  181. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  182. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  183. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  184. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
  185. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  186. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  187. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
  188. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  189. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  190. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  191. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  192. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  193. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  194. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  195. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  196. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  197. package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
  198. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +199 -0
  199. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +391 -0
  200. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +133 -215
  201. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1204 -0
  202. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  203. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
  204. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  205. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +526 -0
  206. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
  207. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  208. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  209. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  210. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  211. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
  212. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
  213. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
  214. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  215. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  216. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  217. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  218. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  219. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  220. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  221. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  222. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  223. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  224. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  225. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  226. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  227. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  228. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  229. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  230. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  231. package/lib/constants/maiaFeatureAccess.spec.js +30 -0
  232. package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
  233. package/lib/constants/maiaTaskPanelAccess.spec.js +30 -0
  234. package/lib/constants/permissions/clientRoleAccess.spec.js +31 -0
  235. package/lib/constants/permissions/index.js +2 -2
  236. package/lib/constants/permissions/utils.js +4 -1
  237. package/lib/constants/permissions/utils.spec.js +128 -0
  238. package/lib/dev/DevMaiaPage.js +30 -0
  239. package/lib/dev/DevReasoningTimeline.js +68 -37
  240. package/lib/dev/Providers.js +5 -3
  241. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  242. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  243. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  244. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  245. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
  246. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  247. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
  248. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  249. package/lib/hooks/useCaretPosition.spec.js +58 -0
  250. package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
  251. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
  252. package/lib/hooks/useChatManager/useChatManager.js +76 -351
  253. package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
  254. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
  255. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
  256. package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
  257. package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
  258. package/lib/hooks/useChats/useChats.spec.js +208 -0
  259. package/lib/hooks/useClientSearch.helpers.js +36 -0
  260. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  261. package/lib/hooks/useClientSearch.js +4 -32
  262. package/lib/hooks/useClientSearch.spec.js +86 -0
  263. package/lib/hooks/useContextMentions.helpers.js +152 -0
  264. package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
  265. package/lib/hooks/useContextMentions.js +2 -163
  266. package/lib/hooks/useContextMentions.spec.js +239 -0
  267. package/lib/hooks/useContextMentions.types.js +2 -0
  268. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  269. package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
  270. package/lib/hooks/useContextPinPopover.js +16 -75
  271. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  272. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  273. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  274. package/lib/hooks/useDebounce.spec.js +42 -0
  275. package/lib/hooks/useEntitySearch.helpers.js +359 -0
  276. package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
  277. package/lib/hooks/useEntitySearch.js +38 -391
  278. package/lib/hooks/useEntitySearch.spec.js +443 -0
  279. package/lib/hooks/useEvent.spec.js +45 -0
  280. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  281. package/lib/hooks/useFrequentlyUsedActions.js +60 -22
  282. package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
  283. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  284. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  285. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  286. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  287. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  288. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  289. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  290. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  291. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  292. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  293. package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
  294. package/lib/hooks/useMentionPopover.js +9 -35
  295. package/lib/hooks/useMentionPopover.spec.js +215 -0
  296. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  297. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
  298. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  299. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  300. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  301. package/lib/hooks/useModal/useModal.spec.js +73 -0
  302. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
  303. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  304. package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
  305. package/lib/hooks/useProjectSearch.js +4 -58
  306. package/lib/hooks/useProjectSearch.spec.js +91 -0
  307. package/lib/hooks/useProjectSummary.spec.js +193 -0
  308. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  309. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
  310. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  311. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  312. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  313. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  314. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  315. package/lib/hooks/useRecentClientsSearch.js +4 -32
  316. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  317. package/lib/hooks/useRecentContexts.spec.js +139 -0
  318. package/lib/hooks/useResize.spec.js +37 -0
  319. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  320. package/lib/hooks/useSlashCommands.spec.js +139 -0
  321. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  322. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  323. package/lib/hooks/useStreamResponse.spec.js +199 -0
  324. package/lib/hooks/useT.spec.js +20 -0
  325. package/lib/hooks/useToggle.spec.js +33 -0
  326. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  327. package/lib/index.js +5 -2
  328. package/lib/lang/br/index.js +29 -1
  329. package/lib/lang/en/index.js +29 -1
  330. package/lib/lang/es/index.js +29 -1
  331. package/lib/lang/fr/index.js +29 -1
  332. package/lib/services/maia/Access/updateAccess.spec.js +137 -0
  333. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  334. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  335. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  336. package/lib/services/maia/Agents/connectors.js +88 -46
  337. package/lib/services/maia/Agents/connectors.spec.js +359 -0
  338. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  339. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  340. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  341. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  342. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  343. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  344. package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
  345. package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
  346. package/lib/services/maia/Agents/getAgents.js +78 -242
  347. package/lib/services/maia/Agents/getAgents.spec.js +697 -0
  348. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  349. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  350. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  351. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  352. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  353. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  354. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  355. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  356. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  357. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  358. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  359. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  360. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  361. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  362. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
  363. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  364. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  365. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  366. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  367. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  368. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  369. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  370. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  371. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  372. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  373. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  374. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  375. package/lib/services/maia/client.spec.js +56 -0
  376. package/lib/services/utils/fetchCOR.spec.js +211 -0
  377. package/lib/services/utils/getCookie.spec.js +20 -0
  378. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  379. package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
  380. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  381. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  382. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  383. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  384. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  385. package/lib/store/sessions/sessionNotifications.js +35 -41
  386. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  387. package/lib/store/sessions/sessionStreamManager.js +50 -51
  388. package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
  389. package/lib/store/sessions/sessions.types.spec.js +16 -0
  390. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  391. package/lib/store/useChatsStore.spec.js +619 -0
  392. package/lib/store/useFaqsStore.spec.js +57 -0
  393. package/lib/styles/cascade.js +29 -3
  394. package/lib/styles/transitions.js +3 -1
  395. package/lib/test/mockSseStream.js +121 -0
  396. package/lib/test/streamdownCodeMock.js +6 -0
  397. package/lib/test/streamdownMock.js +12 -0
  398. package/lib/types/agentModal.js +1 -1
  399. package/lib/types/global.d.js +1 -1
  400. package/lib/utils/actionCategoryMap.spec.js +18 -0
  401. package/lib/utils/agentDisplayName.spec.js +44 -0
  402. package/lib/utils/autoApproveStorage.spec.js +25 -0
  403. package/lib/utils/chatInputFiles.spec.js +39 -0
  404. package/lib/utils/contextMentionIcons.spec.js +41 -0
  405. package/lib/utils/contextMentionLabel.spec.js +13 -0
  406. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  407. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  408. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  409. package/lib/utils/entityLinkRender.spec.js +72 -0
  410. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  411. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  412. package/lib/utils/formatUnreadCount.spec.js +12 -0
  413. package/lib/utils/getUnitFileSize.spec.js +18 -0
  414. package/lib/utils/hitlAnalytics.spec.js +100 -0
  415. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  416. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  417. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  418. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  419. package/lib/utils/imagePreprocessor.js +12 -37
  420. package/lib/utils/imagePreprocessor.spec.js +112 -0
  421. package/lib/utils/maiaPageRoute.js +24 -0
  422. package/lib/utils/maiaPageRoute.spec.js +23 -0
  423. package/lib/utils/mapBackendLang.spec.js +19 -0
  424. package/lib/utils/navigateContextEntity.spec.js +50 -0
  425. package/lib/utils/normalizeAgentConnectors.js +4 -4
  426. package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
  427. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  428. package/lib/utils/reasoningMappers.spec.js +103 -0
  429. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  430. package/lib/utils/renderContextMentions.spec.js +158 -0
  431. package/lib/utils/retryCompletion.spec.js +99 -0
  432. package/lib/utils/skillContentSize.spec.js +13 -0
  433. package/lib/utils/slashCommandMarker.spec.js +43 -0
  434. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  435. package/lib/utils/sseStreamContent.spec.js +31 -0
  436. package/lib/utils/streamActivityMessages.js +32 -19
  437. package/lib/utils/streamActivityMessages.spec.js +253 -0
  438. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  439. package/package.json +1 -1
  440. package/README.md +0 -2
@@ -14,7 +14,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
14
14
  /* eslint-disable no-constant-condition */
15
15
  /* eslint-disable @typescript-eslint/no-explicit-any */
16
16
  import maia from '../../services/maia';
17
- import { getInitialStreamActivity, getThinkingLoadingMessage, getUsingSkillActivity, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity, resolveToolActionLabel } from '../../utils/streamActivityMessages';
17
+ import { getInitialStreamActivity, getThinkingStreamActivity, getUsingSkillActivity, getWritingStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
18
18
  import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
19
19
  import { reasoningStore } from '../../hooks/useReasoningTrace';
20
20
  import { sessionStreamingText } from './sessionStreamingText';
@@ -42,13 +42,12 @@ var getActiveStreamCount = function getActiveStreamCount() {
42
42
  };
43
43
  var parseSessionSSE = /*#__PURE__*/function () {
44
44
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response, active, params) {
45
- var _params$hitlExecution, _response$body, _data$error, _data$error2, _callbacks$onError, _data$error3, _data$error4;
46
- var sessionId, placeholderId, callbacks, t, hitlExecutionContext, pendingContent, throttleTimer, flushToStores, emitThrottled, flushPending, reader, decoder, buffer, accumulatedContent, hasStartedWriting, isUsingSkill, ensureWritingStarted, applyStreamChunk, clearStreamLikeAnswerReset, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, data, thinkingDelta, stepTool, stepType, label, _data$args, chunk, _chunk, _callbacks$onApproval, isPreApproved, _ref3, _t, _t2, _t3;
45
+ var _response$body, _data$error, _data$error2, _callbacks$onError, _data$error3, _data$error4;
46
+ var sessionId, placeholderId, callbacks, t, pendingContent, throttleTimer, flushToStores, emitThrottled, flushPending, reader, decoder, buffer, accumulatedContent, hasStartedWriting, isUsingSkill, setThinkingActivity, ensureWritingStarted, applyStreamChunk, clearStreamLikeAnswerReset, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, data, thinkingDelta, stepTool, stepType, _data$args, chunk, _chunk, _callbacks$onApproval, isPreApproved, _ref3, _t, _t2, _t3;
47
47
  return _regeneratorRuntime.wrap(function (_context) {
48
48
  while (1) switch (_context.prev = _context.next) {
49
49
  case 0:
50
50
  sessionId = params.sessionId, placeholderId = params.placeholderId, callbacks = params.callbacks, t = params.t;
51
- hitlExecutionContext = (_params$hitlExecution = params.hitlExecutionContext) !== null && _params$hitlExecution !== void 0 ? _params$hitlExecution : sessionHitlContext.get(sessionId);
52
51
  pendingContent = null;
53
52
  throttleTimer = null;
54
53
  flushToStores = function flushToStores(content) {
@@ -92,17 +91,39 @@ var parseSessionSSE = /*#__PURE__*/function () {
92
91
  hasStartedWriting = false; // "Usando Skill" queda visible mientras el modelo piensa con la skill cargada;
93
92
  // los deltas de `thinking` no lo pisan hasta la próxima acción o el primer token.
94
93
  isUsingSkill = false;
95
- ensureWritingStarted = function ensureWritingStarted() {
96
- var _callbacks$onStartWri;
97
- if (hasStartedWriting) return;
98
- hasStartedWriting = true;
94
+ setThinkingActivity = function setThinkingActivity() {
95
+ var _store$getMeta;
96
+ var thinkingActivity = getThinkingStreamActivity(t);
97
+ var current = (_store$getMeta = store().getMeta(sessionId)) === null || _store$getMeta === void 0 ? void 0 : _store$getMeta.streamActivity;
98
+ if ((current === null || current === void 0 ? void 0 : current.phase) === 'thinking' && current.message === thinkingActivity.message) return;
99
99
  store().patchMeta(sessionId, {
100
- isLoading: true,
101
- isWriting: true
100
+ isLoading: true
102
101
  });
103
- store().setStatus(sessionId, 'writing');
104
- store().setActivity(sessionId, getWritingStreamActivity(t));
105
- (_callbacks$onStartWri = callbacks.onStartWriting) === null || _callbacks$onStartWri === void 0 || _callbacks$onStartWri.call(callbacks);
102
+ store().setStatus(sessionId, 'thinking');
103
+ store().setActivity(sessionId, thinkingActivity);
104
+ };
105
+ ensureWritingStarted = function ensureWritingStarted() {
106
+ var _store$getMeta2;
107
+ // Cualquier token corta "Usando Skill": el indicador vuelve a alternar pensando / escribiendo.
108
+ isUsingSkill = false;
109
+ if (!hasStartedWriting) {
110
+ var _callbacks$onStartWri;
111
+ hasStartedWriting = true;
112
+ store().patchMeta(sessionId, {
113
+ isLoading: true,
114
+ isWriting: true
115
+ });
116
+ (_callbacks$onStartWri = callbacks.onStartWriting) === null || _callbacks$onStartWri === void 0 || _callbacks$onStartWri.call(callbacks);
117
+ }
118
+ var current = (_store$getMeta2 = store().getMeta(sessionId)) === null || _store$getMeta2 === void 0 ? void 0 : _store$getMeta2.streamActivity;
119
+ if ((current === null || current === void 0 ? void 0 : current.phase) !== 'writing') {
120
+ store().patchMeta(sessionId, {
121
+ isLoading: true,
122
+ isWriting: true
123
+ });
124
+ store().setStatus(sessionId, 'writing');
125
+ store().setActivity(sessionId, getWritingStreamActivity(t));
126
+ }
106
127
  };
107
128
  applyStreamChunk = function applyStreamChunk(chunk) {
108
129
  if (!chunk) return;
@@ -236,17 +257,9 @@ var parseSessionSSE = /*#__PURE__*/function () {
236
257
  if (typeof data.i === 'number' && thinkingDelta) {
237
258
  reasoningStore.appendThinking(placeholderId, data.i, thinkingDelta);
238
259
  }
239
- if (!hasStartedWriting) {
240
- store().patchMeta(sessionId, {
241
- isLoading: true
242
- });
243
- store().setStatus(sessionId, 'thinking');
244
- if (!isUsingSkill) {
245
- store().setActivity(sessionId, {
246
- phase: 'thinking',
247
- message: getThinkingLoadingMessage(0, t)
248
- });
249
- }
260
+ // Mientras dura "Usando Skill" los deltas de thinking no pisan la actividad.
261
+ if (!isUsingSkill) {
262
+ setThinkingActivity();
250
263
  }
251
264
  return _context.abrupt("continue", 24);
252
265
  case 14:
@@ -266,17 +279,16 @@ var parseSessionSSE = /*#__PURE__*/function () {
266
279
  stepTool = typeof data.tool === 'string' ? data.tool : '';
267
280
  stepType = typeof data.type === 'string' ? data.type : '';
268
281
  if (stepTool && stepType !== 'handoff' && data.status === 'running') {
269
- label = resolveToolActionLabel(stepTool, t, 'present');
270
- if (label) {
271
- isUsingSkill = stepTool === 'get_skill';
282
+ isUsingSkill = stepTool === 'get_skill';
283
+ if (isUsingSkill) {
284
+ // El step de `get_skill` llega justo después de `using_skill`: mantiene el nombre.
272
285
  store().patchMeta(sessionId, {
273
286
  isLoading: true
274
287
  });
275
- // El step de `get_skill` llega justo después de `using_skill`: mantiene el nombre.
276
- store().setActivity(sessionId, isUsingSkill ? getUsingSkillActivity(t, (_data$args = data.args) === null || _data$args === void 0 ? void 0 : _data$args.name) : {
277
- phase: 'action',
278
- message: label
279
- });
288
+ store().setStatus(sessionId, 'thinking');
289
+ store().setActivity(sessionId, getUsingSkillActivity(t, (_data$args = data.args) === null || _data$args === void 0 ? void 0 : _data$args.name));
290
+ } else {
291
+ setThinkingActivity();
280
292
  }
281
293
  }
282
294
  if (typeof data.i === 'number') {
@@ -302,17 +314,8 @@ var parseSessionSSE = /*#__PURE__*/function () {
302
314
  return _context.abrupt("continue", 24);
303
315
  case 19:
304
316
  isUsingSkill = false;
305
- if (data.node === 'agent_transfer') {
306
- store().patchMeta(sessionId, {
307
- isLoading: true
308
- });
309
- store().setStatus(sessionId, 'thinking');
310
- } else if (data.message && typeof data.message === 'string') {
311
- store().patchMeta(sessionId, {
312
- isLoading: true
313
- });
314
- store().setStatus(sessionId, 'thinking');
315
- store().setActivity(sessionId, resolveHitlNodeStreamActivity(data.message, t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined, typeof data.thread_id === 'string' ? data.thread_id : undefined));
317
+ if (data.node === 'agent_transfer' || data.message && typeof data.message === 'string') {
318
+ setThinkingActivity();
316
319
  }
317
320
  return _context.abrupt("continue", 24);
318
321
  case 20:
@@ -337,11 +340,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
337
340
  store().setStatus(sessionId, 'awaiting_approval');
338
341
  (_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, data, accumulatedContent);
339
342
  if (isPreApproved && Array.isArray(data.pending_actions) && data.pending_actions.length > 0) {
340
- store().patchMeta(sessionId, {
341
- isLoading: true
342
- });
343
- store().setStatus(sessionId, 'thinking');
344
- store().setActivity(sessionId, resolveInitialHitlStreamActivity(t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined));
343
+ setThinkingActivity();
345
344
  }
346
345
  return _context.abrupt("continue", 24);
347
346
  case 22:
@@ -762,7 +761,7 @@ export var sessionStreamManager = {
762
761
  callbacks === null || callbacks === void 0 || (_callbacks$onStop = callbacks.onStop) === null || _callbacks$onStop === void 0 || _callbacks$onStop.call(callbacks, partialText);
763
762
  },
764
763
  /** Aborta sin marcar "cancelado" (uso interno / limpieza). */abortSilently: function abortSilently(sessionId) {
765
- var _store$getMeta;
764
+ var _store$getMeta3;
766
765
  var active = activeStreams.get(sessionId);
767
766
  if (!active) return;
768
767
  active.isStopped = true;
@@ -774,7 +773,7 @@ export var sessionStreamManager = {
774
773
  isWriting: false
775
774
  });
776
775
  store().setActivity(sessionId, null);
777
- if (((_store$getMeta = store().getMeta(sessionId)) === null || _store$getMeta === void 0 ? void 0 : _store$getMeta.status) !== 'complete') {
776
+ if (((_store$getMeta3 = store().getMeta(sessionId)) === null || _store$getMeta3 === void 0 ? void 0 : _store$getMeta3.status) !== 'complete') {
778
777
  store().setStatus(sessionId, 'idle');
779
778
  }
780
779
  },
@@ -785,4 +784,4 @@ export var sessionStreamManager = {
785
784
  });
786
785
  }
787
786
  };
788
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFVzaW5nU2tpbGxBY3Rpdml0eSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlVG9vbEFjdGlvbkxhYmVsIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcGFyYW1zJGhpdGxFeGVjdXRpb24iLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsImZsdXNoVG9TdG9yZXMiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiaXNVc2luZ1NraWxsIiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsImRhdGEiLCJ0aGlua2luZ0RlbHRhIiwic3RlcFRvb2wiLCJzdGVwVHlwZSIsImxhYmVsIiwiX2RhdGEkYXJncyIsImNodW5rIiwiX2NodW5rIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwiaXNQcmVBcHByb3ZlZCIsIl9yZWYzIiwiX3QiLCJfdDIiLCJfdDMiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImdldCIsImNvbnRlbnQiLCJfY2FsbGJhY2tzJG9uU3RyZWFtVXAiLCJzZXRUZXh0Iiwib25TdHJlYW1VcGRhdGUiLCJjYWxsIiwid2luZG93Iiwic2V0VGltZW91dCIsInRvRW1pdCIsImNsZWFyVGltZW91dCIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiX2NhbGxiYWNrcyRvblN0YXJ0V3JpIiwicGF0Y2hNZXRhIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwic2V0U3RhdHVzIiwic2V0QWN0aXZpdHkiLCJvblN0YXJ0V3JpdGluZyIsInN5bmNMaXZlTmFycmF0aW9uIiwibWFya0Fuc3dlclJlc2V0IiwicGF5bG9hZCIsIl9wYXlsb2FkJGFnZW50X2lkIiwiX3N1YmFnZW50UmF3JHJlc29sdmVkIiwiX3JlZjIiLCJfY2FsbGJhY2tzJG9uRmluaXNoU3QiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJhZ2VudF9pZCIsImFnZW50SWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiU3RyaW5nIiwidHJpbSIsInN1YmFnZW50UmF3Iiwic3ViYWdlbnQiLCJyZXNvbHZlZENvbnRleHQiLCJyZXNvbHZlZF9jb250ZXh0IiwicmVhc29uaW5nIiwiZmluaXNoIiwiZmluaXNoUGF5bG9hZCIsIm9uRmluaXNoU3RyZWFtIiwiaXNTdG9wcGVkIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJfc2xpY2VkVG9BcnJheSIsInJlcGxhY2UiLCJKU09OIiwicGFyc2UiLCJkZWx0YSIsImkiLCJhcHBlbmRUaGlua2luZyIsInBoYXNlIiwibWVzc2FnZSIsInNraWxsIiwidG9vbCIsInR5cGUiLCJzdGF0dXMiLCJhcmdzIiwibmFtZSIsImNhcHR1cmVMZWFkaW5nRnJvbUJvZHkiLCJhcHBseVN0ZXAiLCJzaG91bGRDbGVhclN0cmVhbUZvckxlYWRpbmciLCJub2RlIiwidW5kZWZpbmVkIiwidGhyZWFkX2lkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiYXV0b19hcHByb3ZlZCIsImFwcHJvdmFsX3N0YXR1cyIsImNsZWFyIiwib25BcHByb3ZhbFJlcXVpcmVkIiwicGVuZGluZ19hY3Rpb25zIiwibGVuZ3RoIiwiY29uc29sZSIsImVycm9yIiwic2V0RXJyb3IiLCJvbkVycm9yIiwid2FybiIsImUiLCJmIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsImlzQWN0aXZlIiwiZ2V0QWN0aXZlQ291bnQiLCJnZXRBY3RpdmVTZXNzaW9uSWRzIiwiZnJvbSIsImtleXMiLCJzdGFydFN0cmVhbSIsIl9jYWxsZWUyIiwicmVxdWVzdCIsImFjdGl2aXR5T3B0aW9ucyIsImFnZW50TmFtZSIsImNvbnRyb2xsZXIiLCJfY2FsbGJhY2tzJG9uRXJyb3IyIiwiX3Q0IiwiX2NvbnRleHQyIiwic3RhcnRlZCIsInJlYXNvbiIsIkFib3J0Q29udHJvbGxlciIsInNldCIsImVuc3VyZVNlc3Npb24iLCJfb2JqZWN0U3ByZWFkIiwic3RhcnQiLCJPcmNoZXN0cmF0b3IiLCJvcmNoZXN0cmF0b3IiLCJzaWduYWwiLCJzdGFydENvbnRpbnVlU3RyZWFtIiwiX2NhbGxlZTMiLCJfcmVmNCIsImNvbnRpbnVlUmVxdWVzdCIsInNzZVBhcmFtcyIsIl9jYWxsYmFja3Mkb25FcnJvcjMiLCJfdDUiLCJfY29udGV4dDMiLCJjb250aW51ZVRocmVhZCIsIm9rIiwiY29uY2F0Iiwic3RhcnRSZXRyeVN0cmVhbSIsIl9jYWxsZWU0IiwicmV0cnlSZXF1ZXN0IiwiZGV0YWlsIiwiX2NhbGxiYWNrcyRvbkVycm9yNCIsIl90NiIsIl90NyIsIl9jb250ZXh0NCIsInJldHJ5Q29tcGxldGlvbiIsImpzb24iLCJzdG9wU3RyZWFtIiwiX2NhbGxiYWNrcyRvblN0b3AiLCJhYm9ydCIsInBhcnRpYWxUZXh0IiwiZ2V0U25hcHNob3QiLCJ0ZXh0Iiwib25TdG9wIiwiYWJvcnRTaWxlbnRseSIsIl9zdG9yZSRnZXRNZXRhIiwiZ2V0TWV0YSIsImFib3J0QWxsIiwiX3RoaXMiLCJmb3JFYWNoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5LFxuICBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlLFxuICBnZXRVc2luZ1NraWxsQWN0aXZpdHksXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlVG9vbEFjdGlvbkxhYmVsLFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHR5cGUgeyBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQsIG1lcmdlU3RyZWFtQ2h1bmsgfSBmcm9tICcuLi8uLi91dGlscy9zc2VTdHJlYW1Db250ZW50J1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB0eXBlIHsgUmVhc29uaW5nU3RlcFBheWxvYWQsIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3JlYXNvbmluZydcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1pbmdUZXh0IH0gZnJvbSAnLi9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkIH0gZnJvbSAnLi9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IHNlc3Npb25IaXRsQ29udGV4dCB9IGZyb20gJy4vc2Vzc2lvbkhpdGxDb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uRmluaXNoUGF5bG9hZCwgU2Vzc2lvblN0cmVhbUNhbGxiYWNrcywgU3RhcnRTdHJlYW1SZXN1bHQgfSBmcm9tICcuL3Nlc3Npb25zLnR5cGVzJ1xuXG50eXBlIE9yY2hlc3RyYXRvclJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3I+WzBdXG50eXBlIENvbnRpbnVlVGhyZWFkUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkPlswXVxudHlwZSBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IucmV0cnlDb21wbGV0aW9uPlswXVxuXG4vKiogQ29tcGF0aWJsZSBjb24gZWwgYHRgIGRlIGkxOG5leHQgKHVzbyBkZSB1bmEgc29sYSBrZXkpLiAqL1xudHlwZSBUcmFuc2xhdGVGbiA9IChrZXk6IHN0cmluZykgPT4gc3RyaW5nXG5cbnR5cGUgU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXF1ZXN0OiBPcmNoZXN0cmF0b3JSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICBjb250aW51ZVJlcXVlc3Q6IENvbnRpbnVlVGhyZWFkUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBTdGFydFJldHJ5U3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgcmV0cnlSZXF1ZXN0OiBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIEFjdGl2ZVN0cmVhbSA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyXG4gIGlzU3RvcHBlZDogYm9vbGVhblxufVxuXG4vKipcbiAqIE3DoXhpbW8gZGUgc2VzaW9uZXMgZ2VuZXJhbmRvIGVuIHBhcmFsZWxvLiBQcm90ZWdlIHJlZC9yZWN1cnNvcyBkZWwgY2xpZW50ZS5cbiAqIEFqdXN0YWJsZSBhIGZ1dHVybyB2w61hIGZsYWcgZGVsIGhvc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TID0gNFxuXG5jb25zdCBTVFJFQU1fVEhST1RUTEVfTVMgPSAxNlxuXG5jb25zdCBhY3RpdmVTdHJlYW1zID0gbmV3IE1hcDxzdHJpbmcsIEFjdGl2ZVN0cmVhbT4oKVxuXG5jb25zdCBzdG9yZSA9ICgpID0+IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKVxuXG5jb25zdCBpc1N0cmVhbUFjdGl2ZSA9IChzZXNzaW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gYWN0aXZlU3RyZWFtcy5oYXMoc2Vzc2lvbklkKVxuXG5jb25zdCBnZXRBY3RpdmVTdHJlYW1Db3VudCA9ICgpOiBudW1iZXIgPT4gYWN0aXZlU3RyZWFtcy5zaXplXG5cbmNvbnN0IHBhcnNlU2Vzc2lvblNTRSA9IGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UsIGFjdGl2ZTogQWN0aXZlU3RyZWFtLCBwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjYWxsYmFja3MsIHQgfSA9IHBhcmFtc1xuICBjb25zdCBoaXRsRXhlY3V0aW9uQ29udGV4dCA9IHBhcmFtcy5oaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZClcblxuICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGxldCB0aHJvdHRsZVRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0IGZsdXNoVG9TdG9yZXMgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgY2FsbGJhY2tzLm9uU3RyZWFtVXBkYXRlPy4oY29udGVudClcbiAgfVxuXG4gIGNvbnN0IGVtaXRUaHJvdHRsZWQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgcGVuZGluZ0NvbnRlbnQgPSBjb250ZW50XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkgcmV0dXJuXG4gICAgdGhyb3R0bGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgICB9XG4gICAgfSwgU1RSRUFNX1RIUk9UVExFX01TKVxuICB9XG5cbiAgY29uc3QgZmx1c2hQZW5kaW5nID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuICAvLyBcIlVzYW5kbyBTa2lsbFwiIHF1ZWRhIHZpc2libGUgbWllbnRyYXMgZWwgbW9kZWxvIHBpZW5zYSBjb24gbGEgc2tpbGwgY2FyZ2FkYTtcbiAgLy8gbG9zIGRlbHRhcyBkZSBgdGhpbmtpbmdgIG5vIGxvIHBpc2FuIGhhc3RhIGxhIHByw7N4aW1hIGFjY2nDs24gbyBlbCBwcmltZXIgdG9rZW4uXG4gIGxldCBpc1VzaW5nU2tpbGwgPSBmYWxzZVxuXG4gIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgIGlmIChoYXNTdGFydGVkV3JpdGluZykgcmV0dXJuXG4gICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSwgaXNXcml0aW5nOiB0cnVlIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnd3JpdGluZycpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgICBjYWxsYmFja3Mub25TdGFydFdyaXRpbmc/LigpXG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNodW5rID0gKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWNodW5rKSByZXR1cm5cbiAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY2h1bmspXG4gICAgcmVhc29uaW5nU3RvcmUuc3luY0xpdmVOYXJyYXRpb24ocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIGVtaXRUaHJvdHRsZWQoYWNjdW11bGF0ZWRDb250ZW50KVxuICB9XG5cbiAgY29uc3QgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQgPSAoKSA9PiB7XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICB9XG4gICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgICBmbHVzaFRvU3RvcmVzKCcnKVxuICAgIHJlYXNvbmluZ1N0b3JlLm1hcmtBbnN3ZXJSZXNldChwbGFjZWhvbGRlcklkKVxuICB9XG5cbiAgY29uc3QgYXBwbHlTdHJlYW1Db21wbGV0ZSA9IChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChwYXlsb2FkLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICBjb25zdCBzb3VyY2VzID0gcGF5bG9hZC5zb3VyY2VzIHx8IG51bGxcbiAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAocGF5bG9hZC5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuYXR0YWNobWVudHMpID8gcGF5bG9hZC5hdHRhY2htZW50cyA6IG51bGxcbiAgICBsZXQgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGxcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLnN1Z2dlc3RfcmVwbHkpKSB7XG4gICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdF9yZXBseSBhcyBzdHJpbmdbXVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdXG4gICAgfVxuICAgIGNvbnN0IGFnZW50SWRSYXcgPSBwYXlsb2FkLmFnZW50X2lkID8/IHBheWxvYWQuYWdlbnRJZFxuICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgIGNvbnN0IHN1YmFnZW50UmF3ID0gcGF5bG9hZC5zdWJhZ2VudCBhcyB7IHJlc29sdmVkX2NvbnRleHQ/OiB1bmtub3duIH0gfCBudWxsIHwgdW5kZWZpbmVkXG4gICAgY29uc3QgcmVzb2x2ZWRDb250ZXh0ID0gc3ViYWdlbnRSYXc/LnJlc29sdmVkX2NvbnRleHQgPz8gbnVsbFxuICAgIGNvbnN0IHJlYXNvbmluZyA9IChwYXlsb2FkLnJlYXNvbmluZyBhcyBSZWFzb25pbmdUcmFjZVBheWxvYWQgfCBudWxsKSA/PyBudWxsXG5cbiAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgcmVhc29uaW5nKVxuICAgIGZsdXNoUGVuZGluZygpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdjb21wbGV0ZScpXG5cbiAgICBjb25zdCBmaW5pc2hQYXlsb2FkOiBTZXNzaW9uRmluaXNoUGF5bG9hZCA9IHtcbiAgICAgIGNvbnRlbnQ6IGZpbmFsQ29udGVudCxcbiAgICAgIHNvdXJjZXMsXG4gICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICBhdHRhY2htZW50cyxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgIHJlc29sdmVkQ29udGV4dCxcbiAgICAgIHJlYXNvbmluZyxcbiAgICB9XG4gICAgY2FsbGJhY2tzLm9uRmluaXNoU3RyZWFtPy4oZmluaXNoUGF5bG9hZClcblxuICAgIC8vIEVsIHRleHRvIGVuIHZpdm8gTk8gc2UgbGltcGlhIGFjw6EgYSBwcm9ww7NzaXRvLiBFbCBwbGFjZWhvbGRlciBzZSB2YSBjb24gZWxcbiAgICAvLyBgZHJvcGAgcXVlIGhhY2UgZWwgY29uc3VtaWRvciwgeSBjb24gw6lsIHN1IHN1c2NyaXBjacOzbjsgdmFjaWFybG8gYW50ZXMgbG9cbiAgICAvLyBkZWphYmEgbW9udGFkbyB5IHNpbiB0ZXh0byAoYWx0dXJhIDApIGR1cmFudGUgfjI1bXM6IGVsIGZsaWNrZXIgZGUgZmluIGRlXG4gICAgLy8gc3RyZWFtLiBObyBhbGNhbnphIGNvbiBkaWZlcmlybG8sIHBvcnF1ZSBlc3RlIGNsZWFyIHZpYWphIGVuIFN5bmNMYW5lXG4gICAgLy8gKHN0b3JlIGV4dGVybm8pIHkgZWwgc3dhcCBkZSBtZW5zYWplcyBlbiBEZWZhdWx0TGFuZSwgYXPDrSBxdWUgc2llbXByZSBzZVxuICAgIC8vIGN1ZWxhIGVuIGVsIG1lZGlvLiBFbCBzbG90IHNlIGxpYmVyYSBlbiBlbCBwcsOzeGltbyBgc3RhcnQoKWAgZGUgbGEgc2VzacOzbixcbiAgICAvLyB5IGVuIHN0b3AvZXJyb3IvYXBwcm92YWwvY2FtYmlvIGRlIHNlc2nDs24sIHF1ZSBzw60gbGxhbWFuIGBjbGVhcmAuXG4gIH1cblxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgaWYgKGRvbmUpIGJyZWFrXG5cbiAgICAgIGlmIChhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gICAgICAgIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgY29udGludWVcblxuICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndGhpbmtpbmcnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRoaW5raW5nRGVsdGEgPSB0eXBlb2YgZGF0YS5kZWx0YSA9PT0gJ3N0cmluZycgPyBkYXRhLmRlbHRhIDogJydcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmkgPT09ICdudW1iZXInICYmIHRoaW5raW5nRGVsdGEpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5hcHBlbmRUaGlua2luZyhwbGFjZWhvbGRlcklkLCBkYXRhLmksIHRoaW5raW5nRGVsdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgaWYgKCFpc1VzaW5nU2tpbGwpIHtcbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCB7IHBoYXNlOiAndGhpbmtpbmcnLCBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNraWxsIEAtbWVuY2lvbmFkYSAoYWwgYWJyaXIgZWwgc3RyZWFtKSBvIGxsYW1hZGEgYSBgZ2V0X3NraWxsYC5cbiAgICAgICAgICAgIGNhc2UgJ3VzaW5nX3NraWxsJzpcbiAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA9IHRydWVcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRVc2luZ1NraWxsQWN0aXZpdHkodCwgZGF0YS5za2lsbCkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgLy8gRWwgYmFja2VuZCBkZXNjYXJ0YSBsbyBlbWl0aWRvIHkgcmVpbmljaWEgbGEgcmVzcHVlc3RhIGRlc2RlIGNlcm8uXG4gICAgICAgICAgICBjYXNlICdhbnN3ZXJfcmVzZXQnOlxuICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ3JlYXNvbmluZ19zdGVwJzoge1xuICAgICAgICAgICAgICBjb25zdCBzdGVwVG9vbCA9IHR5cGVvZiBkYXRhLnRvb2wgPT09ICdzdHJpbmcnID8gZGF0YS50b29sIDogJydcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFR5cGUgPSB0eXBlb2YgZGF0YS50eXBlID09PSAnc3RyaW5nJyA/IGRhdGEudHlwZSA6ICcnXG4gICAgICAgICAgICAgIGlmIChzdGVwVG9vbCAmJiBzdGVwVHlwZSAhPT0gJ2hhbmRvZmYnICYmIGRhdGEuc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHJlc29sdmVUb29sQWN0aW9uTGFiZWwoc3RlcFRvb2wsIHQsICdwcmVzZW50JylcbiAgICAgICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA9IHN0ZXBUb29sID09PSAnZ2V0X3NraWxsJ1xuICAgICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgLy8gRWwgc3RlcCBkZSBgZ2V0X3NraWxsYCBsbGVnYSBqdXN0byBkZXNwdcOpcyBkZSBgdXNpbmdfc2tpbGxgOiBtYW50aWVuZSBlbCBub21icmUuXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA/IGdldFVzaW5nU2tpbGxBY3Rpdml0eSh0LCBkYXRhLmFyZ3M/Lm5hbWUpIDogeyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IGxhYmVsIH1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuY2FwdHVyZUxlYWRpbmdGcm9tQm9keShwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwbHlTdGVwKHBsYWNlaG9sZGVySWQsIGRhdGEgYXMgUmVhc29uaW5nU3RlcFBheWxvYWQpXG4gICAgICAgICAgICAgICAgaWYgKHJlYXNvbmluZ1N0b3JlLnNob3VsZENsZWFyU3RyZWFtRm9yTGVhZGluZyhwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICBpc1VzaW5nU2tpbGwgPSBmYWxzZVxuICAgICAgICAgICAgICBpZiAoZGF0YS5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLnRocmVhZF9pZCA9PT0gJ3N0cmluZycgPyBkYXRhLnRocmVhZF9pZCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIC8vIFByZWFwcm9iYWRvIChhdXRvLWFwcHJvdmUgbyBkZXRlY2Npw7NuIG1hbnVhbCk6IGVsIHN0cmVhbSBubyBzZSBjb3J0YSxcbiAgICAgICAgICAgICAgLy8gc2lndWUgZWplY3V0YW5kbyBsYXMgYWNjaW9uZXMgc2luIGVzcGVyYXIgZGVjaXNpw7NuIGRlbCB1c3VhcmlvLlxuICAgICAgICAgICAgICBjb25zdCBpc1ByZUFwcHJvdmVkID1cbiAgICAgICAgICAgICAgICBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXV0b19hcHByb3ZlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIGlmICghaXNQcmVBcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCAoZGF0YS5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdhd2FpdGluZ19hcHByb3ZhbCcpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihkYXRhIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICBpZiAoaXNQcmVBcHByb3ZlZCAmJiBBcnJheS5pc0FycmF5KGRhdGEucGVuZGluZ19hY3Rpb25zKSAmJiBkYXRhLnBlbmRpbmdfYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEVycm9yKHNlc3Npb25JZCwgeyB0eXBlOiBkYXRhLmVycm9yPy50eXBlLCBtZXNzYWdlOiBkYXRhLmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmbHVzaFBlbmRpbmcoKVxuICB9XG59XG5cbi8qKlxuICogTWFuYWdlciBzaW5nbGV0b24gKG1vZHVsZS1sZXZlbCkgcXVlIGNvcnJlIE4gc3RyZWFtcyBkZWwgb3JjaGVzdHJhdG9yIGVuXG4gKiBwYXJhbGVsbywgdW5vIHBvciBgc2Vzc2lvbklkYC4gU29icmV2aXZlIGEgY2FtYmlvcyBkZSB2aXN0YSB5IGFsIGNpZXJyZSBkZWxcbiAqIG1vZGFsOiBsb3Mgc3RyZWFtcyBzb2xvIHNlIGNhbmNlbGFuIGNvbiBzdG9wIGV4cGzDrWNpdG8gZGVsIHVzdWFyaW8gbyBhbFxuICogY29tcGxldGFyL2Vycm9yYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXNzaW9uU3RyZWFtTWFuYWdlciA9IHtcbiAgaXNBY3RpdmU6IGlzU3RyZWFtQWN0aXZlLFxuICBnZXRBY3RpdmVDb3VudDogZ2V0QWN0aXZlU3RyZWFtQ291bnQsXG4gIGdldEFjdGl2ZVNlc3Npb25JZHM6ICgpOiBzdHJpbmdbXSA9PiBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKSxcblxuICBhc3luYyBzdGFydFN0cmVhbShwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN0YXJ0KHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCBhY3Rpdml0eU9wdGlvbnMgPz8ge30pKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKHJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVzdW1lIEhJVEwgKGBjb250aW51ZS10aHJlYWRgKSBrZXllZCBwb3Igc2Vzc2lvbklkIOKAlCBtaXNtbyBtb3RvciBxdWUgb3JjaGVzdHJhdG9yLiAqL1xuICBhc3luYyBzdGFydENvbnRpbnVlU3RyZWFtKHBhcmFtczogU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250aW51ZVJlcXVlc3QsIGNhbGxiYWNrcywgdCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBpZiAoaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2FscmVhZHlfYWN0aXZlJyB9XG4gICAgfVxuICAgIGlmIChnZXRBY3RpdmVTdHJlYW1Db3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdsaW1pdCcgfVxuICAgIH1cblxuICAgIGlmIChoaXRsRXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LnNldChzZXNzaW9uSWQsIGhpdGxFeGVjdXRpb25Db250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4uKGFnZW50SWQgIT0gbnVsbCA/IHsgYWdlbnRJZCB9IDoge30pLFxuICAgICAgLi4uKGFnZW50TmFtZSAhPSBudWxsID8geyBhZ2VudE5hbWUgfSA6IHt9KSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKSA/PyB1bmRlZmluZWQpXG4gICAgKVxuXG4gICAgY29uc3Qgc3NlUGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICByZXF1ZXN0OiB7fSBhcyBPcmNoZXN0cmF0b3JSZXF1ZXN0LFxuICAgICAgY2FsbGJhY2tzLFxuICAgICAgdCxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCksXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKGNvbnRpbnVlUmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udGludWUtdGhyZWFkIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBzc2VQYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgICBzZXNzaW9uSGl0bENvbnRleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBSZWdlbmVyYSBsYSByZXNwdWVzdGEgZGUgdW4gdHVybm8gKGByZXRyeV9jb21wbGV0aW9uYCkg4oCUIG1pc21vIG1vdG9yIFNTRSBxdWUgb3JjaGVzdHJhdG9yLiAqL1xuICBhc3luYyBzdGFydFJldHJ5U3RyZWFtKHBhcmFtczogU3RhcnRSZXRyeVN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXRyeVJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBhY3Rpdml0eU9wdGlvbnMsXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLnJldHJ5Q29tcGxldGlvbihyZXRyeVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICBsZXQgZGV0YWlsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgZGV0YWlsPzogc3RyaW5nIH1cbiAgICAgICAgICAgIGRldGFpbCA9IHR5cGVvZiBkYXRhLmRldGFpbCA9PT0gJ3N0cmluZycgPyBkYXRhLmRldGFpbCA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgZGV0YWlsID0gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZXRhaWwgPT09ICdUdXJuIG5vdCBmb3VuZCcpIHtcbiAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlLCBwbGFjZWhvbGRlcklkOiBudWxsIH0pXG4gICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgICAgICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ3R1cm5fbm90X2ZvdW5kJyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmV0cnlfY29tcGxldGlvbiBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBDYW5jZWxhY2nDs24gZXhwbMOtY2l0YSBkZWwgdXN1YXJpbyAobWVuc2FqZSBcImNhbmNlbGFkb1wiKS4gKi9cbiAgc3RvcFN0cmVhbShzZXNzaW9uSWQ6IHN0cmluZywgY2FsbGJhY2tzPzogU2Vzc2lvblN0cmVhbUNhbGxiYWNrcykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIC8vIEVsIHBhcmNpYWwgc2UgcmVzY2F0YSBhbnRlcyBkZSBsaW1waWFyOiBlbCBiYWNrZW5kIGxvIHBlcnNpc3RlLCBwZXJvIHNpIG5vIGxvXG4gICAgLy8gcGFzYW1vcyBhbCBjYWxsYmFjayBkZXNhcGFyZWNlIGRlIHBhbnRhbGxhIGhhc3RhIGVsIHByw7N4aW1vIGZldGNoIGRlIGxhIHNlc2nDs24uXG4gICAgY29uc3QgcGFydGlhbFRleHQgPSBzZXNzaW9uU3RyZWFtaW5nVGV4dC5nZXRTbmFwc2hvdChzZXNzaW9uSWQpLnRleHRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdjYW5jZWxsZWQnKVxuICAgIGNhbGxiYWNrcz8ub25TdG9wPy4ocGFydGlhbFRleHQpXG4gIH0sXG5cbiAgLyoqIEFib3J0YSBzaW4gbWFyY2FyIFwiY2FuY2VsYWRvXCIgKHVzbyBpbnRlcm5vIC8gbGltcGllemEpLiAqL1xuICBhYm9ydFNpbGVudGx5KHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlU3RyZWFtcy5nZXQoc2Vzc2lvbklkKVxuICAgIGlmICghYWN0aXZlKSByZXR1cm5cbiAgICBhY3RpdmUuaXNTdG9wcGVkID0gdHJ1ZVxuICAgIGFjdGl2ZS5jb250cm9sbGVyLmFib3J0KClcbiAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgaWYgKHN0b3JlKCkuZ2V0TWV0YShzZXNzaW9uSWQpPy5zdGF0dXMgIT09ICdjb21wbGV0ZScpIHtcbiAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgIH1cbiAgfSxcblxuICBhYm9ydEFsbCgpIHtcbiAgICBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKS5mb3JFYWNoKHNlc3Npb25JZCA9PiB0aGlzLmFib3J0U2lsZW50bHkoc2Vzc2lvbklkKSlcbiAgfSxcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsSUFBSSxNQUFNLHFCQUFxQjtBQUV0QyxTQUNFQyx3QkFBd0IsRUFDeEJDLHlCQUF5QixFQUN6QkMscUJBQXFCLEVBQ3JCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsZ0NBQWdDLEVBQ2hDQyxzQkFBc0IsUUFDakIsb0NBQW9DO0FBRTNDLFNBQVNDLHdCQUF3QixFQUFFQyxnQkFBZ0IsUUFB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
787
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdTdHJlYW1BY3Rpdml0eSIsImdldFVzaW5nU2tpbGxBY3Rpdml0eSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJwZW5kaW5nQ29udGVudCIsInRocm90dGxlVGltZXIiLCJmbHVzaFRvU3RvcmVzIiwiZW1pdFRocm90dGxlZCIsImZsdXNoUGVuZGluZyIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsImlzVXNpbmdTa2lsbCIsInNldFRoaW5raW5nQWN0aXZpdHkiLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsImFwcGx5U3RyZWFtQ2h1bmsiLCJjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCIsImFwcGx5U3RyZWFtQ29tcGxldGUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGluZSIsIl9saW5lJHNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiZGF0YSIsInRoaW5raW5nRGVsdGEiLCJzdGVwVG9vbCIsInN0ZXBUeXBlIiwiX2RhdGEkYXJncyIsImNodW5rIiwiX2NodW5rIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwiaXNQcmVBcHByb3ZlZCIsIl9yZWYzIiwiX3QiLCJfdDIiLCJfdDMiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImNvbnRlbnQiLCJfY2FsbGJhY2tzJG9uU3RyZWFtVXAiLCJzZXRUZXh0Iiwib25TdHJlYW1VcGRhdGUiLCJjYWxsIiwid2luZG93Iiwic2V0VGltZW91dCIsInRvRW1pdCIsImNsZWFyVGltZW91dCIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiX3N0b3JlJGdldE1ldGEiLCJ0aGlua2luZ0FjdGl2aXR5IiwiY3VycmVudCIsImdldE1ldGEiLCJzdHJlYW1BY3Rpdml0eSIsInBoYXNlIiwibWVzc2FnZSIsInBhdGNoTWV0YSIsImlzTG9hZGluZyIsInNldFN0YXR1cyIsInNldEFjdGl2aXR5IiwiX3N0b3JlJGdldE1ldGEyIiwiX2NhbGxiYWNrcyRvblN0YXJ0V3JpIiwiaXNXcml0aW5nIiwib25TdGFydFdyaXRpbmciLCJzeW5jTGl2ZU5hcnJhdGlvbiIsIm1hcmtBbnN3ZXJSZXNldCIsInBheWxvYWQiLCJfcGF5bG9hZCRhZ2VudF9pZCIsIl9zdWJhZ2VudFJhdyRyZXNvbHZlZCIsIl9yZWYyIiwiX2NhbGxiYWNrcyRvbkZpbmlzaFN0IiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwiYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiY29tcGxldGVkQWdlbnRJZCIsIlN0cmluZyIsInRyaW0iLCJzdWJhZ2VudFJhdyIsInN1YmFnZW50IiwicmVzb2x2ZWRDb250ZXh0IiwicmVzb2x2ZWRfY29udGV4dCIsInJlYXNvbmluZyIsImZpbmlzaCIsImZpbmlzaFBheWxvYWQiLCJvbkZpbmlzaFN0cmVhbSIsImlzU3RvcHBlZCIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwic3BsaXQiLCJwb3AiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwiX3NsaWNlZFRvQXJyYXkiLCJyZXBsYWNlIiwiSlNPTiIsInBhcnNlIiwiZGVsdGEiLCJpIiwiYXBwZW5kVGhpbmtpbmciLCJza2lsbCIsInRvb2wiLCJ0eXBlIiwic3RhdHVzIiwiYXJncyIsIm5hbWUiLCJjYXB0dXJlTGVhZGluZ0Zyb21Cb2R5IiwiYXBwbHlTdGVwIiwic2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nIiwibm9kZSIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImF1dG9fYXBwcm92ZWQiLCJhcHByb3ZhbF9zdGF0dXMiLCJjbGVhciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInNldEVycm9yIiwib25FcnJvciIsIndhcm4iLCJlIiwiZiIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwic2Vzc2lvblN0cmVhbU1hbmFnZXIiLCJpc0FjdGl2ZSIsImdldEFjdGl2ZUNvdW50IiwiZ2V0QWN0aXZlU2Vzc2lvbklkcyIsImZyb20iLCJrZXlzIiwic3RhcnRTdHJlYW0iLCJfY2FsbGVlMiIsInJlcXVlc3QiLCJhY3Rpdml0eU9wdGlvbnMiLCJhZ2VudE5hbWUiLCJjb250cm9sbGVyIiwiX2NhbGxiYWNrcyRvbkVycm9yMiIsIl90NCIsIl9jb250ZXh0MiIsInN0YXJ0ZWQiLCJyZWFzb24iLCJBYm9ydENvbnRyb2xsZXIiLCJzZXQiLCJlbnN1cmVTZXNzaW9uIiwiX29iamVjdFNwcmVhZCIsInN0YXJ0IiwiT3JjaGVzdHJhdG9yIiwib3JjaGVzdHJhdG9yIiwic2lnbmFsIiwic3RhcnRDb250aW51ZVN0cmVhbSIsIl9jYWxsZWUzIiwiX3JlZjQiLCJjb250aW51ZVJlcXVlc3QiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsInNzZVBhcmFtcyIsIl9jYWxsYmFja3Mkb25FcnJvcjMiLCJfdDUiLCJfY29udGV4dDMiLCJnZXQiLCJ1bmRlZmluZWQiLCJjb250aW51ZVRocmVhZCIsIm9rIiwiY29uY2F0Iiwic3RhcnRSZXRyeVN0cmVhbSIsIl9jYWxsZWU0IiwicmV0cnlSZXF1ZXN0IiwiZGV0YWlsIiwiX2NhbGxiYWNrcyRvbkVycm9yNCIsIl90NiIsIl90NyIsIl9jb250ZXh0NCIsInJldHJ5Q29tcGxldGlvbiIsImpzb24iLCJzdG9wU3RyZWFtIiwiX2NhbGxiYWNrcyRvblN0b3AiLCJhYm9ydCIsInBhcnRpYWxUZXh0IiwiZ2V0U25hcHNob3QiLCJ0ZXh0Iiwib25TdG9wIiwiYWJvcnRTaWxlbnRseSIsIl9zdG9yZSRnZXRNZXRhMyIsImFib3J0QWxsIiwiX3RoaXMiLCJmb3JFYWNoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5LFxuICBnZXRUaGlua2luZ1N0cmVhbUFjdGl2aXR5LFxuICBnZXRVc2luZ1NraWxsQWN0aXZpdHksXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwUGF5bG9hZCwgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4vdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQgfSBmcm9tICcuL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgc2Vzc2lvbkhpdGxDb250ZXh0IH0gZnJvbSAnLi9zZXNzaW9uSGl0bENvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFNlc3Npb25GaW5pc2hQYXlsb2FkLCBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzLCBTdGFydFN0cmVhbVJlc3VsdCB9IGZyb20gJy4vc2Vzc2lvbnMudHlwZXMnXG5cbnR5cGUgT3JjaGVzdHJhdG9yUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcj5bMF1cbnR5cGUgQ29udGludWVUaHJlYWRSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQ+WzBdXG50eXBlIFJldHJ5Q29tcGxldGlvblJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24+WzBdXG5cbi8qKiBDb21wYXRpYmxlIGNvbiBlbCBgdGAgZGUgaTE4bmV4dCAodXNvIGRlIHVuYSBzb2xhIGtleSkuICovXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxudHlwZSBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJlcXVlc3Q6IE9yY2hlc3RyYXRvclJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIGNvbnRpbnVlUmVxdWVzdDogQ29udGludWVUaHJlYWRSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXRyeVJlcXVlc3Q6IFJldHJ5Q29tcGxldGlvblJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgQWN0aXZlU3RyZWFtID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgaXNTdG9wcGVkOiBib29sZWFuXG59XG5cbi8qKlxuICogTcOheGltbyBkZSBzZXNpb25lcyBnZW5lcmFuZG8gZW4gcGFyYWxlbG8uIFByb3RlZ2UgcmVkL3JlY3Vyc29zIGRlbCBjbGllbnRlLlxuICogQWp1c3RhYmxlIGEgZnV0dXJvIHbDrWEgZmxhZyBkZWwgaG9zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgPSA0XG5cbmNvbnN0IFNUUkVBTV9USFJPVFRMRV9NUyA9IDE2XG5cbmNvbnN0IGFjdGl2ZVN0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgQWN0aXZlU3RyZWFtPigpXG5cbmNvbnN0IHN0b3JlID0gKCkgPT4gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpXG5cbmNvbnN0IGlzU3RyZWFtQWN0aXZlID0gKHNlc3Npb25JZDogc3RyaW5nKTogYm9vbGVhbiA9PiBhY3RpdmVTdHJlYW1zLmhhcyhzZXNzaW9uSWQpXG5cbmNvbnN0IGdldEFjdGl2ZVN0cmVhbUNvdW50ID0gKCk6IG51bWJlciA9PiBhY3RpdmVTdHJlYW1zLnNpemVcblxuY29uc3QgcGFyc2VTZXNzaW9uU1NFID0gYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSwgYWN0aXZlOiBBY3RpdmVTdHJlYW0sIHBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNhbGxiYWNrcywgdCB9ID0gcGFyYW1zXG5cbiAgbGV0IHBlbmRpbmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgdGhyb3R0bGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICBjb25zdCBmbHVzaFRvU3RvcmVzID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIGNhbGxiYWNrcy5vblN0cmVhbVVwZGF0ZT8uKGNvbnRlbnQpXG4gIH1cblxuICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHBlbmRpbmdDb250ZW50ID0gY29udGVudFxuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHJldHVyblxuICAgIHRocm90dGxlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgICAgfVxuICAgIH0sIFNUUkVBTV9USFJPVFRMRV9NUylcbiAgfVxuXG4gIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgIH1cbiAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcbiAgLy8gXCJVc2FuZG8gU2tpbGxcIiBxdWVkYSB2aXNpYmxlIG1pZW50cmFzIGVsIG1vZGVsbyBwaWVuc2EgY29uIGxhIHNraWxsIGNhcmdhZGE7XG4gIC8vIGxvcyBkZWx0YXMgZGUgYHRoaW5raW5nYCBubyBsbyBwaXNhbiBoYXN0YSBsYSBwcsOzeGltYSBhY2Npw7NuIG8gZWwgcHJpbWVyIHRva2VuLlxuICBsZXQgaXNVc2luZ1NraWxsID0gZmFsc2VcblxuICBjb25zdCBzZXRUaGlua2luZ0FjdGl2aXR5ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRoaW5raW5nQWN0aXZpdHkgPSBnZXRUaGlua2luZ1N0cmVhbUFjdGl2aXR5KHQpXG4gICAgY29uc3QgY3VycmVudCA9IHN0b3JlKCkuZ2V0TWV0YShzZXNzaW9uSWQpPy5zdHJlYW1BY3Rpdml0eVxuICAgIGlmIChjdXJyZW50Py5waGFzZSA9PT0gJ3RoaW5raW5nJyAmJiBjdXJyZW50Lm1lc3NhZ2UgPT09IHRoaW5raW5nQWN0aXZpdHkubWVzc2FnZSkgcmV0dXJuXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgdGhpbmtpbmdBY3Rpdml0eSlcbiAgfVxuXG4gIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgIC8vIEN1YWxxdWllciB0b2tlbiBjb3J0YSBcIlVzYW5kbyBTa2lsbFwiOiBlbCBpbmRpY2Fkb3IgdnVlbHZlIGEgYWx0ZXJuYXIgcGVuc2FuZG8gLyBlc2NyaWJpZW5kby5cbiAgICBpc1VzaW5nU2tpbGwgPSBmYWxzZVxuICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSwgaXNXcml0aW5nOiB0cnVlIH0pXG4gICAgICBjYWxsYmFja3Mub25TdGFydFdyaXRpbmc/LigpXG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSBzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RyZWFtQWN0aXZpdHlcbiAgICBpZiAoY3VycmVudD8ucGhhc2UgIT09ICd3cml0aW5nJykge1xuICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSwgaXNXcml0aW5nOiB0cnVlIH0pXG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd3cml0aW5nJylcbiAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgYXBwbHlTdHJlYW1DaHVuayA9IChjaHVuazogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFjaHVuaykgcmV0dXJuXG4gICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNodW5rKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN5bmNMaXZlTmFycmF0aW9uKHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgfVxuXG4gIGNvbnN0IGNsZWFyU3RyZWFtTGlrZUFuc3dlclJlc2V0ID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgZmx1c2hUb1N0b3JlcygnJylcbiAgICByZWFzb25pbmdTdG9yZS5tYXJrQW5zd2VyUmVzZXQocGxhY2Vob2xkZXJJZClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ29tcGxldGUgPSAocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAocGF5bG9hZC5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgY29uc3Qgc291cmNlcyA9IHBheWxvYWQuc291cmNlcyB8fCBudWxsXG4gICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKHBheWxvYWQubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmF0dGFjaG1lbnRzKSA/IHBheWxvYWQuYXR0YWNobWVudHMgOiBudWxsXG4gICAgbGV0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW11cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0aW9ucykpIHtcbiAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXVxuICAgIH1cbiAgICBjb25zdCBhZ2VudElkUmF3ID0gcGF5bG9hZC5hZ2VudF9pZCA/PyBwYXlsb2FkLmFnZW50SWRcbiAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID0gYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICBjb25zdCBzdWJhZ2VudFJhdyA9IHBheWxvYWQuc3ViYWdlbnQgYXMgeyByZXNvbHZlZF9jb250ZXh0PzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgIGNvbnN0IHJlc29sdmVkQ29udGV4dCA9IHN1YmFnZW50UmF3Py5yZXNvbHZlZF9jb250ZXh0ID8/IG51bGxcbiAgICBjb25zdCByZWFzb25pbmcgPSAocGF5bG9hZC5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbFxuXG4gICAgcmVhc29uaW5nU3RvcmUuZmluaXNoKHBsYWNlaG9sZGVySWQsIHJlYXNvbmluZylcbiAgICBmbHVzaFBlbmRpbmcoKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY29tcGxldGUnKVxuXG4gICAgY29uc3QgZmluaXNoUGF5bG9hZDogU2Vzc2lvbkZpbmlzaFBheWxvYWQgPSB7XG4gICAgICBjb250ZW50OiBmaW5hbENvbnRlbnQsXG4gICAgICBzb3VyY2VzLFxuICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgYXR0YWNobWVudHMsXG4gICAgICBzdWdnZXN0aW9ucyxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICByZXNvbHZlZENvbnRleHQsXG4gICAgICByZWFzb25pbmcsXG4gICAgfVxuICAgIGNhbGxiYWNrcy5vbkZpbmlzaFN0cmVhbT8uKGZpbmlzaFBheWxvYWQpXG5cbiAgICAvLyBFbCB0ZXh0byBlbiB2aXZvIE5PIHNlIGxpbXBpYSBhY8OhIGEgcHJvcMOzc2l0by4gRWwgcGxhY2Vob2xkZXIgc2UgdmEgY29uIGVsXG4gICAgLy8gYGRyb3BgIHF1ZSBoYWNlIGVsIGNvbnN1bWlkb3IsIHkgY29uIMOpbCBzdSBzdXNjcmlwY2nDs247IHZhY2lhcmxvIGFudGVzIGxvXG4gICAgLy8gZGVqYWJhIG1vbnRhZG8geSBzaW4gdGV4dG8gKGFsdHVyYSAwKSBkdXJhbnRlIH4yNW1zOiBlbCBmbGlja2VyIGRlIGZpbiBkZVxuICAgIC8vIHN0cmVhbS4gTm8gYWxjYW56YSBjb24gZGlmZXJpcmxvLCBwb3JxdWUgZXN0ZSBjbGVhciB2aWFqYSBlbiBTeW5jTGFuZVxuICAgIC8vIChzdG9yZSBleHRlcm5vKSB5IGVsIHN3YXAgZGUgbWVuc2FqZXMgZW4gRGVmYXVsdExhbmUsIGFzw60gcXVlIHNpZW1wcmUgc2VcbiAgICAvLyBjdWVsYSBlbiBlbCBtZWRpby4gRWwgc2xvdCBzZSBsaWJlcmEgZW4gZWwgcHLDs3hpbW8gYHN0YXJ0KClgIGRlIGxhIHNlc2nDs24sXG4gICAgLy8geSBlbiBzdG9wL2Vycm9yL2FwcHJvdmFsL2NhbWJpbyBkZSBzZXNpw7NuLCBxdWUgc8OtIGxsYW1hbiBgY2xlYXJgLlxuICB9XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgIGlmIChkb25lKSBicmVha1xuXG4gICAgICBpZiAoYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcblxuICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuXG4gICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nJzoge1xuICAgICAgICAgICAgICBjb25zdCB0aGlua2luZ0RlbHRhID0gdHlwZW9mIGRhdGEuZGVsdGEgPT09ICdzdHJpbmcnID8gZGF0YS5kZWx0YSA6ICcnXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5pID09PSAnbnVtYmVyJyAmJiB0aGlua2luZ0RlbHRhKSB7XG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwZW5kVGhpbmtpbmcocGxhY2Vob2xkZXJJZCwgZGF0YS5pLCB0aGlua2luZ0RlbHRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIE1pZW50cmFzIGR1cmEgXCJVc2FuZG8gU2tpbGxcIiBsb3MgZGVsdGFzIGRlIHRoaW5raW5nIG5vIHBpc2FuIGxhIGFjdGl2aWRhZC5cbiAgICAgICAgICAgICAgaWYgKCFpc1VzaW5nU2tpbGwpIHtcbiAgICAgICAgICAgICAgICBzZXRUaGlua2luZ0FjdGl2aXR5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTa2lsbCBALW1lbmNpb25hZGEgKGFsIGFicmlyIGVsIHN0cmVhbSkgbyBsbGFtYWRhIGEgYGdldF9za2lsbGAuXG4gICAgICAgICAgICBjYXNlICd1c2luZ19za2lsbCc6XG4gICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICBpc1VzaW5nU2tpbGwgPSB0cnVlXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0VXNpbmdTa2lsbEFjdGl2aXR5KHQsIGRhdGEuc2tpbGwpKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIC8vIEVsIGJhY2tlbmQgZGVzY2FydGEgbG8gZW1pdGlkbyB5IHJlaW5pY2lhIGxhIHJlc3B1ZXN0YSBkZXNkZSBjZXJvLlxuICAgICAgICAgICAgY2FzZSAnYW5zd2VyX3Jlc2V0JzpcbiAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdyZWFzb25pbmdfc3RlcCc6IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFRvb2wgPSB0eXBlb2YgZGF0YS50b29sID09PSAnc3RyaW5nJyA/IGRhdGEudG9vbCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBUeXBlID0gdHlwZW9mIGRhdGEudHlwZSA9PT0gJ3N0cmluZycgPyBkYXRhLnR5cGUgOiAnJ1xuICAgICAgICAgICAgICBpZiAoc3RlcFRvb2wgJiYgc3RlcFR5cGUgIT09ICdoYW5kb2ZmJyAmJiBkYXRhLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICAgICAgaXNVc2luZ1NraWxsID0gc3RlcFRvb2wgPT09ICdnZXRfc2tpbGwnXG4gICAgICAgICAgICAgICAgaWYgKGlzVXNpbmdTa2lsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gRWwgc3RlcCBkZSBgZ2V0X3NraWxsYCBsbGVnYSBqdXN0byBkZXNwdcOpcyBkZSBgdXNpbmdfc2tpbGxgOiBtYW50aWVuZSBlbCBub21icmUuXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0VXNpbmdTa2lsbEFjdGl2aXR5KHQsIGRhdGEuYXJncz8ubmFtZSkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNldFRoaW5raW5nQWN0aXZpdHkoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuaSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5jYXB0dXJlTGVhZGluZ0Zyb21Cb2R5KHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5hcHBseVN0ZXAocGxhY2Vob2xkZXJJZCwgZGF0YSBhcyBSZWFzb25pbmdTdGVwUGF5bG9hZClcbiAgICAgICAgICAgICAgICBpZiAocmVhc29uaW5nU3RvcmUuc2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nKHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTGlrZUFuc3dlclJlc2V0KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAndG9rZW4nOiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIGRhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBkYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIGRhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBkYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA9IGZhbHNlXG4gICAgICAgICAgICAgIGlmIChkYXRhLm5vZGUgPT09ICdhZ2VudF90cmFuc2ZlcicgfHwgKGRhdGEubWVzc2FnZSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICAgICAgICBzZXRUaGlua2luZ0FjdGl2aXR5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIC8vIFByZWFwcm9iYWRvIChhdXRvLWFwcHJvdmUgbyBkZXRlY2Npw7NuIG1hbnVhbCk6IGVsIHN0cmVhbSBubyBzZSBjb3J0YSxcbiAgICAgICAgICAgICAgLy8gc2lndWUgZWplY3V0YW5kbyBsYXMgYWNjaW9uZXMgc2luIGVzcGVyYXIgZGVjaXNpw7NuIGRlbCB1c3VhcmlvLlxuICAgICAgICAgICAgICBjb25zdCBpc1ByZUFwcHJvdmVkID1cbiAgICAgICAgICAgICAgICBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXV0b19hcHByb3ZlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIGlmICghaXNQcmVBcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCAoZGF0YS5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdhd2FpdGluZ19hcHByb3ZhbCcpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihkYXRhIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICBpZiAoaXNQcmVBcHByb3ZlZCAmJiBBcnJheS5pc0FycmF5KGRhdGEucGVuZGluZ19hY3Rpb25zKSAmJiBkYXRhLnBlbmRpbmdfYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhpbmtpbmdBY3Rpdml0eSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRFcnJvcihzZXNzaW9uSWQsIHsgdHlwZTogZGF0YS5lcnJvcj8udHlwZSwgbWVzc2FnZTogZGF0YS5lcnJvcj8ubWVzc2FnZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oZGF0YS5lcnJvcj8udHlwZSwgZGF0YS5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZmx1c2hQZW5kaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIE1hbmFnZXIgc2luZ2xldG9uIChtb2R1bGUtbGV2ZWwpIHF1ZSBjb3JyZSBOIHN0cmVhbXMgZGVsIG9yY2hlc3RyYXRvciBlblxuICogcGFyYWxlbG8sIHVubyBwb3IgYHNlc3Npb25JZGAuIFNvYnJldml2ZSBhIGNhbWJpb3MgZGUgdmlzdGEgeSBhbCBjaWVycmUgZGVsXG4gKiBtb2RhbDogbG9zIHN0cmVhbXMgc29sbyBzZSBjYW5jZWxhbiBjb24gc3RvcCBleHBsw61jaXRvIGRlbCB1c3VhcmlvIG8gYWxcbiAqIGNvbXBsZXRhci9lcnJvcmFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0cmVhbU1hbmFnZXIgPSB7XG4gIGlzQWN0aXZlOiBpc1N0cmVhbUFjdGl2ZSxcbiAgZ2V0QWN0aXZlQ291bnQ6IGdldEFjdGl2ZVN0cmVhbUNvdW50LFxuICBnZXRBY3RpdmVTZXNzaW9uSWRzOiAoKTogc3RyaW5nW10gPT4gQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSksXG5cbiAgYXN5bmMgc3RhcnRTdHJlYW0ocGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICByZWFzb25pbmdTdG9yZS5zdGFydChwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihyZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBwYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlc3VtZSBISVRMIChgY29udGludWUtdGhyZWFkYCkga2V5ZWQgcG9yIHNlc3Npb25JZCDigJQgbWlzbW8gbW90b3IgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRDb250aW51ZVN0cmVhbShwYXJhbXM6IFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGludWVSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGhpdGxFeGVjdXRpb25Db250ZXh0LCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBpZiAoaGl0bEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5zZXQoc2Vzc2lvbklkLCBoaXRsRXhlY3V0aW9uQ29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCkgPz8gdW5kZWZpbmVkKVxuICAgIClcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZChjb250aW51ZVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnRpbnVlLXRocmVhZCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVnZW5lcmEgbGEgcmVzcHVlc3RhIGRlIHVuIHR1cm5vIChgcmV0cnlfY29tcGxldGlvbmApIOKAlCBtaXNtbyBtb3RvciBTU0UgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRSZXRyeVN0cmVhbShwYXJhbXM6IFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgcmV0cnlSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgYWN0aXZpdHlPcHRpb25zLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24ocmV0cnlSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgbGV0IGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGRldGFpbD86IHN0cmluZyB9XG4gICAgICAgICAgICBkZXRhaWwgPSB0eXBlb2YgZGF0YS5kZXRhaWwgPT09ICdzdHJpbmcnID8gZGF0YS5kZXRhaWwgOiB1bmRlZmluZWRcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGRldGFpbCA9IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGV0YWlsID09PSAnVHVybiBub3QgZm91bmQnKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSwgcGxhY2Vob2xkZXJJZDogbnVsbCB9KVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICd0dXJuX25vdF9mb3VuZCcgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJldHJ5X2NvbXBsZXRpb24gZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHNzZVBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogQ2FuY2VsYWNpw7NuIGV4cGzDrWNpdGEgZGVsIHVzdWFyaW8gKG1lbnNhamUgXCJjYW5jZWxhZG9cIikuICovXG4gIHN0b3BTdHJlYW0oc2Vzc2lvbklkOiBzdHJpbmcsIGNhbGxiYWNrcz86IFNlc3Npb25TdHJlYW1DYWxsYmFja3MpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAvLyBFbCBwYXJjaWFsIHNlIHJlc2NhdGEgYW50ZXMgZGUgbGltcGlhcjogZWwgYmFja2VuZCBsbyBwZXJzaXN0ZSwgcGVybyBzaSBubyBsb1xuICAgIC8vIHBhc2Ftb3MgYWwgY2FsbGJhY2sgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBoYXN0YSBlbCBwcsOzeGltbyBmZXRjaCBkZSBsYSBzZXNpw7NuLlxuICAgIGNvbnN0IHBhcnRpYWxUZXh0ID0gc2Vzc2lvblN0cmVhbWluZ1RleHQuZ2V0U25hcHNob3Qoc2Vzc2lvbklkKS50ZXh0XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY2FuY2VsbGVkJylcbiAgICBjYWxsYmFja3M/Lm9uU3RvcD8uKHBhcnRpYWxUZXh0KVxuICB9LFxuXG4gIC8qKiBBYm9ydGEgc2luIG1hcmNhciBcImNhbmNlbGFkb1wiICh1c28gaW50ZXJubyAvIGxpbXBpZXphKS4gKi9cbiAgYWJvcnRTaWxlbnRseShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIGlmIChzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RhdHVzICE9PSAnY29tcGxldGUnKSB7XG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICB9XG4gIH0sXG5cbiAgYWJvcnRBbGwoKSB7XG4gICAgQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSkuZm9yRWFjaChzZXNzaW9uSWQgPT4gdGhpcy5hYm9ydFNpbGVudGx5KHNlc3Npb25JZCkpXG4gIH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLElBQUksTUFBTSxxQkFBcUI7QUFFdEMsU0FDRUMsd0JBQXdCLEVBQ3hCQyx5QkFBeUIsRUFDekJDLHFCQUFxQixFQUNyQkMsd0JBQXdCLEVBQ3hCQyxnQ0FBZ0MsUUFDM0Isb0NBQW9DO0FBRTNDLFNBQVNDLHdCQUF3QixFQUFFQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDekYsU0FBU0MsY0FBYyxRQUFRLCtCQUErQjtBQUU5RCxTQUFTQyxvQkFBb0IsUUFBUSx3QkFBd0I7QUFDN0QsU0FBU0MsZ0JBQWdCLFFBQVEsb0JBQW9CO0FBQ3JELFNBQVNDLHFDQUFxQyxRQUFRLHdCQUF3QjtBQUM5RSxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBc0I7O0FBT3pEOztBQXFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsc0JBQXNCLEdBQUcsQ0FBQztBQUV2QyxJQUFNQyxrQkFBa0IsR0FBRyxFQUFFO0FBRTdCLElBQU1DLGFBQWEsR0FBRyxJQUFJQyxHQUFHLENBQXVCLENBQUM7QUFFckQsSUFBTUMsS0FBSyxHQUFHLFNBQVJBLEtBQUtBLENBQUE7RUFBQSxPQUFTUCxnQkFBZ0IsQ0FBQ1EsUUFBUSxDQUFDLENBQUM7QUFBQTtBQUUvQyxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUlDLFNBQWlCO0VBQUEsT0FBY0wsYUFBYSxDQUFDTSxHQUFHLENBQUNELFNBQVMs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