@projectcor/maia-components 2.50.1-2 → 2.51.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 (429) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +1 -3
  4. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +1 -3
  5. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +14 -24
  6. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +10 -28
  7. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +15 -19
  8. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -8
  9. package/lib/components/atoms/ClientSelector/ClientSelector.js +13 -15
  10. package/lib/components/atoms/Fade/Fade.js +6 -10
  11. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  12. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  13. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +2 -3
  14. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +2 -3
  15. package/lib/components/atoms/MAIAInput/MAIAInput.js +99 -123
  16. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +4 -9
  17. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +5 -4
  18. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +26 -28
  19. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +14 -15
  20. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  21. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
  22. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
  23. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
  24. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
  25. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
  26. package/lib/components/index.js +1 -2
  27. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +8 -6
  28. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +4 -6
  29. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +16 -25
  30. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  31. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +72 -93
  32. package/lib/components/molecules/ChatAIHome/styles.js +78 -85
  33. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +14 -30
  34. package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
  35. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +1 -8
  36. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -25
  37. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  38. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  39. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  40. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +367 -63
  41. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
  42. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +2 -5
  43. package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
  44. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  45. package/lib/components/organisms/ProjectSummary/ProjectSummary.js +7 -11
  46. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +1 -4
  47. package/lib/constants/permissions/index.js +2 -2
  48. package/lib/constants/permissions/utils.js +1 -4
  49. package/lib/dev/DevReasoningTimeline.js +37 -68
  50. package/lib/dev/Providers.js +3 -5
  51. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -7
  52. package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
  53. package/lib/hooks/useChatManager/useChatManager.js +7 -8
  54. package/lib/hooks/useEntitySearch.js +1 -3
  55. package/lib/hooks/useFrequentlyUsedActions.js +22 -61
  56. package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
  57. package/lib/hooks/useKnowledge/useKnowledgeOperations.js +15 -16
  58. package/lib/hooks/useProjectSummaryConfig.js +5 -10
  59. package/lib/index.js +2 -5
  60. package/lib/lang/br/index.js +2 -27
  61. package/lib/lang/en/index.js +2 -27
  62. package/lib/lang/es/index.js +2 -27
  63. package/lib/lang/fr/index.js +2 -27
  64. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  65. package/lib/services/maia/Agents/connectors.js +1 -3
  66. package/lib/store/sessions/sessionStreamManager.js +55 -51
  67. package/lib/store/useChatsStore.js +3 -4
  68. package/lib/styles/cascade.js +3 -29
  69. package/lib/styles/transitions.js +1 -3
  70. package/lib/types/global.d.js +1 -1
  71. package/lib/utils/hoursPlannerQuickActionType.js +1 -116
  72. package/lib/utils/imagePreprocessor.js +3 -14
  73. package/lib/utils/navigateContextEntity.js +2 -2
  74. package/lib/utils/openTaskInCorPanel.js +2 -2
  75. package/lib/utils/streamActivityMessages.helpers.js +4 -5
  76. package/lib/utils/streamActivityMessages.js +20 -32
  77. package/package.json +1 -1
  78. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  79. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  80. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  81. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +0 -63
  82. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -183
  83. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  84. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -139
  85. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -385
  86. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  87. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -94
  88. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -396
  89. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  90. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -526
  91. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -169
  92. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  93. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  94. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  95. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  96. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  97. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  98. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  99. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  100. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +0 -45
  101. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -133
  102. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +0 -107
  103. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  104. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  105. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -109
  106. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  107. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -92
  108. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -319
  109. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  110. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  111. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  112. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  113. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  114. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  115. package/lib/components/atoms/Fade/Fade.spec.js +0 -66
  116. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  117. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  118. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  119. package/lib/components/atoms/HelpButton.spec.js +0 -87
  120. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  121. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  122. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  123. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  124. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  125. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  126. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  127. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  128. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +0 -113
  129. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -381
  130. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -719
  131. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -92
  132. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -193
  133. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -32
  134. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  135. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  136. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  137. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  138. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  139. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  140. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  141. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  142. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
  143. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
  144. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -146
  145. package/lib/components/atoms/PrimaryButton.spec.js +0 -42
  146. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
  147. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
  148. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
  149. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
  150. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
  151. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
  152. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
  153. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
  154. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  155. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  156. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  157. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
  158. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
  159. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  160. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  161. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  162. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +0 -71
  163. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -120
  164. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  165. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  166. package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +0 -25
  167. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -126
  168. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  169. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  170. package/lib/components/atoms/WithAppCfg.spec.js +0 -82
  171. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  172. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -742
  173. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -107
  174. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -256
  175. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -175
  176. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -318
  177. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  178. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  179. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  180. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  181. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  182. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  183. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  184. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  185. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  186. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  187. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  188. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  189. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  190. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +0 -622
  191. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -264
  192. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
  193. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  194. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -742
  195. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -541
  196. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  197. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -1394
  198. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -1401
  199. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  200. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  201. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  202. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -142
  203. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  204. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +0 -69
  205. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +0 -144
  206. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +0 -95
  207. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +0 -174
  208. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +0 -99
  209. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +0 -65
  210. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  211. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  212. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  213. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  214. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  215. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +0 -93
  216. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -297
  217. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +0 -62
  218. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -221
  219. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  220. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
  221. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  222. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -104
  223. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  224. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  225. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  226. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  227. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  228. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  229. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  230. package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +0 -119
  231. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -464
  232. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -1067
  233. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1236
  234. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  235. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +0 -77
  236. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -503
  237. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  238. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  239. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
  240. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  241. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  242. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -291
  243. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  244. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -284
  245. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -343
  246. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -197
  247. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
  248. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
  249. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  250. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  251. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  252. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  253. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  254. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  255. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  256. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  257. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  258. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  259. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  260. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  261. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  262. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  263. package/lib/constants/formatExtensions.spec.js +0 -15
  264. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  265. package/lib/constants/maiaFeatureAccess.spec.js +0 -30
  266. package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
  267. package/lib/constants/maiaTaskPanelAccess.spec.js +0 -41
  268. package/lib/constants/permissions/clientRoleAccess.spec.js +0 -65
  269. package/lib/constants/permissions/utils.spec.js +0 -128
  270. package/lib/constants/plannerSyncEvents.spec.js +0 -31
  271. package/lib/constants/taskUrls.spec.js +0 -9
  272. package/lib/dev/DevMaiaPage.js +0 -30
  273. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  274. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  275. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  276. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  277. package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +0 -268
  278. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -314
  279. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  280. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -374
  281. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  282. package/lib/hooks/useCaretPosition.spec.js +0 -58
  283. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -2027
  284. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -2409
  285. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -491
  286. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -729
  287. package/lib/hooks/useChats/useChats.spec.js +0 -208
  288. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  289. package/lib/hooks/useClientSearch.spec.js +0 -86
  290. package/lib/hooks/useContextMentions.helpers.spec.js +0 -267
  291. package/lib/hooks/useContextMentions.spec.js +0 -338
  292. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -183
  293. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  294. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  295. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  296. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +0 -257
  297. package/lib/hooks/useDebounce.spec.js +0 -42
  298. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -723
  299. package/lib/hooks/useEntitySearch.spec.js +0 -718
  300. package/lib/hooks/useEvent.spec.js +0 -45
  301. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
  302. package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -293
  303. package/lib/hooks/useIsMaiaPageRoute.js +0 -26
  304. package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
  305. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
  306. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
  307. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
  308. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
  309. package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
  310. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
  311. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  312. package/lib/hooks/useMentionPopover.helpers.spec.js +0 -100
  313. package/lib/hooks/useMentionPopover.spec.js +0 -392
  314. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -176
  315. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
  316. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
  317. package/lib/hooks/useModal/useModal.spec.js +0 -73
  318. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +0 -138
  319. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -417
  320. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -89
  321. package/lib/hooks/useProjectSearch.spec.js +0 -91
  322. package/lib/hooks/useProjectSummary.spec.js +0 -193
  323. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -151
  324. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  325. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  326. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  327. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  328. package/lib/hooks/useRecentContexts.spec.js +0 -139
  329. package/lib/hooks/useResize.spec.js +0 -37
  330. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  331. package/lib/hooks/useSlashCommands.spec.js +0 -139
  332. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  333. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  334. package/lib/hooks/useStreamResponse.spec.js +0 -199
  335. package/lib/hooks/useT.spec.js +0 -20
  336. package/lib/hooks/useToggle.spec.js +0 -33
  337. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  338. package/lib/services/appcues.spec.js +0 -37
  339. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  340. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -121
  341. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  342. package/lib/services/maia/Agents/connectors.spec.js +0 -496
  343. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  344. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  345. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  346. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  347. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  348. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  349. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -325
  350. package/lib/services/maia/Agents/getAgents.spec.js +0 -1135
  351. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  352. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  353. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  354. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  355. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  356. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  357. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  358. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  359. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  360. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  361. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  362. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  363. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  364. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -225
  365. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  366. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  367. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  368. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  369. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  370. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  371. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  372. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  373. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  374. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  375. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  376. package/lib/services/maia/client.spec.js +0 -56
  377. package/lib/services/utils/fetchCOR.spec.js +0 -211
  378. package/lib/services/utils/getCookie.spec.js +0 -20
  379. package/lib/services/utils/mapChatMessages.helpers.spec.js +0 -336
  380. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  381. package/lib/store/chatsSidebarOptimistic.spec.js +0 -145
  382. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  383. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  384. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  385. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  386. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  387. package/lib/store/sessions/sessionStreamManager.helpers.spec.js +0 -177
  388. package/lib/store/sessions/sessionStreamManager.spec.js +0 -939
  389. package/lib/store/sessions/sessions.types.spec.js +0 -16
  390. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  391. package/lib/store/useChatsStore.spec.js +0 -619
  392. package/lib/store/useFaqsStore.spec.js +0 -57
  393. package/lib/utils/actionCategoryMap.spec.js +0 -18
  394. package/lib/utils/agentDisplayName.spec.js +0 -48
  395. package/lib/utils/autoApproveStorage.spec.js +0 -25
  396. package/lib/utils/chatInputFiles.spec.js +0 -39
  397. package/lib/utils/contextMentionIcons.spec.js +0 -41
  398. package/lib/utils/contextMentionLabel.spec.js +0 -13
  399. package/lib/utils/contextMentionTriggers.spec.js +0 -44
  400. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  401. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  402. package/lib/utils/entityLinkRender.spec.js +0 -72
  403. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  404. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  405. package/lib/utils/formatUnreadCount.spec.js +0 -12
  406. package/lib/utils/getUnitFileSize.spec.js +0 -18
  407. package/lib/utils/hitlAnalytics.spec.js +0 -136
  408. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -124
  409. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  410. package/lib/utils/imagePreprocessor.spec.js +0 -112
  411. package/lib/utils/maiaPageRoute.js +0 -24
  412. package/lib/utils/maiaPageRoute.spec.js +0 -23
  413. package/lib/utils/mapBackendLang.spec.js +0 -19
  414. package/lib/utils/navigateContextEntity.spec.js +0 -50
  415. package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
  416. package/lib/utils/openTaskInCorPanel.spec.js +0 -43
  417. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  418. package/lib/utils/reasoningMappers.spec.js +0 -103
  419. package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
  420. package/lib/utils/renderContextMentions.helpers.spec.js +0 -87
  421. package/lib/utils/renderContextMentions.spec.js +0 -268
  422. package/lib/utils/retryCompletion.spec.js +0 -181
  423. package/lib/utils/skillContentSize.spec.js +0 -13
  424. package/lib/utils/slashCommandMarker.spec.js +0 -43
  425. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  426. package/lib/utils/sseStreamContent.spec.js +0 -31
  427. package/lib/utils/streamActivityMessages.helpers.spec.js +0 -84
  428. package/lib/utils/streamActivityMessages.spec.js +0 -336
  429. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -13,14 +13,14 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
13
13
  /* eslint-disable no-constant-condition */
14
14
  /* eslint-disable @typescript-eslint/no-explicit-any */
15
15
  import maia from '../../services/maia';
16
- import { getInitialStreamActivity, getThinkingStreamActivity, getUsingSkillActivity, getWritingStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
16
+ import { getInitialStreamActivity, getThinkingLoadingMessage, getUsingSkillActivity, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity, resolveToolActionLabel } from '../../utils/streamActivityMessages';
17
17
  import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
18
18
  import { reasoningStore } from '../../hooks/useReasoningTrace';
19
19
  import { sessionStreamingText } from './sessionStreamingText';
20
20
  import { useSessionsStore } from './useSessionsStore';
21
21
  import { ensureSessionNotificationsInitialized } from './sessionNotifications';
22
22
  import { sessionHitlContext } from './sessionHitlContext';
23
- import { buildSessionFinishPayload, isAgentTransferNode, isApprovalPreApproved, isRetryTurnNotFoundResponse, parseSseBlock, patchMetaAgentFields, resolveNodeStreamMessage, resolveReasoningStepTool, resolveReasoningStepType, resolveStartStreamGuard, resolveStreamTextChunk, resolveThinkingDelta, shouldAbortSessionStreamOnStop, shouldApplyReasoningStepIndex, shouldAppendThinkingStep, shouldResumeHitlAfterPreApproval, shouldSetIdleOnSilentAbort, shouldShowReasoningToolActivity, splitSseBuffer } from './sessionStreamManager.helpers';
23
+ import { buildSessionFinishPayload, isAgentTransferNode, isApprovalPreApproved, isRetryTurnNotFoundResponse, parseSseBlock, patchMetaAgentFields, resolveNodeStreamMessage, resolveNodeThreadId, resolveReasoningStepTool, resolveReasoningStepType, resolveStartStreamGuard, resolveStreamTextChunk, resolveThinkingDelta, shouldAbortSessionStreamOnStop, shouldApplyReasoningStepIndex, shouldAppendThinkingStep, shouldResumeHitlAfterPreApproval, shouldSetIdleOnSilentAbort, shouldShowReasoningToolActivity, splitSseBuffer } from './sessionStreamManager.helpers';
24
24
 
25
25
  /** Compatible con el `t` de i18next (uso de una sola key). */
26
26
 
@@ -42,12 +42,13 @@ 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 _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, _splitSseBuffer, blocks, remainder, _iterator, _step, line, parsedBlock, eventType, dataStr, data, _resolveThinkingDelta, index, thinkingDelta, stepTool, stepType, _data$args, stepIndex, chunk, _chunk, _callbacks$onApproval, isPreApproved, _ref2, _t, _t2, _t3;
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, _splitSseBuffer, blocks, remainder, _iterator, _step, line, parsedBlock, eventType, dataStr, data, _resolveThinkingDelta, index, thinkingDelta, stepTool, stepType, label, _data$args, stepIndex, chunk, _chunk, nodeMessage, _callbacks$onApproval, isPreApproved, _ref2, _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);
51
52
  pendingContent = null;
52
53
  throttleTimer = null;
53
54
  flushToStores = function flushToStores(content) {
@@ -91,39 +92,17 @@ var parseSessionSSE = /*#__PURE__*/function () {
91
92
  hasStartedWriting = false; // "Usando Skill" queda visible mientras el modelo piensa con la skill cargada;
92
93
  // los deltas de `thinking` no lo pisan hasta la próxima acción o el primer token.
93
94
  isUsingSkill = false;
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;
95
+ ensureWritingStarted = function ensureWritingStarted() {
96
+ var _callbacks$onStartWri;
97
+ if (hasStartedWriting) return;
98
+ hasStartedWriting = true;
99
99
  store().patchMeta(sessionId, {
100
- isLoading: true
100
+ isLoading: true,
101
+ isWriting: true
101
102
  });
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
- }
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);
127
106
  };
128
107
  applyStreamChunk = function applyStreamChunk(chunk) {
129
108
  if (!chunk) return;
@@ -226,9 +205,17 @@ var parseSessionSSE = /*#__PURE__*/function () {
226
205
  if (shouldAppendThinkingStep(index, thinkingDelta)) {
227
206
  reasoningStore.appendThinking(placeholderId, index, thinkingDelta);
228
207
  }
229
- // Mientras dura "Usando Skill" los deltas de thinking no pisan la actividad.
230
- if (!isUsingSkill) {
231
- setThinkingActivity();
208
+ if (!hasStartedWriting) {
209
+ store().patchMeta(sessionId, {
210
+ isLoading: true
211
+ });
212
+ store().setStatus(sessionId, 'thinking');
213
+ if (!isUsingSkill) {
214
+ store().setActivity(sessionId, {
215
+ phase: 'thinking',
216
+ message: getThinkingLoadingMessage(0, t)
217
+ });
218
+ }
232
219
  }
233
220
  return _context.abrupt("continue", 24);
234
221
  case 13:
@@ -251,16 +238,17 @@ var parseSessionSSE = /*#__PURE__*/function () {
251
238
  stepTool = resolveReasoningStepTool(data);
252
239
  stepType = resolveReasoningStepType(data);
253
240
  if (shouldShowReasoningToolActivity(stepTool, stepType, data.status)) {
254
- isUsingSkill = stepTool === 'get_skill';
255
- if (isUsingSkill) {
256
- // El step de `get_skill` llega justo después de `using_skill`: mantiene el nombre.
241
+ label = resolveToolActionLabel(stepTool, t, 'present');
242
+ if (label) {
243
+ isUsingSkill = stepTool === 'get_skill';
257
244
  store().patchMeta(sessionId, {
258
245
  isLoading: true
259
246
  });
260
- store().setStatus(sessionId, 'thinking');
261
- store().setActivity(sessionId, getUsingSkillActivity(t, (_data$args = data.args) === null || _data$args === void 0 ? void 0 : _data$args.name));
262
- } else {
263
- setThinkingActivity();
247
+ // El step de `get_skill` llega justo después de `using_skill`: mantiene el nombre.
248
+ store().setActivity(sessionId, isUsingSkill ? getUsingSkillActivity(t, (_data$args = data.args) === null || _data$args === void 0 ? void 0 : _data$args.name) : {
249
+ phase: 'action',
250
+ message: label
251
+ });
264
252
  }
265
253
  }
266
254
  if (shouldApplyReasoningStepIndex(data.i)) {
@@ -289,8 +277,20 @@ var parseSessionSSE = /*#__PURE__*/function () {
289
277
  return _context.abrupt("continue", 24);
290
278
  case 19:
291
279
  isUsingSkill = false;
292
- if (isAgentTransferNode(data) || resolveNodeStreamMessage(data)) {
293
- setThinkingActivity();
280
+ if (isAgentTransferNode(data)) {
281
+ store().patchMeta(sessionId, {
282
+ isLoading: true
283
+ });
284
+ store().setStatus(sessionId, 'thinking');
285
+ } else {
286
+ nodeMessage = resolveNodeStreamMessage(data);
287
+ if (nodeMessage) {
288
+ store().patchMeta(sessionId, {
289
+ isLoading: true
290
+ });
291
+ store().setStatus(sessionId, 'thinking');
292
+ store().setActivity(sessionId, resolveHitlNodeStreamActivity(nodeMessage, t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined, resolveNodeThreadId(data)));
293
+ }
294
294
  }
295
295
  return _context.abrupt("continue", 24);
296
296
  case 20:
@@ -315,7 +315,11 @@ var parseSessionSSE = /*#__PURE__*/function () {
315
315
  store().setStatus(sessionId, 'awaiting_approval');
316
316
  (_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, data, accumulatedContent);
317
317
  if (shouldResumeHitlAfterPreApproval(isPreApproved, data.pending_actions)) {
318
- setThinkingActivity();
318
+ store().patchMeta(sessionId, {
319
+ isLoading: true
320
+ });
321
+ store().setStatus(sessionId, 'thinking');
322
+ store().setActivity(sessionId, resolveInitialHitlStreamActivity(t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined));
319
323
  }
320
324
  return _context.abrupt("continue", 24);
321
325
  case 22:
@@ -700,7 +704,7 @@ export var sessionStreamManager = {
700
704
  callbacks === null || callbacks === void 0 || (_callbacks$onStop = callbacks.onStop) === null || _callbacks$onStop === void 0 || _callbacks$onStop.call(callbacks, partialText);
701
705
  },
702
706
  /** Aborta sin marcar "cancelado" (uso interno / limpieza). */abortSilently: function abortSilently(sessionId) {
703
- var _store$getMeta3;
707
+ var _store$getMeta;
704
708
  var active = activeStreams.get(sessionId);
705
709
  if (!active) return;
706
710
  active.isStopped = true;
@@ -712,7 +716,7 @@ export var sessionStreamManager = {
712
716
  isWriting: false
713
717
  });
714
718
  store().setActivity(sessionId, null);
715
- if (shouldSetIdleOnSilentAbort((_store$getMeta3 = store().getMeta(sessionId)) === null || _store$getMeta3 === void 0 ? void 0 : _store$getMeta3.status)) {
719
+ if (shouldSetIdleOnSilentAbort((_store$getMeta = store().getMeta(sessionId)) === null || _store$getMeta === void 0 ? void 0 : _store$getMeta.status)) {
716
720
  store().setStatus(sessionId, 'idle');
717
721
  }
718
722
  },
@@ -723,4 +727,4 @@ export var sessionStreamManager = {
723
727
  });
724
728
  }
725
729
  };
726
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdTdHJlYW1BY3Rpdml0eSIsImdldFVzaW5nU2tpbGxBY3Rpdml0eSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsImJ1aWxkU2Vzc2lvbkZpbmlzaFBheWxvYWQiLCJpc0FnZW50VHJhbnNmZXJOb2RlIiwiaXNBcHByb3ZhbFByZUFwcHJvdmVkIiwiaXNSZXRyeVR1cm5Ob3RGb3VuZFJlc3BvbnNlIiwicGFyc2VTc2VCbG9jayIsInBhdGNoTWV0YUFnZW50RmllbGRzIiwicmVzb2x2ZU5vZGVTdHJlYW1NZXNzYWdlIiwicmVzb2x2ZVJlYXNvbmluZ1N0ZXBUb29sIiwicmVzb2x2ZVJlYXNvbmluZ1N0ZXBUeXBlIiwicmVzb2x2ZVN0YXJ0U3RyZWFtR3VhcmQiLCJyZXNvbHZlU3RyZWFtVGV4dENodW5rIiwicmVzb2x2ZVRoaW5raW5nRGVsdGEiLCJzaG91bGRBYm9ydFNlc3Npb25TdHJlYW1PblN0b3AiLCJzaG91bGRBcHBseVJlYXNvbmluZ1N0ZXBJbmRleCIsInNob3VsZEFwcGVuZFRoaW5raW5nU3RlcCIsInNob3VsZFJlc3VtZUhpdGxBZnRlclByZUFwcHJvdmFsIiwic2hvdWxkU2V0SWRsZU9uU2lsZW50QWJvcnQiLCJzaG91bGRTaG93UmVhc29uaW5nVG9vbEFjdGl2aXR5Iiwic3BsaXRTc2VCdWZmZXIiLCJNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIiwiU1RSRUFNX1RIUk9UVExFX01TIiwiYWN0aXZlU3RyZWFtcyIsIk1hcCIsInN0b3JlIiwiZ2V0U3RhdGUiLCJpc1N0cmVhbUFjdGl2ZSIsInNlc3Npb25JZCIsImhhcyIsImdldEFjdGl2ZVN0cmVhbUNvdW50Iiwic2l6ZSIsInBhcnNlU2Vzc2lvblNTRSIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwiYWN0aXZlIiwicGFyYW1zIiwiX3Jlc3BvbnNlJGJvZHkiLCJfZGF0YSRlcnJvciIsIl9kYXRhJGVycm9yMiIsIl9jYWxsYmFja3Mkb25FcnJvciIsIl9kYXRhJGVycm9yMyIsIl9kYXRhJGVycm9yNCIsInBsYWNlaG9sZGVySWQiLCJjYWxsYmFja3MiLCJ0IiwicGVuZGluZ0NvbnRlbnQiLCJ0aHJvdHRsZVRpbWVyIiwiZmx1c2hUb1N0b3JlcyIsImVtaXRUaHJvdHRsZWQiLCJmbHVzaFBlbmRpbmciLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJpc1VzaW5nU2tpbGwiLCJzZXRUaGlua2luZ0FjdGl2aXR5IiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwiX3NwbGl0U3NlQnVmZmVyIiwiYmxvY2tzIiwicmVtYWluZGVyIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwicGFyc2VkQmxvY2siLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiZGF0YSIsIl9yZXNvbHZlVGhpbmtpbmdEZWx0YSIsImluZGV4IiwidGhpbmtpbmdEZWx0YSIsInN0ZXBUb29sIiwic3RlcFR5cGUiLCJfZGF0YSRhcmdzIiwic3RlcEluZGV4IiwiY2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjIiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfc3RvcmUkZ2V0TWV0YSIsInRoaW5raW5nQWN0aXZpdHkiLCJjdXJyZW50IiwiZ2V0TWV0YSIsInN0cmVhbUFjdGl2aXR5IiwicGhhc2UiLCJtZXNzYWdlIiwicGF0Y2hNZXRhIiwiaXNMb2FkaW5nIiwic2V0U3RhdHVzIiwic2V0QWN0aXZpdHkiLCJfc3RvcmUkZ2V0TWV0YTIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJpc1dyaXRpbmciLCJvblN0YXJ0V3JpdGluZyIsInN5bmNMaXZlTmFycmF0aW9uIiwibWFya0Fuc3dlclJlc2V0IiwicGF5bG9hZCIsIl9jYWxsYmFja3Mkb25GaW5pc2hTdCIsImZpbmlzaFBheWxvYWQiLCJmaW5pc2giLCJyZWFzb25pbmciLCJvbkZpbmlzaFN0cmVhbSIsImlzU3RvcHBlZCIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsIkpTT04iLCJwYXJzZSIsImRlbHRhIiwiYXBwZW5kVGhpbmtpbmciLCJza2lsbCIsInNldENvbXBhY3Rpb24iLCJzdGF0dXMiLCJhcmdzIiwibmFtZSIsImkiLCJjYXB0dXJlTGVhZGluZ0Zyb21Cb2R5IiwiYXBwbHlTdGVwIiwiX29iamVjdFNwcmVhZCIsInNob3VsZENsZWFyU3RyZWFtRm9yTGVhZGluZyIsImNsZWFyIiwib25BcHByb3ZhbFJlcXVpcmVkIiwicGVuZGluZ19hY3Rpb25zIiwiY29uc29sZSIsImVycm9yIiwic2V0RXJyb3IiLCJ0eXBlIiwib25FcnJvciIsIndhcm4iLCJlIiwiZiIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwic2Vzc2lvblN0cmVhbU1hbmFnZXIiLCJpc0FjdGl2ZSIsImdldEFjdGl2ZUNvdW50IiwiZ2V0QWN0aXZlU2Vzc2lvbklkcyIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJzdGFydFN0cmVhbSIsIl9jYWxsZWUyIiwicmVxdWVzdCIsImFjdGl2aXR5T3B0aW9ucyIsImFnZW50SWQiLCJhZ2VudE5hbWUiLCJzdGFydEd1YXJkIiwiY29udHJvbGxlciIsIl9jYWxsYmFja3Mkb25FcnJvcjIiLCJfdDQiLCJfY29udGV4dDIiLCJhbGxvd2VkIiwic3RhcnRlZCIsInJlYXNvbiIsIkFib3J0Q29udHJvbGxlciIsInNldCIsImVuc3VyZVNlc3Npb24iLCJzdGFydCIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsInNpZ25hbCIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJfY2FsbGVlMyIsIl9yZWYzIiwiY29udGludWVSZXF1ZXN0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHQiLCJjb250aW51ZUd1YXJkIiwic3NlUGFyYW1zIiwiX2NhbGxiYWNrcyRvbkVycm9yMyIsIl90NSIsIl9jb250ZXh0MyIsImdldCIsInVuZGVmaW5lZCIsImNvbnRpbnVlVGhyZWFkIiwib2siLCJjb25jYXQiLCJzdGFydFJldHJ5U3RyZWFtIiwiX2NhbGxlZTQiLCJyZXRyeVJlcXVlc3QiLCJyZXRyeUd1YXJkIiwiZGV0YWlsIiwiX2NhbGxiYWNrcyRvbkVycm9yNCIsIl90NiIsIl90NyIsIl9jb250ZXh0NCIsInJldHJ5Q29tcGxldGlvbiIsImpzb24iLCJzdG9wU3RyZWFtIiwiX2NhbGxiYWNrcyRvblN0b3AiLCJhYm9ydCIsInBhcnRpYWxUZXh0IiwiZ2V0U25hcHNob3QiLCJ0ZXh0Iiwib25TdG9wIiwiYWJvcnRTaWxlbnRseSIsIl9zdG9yZSRnZXRNZXRhMyIsImFib3J0QWxsIiwiX3RoaXMiLCJmb3JFYWNoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5LFxuICBnZXRUaGlua2luZ1N0cmVhbUFjdGl2aXR5LFxuICBnZXRVc2luZ1NraWxsQWN0aXZpdHksXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwUGF5bG9hZCwgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0Q29tcGFjdGlvblBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0Q29tcGFjdGlvbidcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1pbmdUZXh0IH0gZnJvbSAnLi9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkIH0gZnJvbSAnLi9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IHNlc3Npb25IaXRsQ29udGV4dCB9IGZyb20gJy4vc2Vzc2lvbkhpdGxDb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzLCBTdGFydFN0cmVhbVJlc3VsdCB9IGZyb20gJy4vc2Vzc2lvbnMudHlwZXMnXG5pbXBvcnQge1xuICBidWlsZFNlc3Npb25GaW5pc2hQYXlsb2FkLFxuICBpc0FnZW50VHJhbnNmZXJOb2RlLFxuICBpc0FwcHJvdmFsUHJlQXBwcm92ZWQsXG4gIGlzUmV0cnlUdXJuTm90Rm91bmRSZXNwb25zZSxcbiAgcGFyc2VTc2VCbG9jayxcbiAgcGF0Y2hNZXRhQWdlbnRGaWVsZHMsXG4gIHJlc29sdmVOb2RlU3RyZWFtTWVzc2FnZSxcbiAgcmVzb2x2ZVJlYXNvbmluZ1N0ZXBUb29sLFxuICByZXNvbHZlUmVhc29uaW5nU3RlcFR5cGUsXG4gIHJlc29sdmVTdGFydFN0cmVhbUd1YXJkLFxuICByZXNvbHZlU3RyZWFtVGV4dENodW5rLFxuICByZXNvbHZlVGhpbmtpbmdEZWx0YSxcbiAgc2hvdWxkQWJvcnRTZXNzaW9uU3RyZWFtT25TdG9wLFxuICBzaG91bGRBcHBseVJlYXNvbmluZ1N0ZXBJbmRleCxcbiAgc2hvdWxkQXBwZW5kVGhpbmtpbmdTdGVwLFxuICBzaG91bGRSZXN1bWVIaXRsQWZ0ZXJQcmVBcHByb3ZhbCxcbiAgc2hvdWxkU2V0SWRsZU9uU2lsZW50QWJvcnQsXG4gIHNob3VsZFNob3dSZWFzb25pbmdUb29sQWN0aXZpdHksXG4gIHNwbGl0U3NlQnVmZmVyLFxufSBmcm9tICcuL3Nlc3Npb25TdHJlYW1NYW5hZ2VyLmhlbHBlcnMnXG5cbnR5cGUgT3JjaGVzdHJhdG9yUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcj5bMF1cbnR5cGUgQ29udGludWVUaHJlYWRSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQ+WzBdXG50eXBlIFJldHJ5Q29tcGxldGlvblJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24+WzBdXG5cbi8qKiBDb21wYXRpYmxlIGNvbiBlbCBgdGAgZGUgaTE4bmV4dCAodXNvIGRlIHVuYSBzb2xhIGtleSkuICovXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxudHlwZSBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJlcXVlc3Q6IE9yY2hlc3RyYXRvclJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIGNvbnRpbnVlUmVxdWVzdDogQ29udGludWVUaHJlYWRSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXRyeVJlcXVlc3Q6IFJldHJ5Q29tcGxldGlvblJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgQWN0aXZlU3RyZWFtID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgaXNTdG9wcGVkOiBib29sZWFuXG59XG5cbi8qKlxuICogTcOheGltbyBkZSBzZXNpb25lcyBnZW5lcmFuZG8gZW4gcGFyYWxlbG8uIFByb3RlZ2UgcmVkL3JlY3Vyc29zIGRlbCBjbGllbnRlLlxuICogQWp1c3RhYmxlIGEgZnV0dXJvIHbDrWEgZmxhZyBkZWwgaG9zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgPSA0XG5cbmNvbnN0IFNUUkVBTV9USFJPVFRMRV9NUyA9IDE2XG5cbmNvbnN0IGFjdGl2ZVN0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgQWN0aXZlU3RyZWFtPigpXG5cbmNvbnN0IHN0b3JlID0gKCkgPT4gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpXG5cbmNvbnN0IGlzU3RyZWFtQWN0aXZlID0gKHNlc3Npb25JZDogc3RyaW5nKTogYm9vbGVhbiA9PiBhY3RpdmVTdHJlYW1zLmhhcyhzZXNzaW9uSWQpXG5cbmNvbnN0IGdldEFjdGl2ZVN0cmVhbUNvdW50ID0gKCk6IG51bWJlciA9PiBhY3RpdmVTdHJlYW1zLnNpemVcblxuY29uc3QgcGFyc2VTZXNzaW9uU1NFID0gYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSwgYWN0aXZlOiBBY3RpdmVTdHJlYW0sIHBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNhbGxiYWNrcywgdCB9ID0gcGFyYW1zXG5cbiAgbGV0IHBlbmRpbmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgdGhyb3R0bGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICBjb25zdCBmbHVzaFRvU3RvcmVzID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIGNhbGxiYWNrcy5vblN0cmVhbVVwZGF0ZT8uKGNvbnRlbnQpXG4gIH1cblxuICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHBlbmRpbmdDb250ZW50ID0gY29udGVudFxuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHJldHVyblxuICAgIHRocm90dGxlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgICAgfVxuICAgIH0sIFNUUkVBTV9USFJPVFRMRV9NUylcbiAgfVxuXG4gIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgIH1cbiAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcbiAgLy8gXCJVc2FuZG8gU2tpbGxcIiBxdWVkYSB2aXNpYmxlIG1pZW50cmFzIGVsIG1vZGVsbyBwaWVuc2EgY29uIGxhIHNraWxsIGNhcmdhZGE7XG4gIC8vIGxvcyBkZWx0YXMgZGUgYHRoaW5raW5nYCBubyBsbyBwaXNhbiBoYXN0YSBsYSBwcsOzeGltYSBhY2Npw7NuIG8gZWwgcHJpbWVyIHRva2VuLlxuICBsZXQgaXNVc2luZ1NraWxsID0gZmFsc2VcblxuICBjb25zdCBzZXRUaGlua2luZ0FjdGl2aXR5ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRoaW5raW5nQWN0aXZpdHkgPSBnZXRUaGlua2luZ1N0cmVhbUFjdGl2aXR5KHQpXG4gICAgY29uc3QgY3VycmVudCA9IHN0b3JlKCkuZ2V0TWV0YShzZXNzaW9uSWQpPy5zdHJlYW1BY3Rpdml0eVxuICAgIGlmIChjdXJyZW50Py5waGFzZSA9PT0gJ3RoaW5raW5nJyAmJiBjdXJyZW50Lm1lc3NhZ2UgPT09IHRoaW5raW5nQWN0aXZpdHkubWVzc2FnZSkgcmV0dXJuXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgdGhpbmtpbmdBY3Rpdml0eSlcbiAgfVxuXG4gIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgIC8vIEN1YWxxdWllciB0b2tlbiBjb3J0YSBcIlVzYW5kbyBTa2lsbFwiOiBlbCBpbmRpY2Fkb3IgdnVlbHZlIGEgYWx0ZXJuYXIgcGVuc2FuZG8gLyBlc2NyaWJpZW5kby5cbiAgICBpc1VzaW5nU2tpbGwgPSBmYWxzZVxuICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSwgaXNXcml0aW5nOiB0cnVlIH0pXG4gICAgICBjYWxsYmFja3Mub25TdGFydFdyaXRpbmc/LigpXG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSBzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RyZWFtQWN0aXZpdHlcbiAgICBpZiAoY3VycmVudD8ucGhhc2UgIT09ICd3cml0aW5nJykge1xuICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSwgaXNXcml0aW5nOiB0cnVlIH0pXG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd3cml0aW5nJylcbiAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgYXBwbHlTdHJlYW1DaHVuayA9IChjaHVuazogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFjaHVuaykgcmV0dXJuXG4gICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNodW5rKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN5bmNMaXZlTmFycmF0aW9uKHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgfVxuXG4gIGNvbnN0IGNsZWFyU3RyZWFtTGlrZUFuc3dlclJlc2V0ID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgZmx1c2hUb1N0b3JlcygnJylcbiAgICByZWFzb25pbmdTdG9yZS5tYXJrQW5zd2VyUmVzZXQocGxhY2Vob2xkZXJJZClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ29tcGxldGUgPSAocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICBjb25zdCBmaW5pc2hQYXlsb2FkID0gYnVpbGRTZXNzaW9uRmluaXNoUGF5bG9hZChwYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG5cbiAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgZmluaXNoUGF5bG9hZC5yZWFzb25pbmcpXG4gICAgZmx1c2hQZW5kaW5nKClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcblxuICAgIGNhbGxiYWNrcy5vbkZpbmlzaFN0cmVhbT8uKGZpbmlzaFBheWxvYWQpXG5cbiAgICAvLyBFbCB0ZXh0byBlbiB2aXZvIE5PIHNlIGxpbXBpYSBhY8OhIGEgcHJvcMOzc2l0by4gRWwgcGxhY2Vob2xkZXIgc2UgdmEgY29uIGVsXG4gICAgLy8gYGRyb3BgIHF1ZSBoYWNlIGVsIGNvbnN1bWlkb3IsIHkgY29uIMOpbCBzdSBzdXNjcmlwY2nDs247IHZhY2lhcmxvIGFudGVzIGxvXG4gICAgLy8gZGVqYWJhIG1vbnRhZG8geSBzaW4gdGV4dG8gKGFsdHVyYSAwKSBkdXJhbnRlIH4yNW1zOiBlbCBmbGlja2VyIGRlIGZpbiBkZVxuICAgIC8vIHN0cmVhbS4gTm8gYWxjYW56YSBjb24gZGlmZXJpcmxvLCBwb3JxdWUgZXN0ZSBjbGVhciB2aWFqYSBlbiBTeW5jTGFuZVxuICAgIC8vIChzdG9yZSBleHRlcm5vKSB5IGVsIHN3YXAgZGUgbWVuc2FqZXMgZW4gRGVmYXVsdExhbmUsIGFzw60gcXVlIHNpZW1wcmUgc2VcbiAgICAvLyBjdWVsYSBlbiBlbCBtZWRpby4gRWwgc2xvdCBzZSBsaWJlcmEgZW4gZWwgcHLDs3hpbW8gYHN0YXJ0KClgIGRlIGxhIHNlc2nDs24sXG4gICAgLy8geSBlbiBzdG9wL2Vycm9yL2FwcHJvdmFsL2NhbWJpbyBkZSBzZXNpw7NuLCBxdWUgc8OtIGxsYW1hbiBgY2xlYXJgLlxuICB9XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHNob3VsZEFib3J0U2Vzc2lvblN0cmVhbU9uU3RvcChhY3RpdmUuaXNTdG9wcGVkKSkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgaWYgKGRvbmUpIGJyZWFrXG5cbiAgICAgIGlmIChzaG91bGRBYm9ydFNlc3Npb25TdHJlYW1PblN0b3AoYWN0aXZlLmlzU3RvcHBlZCkpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgIGNvbnN0IHsgYmxvY2tzLCByZW1haW5kZXIgfSA9IHNwbGl0U3NlQnVmZmVyKGJ1ZmZlcilcbiAgICAgIGJ1ZmZlciA9IHJlbWFpbmRlclxuXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2tzKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEJsb2NrID0gcGFyc2VTc2VCbG9jayhsaW5lKVxuICAgICAgICBpZiAoIXBhcnNlZEJsb2NrKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhU3RyIH0gPSBwYXJzZWRCbG9ja1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0aGlua2luZyc6IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBpbmRleCwgZGVsdGE6IHRoaW5raW5nRGVsdGEgfSA9IHJlc29sdmVUaGlua2luZ0RlbHRhKGRhdGEpXG4gICAgICAgICAgICAgIGlmIChzaG91bGRBcHBlbmRUaGlua2luZ1N0ZXAoaW5kZXgsIHRoaW5raW5nRGVsdGEpKSB7XG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwZW5kVGhpbmtpbmcocGxhY2Vob2xkZXJJZCwgaW5kZXgsIHRoaW5raW5nRGVsdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gTWllbnRyYXMgZHVyYSBcIlVzYW5kbyBTa2lsbFwiIGxvcyBkZWx0YXMgZGUgdGhpbmtpbmcgbm8gcGlzYW4gbGEgYWN0aXZpZGFkLlxuICAgICAgICAgICAgICBpZiAoIWlzVXNpbmdTa2lsbCkge1xuICAgICAgICAgICAgICAgIHNldFRoaW5raW5nQWN0aXZpdHkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNraWxsIEAtbWVuY2lvbmFkYSAoYWwgYWJyaXIgZWwgc3RyZWFtKSBvIGxsYW1hZGEgYSBgZ2V0X3NraWxsYC5cbiAgICAgICAgICAgIGNhc2UgJ3VzaW5nX3NraWxsJzpcbiAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA9IHRydWVcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRVc2luZ1NraWxsQWN0aXZpdHkodCwgZGF0YS5za2lsbCkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgLy8gRWwgYmFja2VuZCBkZXNjYXJ0YSBsbyBlbWl0aWRvIHkgcmVpbmljaWEgbGEgcmVzcHVlc3RhIGRlc2RlIGNlcm8uXG4gICAgICAgICAgICBjYXNlICdhbnN3ZXJfcmVzZXQnOlxuICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIC8vIE1BSUEgcmVjb3J0w7MgZWwgY29udGV4dG8gcGFyYSBxdWUgZWwgcmVxdWVzdCBlbnRyYXJhLiBTw7NsbyBsbGVnYVxuICAgICAgICAgICAgLy8gY3VhbmRvIGVsIHJlY29ydGUgc2Ugbm90YSAoaW3DoWdlbmVzIHZpZWphcywgdHVybm9zIGVudGVyb3MgbyBlbFxuICAgICAgICAgICAgLy8gdGV4dG8gbGl0ZXJhbCBkZSB0dXJub3Mgdmllam9zKSwgeSB2aWFqYSBqdW50byBhIGxhIHRyYXphIHBvcnF1ZVxuICAgICAgICAgICAgLy8gY29tcGFydGUgc3UgY2ljbG8gZGUgdmlkYTogbWlzbW8gcGxhY2Vob2xkZXIsIG1pc21vIHJlbmFtZS5cbiAgICAgICAgICAgIGNhc2UgJ2NvbnRleHRfY29tcGFjdGVkJzpcbiAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuc2V0Q29tcGFjdGlvbihwbGFjZWhvbGRlcklkLCBkYXRhIGFzIENvbnRleHRDb21wYWN0aW9uUGF5bG9hZClcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAncmVhc29uaW5nX3N0ZXAnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBUb29sID0gcmVzb2x2ZVJlYXNvbmluZ1N0ZXBUb29sKGRhdGEpXG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBUeXBlID0gcmVzb2x2ZVJlYXNvbmluZ1N0ZXBUeXBlKGRhdGEpXG4gICAgICAgICAgICAgIGlmIChzaG91bGRTaG93UmVhc29uaW5nVG9vbEFjdGl2aXR5KHN0ZXBUb29sLCBzdGVwVHlwZSwgZGF0YS5zdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgaXNVc2luZ1NraWxsID0gc3RlcFRvb2wgPT09ICdnZXRfc2tpbGwnXG4gICAgICAgICAgICAgICAgaWYgKGlzVXNpbmdTa2lsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gRWwgc3RlcCBkZSBgZ2V0X3NraWxsYCBsbGVnYSBqdXN0byBkZXNwdcOpcyBkZSBgdXNpbmdfc2tpbGxgOiBtYW50aWVuZSBlbCBub21icmUuXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0VXNpbmdTa2lsbEFjdGl2aXR5KHQsIGRhdGEuYXJncz8ubmFtZSkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNldFRoaW5raW5nQWN0aXZpdHkoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoc2hvdWxkQXBwbHlSZWFzb25pbmdTdGVwSW5kZXgoZGF0YS5pKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmRleCA9IGRhdGEuaVxuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmNhcHR1cmVMZWFkaW5nRnJvbUJvZHkocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGx5U3RlcChwbGFjZWhvbGRlcklkLCB7IC4uLmRhdGEsIGk6IHN0ZXBJbmRleCB9IGFzIFJlYXNvbmluZ1N0ZXBQYXlsb2FkKVxuICAgICAgICAgICAgICAgIGlmIChyZWFzb25pbmdTdG9yZS5zaG91bGRDbGVhclN0cmVhbUZvckxlYWRpbmcocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICd0b2tlbic6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSByZXNvbHZlU3RyZWFtVGV4dENodW5rKGRhdGEpXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnY29udGVudCc6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSByZXNvbHZlU3RyZWFtVGV4dENodW5rKGRhdGEpXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgICAgICAgaXNVc2luZ1NraWxsID0gZmFsc2VcbiAgICAgICAgICAgICAgaWYgKGlzQWdlbnRUcmFuc2Zlck5vZGUoZGF0YSkgfHwgcmVzb2x2ZU5vZGVTdHJlYW1NZXNzYWdlKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhpbmtpbmdBY3Rpdml0eSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzoge1xuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAvLyBQcmVhcHJvYmFkbyAoYXV0by1hcHByb3ZlIG8gZGV0ZWNjacOzbiBtYW51YWwpOiBlbCBzdHJlYW0gbm8gc2UgY29ydGEsXG4gICAgICAgICAgICAgIC8vIHNpZ3VlIGVqZWN1dGFuZG8gbGFzIGFjY2lvbmVzIHNpbiBlc3BlcmFyIGRlY2lzacOzbiBkZWwgdXN1YXJpby5cbiAgICAgICAgICAgICAgY29uc3QgaXNQcmVBcHByb3ZlZCA9IGlzQXBwcm92YWxQcmVBcHByb3ZlZChkYXRhKVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBpZiAoIWlzUHJlQXBwcm92ZWQpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgKGRhdGEucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGwpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnYXdhaXRpbmdfYXBwcm92YWwnKVxuICAgICAgICAgICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZGF0YSBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFJlc3VtZUhpdGxBZnRlclByZUFwcHJvdmFsKGlzUHJlQXBwcm92ZWQsIGRhdGEucGVuZGluZ19hY3Rpb25zKSkge1xuICAgICAgICAgICAgICAgIHNldFRoaW5raW5nQWN0aXZpdHkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0RXJyb3Ioc2Vzc2lvbklkLCB7IHR5cGU6IGRhdGEuZXJyb3I/LnR5cGUsIG1lc3NhZ2U6IGRhdGEuZXJyb3I/Lm1lc3NhZ2UgfSlcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKGRhdGEuZXJyb3I/LnR5cGUsIGRhdGEuZXJyb3I/Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBTU0UgZXZlbnQgdHlwZTonLCBldmVudFR5cGUpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGZsdXNoUGVuZGluZygpXG4gIH1cbn1cblxuLyoqXG4gKiBNYW5hZ2VyIHNpbmdsZXRvbiAobW9kdWxlLWxldmVsKSBxdWUgY29ycmUgTiBzdHJlYW1zIGRlbCBvcmNoZXN0cmF0b3IgZW5cbiAqIHBhcmFsZWxvLCB1bm8gcG9yIGBzZXNzaW9uSWRgLiBTb2JyZXZpdmUgYSBjYW1iaW9zIGRlIHZpc3RhIHkgYWwgY2llcnJlIGRlbFxuICogbW9kYWw6IGxvcyBzdHJlYW1zIHNvbG8gc2UgY2FuY2VsYW4gY29uIHN0b3AgZXhwbMOtY2l0byBkZWwgdXN1YXJpbyBvIGFsXG4gKiBjb21wbGV0YXIvZXJyb3Jhci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlc3Npb25TdHJlYW1NYW5hZ2VyID0ge1xuICBpc0FjdGl2ZTogaXNTdHJlYW1BY3RpdmUsXG4gIGdldEFjdGl2ZUNvdW50OiBnZXRBY3RpdmVTdHJlYW1Db3VudCxcbiAgZ2V0QWN0aXZlU2Vzc2lvbklkczogKCk6IHN0cmluZ1tdID0+IEFycmF5LmZyb20oYWN0aXZlU3RyZWFtcy5rZXlzKCkpLFxuXG4gIGFzeW5jIHN0YXJ0U3RyZWFtKHBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgcmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBhY3Rpdml0eU9wdGlvbnMsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBjb25zdCBzdGFydEd1YXJkID0gcmVzb2x2ZVN0YXJ0U3RyZWFtR3VhcmQoXG4gICAgICBpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpLFxuICAgICAgZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSxcbiAgICAgIE1BWF9DT05DVVJSRU5UX1NUUkVBTVNcbiAgICApXG4gICAgaWYgKCFzdGFydEd1YXJkLmFsbG93ZWQpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246IHN0YXJ0R3VhcmQucmVhc29uIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLnBhdGNoTWV0YUFnZW50RmllbGRzKGFnZW50SWQsIGFnZW50TmFtZSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN0YXJ0KHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCBhY3Rpdml0eU9wdGlvbnMgPz8ge30pKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKHJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVzdW1lIEhJVEwgKGBjb250aW51ZS10aHJlYWRgKSBrZXllZCBwb3Igc2Vzc2lvbklkIOKAlCBtaXNtbyBtb3RvciBxdWUgb3JjaGVzdHJhdG9yLiAqL1xuICBhc3luYyBzdGFydENvbnRpbnVlU3RyZWFtKHBhcmFtczogU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250aW51ZVJlcXVlc3QsIGNhbGxiYWNrcywgdCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBjb25zdCBjb250aW51ZUd1YXJkID0gcmVzb2x2ZVN0YXJ0U3RyZWFtR3VhcmQoXG4gICAgICBpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpLFxuICAgICAgZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSxcbiAgICAgIE1BWF9DT05DVVJSRU5UX1NUUkVBTVNcbiAgICApXG4gICAgaWYgKCFjb250aW51ZUd1YXJkLmFsbG93ZWQpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246IGNvbnRpbnVlR3VhcmQucmVhc29uIH1cbiAgICB9XG5cbiAgICBpZiAoaGl0bEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5zZXQoc2Vzc2lvbklkLCBoaXRsRXhlY3V0aW9uQ29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLnBhdGNoTWV0YUFnZW50RmllbGRzKGFnZW50SWQsIGFnZW50TmFtZSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCkgPz8gdW5kZWZpbmVkKVxuICAgIClcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZChjb250aW51ZVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnRpbnVlLXRocmVhZCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVnZW5lcmEgbGEgcmVzcHVlc3RhIGRlIHVuIHR1cm5vIChgcmV0cnlfY29tcGxldGlvbmApIOKAlCBtaXNtbyBtb3RvciBTU0UgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRSZXRyeVN0cmVhbShwYXJhbXM6IFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgcmV0cnlSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGNvbnN0IHJldHJ5R3VhcmQgPSByZXNvbHZlU3RhcnRTdHJlYW1HdWFyZChcbiAgICAgIGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCksXG4gICAgICBnZXRBY3RpdmVTdHJlYW1Db3VudCgpLFxuICAgICAgTUFYX0NPTkNVUlJFTlRfU1RSRUFNU1xuICAgIClcbiAgICBpZiAoIXJldHJ5R3VhcmQuYWxsb3dlZCkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogcmV0cnlHdWFyZC5yZWFzb24gfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4ucGF0Y2hNZXRhQWdlbnRGaWVsZHMoYWdlbnRJZCwgYWdlbnROYW1lKSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCBhY3Rpdml0eU9wdGlvbnMgPz8ge30pKVxuXG4gICAgY29uc3Qgc3NlUGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICByZXF1ZXN0OiB7fSBhcyBPcmNoZXN0cmF0b3JSZXF1ZXN0LFxuICAgICAgY2FsbGJhY2tzLFxuICAgICAgdCxcbiAgICAgIGFjdGl2aXR5T3B0aW9ucyxcbiAgICAgIGFnZW50SWQsXG4gICAgICBhZ2VudE5hbWUsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IucmV0cnlDb21wbGV0aW9uKHJldHJ5UmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgIGxldCBkZXRhaWw6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyBkZXRhaWw/OiBzdHJpbmcgfVxuICAgICAgICAgICAgZGV0YWlsID0gdHlwZW9mIGRhdGEuZGV0YWlsID09PSAnc3RyaW5nJyA/IGRhdGEuZGV0YWlsIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBkZXRhaWwgPSB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzUmV0cnlUdXJuTm90Rm91bmRSZXNwb25zZShyZXNwb25zZS5zdGF0dXMsIGRldGFpbCkpIHtcbiAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlLCBwbGFjZWhvbGRlcklkOiBudWxsIH0pXG4gICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgICAgICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ3R1cm5fbm90X2ZvdW5kJyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmV0cnlfY29tcGxldGlvbiBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBDYW5jZWxhY2nDs24gZXhwbMOtY2l0YSBkZWwgdXN1YXJpbyAobWVuc2FqZSBcImNhbmNlbGFkb1wiKS4gKi9cbiAgc3RvcFN0cmVhbShzZXNzaW9uSWQ6IHN0cmluZywgY2FsbGJhY2tzPzogU2Vzc2lvblN0cmVhbUNhbGxiYWNrcykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIC8vIEVsIHBhcmNpYWwgc2UgcmVzY2F0YSBhbnRlcyBkZSBsaW1waWFyOiBlbCBiYWNrZW5kIGxvIHBlcnNpc3RlLCBwZXJvIHNpIG5vIGxvXG4gICAgLy8gcGFzYW1vcyBhbCBjYWxsYmFjayBkZXNhcGFyZWNlIGRlIHBhbnRhbGxhIGhhc3RhIGVsIHByw7N4aW1vIGZldGNoIGRlIGxhIHNlc2nDs24uXG4gICAgY29uc3QgcGFydGlhbFRleHQgPSBzZXNzaW9uU3RyZWFtaW5nVGV4dC5nZXRTbmFwc2hvdChzZXNzaW9uSWQpLnRleHRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdjYW5jZWxsZWQnKVxuICAgIGNhbGxiYWNrcz8ub25TdG9wPy4ocGFydGlhbFRleHQpXG4gIH0sXG5cbiAgLyoqIEFib3J0YSBzaW4gbWFyY2FyIFwiY2FuY2VsYWRvXCIgKHVzbyBpbnRlcm5vIC8gbGltcGllemEpLiAqL1xuICBhYm9ydFNpbGVudGx5KHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlU3RyZWFtcy5nZXQoc2Vzc2lvbklkKVxuICAgIGlmICghYWN0aXZlKSByZXR1cm5cbiAgICBhY3RpdmUuaXNTdG9wcGVkID0gdHJ1ZVxuICAgIGFjdGl2ZS5jb250cm9sbGVyLmFib3J0KClcbiAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgaWYgKHNob3VsZFNldElkbGVPblNpbGVudEFib3J0KHN0b3JlKCkuZ2V0TWV0YShzZXNzaW9uSWQpPy5zdGF0dXMpKSB7XG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICB9XG4gIH0sXG5cbiAgYWJvcnRBbGwoKSB7XG4gICAgQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSkuZm9yRWFjaChzZXNzaW9uSWQgPT4gdGhpcy5hYm9ydFNpbGVudGx5KHNlc3Npb25JZCkpXG4gIH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsSUFBSSxNQUFNLHFCQUFxQjtBQUV0QyxTQUNFQyx3QkFBd0IsRUFDeEJDLHlCQUF5QixFQUN6QkMscUJBQXFCLEVBQ3JCQyx3QkFBd0IsRUFDeEJDLGdDQUFnQyxRQUMzQixvQ0FBb0M7QUFFM0MsU0FBU0Msd0JBQXdCLEVBQUVDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUN6RixTQUFTQyxjQUFjLFFBQVEsK0JBQStCO0FBRzlELFNBQVNDLG9CQUFvQixRQUFRLHdCQUF3QjtBQUM3RCxTQUFTQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDckQsU0FBU0MscUNBQXFDLFFBQVEsd0JBQXdCO0FBQzlFLFNBQVNDLGtCQUFrQixRQUFRLHNCQUFzQjtBQUV6RCxTQUNFQyx5QkFBeUIsRUFDekJDLG1CQUFtQixFQUNuQkMscUJBQXFCLEVBQ3JCQywyQkFBMkIsRUFDM0JDLGFBQWEsRUFDYkMsb0JBQW9CLEVBQ3BCQyx3QkFBd0IsRUFDeEJDLHdCQUF3QixFQUN4QkMsd0JBQXdCLEVBQ3hCQyx1QkFBdUIsRUFDdkJDLHNCQUFzQixFQUN0QkMsb0JBQW9CLEVBQ3BCQyw4QkFBOEIsRUFDOUJDLDZCQUE2QixFQUM3QkMsd0JBQXdCLEVBQ3hCQyxnQ0FBZ0MsRUFDaENDLDBCQUEwQixFQUMxQkMsK0JBQStCLEVBQy9CQyxjQUFjLFFBQ1QsZ0NBQWdDOztBQU12Qzs7QUFxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLHNCQUFzQixHQUFHLENBQUM7QUFFdkMsSUFBTUMsa0JB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
730
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFVzaW5nU2tpbGxBY3Rpdml0eSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlVG9vbEFjdGlvbkxhYmVsIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsImJ1aWxkU2Vzc2lvbkZpbmlzaFBheWxvYWQiLCJpc0FnZW50VHJhbnNmZXJOb2RlIiwiaXNBcHByb3ZhbFByZUFwcHJvdmVkIiwiaXNSZXRyeVR1cm5Ob3RGb3VuZFJlc3BvbnNlIiwicGFyc2VTc2VCbG9jayIsInBhdGNoTWV0YUFnZW50RmllbGRzIiwicmVzb2x2ZU5vZGVTdHJlYW1NZXNzYWdlIiwicmVzb2x2ZU5vZGVUaHJlYWRJZCIsInJlc29sdmVSZWFzb25pbmdTdGVwVG9vbCIsInJlc29sdmVSZWFzb25pbmdTdGVwVHlwZSIsInJlc29sdmVTdGFydFN0cmVhbUd1YXJkIiwicmVzb2x2ZVN0cmVhbVRleHRDaHVuayIsInJlc29sdmVUaGlua2luZ0RlbHRhIiwic2hvdWxkQWJvcnRTZXNzaW9uU3RyZWFtT25TdG9wIiwic2hvdWxkQXBwbHlSZWFzb25pbmdTdGVwSW5kZXgiLCJzaG91bGRBcHBlbmRUaGlua2luZ1N0ZXAiLCJzaG91bGRSZXN1bWVIaXRsQWZ0ZXJQcmVBcHByb3ZhbCIsInNob3VsZFNldElkbGVPblNpbGVudEFib3J0Iiwic2hvdWxkU2hvd1JlYXNvbmluZ1Rvb2xBY3Rpdml0eSIsInNwbGl0U3NlQnVmZmVyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsIlNUUkVBTV9USFJPVFRMRV9NUyIsImFjdGl2ZVN0cmVhbXMiLCJNYXAiLCJzdG9yZSIsImdldFN0YXRlIiwiaXNTdHJlYW1BY3RpdmUiLCJzZXNzaW9uSWQiLCJoYXMiLCJnZXRBY3RpdmVTdHJlYW1Db3VudCIsInNpemUiLCJwYXJzZVNlc3Npb25TU0UiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsImFjdGl2ZSIsInBhcmFtcyIsIl9wYXJhbXMkaGl0bEV4ZWN1dGlvbiIsIl9yZXNwb25zZSRib2R5IiwiX2RhdGEkZXJyb3IiLCJfZGF0YSRlcnJvcjIiLCJfY2FsbGJhY2tzJG9uRXJyb3IiLCJfZGF0YSRlcnJvcjMiLCJfZGF0YSRlcnJvcjQiLCJwbGFjZWhvbGRlcklkIiwiY2FsbGJhY2tzIiwidCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwicGVuZGluZ0NvbnRlbnQiLCJ0aHJvdHRsZVRpbWVyIiwiZmx1c2hUb1N0b3JlcyIsImVtaXRUaHJvdHRsZWQiLCJmbHVzaFBlbmRpbmciLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJpc1VzaW5nU2tpbGwiLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsImFwcGx5U3RyZWFtQ2h1bmsiLCJjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCIsImFwcGx5U3RyZWFtQ29tcGxldGUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJfc3BsaXRTc2VCdWZmZXIiLCJibG9ja3MiLCJyZW1haW5kZXIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJwYXJzZWRCbG9jayIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJkYXRhIiwiX3Jlc29sdmVUaGlua2luZ0RlbHRhIiwiaW5kZXgiLCJ0aGlua2luZ0RlbHRhIiwic3RlcFRvb2wiLCJzdGVwVHlwZSIsImxhYmVsIiwiX2RhdGEkYXJncyIsInN0ZXBJbmRleCIsImNodW5rIiwiX2NodW5rIiwibm9kZU1lc3NhZ2UiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjIiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZ2V0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJwYXRjaE1ldGEiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJzZXRTdGF0dXMiLCJzZXRBY3Rpdml0eSIsIm9uU3RhcnRXcml0aW5nIiwic3luY0xpdmVOYXJyYXRpb24iLCJtYXJrQW5zd2VyUmVzZXQiLCJwYXlsb2FkIiwiX2NhbGxiYWNrcyRvbkZpbmlzaFN0IiwiZmluaXNoUGF5bG9hZCIsImZpbmlzaCIsInJlYXNvbmluZyIsIm9uRmluaXNoU3RyZWFtIiwiaXNTdG9wcGVkIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwiSlNPTiIsInBhcnNlIiwiZGVsdGEiLCJhcHBlbmRUaGlua2luZyIsInBoYXNlIiwibWVzc2FnZSIsInNraWxsIiwic2V0Q29tcGFjdGlvbiIsInN0YXR1cyIsImFyZ3MiLCJuYW1lIiwiaSIsImNhcHR1cmVMZWFkaW5nRnJvbUJvZHkiLCJhcHBseVN0ZXAiLCJfb2JqZWN0U3ByZWFkIiwic2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nIiwidW5kZWZpbmVkIiwiY2xlYXIiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRFcnJvciIsInR5cGUiLCJvbkVycm9yIiwid2FybiIsImUiLCJmIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsImlzQWN0aXZlIiwiZ2V0QWN0aXZlQ291bnQiLCJnZXRBY3RpdmVTZXNzaW9uSWRzIiwiQXJyYXkiLCJmcm9tIiwia2V5cyIsInN0YXJ0U3RyZWFtIiwiX2NhbGxlZTIiLCJyZXF1ZXN0IiwiYWN0aXZpdHlPcHRpb25zIiwiYWdlbnRJZCIsImFnZW50TmFtZSIsInN0YXJ0R3VhcmQiLCJjb250cm9sbGVyIiwiX2NhbGxiYWNrcyRvbkVycm9yMiIsIl90NCIsIl9jb250ZXh0MiIsImFsbG93ZWQiLCJzdGFydGVkIiwicmVhc29uIiwiQWJvcnRDb250cm9sbGVyIiwic2V0IiwiZW5zdXJlU2Vzc2lvbiIsInN0YXJ0IiwiT3JjaGVzdHJhdG9yIiwib3JjaGVzdHJhdG9yIiwic2lnbmFsIiwic3RhcnRDb250aW51ZVN0cmVhbSIsIl9jYWxsZWUzIiwiX3JlZjMiLCJjb250aW51ZVJlcXVlc3QiLCJjb250aW51ZUd1YXJkIiwic3NlUGFyYW1zIiwiX2NhbGxiYWNrcyRvbkVycm9yMyIsIl90NSIsIl9jb250ZXh0MyIsImNvbnRpbnVlVGhyZWFkIiwib2siLCJjb25jYXQiLCJzdGFydFJldHJ5U3RyZWFtIiwiX2NhbGxlZTQiLCJyZXRyeVJlcXVlc3QiLCJyZXRyeUd1YXJkIiwiZGV0YWlsIiwiX2NhbGxiYWNrcyRvbkVycm9yNCIsIl90NiIsIl90NyIsIl9jb250ZXh0NCIsInJldHJ5Q29tcGxldGlvbiIsImpzb24iLCJzdG9wU3RyZWFtIiwiX2NhbGxiYWNrcyRvblN0b3AiLCJhYm9ydCIsInBhcnRpYWxUZXh0IiwiZ2V0U25hcHNob3QiLCJ0ZXh0Iiwib25TdG9wIiwiYWJvcnRTaWxlbnRseSIsIl9zdG9yZSRnZXRNZXRhIiwiZ2V0TWV0YSIsImFib3J0QWxsIiwiX3RoaXMiLCJmb3JFYWNoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5LFxuICBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlLFxuICBnZXRVc2luZ1NraWxsQWN0aXZpdHksXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlVG9vbEFjdGlvbkxhYmVsLFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHR5cGUgeyBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQsIG1lcmdlU3RyZWFtQ2h1bmsgfSBmcm9tICcuLi8uLi91dGlscy9zc2VTdHJlYW1Db250ZW50J1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB0eXBlIHsgUmVhc29uaW5nU3RlcFBheWxvYWQsIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3JlYXNvbmluZydcbmltcG9ydCB0eXBlIHsgQ29udGV4dENvbXBhY3Rpb25QYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dENvbXBhY3Rpb24nXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4vc2Vzc2lvblN0cmVhbWluZ1RleHQnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCB9IGZyb20gJy4vc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBzZXNzaW9uSGl0bENvbnRleHQgfSBmcm9tICcuL3Nlc3Npb25IaXRsQ29udGV4dCdcbmltcG9ydCB0eXBlIHsgU2Vzc2lvblN0cmVhbUNhbGxiYWNrcywgU3RhcnRTdHJlYW1SZXN1bHQgfSBmcm9tICcuL3Nlc3Npb25zLnR5cGVzJ1xuaW1wb3J0IHtcbiAgYnVpbGRTZXNzaW9uRmluaXNoUGF5bG9hZCxcbiAgaXNBZ2VudFRyYW5zZmVyTm9kZSxcbiAgaXNBcHByb3ZhbFByZUFwcHJvdmVkLFxuICBpc1JldHJ5VHVybk5vdEZvdW5kUmVzcG9uc2UsXG4gIHBhcnNlU3NlQmxvY2ssXG4gIHBhdGNoTWV0YUFnZW50RmllbGRzLFxuICByZXNvbHZlTm9kZVN0cmVhbU1lc3NhZ2UsXG4gIHJlc29sdmVOb2RlVGhyZWFkSWQsXG4gIHJlc29sdmVSZWFzb25pbmdTdGVwVG9vbCxcbiAgcmVzb2x2ZVJlYXNvbmluZ1N0ZXBUeXBlLFxuICByZXNvbHZlU3RhcnRTdHJlYW1HdWFyZCxcbiAgcmVzb2x2ZVN0cmVhbVRleHRDaHVuayxcbiAgcmVzb2x2ZVRoaW5raW5nRGVsdGEsXG4gIHNob3VsZEFib3J0U2Vzc2lvblN0cmVhbU9uU3RvcCxcbiAgc2hvdWxkQXBwbHlSZWFzb25pbmdTdGVwSW5kZXgsXG4gIHNob3VsZEFwcGVuZFRoaW5raW5nU3RlcCxcbiAgc2hvdWxkUmVzdW1lSGl0bEFmdGVyUHJlQXBwcm92YWwsXG4gIHNob3VsZFNldElkbGVPblNpbGVudEFib3J0LFxuICBzaG91bGRTaG93UmVhc29uaW5nVG9vbEFjdGl2aXR5LFxuICBzcGxpdFNzZUJ1ZmZlcixcbn0gZnJvbSAnLi9zZXNzaW9uU3RyZWFtTWFuYWdlci5oZWxwZXJzJ1xuXG50eXBlIE9yY2hlc3RyYXRvclJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3I+WzBdXG50eXBlIENvbnRpbnVlVGhyZWFkUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkPlswXVxudHlwZSBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IucmV0cnlDb21wbGV0aW9uPlswXVxuXG4vKiogQ29tcGF0aWJsZSBjb24gZWwgYHRgIGRlIGkxOG5leHQgKHVzbyBkZSB1bmEgc29sYSBrZXkpLiAqL1xudHlwZSBUcmFuc2xhdGVGbiA9IChrZXk6IHN0cmluZykgPT4gc3RyaW5nXG5cbnR5cGUgU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXF1ZXN0OiBPcmNoZXN0cmF0b3JSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICBjb250aW51ZVJlcXVlc3Q6IENvbnRpbnVlVGhyZWFkUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBTdGFydFJldHJ5U3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgcmV0cnlSZXF1ZXN0OiBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIEFjdGl2ZVN0cmVhbSA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyXG4gIGlzU3RvcHBlZDogYm9vbGVhblxufVxuXG4vKipcbiAqIE3DoXhpbW8gZGUgc2VzaW9uZXMgZ2VuZXJhbmRvIGVuIHBhcmFsZWxvLiBQcm90ZWdlIHJlZC9yZWN1cnNvcyBkZWwgY2xpZW50ZS5cbiAqIEFqdXN0YWJsZSBhIGZ1dHVybyB2w61hIGZsYWcgZGVsIGhvc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TID0gNFxuXG5jb25zdCBTVFJFQU1fVEhST1RUTEVfTVMgPSAxNlxuXG5jb25zdCBhY3RpdmVTdHJlYW1zID0gbmV3IE1hcDxzdHJpbmcsIEFjdGl2ZVN0cmVhbT4oKVxuXG5jb25zdCBzdG9yZSA9ICgpID0+IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKVxuXG5jb25zdCBpc1N0cmVhbUFjdGl2ZSA9IChzZXNzaW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gYWN0aXZlU3RyZWFtcy5oYXMoc2Vzc2lvbklkKVxuXG5jb25zdCBnZXRBY3RpdmVTdHJlYW1Db3VudCA9ICgpOiBudW1iZXIgPT4gYWN0aXZlU3RyZWFtcy5zaXplXG5cbmNvbnN0IHBhcnNlU2Vzc2lvblNTRSA9IGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UsIGFjdGl2ZTogQWN0aXZlU3RyZWFtLCBwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjYWxsYmFja3MsIHQgfSA9IHBhcmFtc1xuICBjb25zdCBoaXRsRXhlY3V0aW9uQ29udGV4dCA9IHBhcmFtcy5oaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZClcblxuICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGxldCB0aHJvdHRsZVRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0IGZsdXNoVG9TdG9yZXMgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgY2FsbGJhY2tzLm9uU3RyZWFtVXBkYXRlPy4oY29udGVudClcbiAgfVxuXG4gIGNvbnN0IGVtaXRUaHJvdHRsZWQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgcGVuZGluZ0NvbnRlbnQgPSBjb250ZW50XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkgcmV0dXJuXG4gICAgdGhyb3R0bGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgICB9XG4gICAgfSwgU1RSRUFNX1RIUk9UVExFX01TKVxuICB9XG5cbiAgY29uc3QgZmx1c2hQZW5kaW5nID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuICAvLyBcIlVzYW5kbyBTa2lsbFwiIHF1ZWRhIHZpc2libGUgbWllbnRyYXMgZWwgbW9kZWxvIHBpZW5zYSBjb24gbGEgc2tpbGwgY2FyZ2FkYTtcbiAgLy8gbG9zIGRlbHRhcyBkZSBgdGhpbmtpbmdgIG5vIGxvIHBpc2FuIGhhc3RhIGxhIHByw7N4aW1hIGFjY2nDs24gbyBlbCBwcmltZXIgdG9rZW4uXG4gIGxldCBpc1VzaW5nU2tpbGwgPSBmYWxzZVxuXG4gIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgIGlmIChoYXNTdGFydGVkV3JpdGluZykgcmV0dXJuXG4gICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSwgaXNXcml0aW5nOiB0cnVlIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnd3JpdGluZycpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgICBjYWxsYmFja3Mub25TdGFydFdyaXRpbmc/LigpXG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNodW5rID0gKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWNodW5rKSByZXR1cm5cbiAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY2h1bmspXG4gICAgcmVhc29uaW5nU3RvcmUuc3luY0xpdmVOYXJyYXRpb24ocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIGVtaXRUaHJvdHRsZWQoYWNjdW11bGF0ZWRDb250ZW50KVxuICB9XG5cbiAgY29uc3QgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQgPSAoKSA9PiB7XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICB9XG4gICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgICBmbHVzaFRvU3RvcmVzKCcnKVxuICAgIHJlYXNvbmluZ1N0b3JlLm1hcmtBbnN3ZXJSZXNldChwbGFjZWhvbGRlcklkKVxuICB9XG5cbiAgY29uc3QgYXBwbHlTdHJlYW1Db21wbGV0ZSA9IChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgIGNvbnN0IGZpbmlzaFBheWxvYWQgPSBidWlsZFNlc3Npb25GaW5pc2hQYXlsb2FkKHBheWxvYWQsIGFjY3VtdWxhdGVkQ29udGVudClcblxuICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCBmaW5pc2hQYXlsb2FkLnJlYXNvbmluZylcbiAgICBmbHVzaFBlbmRpbmcoKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY29tcGxldGUnKVxuXG4gICAgY2FsbGJhY2tzLm9uRmluaXNoU3RyZWFtPy4oZmluaXNoUGF5bG9hZClcblxuICAgIC8vIEVsIHRleHRvIGVuIHZpdm8gTk8gc2UgbGltcGlhIGFjw6EgYSBwcm9ww7NzaXRvLiBFbCBwbGFjZWhvbGRlciBzZSB2YSBjb24gZWxcbiAgICAvLyBgZHJvcGAgcXVlIGhhY2UgZWwgY29uc3VtaWRvciwgeSBjb24gw6lsIHN1IHN1c2NyaXBjacOzbjsgdmFjaWFybG8gYW50ZXMgbG9cbiAgICAvLyBkZWphYmEgbW9udGFkbyB5IHNpbiB0ZXh0byAoYWx0dXJhIDApIGR1cmFudGUgfjI1bXM6IGVsIGZsaWNrZXIgZGUgZmluIGRlXG4gICAgLy8gc3RyZWFtLiBObyBhbGNhbnphIGNvbiBkaWZlcmlybG8sIHBvcnF1ZSBlc3RlIGNsZWFyIHZpYWphIGVuIFN5bmNMYW5lXG4gICAgLy8gKHN0b3JlIGV4dGVybm8pIHkgZWwgc3dhcCBkZSBtZW5zYWplcyBlbiBEZWZhdWx0TGFuZSwgYXPDrSBxdWUgc2llbXByZSBzZVxuICAgIC8vIGN1ZWxhIGVuIGVsIG1lZGlvLiBFbCBzbG90IHNlIGxpYmVyYSBlbiBlbCBwcsOzeGltbyBgc3RhcnQoKWAgZGUgbGEgc2VzacOzbixcbiAgICAvLyB5IGVuIHN0b3AvZXJyb3IvYXBwcm92YWwvY2FtYmlvIGRlIHNlc2nDs24sIHF1ZSBzw60gbGxhbWFuIGBjbGVhcmAuXG4gIH1cblxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoc2hvdWxkQWJvcnRTZXNzaW9uU3RyZWFtT25TdG9wKGFjdGl2ZS5pc1N0b3BwZWQpKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICBpZiAoZG9uZSkgYnJlYWtcblxuICAgICAgaWYgKHNob3VsZEFib3J0U2Vzc2lvblN0cmVhbU9uU3RvcChhY3RpdmUuaXNTdG9wcGVkKSkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgY29uc3QgeyBibG9ja3MsIHJlbWFpbmRlciB9ID0gc3BsaXRTc2VCdWZmZXIoYnVmZmVyKVxuICAgICAgYnVmZmVyID0gcmVtYWluZGVyXG5cbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9ja3MpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkQmxvY2sgPSBwYXJzZVNzZUJsb2NrKGxpbmUpXG4gICAgICAgIGlmICghcGFyc2VkQmxvY2spIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGFTdHIgfSA9IHBhcnNlZEJsb2NrXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuXG4gICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nJzoge1xuICAgICAgICAgICAgICBjb25zdCB7IGluZGV4LCBkZWx0YTogdGhpbmtpbmdEZWx0YSB9ID0gcmVzb2x2ZVRoaW5raW5nRGVsdGEoZGF0YSlcbiAgICAgICAgICAgICAgaWYgKHNob3VsZEFwcGVuZFRoaW5raW5nU3RlcChpbmRleCwgdGhpbmtpbmdEZWx0YSkpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5hcHBlbmRUaGlua2luZyhwbGFjZWhvbGRlcklkLCBpbmRleCwgdGhpbmtpbmdEZWx0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBpZiAoIWlzVXNpbmdTa2lsbCkge1xuICAgICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIHsgcGhhc2U6ICd0aGlua2luZycsIG1lc3NhZ2U6IGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UoMCwgdCkgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2tpbGwgQC1tZW5jaW9uYWRhIChhbCBhYnJpciBlbCBzdHJlYW0pIG8gbGxhbWFkYSBhIGBnZXRfc2tpbGxgLlxuICAgICAgICAgICAgY2FzZSAndXNpbmdfc2tpbGwnOlxuICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgaXNVc2luZ1NraWxsID0gdHJ1ZVxuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldFVzaW5nU2tpbGxBY3Rpdml0eSh0LCBkYXRhLnNraWxsKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAvLyBFbCBiYWNrZW5kIGRlc2NhcnRhIGxvIGVtaXRpZG8geSByZWluaWNpYSBsYSByZXNwdWVzdGEgZGVzZGUgY2Vyby5cbiAgICAgICAgICAgIGNhc2UgJ2Fuc3dlcl9yZXNldCc6XG4gICAgICAgICAgICAgIGNsZWFyU3RyZWFtTGlrZUFuc3dlclJlc2V0KClcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgLy8gTUFJQSByZWNvcnTDsyBlbCBjb250ZXh0byBwYXJhIHF1ZSBlbCByZXF1ZXN0IGVudHJhcmEuIFPDs2xvIGxsZWdhXG4gICAgICAgICAgICAvLyBjdWFuZG8gZWwgcmVjb3J0ZSBzZSBub3RhIChpbcOhZ2VuZXMgdmllamFzLCB0dXJub3MgZW50ZXJvcyBvIGVsXG4gICAgICAgICAgICAvLyB0ZXh0byBsaXRlcmFsIGRlIHR1cm5vcyB2aWVqb3MpLCB5IHZpYWphIGp1bnRvIGEgbGEgdHJhemEgcG9ycXVlXG4gICAgICAgICAgICAvLyBjb21wYXJ0ZSBzdSBjaWNsbyBkZSB2aWRhOiBtaXNtbyBwbGFjZWhvbGRlciwgbWlzbW8gcmVuYW1lLlxuICAgICAgICAgICAgY2FzZSAnY29udGV4dF9jb21wYWN0ZWQnOlxuICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5zZXRDb21wYWN0aW9uKHBsYWNlaG9sZGVySWQsIGRhdGEgYXMgQ29udGV4dENvbXBhY3Rpb25QYXlsb2FkKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdyZWFzb25pbmdfc3RlcCc6IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFRvb2wgPSByZXNvbHZlUmVhc29uaW5nU3RlcFRvb2woZGF0YSlcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFR5cGUgPSByZXNvbHZlUmVhc29uaW5nU3RlcFR5cGUoZGF0YSlcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dSZWFzb25pbmdUb29sQWN0aXZpdHkoc3RlcFRvb2wsIHN0ZXBUeXBlLCBkYXRhLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHJlc29sdmVUb29sQWN0aW9uTGFiZWwoc3RlcFRvb2wsIHQsICdwcmVzZW50JylcbiAgICAgICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA9IHN0ZXBUb29sID09PSAnZ2V0X3NraWxsJ1xuICAgICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgLy8gRWwgc3RlcCBkZSBgZ2V0X3NraWxsYCBsbGVnYSBqdXN0byBkZXNwdcOpcyBkZSBgdXNpbmdfc2tpbGxgOiBtYW50aWVuZSBlbCBub21icmUuXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA/IGdldFVzaW5nU2tpbGxBY3Rpdml0eSh0LCBkYXRhLmFyZ3M/Lm5hbWUpIDogeyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IGxhYmVsIH1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNob3VsZEFwcGx5UmVhc29uaW5nU3RlcEluZGV4KGRhdGEuaSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGVwSW5kZXggPSBkYXRhLmlcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5jYXB0dXJlTGVhZGluZ0Zyb21Cb2R5KHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5hcHBseVN0ZXAocGxhY2Vob2xkZXJJZCwgeyAuLi5kYXRhLCBpOiBzdGVwSW5kZXggfSBhcyBSZWFzb25pbmdTdGVwUGF5bG9hZClcbiAgICAgICAgICAgICAgICBpZiAocmVhc29uaW5nU3RvcmUuc2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nKHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTGlrZUFuc3dlclJlc2V0KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAndG9rZW4nOiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gcmVzb2x2ZVN0cmVhbVRleHRDaHVuayhkYXRhKVxuICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gcmVzb2x2ZVN0cmVhbVRleHRDaHVuayhkYXRhKVxuICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ2h1bmsoY2h1bmspXG4gICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA9IGZhbHNlXG4gICAgICAgICAgICAgIGlmIChpc0FnZW50VHJhbnNmZXJOb2RlKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlTWVzc2FnZSA9IHJlc29sdmVOb2RlU3RyZWFtTWVzc2FnZShkYXRhKVxuICAgICAgICAgICAgICAgIGlmIChub2RlTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgICBub2RlTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlTm9kZVRocmVhZElkKGRhdGEpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzoge1xuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAvLyBQcmVhcHJvYmFkbyAoYXV0by1hcHByb3ZlIG8gZGV0ZWNjacOzbiBtYW51YWwpOiBlbCBzdHJlYW0gbm8gc2UgY29ydGEsXG4gICAgICAgICAgICAgIC8vIHNpZ3VlIGVqZWN1dGFuZG8gbGFzIGFjY2lvbmVzIHNpbiBlc3BlcmFyIGRlY2lzacOzbiBkZWwgdXN1YXJpby5cbiAgICAgICAgICAgICAgY29uc3QgaXNQcmVBcHByb3ZlZCA9IGlzQXBwcm92YWxQcmVBcHByb3ZlZChkYXRhKVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBpZiAoIWlzUHJlQXBwcm92ZWQpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgKGRhdGEucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGwpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnYXdhaXRpbmdfYXBwcm92YWwnKVxuICAgICAgICAgICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZGF0YSBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFJlc3VtZUhpdGxBZnRlclByZUFwcHJvdmFsKGlzUHJlQXBwcm92ZWQsIGRhdGEucGVuZGluZ19hY3Rpb25zKSkge1xuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRFcnJvcihzZXNzaW9uSWQsIHsgdHlwZTogZGF0YS5lcnJvcj8udHlwZSwgbWVzc2FnZTogZGF0YS5lcnJvcj8ubWVzc2FnZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oZGF0YS5lcnJvcj8udHlwZSwgZGF0YS5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZmx1c2hQZW5kaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIE1hbmFnZXIgc2luZ2xldG9uIChtb2R1bGUtbGV2ZWwpIHF1ZSBjb3JyZSBOIHN0cmVhbXMgZGVsIG9yY2hlc3RyYXRvciBlblxuICogcGFyYWxlbG8sIHVubyBwb3IgYHNlc3Npb25JZGAuIFNvYnJldml2ZSBhIGNhbWJpb3MgZGUgdmlzdGEgeSBhbCBjaWVycmUgZGVsXG4gKiBtb2RhbDogbG9zIHN0cmVhbXMgc29sbyBzZSBjYW5jZWxhbiBjb24gc3RvcCBleHBsw61jaXRvIGRlbCB1c3VhcmlvIG8gYWxcbiAqIGNvbXBsZXRhci9lcnJvcmFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0cmVhbU1hbmFnZXIgPSB7XG4gIGlzQWN0aXZlOiBpc1N0cmVhbUFjdGl2ZSxcbiAgZ2V0QWN0aXZlQ291bnQ6IGdldEFjdGl2ZVN0cmVhbUNvdW50LFxuICBnZXRBY3RpdmVTZXNzaW9uSWRzOiAoKTogc3RyaW5nW10gPT4gQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSksXG5cbiAgYXN5bmMgc3RhcnRTdHJlYW0ocGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGNvbnN0IHN0YXJ0R3VhcmQgPSByZXNvbHZlU3RhcnRTdHJlYW1HdWFyZChcbiAgICAgIGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCksXG4gICAgICBnZXRBY3RpdmVTdHJlYW1Db3VudCgpLFxuICAgICAgTUFYX0NPTkNVUlJFTlRfU1RSRUFNU1xuICAgIClcbiAgICBpZiAoIXN0YXJ0R3VhcmQuYWxsb3dlZCkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogc3RhcnRHdWFyZC5yZWFzb24gfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4ucGF0Y2hNZXRhQWdlbnRGaWVsZHMoYWdlbnRJZCwgYWdlbnROYW1lKSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgcmVhc29uaW5nU3RvcmUuc3RhcnQocGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3IocmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgcGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBSZXN1bWUgSElUTCAoYGNvbnRpbnVlLXRocmVhZGApIGtleWVkIHBvciBzZXNzaW9uSWQg4oCUIG1pc21vIG1vdG9yIHF1ZSBvcmNoZXN0cmF0b3IuICovXG4gIGFzeW5jIHN0YXJ0Q29udGludWVTdHJlYW0ocGFyYW1zOiBTdGFydENvbnRpbnVlU3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRpbnVlUmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCwgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGNvbnN0IGNvbnRpbnVlR3VhcmQgPSByZXNvbHZlU3RhcnRTdHJlYW1HdWFyZChcbiAgICAgIGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCksXG4gICAgICBnZXRBY3RpdmVTdHJlYW1Db3VudCgpLFxuICAgICAgTUFYX0NPTkNVUlJFTlRfU1RSRUFNU1xuICAgIClcbiAgICBpZiAoIWNvbnRpbnVlR3VhcmQuYWxsb3dlZCkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogY29udGludWVHdWFyZC5yZWFzb24gfVxuICAgIH1cblxuICAgIGlmIChoaXRsRXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LnNldChzZXNzaW9uSWQsIGhpdGxFeGVjdXRpb25Db250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4ucGF0Y2hNZXRhQWdlbnRGaWVsZHMoYWdlbnRJZCwgYWdlbnROYW1lKSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKSA/PyB1bmRlZmluZWQpXG4gICAgKVxuXG4gICAgY29uc3Qgc3NlUGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICByZXF1ZXN0OiB7fSBhcyBPcmNoZXN0cmF0b3JSZXF1ZXN0LFxuICAgICAgY2FsbGJhY2tzLFxuICAgICAgdCxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCksXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKGNvbnRpbnVlUmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udGludWUtdGhyZWFkIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBzc2VQYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgICBzZXNzaW9uSGl0bENvbnRleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBSZWdlbmVyYSBsYSByZXNwdWVzdGEgZGUgdW4gdHVybm8gKGByZXRyeV9jb21wbGV0aW9uYCkg4oCUIG1pc21vIG1vdG9yIFNTRSBxdWUgb3JjaGVzdHJhdG9yLiAqL1xuICBhc3luYyBzdGFydFJldHJ5U3RyZWFtKHBhcmFtczogU3RhcnRSZXRyeVN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXRyeVJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgY29uc3QgcmV0cnlHdWFyZCA9IHJlc29sdmVTdGFydFN0cmVhbUd1YXJkKFxuICAgICAgaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSxcbiAgICAgIGdldEFjdGl2ZVN0cmVhbUNvdW50KCksXG4gICAgICBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TXG4gICAgKVxuICAgIGlmICghcmV0cnlHdWFyZC5hbGxvd2VkKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiByZXRyeUd1YXJkLnJlYXNvbiB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi5wYXRjaE1ldGFBZ2VudEZpZWxkcyhhZ2VudElkLCBhZ2VudE5hbWUpLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgYWN0aXZpdHlPcHRpb25zLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24ocmV0cnlSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgbGV0IGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGRldGFpbD86IHN0cmluZyB9XG4gICAgICAgICAgICBkZXRhaWwgPSB0eXBlb2YgZGF0YS5kZXRhaWwgPT09ICdzdHJpbmcnID8gZGF0YS5kZXRhaWwgOiB1bmRlZmluZWRcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGRldGFpbCA9IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNSZXRyeVR1cm5Ob3RGb3VuZFJlc3BvbnNlKHJlc3BvbnNlLnN0YXR1cywgZGV0YWlsKSkge1xuICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UsIHBsYWNlaG9sZGVySWQ6IG51bGwgfSlcbiAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnaWRsZScpXG4gICAgICAgICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgICAgICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAndHVybl9ub3RfZm91bmQnIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXRyeV9jb21wbGV0aW9uIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBzc2VQYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIENhbmNlbGFjacOzbiBleHBsw61jaXRhIGRlbCB1c3VhcmlvIChtZW5zYWplIFwiY2FuY2VsYWRvXCIpLiAqL1xuICBzdG9wU3RyZWFtKHNlc3Npb25JZDogc3RyaW5nLCBjYWxsYmFja3M/OiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzKSB7XG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlU3RyZWFtcy5nZXQoc2Vzc2lvbklkKVxuICAgIGlmICghYWN0aXZlKSByZXR1cm5cbiAgICBhY3RpdmUuaXNTdG9wcGVkID0gdHJ1ZVxuICAgIGFjdGl2ZS5jb250cm9sbGVyLmFib3J0KClcbiAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgLy8gRWwgcGFyY2lhbCBzZSByZXNjYXRhIGFudGVzIGRlIGxpbXBpYXI6IGVsIGJhY2tlbmQgbG8gcGVyc2lzdGUsIHBlcm8gc2kgbm8gbG9cbiAgICAvLyBwYXNhbW9zIGFsIGNhbGxiYWNrIGRlc2FwYXJlY2UgZGUgcGFudGFsbGEgaGFzdGEgZWwgcHLDs3hpbW8gZmV0Y2ggZGUgbGEgc2VzacOzbi5cbiAgICBjb25zdCBwYXJ0aWFsVGV4dCA9IHNlc3Npb25TdHJlYW1pbmdUZXh0LmdldFNuYXBzaG90KHNlc3Npb25JZCkudGV4dFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NhbmNlbGxlZCcpXG4gICAgY2FsbGJhY2tzPy5vblN0b3A/LihwYXJ0aWFsVGV4dClcbiAgfSxcblxuICAvKiogQWJvcnRhIHNpbiBtYXJjYXIgXCJjYW5jZWxhZG9cIiAodXNvIGludGVybm8gLyBsaW1waWV6YSkuICovXG4gIGFib3J0U2lsZW50bHkoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBpZiAoc2hvdWxkU2V0SWRsZU9uU2lsZW50QWJvcnQoc3RvcmUoKS5nZXRNZXRhKHNlc3Npb25JZCk/LnN0YXR1cykpIHtcbiAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgIH1cbiAgfSxcblxuICBhYm9ydEFsbCgpIHtcbiAgICBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKS5mb3JFYWNoKHNlc3Npb25JZCA9PiB0aGlzLmFib3J0U2lsZW50bHkoc2Vzc2lvbklkKSlcbiAgfSxcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxJQUFJLE1BQU0scUJBQXFCO0FBRXRDLFNBQ0VDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyxxQkFBcUIsRUFDckJDLHdCQUF3QixFQUN4QkMsNkJBQTZCLEVBQzdCQyxn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