@projectcor/maia-components 2.48.1-1 → 2.49.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 (422) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
  4. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
  5. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +53 -1
  6. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +28 -52
  7. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +37 -1
  8. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +33 -66
  9. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +227 -1
  10. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -177
  11. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
  12. package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
  13. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +29 -1
  14. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -28
  15. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  16. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  17. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
  18. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +173 -1
  19. package/lib/components/atoms/MAIAInput/MAIAInput.js +126 -171
  20. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +47 -1
  21. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -61
  22. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  23. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
  24. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
  25. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
  26. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
  27. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
  28. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
  29. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
  30. package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
  31. package/lib/components/atoms/TextArea/TextArea.js +11 -20
  32. package/lib/components/index.js +1 -2
  33. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +30 -1
  34. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +13 -18
  35. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +48 -1
  36. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +17 -26
  37. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  38. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
  39. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +266 -321
  40. package/lib/components/molecules/ChatAIHome/styles.js +78 -85
  41. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +345 -1
  42. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +201 -200
  43. package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
  44. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +373 -5
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +199 -271
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +20 -1
  50. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +87 -74
  51. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
  52. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
  53. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
  54. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
  55. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
  56. package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
  57. package/lib/components/molecules/Sidebar/Sidebar.js +46 -61
  58. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +314 -1
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +261 -480
  60. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
  61. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
  62. package/lib/constants/permissions/index.js +2 -2
  63. package/lib/constants/permissions/utils.js +1 -4
  64. package/lib/dev/DevReasoningTimeline.js +37 -68
  65. package/lib/dev/Providers.js +3 -5
  66. package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
  67. package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
  68. package/lib/hooks/useChatManager/useChatManager.helpers.js +550 -1
  69. package/lib/hooks/useChatManager/useChatManager.js +245 -429
  70. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +257 -1
  71. package/lib/hooks/useChatMessages/useChatMessages.js +50 -206
  72. package/lib/hooks/useContextMentions.helpers.js +61 -1
  73. package/lib/hooks/useContextMentions.js +5 -62
  74. package/lib/hooks/useEntitySearch.helpers.js +49 -1
  75. package/lib/hooks/useEntitySearch.js +22 -53
  76. package/lib/hooks/useFrequentlyUsedActions.js +22 -60
  77. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
  78. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
  79. package/lib/index.js +2 -5
  80. package/lib/lang/br/index.js +1 -26
  81. package/lib/lang/en/index.js +1 -26
  82. package/lib/lang/es/index.js +1 -26
  83. package/lib/lang/fr/index.js +1 -26
  84. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  85. package/lib/services/maia/Agents/getAgents.helpers.js +61 -1
  86. package/lib/services/maia/Agents/getAgents.js +31 -59
  87. package/lib/services/utils/mapChatMessages.helpers.js +223 -0
  88. package/lib/services/utils/mapChatMessages.js +25 -249
  89. package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
  90. package/lib/store/sessions/sessionStreamManager.js +213 -273
  91. package/lib/styles/cascade.js +3 -29
  92. package/lib/styles/transitions.js +1 -3
  93. package/lib/types/global.d.js +1 -1
  94. package/lib/utils/hoursPlannerQuickActionType.js +1 -74
  95. package/lib/utils/renderContextMentions.helpers.js +110 -0
  96. package/lib/utils/renderContextMentions.js +4 -110
  97. package/lib/utils/streamActivityMessages.helpers.js +222 -0
  98. package/lib/utils/streamActivityMessages.js +21 -251
  99. package/package.json +1 -1
  100. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  101. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  102. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  103. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
  104. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  105. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
  106. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
  107. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  108. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
  109. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
  110. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  111. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
  112. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
  113. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  114. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  115. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  116. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  117. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  118. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  119. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  120. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  121. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
  122. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  123. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  124. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
  125. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  126. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
  127. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
  128. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  129. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  130. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  131. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  132. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  133. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  134. package/lib/components/atoms/Fade/Fade.spec.js +0 -31
  135. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  136. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  137. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  138. package/lib/components/atoms/HelpButton.spec.js +0 -87
  139. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  140. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  141. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  142. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  143. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  144. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  145. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  146. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  147. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
  148. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -444
  149. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
  150. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
  151. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
  152. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  153. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  154. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  155. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  156. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  157. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  158. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  159. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  160. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
  161. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
  162. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
  163. package/lib/components/atoms/PrimaryButton.spec.js +0 -42
  164. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
  165. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
  166. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
  167. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
  168. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
  169. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
  170. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
  171. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
  172. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  173. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  174. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  175. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
  176. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
  177. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  178. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  179. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  180. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
  181. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  182. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  183. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
  184. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  185. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  186. package/lib/components/atoms/WithAppCfg.spec.js +0 -60
  187. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  188. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -495
  189. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
  190. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
  191. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
  192. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
  193. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  194. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  195. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  196. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  197. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  198. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  199. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  200. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  201. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  202. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  203. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  204. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  205. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  206. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
  207. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
  208. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  209. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
  210. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -445
  211. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  212. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
  213. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
  214. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  215. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  216. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  217. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
  218. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  219. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  220. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  221. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  222. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  223. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  224. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
  225. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  226. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  227. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
  228. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  229. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
  230. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  231. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  232. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  233. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  234. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  235. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  236. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  237. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
  238. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -391
  239. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1204
  240. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  241. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
  242. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  243. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  244. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
  245. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  246. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  247. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
  248. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  249. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -275
  250. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -275
  251. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -195
  252. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
  253. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
  254. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  255. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  256. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  257. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  258. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  259. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  260. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  261. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  262. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  263. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  264. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  265. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  266. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  267. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  268. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  269. package/lib/constants/maiaFeatureAccess.spec.js +0 -30
  270. package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
  271. package/lib/constants/maiaTaskPanelAccess.spec.js +0 -30
  272. package/lib/constants/permissions/clientRoleAccess.spec.js +0 -31
  273. package/lib/constants/permissions/utils.spec.js +0 -128
  274. package/lib/dev/DevMaiaPage.js +0 -30
  275. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  276. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  277. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  278. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  279. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
  280. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  281. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
  282. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  283. package/lib/hooks/useCaretPosition.spec.js +0 -58
  284. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
  285. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
  286. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
  287. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
  288. package/lib/hooks/useChats/useChats.spec.js +0 -208
  289. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  290. package/lib/hooks/useClientSearch.spec.js +0 -86
  291. package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
  292. package/lib/hooks/useContextMentions.spec.js +0 -239
  293. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
  294. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  295. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  296. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  297. package/lib/hooks/useDebounce.spec.js +0 -42
  298. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
  299. package/lib/hooks/useEntitySearch.spec.js +0 -443
  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 -135
  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 -71
  313. package/lib/hooks/useMentionPopover.spec.js +0 -215
  314. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
  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.spec.js +0 -192
  319. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
  320. package/lib/hooks/useProjectSearch.spec.js +0 -91
  321. package/lib/hooks/useProjectSummary.spec.js +0 -193
  322. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
  323. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  324. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  325. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  326. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  327. package/lib/hooks/useRecentContexts.spec.js +0 -139
  328. package/lib/hooks/useResize.spec.js +0 -37
  329. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  330. package/lib/hooks/useSlashCommands.spec.js +0 -139
  331. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  332. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  333. package/lib/hooks/useStreamResponse.spec.js +0 -199
  334. package/lib/hooks/useT.spec.js +0 -20
  335. package/lib/hooks/useToggle.spec.js +0 -33
  336. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  337. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  338. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
  339. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  340. package/lib/services/maia/Agents/connectors.spec.js +0 -359
  341. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  342. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  343. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  344. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  345. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  346. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  347. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
  348. package/lib/services/maia/Agents/getAgents.spec.js +0 -697
  349. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  350. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  351. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  352. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  353. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  354. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  355. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  356. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  357. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  358. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  359. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  360. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  361. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  362. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
  363. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  364. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  365. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  366. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  367. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  368. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  369. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  370. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  371. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  372. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  373. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  374. package/lib/services/maia/client.spec.js +0 -56
  375. package/lib/services/utils/fetchCOR.spec.js +0 -211
  376. package/lib/services/utils/getCookie.spec.js +0 -20
  377. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  378. package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
  379. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  380. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  381. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  382. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  383. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  384. package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
  385. package/lib/store/sessions/sessions.types.spec.js +0 -16
  386. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  387. package/lib/store/useChatsStore.spec.js +0 -619
  388. package/lib/store/useFaqsStore.spec.js +0 -57
  389. package/lib/utils/actionCategoryMap.spec.js +0 -18
  390. package/lib/utils/agentDisplayName.spec.js +0 -44
  391. package/lib/utils/autoApproveStorage.spec.js +0 -25
  392. package/lib/utils/chatInputFiles.spec.js +0 -39
  393. package/lib/utils/contextMentionIcons.spec.js +0 -41
  394. package/lib/utils/contextMentionLabel.spec.js +0 -13
  395. package/lib/utils/contextMentionTriggers.spec.js +0 -38
  396. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  397. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  398. package/lib/utils/entityLinkRender.spec.js +0 -72
  399. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  400. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  401. package/lib/utils/formatUnreadCount.spec.js +0 -12
  402. package/lib/utils/getUnitFileSize.spec.js +0 -18
  403. package/lib/utils/hitlAnalytics.spec.js +0 -100
  404. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  405. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  406. package/lib/utils/imagePreprocessor.spec.js +0 -112
  407. package/lib/utils/maiaPageRoute.js +0 -24
  408. package/lib/utils/maiaPageRoute.spec.js +0 -23
  409. package/lib/utils/mapBackendLang.spec.js +0 -19
  410. package/lib/utils/navigateContextEntity.spec.js +0 -50
  411. package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
  412. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  413. package/lib/utils/reasoningMappers.spec.js +0 -103
  414. package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
  415. package/lib/utils/renderContextMentions.spec.js +0 -158
  416. package/lib/utils/retryCompletion.spec.js +0 -99
  417. package/lib/utils/skillContentSize.spec.js +0 -13
  418. package/lib/utils/slashCommandMarker.spec.js +0 -43
  419. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  420. package/lib/utils/sseStreamContent.spec.js +0 -31
  421. package/lib/utils/streamActivityMessages.spec.js +0 -253
  422. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -1,4 +1,3 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
1
  import styled, { css } from 'styled-components';
3
2
  import { CONTEXT_MENTION_CHIP_CLASS } from '../types/contextMention';
4
3
  import { MENTION_CHIP_COLORS, MENTION_CHIP_NON_TASK_HOVER_BG } from '../components/atoms/ContextMentionChip/ContextMentionChip.styles';
@@ -10,6 +9,9 @@ import { SCTaskLink } from '../components/molecules/ChatAIMessages/newStyles';
10
9
  import { getContextMentionIcon } from './contextMentionIcons';
11
10
  import { normalizeContextMentionLabel } from './contextMentionLabel';
12
11
  import { openTaskInCorPanel } from './openTaskInCorPanel';
12
+ import { collectInlineMarkers, formatSkillLabel, getMentionUrl, MAIA_MENTION_PROTOCOL, mentionChildrenToLabel, MENTION_MARKER_REGEX, parseMentionProtocolHref, splitLabelFirstWord } from './renderContextMentions.helpers';
13
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
14
+ export { MAIA_MENTION_PROTOCOL, MENTION_MARKER_REGEX } from './renderContextMentions.helpers';
13
15
 
14
16
  /**
15
17
  * Formato del marcador que viaja en el texto del mensaje:
@@ -28,29 +30,8 @@ import { openTaskInCorPanel } from './openTaskInCorPanel';
28
30
  * Label puede contener `]` (ej: "[Educate]Blog Post ..."), por eso
29
31
  * se captura de forma lazy hasta el cierre real `]]`.
30
32
  */
31
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
32
- export var MENTION_MARKER_REGEX = /\[\[mention:(client|project|task|user|mcp|skill):([^|\]]+)\|([\s\S]*?)\]\]/g;
33
- export var MAIA_MENTION_PROTOCOL = 'maia-mention://';
34
33
  var INCOMPLETE_MENTION_MARKER_REGEX = /\[\[mention:[\s\S]*$/;
35
34
  var INCOMPLETE_SLASH_MARKER_REGEX = /\[\[slash_command:[^|\]]+\|([\s\S]*)$/;
36
- var ALLOWED_TYPES = ['client', 'project', 'task', 'user', 'mcp', 'skill'];
37
- var parseMentionProtocolHref = function parseMentionProtocolHref(href) {
38
- var rest = href.slice(MAIA_MENTION_PROTOCOL.length);
39
- var slashIdx = rest.indexOf('/');
40
- var rawType = slashIdx >= 0 ? rest.slice(0, slashIdx) : rest;
41
- var rawId = slashIdx >= 0 ? rest.slice(slashIdx + 1) : '';
42
- var id = '';
43
- try {
44
- id = rawId ? decodeURIComponent(rawId) : '';
45
- } catch (_unused) {
46
- id = rawId;
47
- }
48
- var type = ALLOWED_TYPES.includes(rawType) ? rawType : 'user';
49
- return {
50
- type: type,
51
- id: id
52
- };
53
- };
54
35
 
55
36
  /** Genera el marcador para un mention dado. Lo usa el editor al serializar. */
56
37
  export var serializeMention = function serializeMention(mention) {
@@ -68,37 +49,6 @@ export var transformMentionMarkers = function transformMentionMarkers(text) {
68
49
  return "[".concat(safeLabel, "](").concat(MAIA_MENTION_PROTOCOL).concat(type, "/").concat(encodeURIComponent(String(id)), ")");
69
50
  });
70
51
  };
71
- var mentionChildrenToLabel = function mentionChildrenToLabel(children) {
72
- if (typeof children === 'string') return normalizeContextMentionLabel(children);
73
- if (children == null || children === false) return '';
74
- if (Array.isArray(children)) {
75
- return normalizeContextMentionLabel(children.map(function (c) {
76
- return typeof c === 'string' ? c : '';
77
- }).join(''));
78
- }
79
- return normalizeContextMentionLabel(String(children));
80
- };
81
- var splitLabelFirstWord = function splitLabelFirstWord(label) {
82
- var normalized = normalizeContextMentionLabel(label).trim();
83
- if (!normalized) return {
84
- firstWord: '',
85
- rest: ''
86
- };
87
- var firstWhitespaceIdx = normalized.search(/\s/);
88
- if (firstWhitespaceIdx < 0) return {
89
- firstWord: normalized,
90
- rest: ''
91
- };
92
- return {
93
- firstWord: normalized.slice(0, firstWhitespaceIdx),
94
- rest: normalized.slice(firstWhitespaceIdx)
95
- };
96
- };
97
-
98
- /** Las skills se muestran como `#nombre`, con el mismo estilo que los slash commands. */
99
- var formatSkillLabel = function formatSkillLabel(label) {
100
- return "#".concat(label.trim().replace(/^(@\/|#)/, ''));
101
- };
102
52
  var SkillInlineChip = function SkillInlineChip(_ref) {
103
53
  var label = _ref.label;
104
54
  return /*#__PURE__*/_jsx(SCSlashChip, {
@@ -262,25 +212,6 @@ export var formatChatListTitleMentions = function formatChatListTitleMentions(te
262
212
  });
263
213
  return withoutIncompleteSlash.replace(INCOMPLETE_MENTION_MARKER_REGEX, '').trim();
264
214
  };
265
-
266
- /** Genera la URL de navegación para un mention según su tipo. */
267
- var getMentionUrl = function getMentionUrl(type, id) {
268
- switch (type) {
269
- case 'client':
270
- return "/clients/".concat(id);
271
- case 'project':
272
- return "/projects/".concat(id, "/dashboard");
273
- case 'task':
274
- return "/tasks/".concat(id, "/detail");
275
- case 'user':
276
- return null;
277
- // Los users no son clickeables
278
- case 'mcp':
279
- return null;
280
- default:
281
- return null;
282
- }
283
- };
284
215
  var MentionChip = function MentionChip(_ref8) {
285
216
  var type = _ref8.type,
286
217
  id = _ref8.id,
@@ -355,43 +286,6 @@ export var hasInlineMarkers = function hasInlineMarkers(text) {
355
286
  if (!text) return false;
356
287
  return text.includes('[[mention:') || text.includes('[[slash_command:');
357
288
  };
358
- var collectInlineMarkers = function collectInlineMarkers(text) {
359
- var markers = [];
360
- MENTION_MARKER_REGEX.lastIndex = 0;
361
- var m = MENTION_MARKER_REGEX.exec(text);
362
- while (m) {
363
- var _m2 = m,
364
- _m3 = _slicedToArray(_m2, 4),
365
- rawType = _m3[1],
366
- id = _m3[2],
367
- label = _m3[3];
368
- var type = ALLOWED_TYPES.includes(rawType) ? rawType : 'user';
369
- markers.push({
370
- kind: 'mention',
371
- index: m.index,
372
- length: m[0].length,
373
- type: type,
374
- id: id,
375
- label: label
376
- });
377
- m = MENTION_MARKER_REGEX.exec(text);
378
- }
379
- var slashRegex = new RegExp(SLASH_COMMAND_MARKER_REGEX.source, 'g');
380
- var s = slashRegex.exec(text);
381
- while (s) {
382
- markers.push({
383
- kind: 'slash',
384
- index: s.index,
385
- length: s[0].length,
386
- id: s[1],
387
- label: s[2]
388
- });
389
- s = slashRegex.exec(text);
390
- }
391
- return markers.sort(function (a, b) {
392
- return a.index - b.index;
393
- });
394
- };
395
289
  export var renderTextWithMentions = function renderTextWithMentions(text) {
396
290
  if (!text) return [text];
397
291
  var markers = collectInlineMarkers(text);
@@ -417,4 +311,4 @@ export var renderTextWithMentions = function renderTextWithMentions(text) {
417
311
  if (lastIdx < text.length) out.push(text.slice(lastIdx));
418
312
  return out;
419
313
  };
420
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJjc3MiLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsIk1FTlRJT05fQ0hJUF9DT0xPUlMiLCJNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkciLCJTbGFzaENvbW1hbmRDaGlwIiwiU0NTbGFzaENoaXAiLCJTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCIsIlZJT0xFVF9JQV9DT0xPUlMiLCJTQ1Rhc2tMaW5rIiwiZ2V0Q29udGV4dE1lbnRpb25JY29uIiwibm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCIsIm9wZW5UYXNrSW5Db3JQYW5lbCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIk1FTlRJT05fTUFSS0VSX1JFR0VYIiwiTUFJQV9NRU5USU9OX1BST1RPQ09MIiwiSU5DT01QTEVURV9NRU5USU9OX01BUktFUl9SRUdFWCIsIklOQ09NUExFVEVfU0xBU0hfTUFSS0VSX1JFR0VYIiwiQUxMT1dFRF9UWVBFUyIsInBhcnNlTWVudGlvblByb3RvY29sSHJlZiIsImhyZWYiLCJyZXN0Iiwic2xpY2UiLCJsZW5ndGgiLCJzbGFzaElkeCIsImluZGV4T2YiLCJyYXdUeXBlIiwicmF3SWQiLCJpZCIsImRlY29kZVVSSUNvbXBvbmVudCIsIl91bnVzZWQiLCJ0eXBlIiwiaW5jbHVkZXMiLCJzZXJpYWxpemVNZW50aW9uIiwibWVudGlvbiIsImNvbmNhdCIsImxhYmVsIiwidHJhbnNmb3JtTWVudGlvbk1hcmtlcnMiLCJ0ZXh0IiwicmVwbGFjZSIsIl9tIiwic2FmZUxhYmVsIiwiU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWVudGlvbkNoaWxkcmVuVG9MYWJlbCIsImNoaWxkcmVuIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiYyIsImpvaW4iLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwibm9ybWFsaXplZCIsInRyaW0iLCJmaXJzdFdvcmQiLCJmaXJzdFdoaXRlc3BhY2VJZHgiLCJzZWFyY2giLCJmb3JtYXRTa2lsbExhYmVsIiwiU2tpbGxJbmxpbmVDaGlwIiwiX3JlZiIsImNsYXNzTmFtZSIsIklOTElORV9NRU5USU9OX0hPVkVSX0JHIiwicHJvamVjdCIsImlubGluZU1lbnRpb25Ib3ZlckNzcyIsImlzQ2xpY2thYmxlIiwiX0lOTElORV9NRU5USU9OX0hPVkVSIiwiYmciLCJTQ0lubGluZU1lbnRpb24iLCJzcGFuIiwid2l0aENvbmZpZyIsImRpc3BsYXlOYW1lIiwiY29tcG9uZW50SWQiLCJfcmVmMiIsIl9NRU5USU9OX0NISVBfQ09MT1JTJCIsIiR0eXBlIiwidXNlciIsIl9yZWYzIiwiX01FTlRJT05fQ0hJUF9DT0xPUlMkMiIsImZnIiwiX3JlZjQiLCIkaXNDbGlja2FibGUiLCJfcmVmNSIsIlNDSW5saW5lTWVudGlvbkljb24iLCJfcmVmNiIsIiR0YXNrIiwiX3JlZjciLCJTQ0lubGluZU1lbnRpb25JY29uUm93IiwiU0NJbmxpbmVNZW50aW9uV29yZCIsIlNDSW5saW5lTWVudGlvblJlc3QiLCJyZW5kZXJNZW50aW9uTGluayIsInN0YXJ0c1dpdGgiLCJfcGFyc2VNZW50aW9uUHJvdG9jb2wiLCJpc1Rhc2siLCJpY29uU2l6ZSIsInRhc2tVcmwiLCJoYW5kbGVUYXNrQ2xpY2siLCJlIiwibWV0YUtleSIsImN0cmxLZXkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRhc2tLZXlEb3duIiwia2V5Iiwib25DbGljayIsIm9uS2V5RG93biIsImlzUHJvamVjdCIsInByb2plY3RVcmwiLCJzaG93SWNvbiIsIl9zcGxpdExhYmVsRmlyc3RXb3JkIiwiaGFuZGxlUHJvamVjdENsaWNrIiwid2luZG93Iiwib3BlbiIsInVuZGVmaW5lZCIsInJvbGUiLCJ0YWJJbmRleCIsInN0cmlwTWVudGlvbk1hcmtlcnMiLCJfdHlwZSIsIl9pZCIsImZvcm1hdENoYXRMaXN0VGl0bGVNZW50aW9ucyIsIndpdGhvdXRNZW50aW9ucyIsInNsYXNoUmVnZXgiLCJSZWdFeHAiLCJzb3VyY2UiLCJ3aXRob3V0U2xhc2giLCJ3aXRob3V0SW5jb21wbGV0ZVNsYXNoIiwiZ2V0TWVudGlvblVybCIsIk1lbnRpb25DaGlwIiwiX3JlZjgiLCJub3JtYWxpemVkTGFiZWwiLCJ1cmwiLCJfc3BsaXRMYWJlbEZpcnN0V29yZDIiLCJoYW5kbGVDbGljayIsImhhbmRsZUtleURvd24iLCJoYXNJbmxpbmVNYXJrZXJzIiwiY29sbGVjdElubGluZU1hcmtlcnMiLCJtYXJrZXJzIiwibGFzdEluZGV4IiwibSIsImV4ZWMiLCJfbTIiLCJfbTMiLCJfc2xpY2VkVG9BcnJheSIsInB1c2giLCJraW5kIiwiaW5kZXgiLCJzIiwic29ydCIsImEiLCJiIiwicmVuZGVyVGV4dFdpdGhNZW50aW9ucyIsIm91dCIsImxhc3RJZHgiLCJmb3JFYWNoIiwibWFya2VyIiwiaW5saW5lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBSZWFjdEVsZW1lbnQsIE1vdXNlRXZlbnQsIEtleWJvYXJkRXZlbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBzdHlsZWQsIHsgY3NzIH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb24sIENPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQge1xuICBNRU5USU9OX0NISVBfQ09MT1JTLFxuICBNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkcsXG59IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTbGFzaENvbW1hbmRDaGlwIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9TbGFzaENvbW1hbmRDaGlwJ1xuaW1wb3J0IHsgU0NTbGFzaENoaXAgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL1NsYXNoQ29tbWFuZENoaXAvU2xhc2hDb21tYW5kQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCB9IGZyb20gJy4vc2xhc2hDb21tYW5kTWFya2VyJ1xuaW1wb3J0IHsgVklPTEVUX0lBX0NPTE9SUyB9IGZyb20gJy4uL3N0eWxlcy9jb25maWcnXG5pbXBvcnQgeyBTQ1Rhc2tMaW5rIH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvbmV3U3R5bGVzJ1xuaW1wb3J0IHsgZ2V0Q29udGV4dE1lbnRpb25JY29uIH0gZnJvbSAnLi9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCB9IGZyb20gJy4vY29udGV4dE1lbnRpb25MYWJlbCdcbmltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4vb3BlblRhc2tJbkNvclBhbmVsJ1xuXG4vKipcbiAqIEZvcm1hdG8gZGVsIG1hcmNhZG9yIHF1ZSB2aWFqYSBlbiBlbCB0ZXh0byBkZWwgbWVuc2FqZTpcbiAqICAgW1ttZW50aW9uOjx0eXBlPjo8aWQ+fDxsYWJlbD5dXVxuICpcbiAqIEVsIGVkaXRvciBsbyBlbWl0ZSBjdWFuZG8gc2VyaWFsaXphIGVsIGNvbnRlbnRlZGl0YWJsZSwgZWwgYmFja2VuZCBsb1xuICogcGVyc2lzdGUgdGFsIGN1YWwgeSBhbCByZW5kZXJpemFyIHNlIHRyYW5zZm9ybWEgZW4gdW4gbGluayBtYXJrZG93biBjb25cbiAqIHVuIHByb3RvY29sbyBwcm9waW8gcXVlIGBDdXN0b21MaW5rYCBpbnRlcmNlcHRhIHkgZGlidWphIGNvbW8gc3BhblxuICogZXN0aWxhZG8uXG4gKlxuICogUG9yIHNlcGFyYWRvLCBsYSBtZXRhZGF0YSBgY29udGV4dF9tZXNzYWdlYCBsbGV2YSBsb3MgdmFsb3JlcyBsaW1waW9zXG4gKiAoaWQgKyBuYW1lKSBwYXJhIHF1ZSBlbCBiYWNrZW5kIHB1ZWRhIGludGVycHJldGFyIGxhcyBlbnRpZGFkZXMgc2luXG4gKiB0ZW5lciBxdWUgcGFyc2VhciBlbCB0ZXh0by5cbiAqL1xuLyoqXG4gKiBMYWJlbCBwdWVkZSBjb250ZW5lciBgXWAgKGVqOiBcIltFZHVjYXRlXUJsb2cgUG9zdCAuLi5cIiksIHBvciBlc29cbiAqIHNlIGNhcHR1cmEgZGUgZm9ybWEgbGF6eSBoYXN0YSBlbCBjaWVycmUgcmVhbCBgXV1gLlxuICovXG5leHBvcnQgY29uc3QgTUVOVElPTl9NQVJLRVJfUkVHRVggPSAvXFxbXFxbbWVudGlvbjooY2xpZW50fHByb2plY3R8dGFza3x1c2VyfG1jcHxza2lsbCk6KFtefFxcXV0rKVxcfChbXFxzXFxTXSo/KVxcXVxcXS9nXG5leHBvcnQgY29uc3QgTUFJQV9NRU5USU9OX1BST1RPQ09MID0gJ21haWEtbWVudGlvbjovLydcbmNvbnN0IElOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVggPSAvXFxbXFxbbWVudGlvbjpbXFxzXFxTXSokL1xuY29uc3QgSU5DT01QTEVURV9TTEFTSF9NQVJLRVJfUkVHRVggPSAvXFxbXFxbc2xhc2hfY29tbWFuZDpbXnxcXF1dK1xcfChbXFxzXFxTXSopJC9cblxuY29uc3QgQUxMT1dFRF9UWVBFUzogQ29udGV4dEVudGl0eVR5cGVbXSA9IFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzaycsICd1c2VyJywgJ21jcCcsICdza2lsbCddXG5cbmNvbnN0IHBhcnNlTWVudGlvblByb3RvY29sSHJlZiA9IChocmVmOiBzdHJpbmcpOiB7IHR5cGU6IENvbnRleHRFbnRpdHlUeXBlOyBpZDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCByZXN0ID0gaHJlZi5zbGljZShNQUlBX01FTlRJT05fUFJPVE9DT0wubGVuZ3RoKVxuICBjb25zdCBzbGFzaElkeCA9IHJlc3QuaW5kZXhPZignLycpXG4gIGNvbnN0IHJhd1R5cGUgPSBzbGFzaElkeCA+PSAwID8gcmVzdC5zbGljZSgwLCBzbGFzaElkeCkgOiByZXN0XG4gIGNvbnN0IHJhd0lkID0gc2xhc2hJZHggPj0gMCA/IHJlc3Quc2xpY2Uoc2xhc2hJZHggKyAxKSA6ICcnXG4gIGxldCBpZCA9ICcnXG4gIHRyeSB7XG4gICAgaWQgPSByYXdJZCA/IGRlY29kZVVSSUNvbXBvbmVudChyYXdJZCkgOiAnJ1xuICB9IGNhdGNoIHtcbiAgICBpZCA9IHJhd0lkXG4gIH1cbiAgY29uc3QgdHlwZSA9IEFMTE9XRURfVFlQRVMuaW5jbHVkZXMocmF3VHlwZSBhcyBDb250ZXh0RW50aXR5VHlwZSkgPyAocmF3VHlwZSBhcyBDb250ZXh0RW50aXR5VHlwZSkgOiAndXNlcidcbiAgcmV0dXJuIHsgdHlwZSwgaWQgfVxufVxuXG4vKiogR2VuZXJhIGVsIG1hcmNhZG9yIHBhcmEgdW4gbWVudGlvbiBkYWRvLiBMbyB1c2EgZWwgZWRpdG9yIGFsIHNlcmlhbGl6YXIuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplTWVudGlvbiA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IHN0cmluZyA9PlxuICBgW1ttZW50aW9uOiR7bWVudGlvbi50eXBlfToke21lbnRpb24uaWR9fCR7bWVudGlvbi5sYWJlbH1dXWBcblxuLyoqXG4gKiBDb252aWVydGUgY2FkYSBgW1ttZW50aW9uOi4uLl1dYCBlbiB1biBsaW5rIG1hcmtkb3duIGNvbiBwcm90b2NvbG8gcHJvcGlvXG4gKiBwYXJhIHF1ZSBTdHJlYW1kb3duIGxvIGVtaXRhIGNvbW8gYDxhPmAgeSBgQ3VzdG9tTGlua2AgbG8gaW50ZXJjZXB0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHRleHRcbiAgcmV0dXJuIHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCB0eXBlLCBpZCwgbGFiZWwpID0+IHtcbiAgICBjb25zdCBzYWZlTGFiZWwgPSBTdHJpbmcobGFiZWwpLnJlcGxhY2UoL1tcXFxcXFxdXS9nLCAnXFxcXCQmJylcbiAgICByZXR1cm4gYFske3NhZmVMYWJlbH1dKCR7TUFJQV9NRU5USU9OX1BST1RPQ09MfSR7dHlwZX0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSl9KWBcbiAgfSlcbn1cblxuY29uc3QgbWVudGlvbkNoaWxkcmVuVG9MYWJlbCA9IChjaGlsZHJlbjogUmVhY3ROb2RlKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycpIHJldHVybiBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKGNoaWxkcmVuKVxuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCB8fCBjaGlsZHJlbiA9PT0gZmFsc2UpIHJldHVybiAnJ1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChjaGlsZHJlbi5tYXAoYyA9PiAodHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6ICcnKSkuam9pbignJykpXG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoU3RyaW5nKGNoaWxkcmVuKSlcbn1cblxuY29uc3Qgc3BsaXRMYWJlbEZpcnN0V29yZCA9IChsYWJlbDogc3RyaW5nKTogeyBmaXJzdFdvcmQ6IHN0cmluZzsgcmVzdDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChsYWJlbCkudHJpbSgpXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIHsgZmlyc3RXb3JkOiAnJywgcmVzdDogJycgfVxuICBjb25zdCBmaXJzdFdoaXRlc3BhY2VJZHggPSBub3JtYWxpemVkLnNlYXJjaCgvXFxzLylcbiAgaWYgKGZpcnN0V2hpdGVzcGFjZUlkeCA8IDApIHJldHVybiB7IGZpcnN0V29yZDogbm9ybWFsaXplZCwgcmVzdDogJycgfVxuICByZXR1cm4ge1xuICAgIGZpcnN0V29yZDogbm9ybWFsaXplZC5zbGljZSgwLCBmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICAgIHJlc3Q6IG5vcm1hbGl6ZWQuc2xpY2UoZmlyc3RXaGl0ZXNwYWNlSWR4KSxcbiAgfVxufVxuXG4vKiogTGFzIHNraWxscyBzZSBtdWVzdHJhbiBjb21vIGAjbm9tYnJlYCwgY29uIGVsIG1pc21vIGVzdGlsbyBxdWUgbG9zIHNsYXNoIGNvbW1hbmRzLiAqL1xuY29uc3QgZm9ybWF0U2tpbGxMYWJlbCA9IChsYWJlbDogc3RyaW5nKTogc3RyaW5nID0+IGAjJHtsYWJlbC50cmltKCkucmVwbGFjZSgvXihAXFwvfCMpLywgJycpfWBcblxuY29uc3QgU2tpbGxJbmxpbmVDaGlwID0gKHsgbGFiZWwgfTogeyBsYWJlbDogc3RyaW5nIH0pOiBSZWFjdEVsZW1lbnQgPT4gKFxuICA8U0NTbGFzaENoaXAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU30gZGF0YS1tZW50aW9uLXR5cGU9XCJza2lsbFwiIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiPlxuICAgIHtmb3JtYXRTa2lsbExhYmVsKGxhYmVsKX1cbiAgPC9TQ1NsYXNoQ2hpcD5cbilcblxuY29uc3QgSU5MSU5FX01FTlRJT05fSE9WRVJfQkc6IFBhcnRpYWw8UmVjb3JkPENvbnRleHRFbnRpdHlUeXBlLCBzdHJpbmc+PiA9IHtcbiAgcHJvamVjdDogVklPTEVUX0lBX0NPTE9SU1sxMDBdLFxufVxuXG5jb25zdCBpbmxpbmVNZW50aW9uSG92ZXJDc3MgPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIGlzQ2xpY2thYmxlPzogYm9vbGVhbikgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3NraWxsJykgcmV0dXJuIGNzc2BgXG4gIGNvbnN0IGJnID0gSU5MSU5FX01FTlRJT05fSE9WRVJfQkdbdHlwZV0gPz8gTUVOVElPTl9DSElQX05PTl9UQVNLX0hPVkVSX0JHXG4gIHJldHVybiBjc3NgXG4gICAgYmFja2dyb3VuZDogJHtiZ307XG4gICAgb3BhY2l0eTogJHtpc0NsaWNrYWJsZSA/IDAuOTUgOiAxfTtcbiAgYFxufVxuXG4vKiogU3BhbiBpbmxpbmUgZXN0aWxhZG8gKG1lbmNpb25lcyBuby10YXNrIGVuIGNoYXQpLiAqL1xuY29uc3QgU0NJbmxpbmVNZW50aW9uID0gc3R5bGVkLnNwYW48eyAkdHlwZTogQ29udGV4dEVudGl0eVR5cGU7ICRpc0NsaWNrYWJsZT86IGJvb2xlYW4gfT5gXG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgbWFyZ2luOiAwIDFweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LWZhbWlseTogdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgYmFja2dyb3VuZDogJHsoeyAkdHlwZSB9KSA9PiAoTUVOVElPTl9DSElQX0NPTE9SU1skdHlwZV0gPz8gTUVOVElPTl9DSElQX0NPTE9SUy51c2VyKS5iZ307XG4gIGNvbG9yOiAkeyh7ICR0eXBlIH0pID0+IChNRU5USU9OX0NISVBfQ09MT1JTWyR0eXBlXSA/PyBNRU5USU9OX0NISVBfQ09MT1JTLnVzZXIpLmZnfTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgY3Vyc29yOiAkeyh7ICRpc0NsaWNrYWJsZSB9KSA9PiAoJGlzQ2xpY2thYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKX07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAmOmhvdmVyIHtcbiAgICAkeyh7ICR0eXBlLCAkaXNDbGlja2FibGUgfSkgPT4gaW5saW5lTWVudGlvbkhvdmVyQ3NzKCR0eXBlLCAkaXNDbGlja2FibGUpfVxuICB9XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvbkljb24gPSBzdHlsZWQuc3Bhbjx7ICR0YXNrPzogYm9vbGVhbiB9PmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgd2lkdGg6ICR7KHsgJHRhc2sgfSkgPT4gKCR0YXNrID8gJzE2cHgnIDogJzE0cHgnKX07XG4gIGhlaWdodDogJHsoeyAkdGFzayB9KSA9PiAoJHRhc2sgPyAnMTZweCcgOiAnMTRweCcpfTtcbmBcblxuY29uc3QgU0NJbmxpbmVNZW50aW9uSWNvblJvdyA9IHN0eWxlZC5zcGFuYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuYFxuXG5jb25zdCBTQ0lubGluZU1lbnRpb25Xb3JkID0gc3R5bGVkLnNwYW5gXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvblJlc3QgPSBzdHlsZWQuc3BhbmBcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbmBcblxuLyoqXG4gKiBTaSBlbCBocmVmIGNvcnJlc3BvbmRlIGFsIHByb3RvY29sbyBkZSBtZW50aW9uLCBkZXZ1ZWx2ZSB1biBub2RvIGVzdGlsYWRvIHBvciB0aXBvLlxuICogTGFzIHRhcmVhcyB1c2FuIGA8YT5gIGNvbW8gbG9zIGVubGFjZXMgZGUgdGFyZWEgZGVsIGFnZW50ZSAoYC5oYXMtdGFzay1saW5rc2ApLlxuICovXG5leHBvcnQgY29uc3QgcmVuZGVyTWVudGlvbkxpbmsgPSAoaHJlZjogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGlsZHJlbjogUmVhY3ROb2RlKTogUmVhY3ROb2RlIHwgbnVsbCA9PiB7XG4gIGlmICghaHJlZiB8fCAhaHJlZi5zdGFydHNXaXRoKE1BSUFfTUVOVElPTl9QUk9UT0NPTCkpIHJldHVybiBudWxsXG4gIGNvbnN0IHsgdHlwZSwgaWQgfSA9IHBhcnNlTWVudGlvblByb3RvY29sSHJlZihocmVmKVxuICBjb25zdCBsYWJlbCA9IG1lbnRpb25DaGlsZHJlblRvTGFiZWwoY2hpbGRyZW4pXG4gIGlmICh0eXBlID09PSAnc2tpbGwnKSByZXR1cm4gPFNraWxsSW5saW5lQ2hpcCBsYWJlbD17bGFiZWx9IC8+XG4gIGNvbnN0IGlzVGFzayA9IHR5cGUgPT09ICd0YXNrJ1xuICBjb25zdCBpY29uU2l6ZSA9IGlzVGFzayA/IDE2IDogMTRcbiAgY29uc3QgdGFza1VybCA9IGAvdGFza3MvJHtpZH0vZGV0YWlsYFxuXG4gIGNvbnN0IGhhbmRsZVRhc2tDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgb3BlblRhc2tJbkNvclBhbmVsKGlkLCAnZGV0YWlsJylcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRhc2tLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ICE9PSAnRW50ZXInICYmIGUua2V5ICE9PSAnICcpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIG9wZW5UYXNrSW5Db3JQYW5lbChpZCwgJ2RldGFpbCcpXG4gIH1cblxuICBpZiAoaXNUYXNrKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ1Rhc2tMaW5rXG4gICAgICAgIGhyZWY9e3Rhc2tVcmx9XG4gICAgICAgIGNsYXNzTmFtZT17Q09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1N9XG4gICAgICAgIGRhdGEtY29yLWxpbms9XCJ0YXNrXCJcbiAgICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhc2tDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVUYXNrS2V5RG93bn1cbiAgICAgID5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9TQ1Rhc2tMaW5rPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBwcm9qZWN0VXJsID0gaXNQcm9qZWN0ID8gYC9wcm9qZWN0cy8ke2lkfS9kYXNoYm9hcmRgIDogbnVsbFxuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobGFiZWwpXG5cbiAgY29uc3QgaGFuZGxlUHJvamVjdENsaWNrID0gKGU6IE1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghcHJvamVjdFVybCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHdpbmRvdy5vcGVuKHByb2plY3RVcmwsICdfYmxhbmsnKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNQcm9qZWN0fVxuICAgICAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU31cbiAgICAgIGRhdGEtbWVudGlvbi10eXBlPXt0eXBlfVxuICAgICAgZGF0YS1tZW50aW9uLXN1cmZhY2U9XCJjaGF0XCJcbiAgICAgIG9uQ2xpY2s9e2lzUHJvamVjdCA/IGhhbmRsZVByb2plY3RDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzUHJvamVjdCA/ICdidXR0b24nIDogdW5kZWZpbmVkfVxuICAgICAgdGFiSW5kZXg9e2lzUHJvamVjdCA/IDAgOiB1bmRlZmluZWR9XG4gICAgPlxuICAgICAge3Nob3dJY29uID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uUm93PlxuICAgICAgICAgICAgPFNDSW5saW5lTWVudGlvbkljb24gJHRhc2s9e2lzVGFza30+XG4gICAgICAgICAgICAgIHtnZXRDb250ZXh0TWVudGlvbkljb24odHlwZSwgTUVOVElPTl9DSElQX0NPTE9SU1t0eXBlXS5mZywgaWQsIGljb25TaXplKX1cbiAgICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvbj5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25Xb3JkPntmaXJzdFdvcmR9PC9TQ0lubGluZU1lbnRpb25Xb3JkPlxuICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICB7cmVzdCA/IDxTQ0lubGluZU1lbnRpb25SZXN0PntyZXN0fTwvU0NJbmxpbmVNZW50aW9uUmVzdD4gOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgeyFzaG93SWNvbiA/IGxhYmVsIDogbnVsbH1cbiAgICA8L1NDSW5saW5lTWVudGlvbj5cbiAgKVxufVxuXG4vKiogUXVpdGEgbG9zIG1hcmtlcnMgZGVsIHRleHRvLCBkZWphbmRvIHNvbG8gYGxhYmVsYC4gw5p0aWwgcGFyYSBmYWxsYmFjayBwbGFuby4gKi9cbmV4cG9ydCBjb25zdCBzdHJpcE1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICB0ZXh0LnJlcGxhY2UoTUVOVElPTl9NQVJLRVJfUkVHRVgsIChfbSwgX3R5cGUsIF9pZCwgbGFiZWwpID0+IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoU3RyaW5nKGxhYmVsKSkpXG5cbi8qKlxuICogVMOtdHVsb3MgZGUgY29udmVyc2FjacOzbiAocC4gZWouIGBsYXN0X3F1ZXN0aW9uYCBkZXJpdmFkbyBkZWwgcHJpbWVyIG1lbnNhamUpIHB1ZWRlblxuICogaW5jbHVpciBlbCB0ZXh0byBzZXJpYWxpemFkbyBgW1ttZW50aW9uOnR5cGU6aWR8bGFiZWxdXWAuIFBhcmEgc2lkZWJhciB5IGxpc3RhZG9zLFxuICogcmVlbXBsYXphIGNhZGEgYmxvcXVlIHBvciBgbGFiZWxgIGVuIHRleHRvIHBsYW5vLCBzaW4gZWwgbWFyY2Fkb3IgY3J1ZG8uXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRDaGF0TGlzdFRpdGxlTWVudGlvbnMgPSAodGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dCA9PT0gJycpIHJldHVybiB0ZXh0ID8/ICcnXG4gIGNvbnN0IHdpdGhvdXRNZW50aW9ucyA9IHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCBfdHlwZSwgX2lkLCBsYWJlbCkgPT5cbiAgICBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKFN0cmluZyhsYWJlbCkudHJpbSgpKVxuICApXG4gIGNvbnN0IHNsYXNoUmVnZXggPSBuZXcgUmVnRXhwKFNMQVNIX0NPTU1BTkRfTUFSS0VSX1JFR0VYLnNvdXJjZSwgJ2cnKVxuICBjb25zdCB3aXRob3V0U2xhc2ggPSB3aXRob3V0TWVudGlvbnMucmVwbGFjZShzbGFzaFJlZ2V4LCAoX20sIF9pZCwgbGFiZWwpID0+IGAvJHtTdHJpbmcobGFiZWwpLnRyaW0oKX1gKVxuICBjb25zdCB3aXRob3V0SW5jb21wbGV0ZVNsYXNoID0gd2l0aG91dFNsYXNoLnJlcGxhY2UoXG4gICAgSU5DT01QTEVURV9TTEFTSF9NQVJLRVJfUkVHRVgsXG4gICAgKF9tLCBsYWJlbCkgPT4gYC8ke1N0cmluZyhsYWJlbCkudHJpbSgpfWBcbiAgKVxuICByZXR1cm4gd2l0aG91dEluY29tcGxldGVTbGFzaC5yZXBsYWNlKElOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVgsICcnKS50cmltKClcbn1cblxuLyoqIEdlbmVyYSBsYSBVUkwgZGUgbmF2ZWdhY2nDs24gcGFyYSB1biBtZW50aW9uIHNlZ8O6biBzdSB0aXBvLiAqL1xuY29uc3QgZ2V0TWVudGlvblVybCA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgaWQ6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjbGllbnQnOlxuICAgICAgcmV0dXJuIGAvY2xpZW50cy8ke2lkfWBcbiAgICBjYXNlICdwcm9qZWN0JzpcbiAgICAgIHJldHVybiBgL3Byb2plY3RzLyR7aWR9L2Rhc2hib2FyZGBcbiAgICBjYXNlICd0YXNrJzpcbiAgICAgIHJldHVybiBgL3Rhc2tzLyR7aWR9L2RldGFpbGBcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiBudWxsIC8vIExvcyB1c2VycyBubyBzb24gY2xpY2tlYWJsZXNcbiAgICBjYXNlICdtY3AnOlxuICAgICAgcmV0dXJuIG51bGxcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBNZW50aW9uQ2hpcCA9ICh7IHR5cGUsIGlkLCBsYWJlbCB9OiB7IHR5cGU6IENvbnRleHRFbnRpdHlUeXBlOyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZExhYmVsID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChsYWJlbClcbiAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHJldHVybiA8U2tpbGxJbmxpbmVDaGlwIGxhYmVsPXtub3JtYWxpemVkTGFiZWx9IC8+XG4gIGNvbnN0IHVybCA9IGdldE1lbnRpb25VcmwodHlwZSwgaWQpXG4gIGNvbnN0IGlzQ2xpY2thYmxlID0gISF1cmxcbiAgY29uc3QgaXNUYXNrID0gdHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IHsgZmlyc3RXb3JkLCByZXN0IH0gPSBzcGxpdExhYmVsRmlyc3RXb3JkKG5vcm1hbGl6ZWRMYWJlbClcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50IHwgSFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghaXNDbGlja2FibGUgfHwgIXVybCkgcmV0dXJuXG4gICAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgICAgaWYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpIHJldHVyblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQgfCBIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFpc0NsaWNrYWJsZSB8fCB0eXBlICE9PSAndGFzaycpIHJldHVyblxuICAgIGlmIChlLmtleSAhPT0gJ0VudGVyJyAmJiBlLmtleSAhPT0gJyAnKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgIHJldHVybiAoXG4gICAgICA8U0NUYXNrTGlua1xuICAgICAgICBocmVmPXt1cmwgPz8gJyMnfVxuICAgICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgICBkYXRhLWNvci1saW5rPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi10eXBlPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIHtub3JtYWxpemVkTGFiZWx9XG4gICAgICA8L1NDVGFza0xpbms+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNDbGlja2FibGV9XG4gICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICBkYXRhLW1lbnRpb24tc3VyZmFjZT1cImNoYXRcIlxuICAgICAgb25DbGljaz17aXNDbGlja2FibGUgPyBoYW5kbGVDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzQ2xpY2thYmxlID8gJ2J1dHRvbicgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17aXNDbGlja2FibGUgPyAwIDogdW5kZWZpbmVkfVxuICAgID5cbiAgICAgIHtzaG93SWNvbiA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uICR0YXNrPXtpc1Rhc2t9PlxuICAgICAgICAgICAgICB7Z2V0Q29udGV4dE1lbnRpb25JY29uKHR5cGUsIE1FTlRJT05fQ0hJUF9DT0xPUlNbdHlwZV0uZmcsIGlkLCBpY29uU2l6ZSl9XG4gICAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb24+XG4gICAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uV29yZD57Zmlyc3RXb3JkfTwvU0NJbmxpbmVNZW50aW9uV29yZD5cbiAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb25Sb3c+XG4gICAgICAgICAge3Jlc3QgPyA8U0NJbmxpbmVNZW50aW9uUmVzdD57cmVzdH08L1NDSW5saW5lTWVudGlvblJlc3Q+IDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHshc2hvd0ljb24gPyBub3JtYWxpemVkTGFiZWwgOiBudWxsfVxuICAgIDwvU0NJbmxpbmVNZW50aW9uPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBoYXNJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdGV4dC5pbmNsdWRlcygnW1ttZW50aW9uOicpIHx8IHRleHQuaW5jbHVkZXMoJ1tbc2xhc2hfY29tbWFuZDonKVxufVxuXG50eXBlIElubGluZU1hcmtlciA9XG4gIHwgeyBraW5kOiAnbWVudGlvbic7IGluZGV4OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyOyB0eXBlOiBDb250ZXh0RW50aXR5VHlwZTsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnc2xhc2gnOyBpbmRleDogbnVtYmVyOyBsZW5ndGg6IG51bWJlcjsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG5cbmNvbnN0IGNvbGxlY3RJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IElubGluZU1hcmtlcltdID0+IHtcbiAgY29uc3QgbWFya2VyczogSW5saW5lTWFya2VyW10gPSBbXVxuXG4gIE1FTlRJT05fTUFSS0VSX1JFR0VYLmxhc3RJbmRleCA9IDBcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIHdoaWxlIChtKSB7XG4gICAgY29uc3QgWywgcmF3VHlwZSwgaWQsIGxhYmVsXSA9IG1cbiAgICBjb25zdCB0eXBlID0gQUxMT1dFRF9UWVBFUy5pbmNsdWRlcyhyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA/IChyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA6ICd1c2VyJ1xuICAgIG1hcmtlcnMucHVzaCh7IGtpbmQ6ICdtZW50aW9uJywgaW5kZXg6IG0uaW5kZXgsIGxlbmd0aDogbVswXS5sZW5ndGgsIHR5cGUsIGlkLCBsYWJlbCB9KVxuICAgIG0gPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIH1cblxuICBjb25zdCBzbGFzaFJlZ2V4ID0gbmV3IFJlZ0V4cChTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWC5zb3VyY2UsICdnJylcbiAgbGV0IHM6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBzbGFzaFJlZ2V4LmV4ZWModGV4dClcbiAgd2hpbGUgKHMpIHtcbiAgICBtYXJrZXJzLnB1c2goeyBraW5kOiAnc2xhc2gnLCBpbmRleDogcy5pbmRleCwgbGVuZ3RoOiBzWzBdLmxlbmd0aCwgaWQ6IHNbMV0sIGxhYmVsOiBzWzJdIH0pXG4gICAgcyA9IHNsYXNoUmVnZXguZXhlYyh0ZXh0KVxuICB9XG5cbiAgcmV0dXJuIG1hcmtlcnMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpXG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJUZXh0V2l0aE1lbnRpb25zID0gKHRleHQ6IHN0cmluZyk6IEFycmF5PHN0cmluZyB8IFJlYWN0RWxlbWVudD4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBbdGV4dF1cbiAgY29uc3QgbWFya2VycyA9IGNvbGxlY3RJbmxpbmVNYXJrZXJzKHRleHQpXG4gIGlmIChtYXJrZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFt0ZXh0XVxuXG4gIGNvbnN0IG91dDogQXJyYXk8c3RyaW5nIHwgUmVhY3RFbGVtZW50PiA9IFtdXG4gIGxldCBsYXN0SWR4ID0gMFxuICBtYXJrZXJzLmZvckVhY2gobWFya2VyID0+IHtcbiAgICBpZiAobWFya2VyLmluZGV4ID4gbGFzdElkeCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4LCBtYXJrZXIuaW5kZXgpKVxuICAgIGlmIChtYXJrZXIua2luZCA9PT0gJ21lbnRpb24nKSB7XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgPE1lbnRpb25DaGlwXG4gICAgICAgICAga2V5PXtgbWVudGlvbi0ke21hcmtlci5pbmRleH0tJHttYXJrZXIudHlwZX0tJHttYXJrZXIuaWR9YH1cbiAgICAgICAgICB0eXBlPXttYXJrZXIudHlwZX1cbiAgICAgICAgICBpZD17bWFya2VyLmlkfVxuICAgICAgICAgIGxhYmVsPXttYXJrZXIubGFiZWx9XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKDxTbGFzaENvbW1hbmRDaGlwIGtleT17YHNsYXNoLSR7bWFya2VyLmluZGV4fS0ke21hcmtlci5pZH1gfSBsYWJlbD17bWFya2VyLmxhYmVsfSBpbmxpbmU9e2ZhbHNlfSAvPilcbiAgICB9XG4gICAgbGFzdElkeCA9IG1hcmtlci5pbmRleCArIG1hcmtlci5sZW5ndGhcbiAgfSlcbiAgaWYgKGxhc3RJZHggPCB0ZXh0Lmxlbmd0aCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4KSlcbiAgcmV0dXJuIG91dFxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBT0EsTUFBTSxJQUFJQyxHQUFHLFFBQVEsbUJBQW1CO0FBQy9DLFNBQTRDQywwQkFBMEIsUUFBUSx5QkFBeUI7QUFDdkcsU0FDRUMsbUJBQW1CLEVBQ25CQyw4QkFBOEIsUUFDekIsa0VBQWtFO0FBQ3pFLFNBQVNDLGdCQUFnQixRQUFRLHNDQUFzQztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsOERBQThEO0FBQzFGLFNBQVNDLDBCQUEwQixRQUFRLHNCQUFzQjtBQUNq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
314
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJjc3MiLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsIk1FTlRJT05fQ0hJUF9DT0xPUlMiLCJNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkciLCJTbGFzaENvbW1hbmRDaGlwIiwiU0NTbGFzaENoaXAiLCJTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCIsIlZJT0xFVF9JQV9DT0xPUlMiLCJTQ1Rhc2tMaW5rIiwiZ2V0Q29udGV4dE1lbnRpb25JY29uIiwibm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCIsIm9wZW5UYXNrSW5Db3JQYW5lbCIsImNvbGxlY3RJbmxpbmVNYXJrZXJzIiwiZm9ybWF0U2tpbGxMYWJlbCIsImdldE1lbnRpb25VcmwiLCJNQUlBX01FTlRJT05fUFJPVE9DT0wiLCJtZW50aW9uQ2hpbGRyZW5Ub0xhYmVsIiwiTUVOVElPTl9NQVJLRVJfUkVHRVgiLCJwYXJzZU1lbnRpb25Qcm90b2NvbEhyZWYiLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiSU5DT01QTEVURV9NRU5USU9OX01BUktFUl9SRUdFWCIsIklOQ09NUExFVEVfU0xBU0hfTUFSS0VSX1JFR0VYIiwic2VyaWFsaXplTWVudGlvbiIsIm1lbnRpb24iLCJjb25jYXQiLCJ0eXBlIiwiaWQiLCJsYWJlbCIsInRyYW5zZm9ybU1lbnRpb25NYXJrZXJzIiwidGV4dCIsInJlcGxhY2UiLCJfbSIsInNhZmVMYWJlbCIsIlN0cmluZyIsImVuY29kZVVSSUNvbXBvbmVudCIsIlNraWxsSW5saW5lQ2hpcCIsIl9yZWYiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsIklOTElORV9NRU5USU9OX0hPVkVSX0JHIiwicHJvamVjdCIsImlubGluZU1lbnRpb25Ib3ZlckNzcyIsImlzQ2xpY2thYmxlIiwiX0lOTElORV9NRU5USU9OX0hPVkVSIiwiYmciLCJTQ0lubGluZU1lbnRpb24iLCJzcGFuIiwid2l0aENvbmZpZyIsImRpc3BsYXlOYW1lIiwiY29tcG9uZW50SWQiLCJfcmVmMiIsIl9NRU5USU9OX0NISVBfQ09MT1JTJCIsIiR0eXBlIiwidXNlciIsIl9yZWYzIiwiX01FTlRJT05fQ0hJUF9DT0xPUlMkMiIsImZnIiwiX3JlZjQiLCIkaXNDbGlja2FibGUiLCJfcmVmNSIsIlNDSW5saW5lTWVudGlvbkljb24iLCJfcmVmNiIsIiR0YXNrIiwiX3JlZjciLCJTQ0lubGluZU1lbnRpb25JY29uUm93IiwiU0NJbmxpbmVNZW50aW9uV29yZCIsIlNDSW5saW5lTWVudGlvblJlc3QiLCJyZW5kZXJNZW50aW9uTGluayIsImhyZWYiLCJzdGFydHNXaXRoIiwiX3BhcnNlTWVudGlvblByb3RvY29sIiwiaXNUYXNrIiwiaWNvblNpemUiLCJ0YXNrVXJsIiwiaGFuZGxlVGFza0NsaWNrIiwiZSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVUYXNrS2V5RG93biIsImtleSIsIm9uQ2xpY2siLCJvbktleURvd24iLCJpc1Byb2plY3QiLCJwcm9qZWN0VXJsIiwic2hvd0ljb24iLCJfc3BsaXRMYWJlbEZpcnN0V29yZCIsImZpcnN0V29yZCIsInJlc3QiLCJoYW5kbGVQcm9qZWN0Q2xpY2siLCJ3aW5kb3ciLCJvcGVuIiwidW5kZWZpbmVkIiwicm9sZSIsInRhYkluZGV4Iiwic3RyaXBNZW50aW9uTWFya2VycyIsIl90eXBlIiwiX2lkIiwiZm9ybWF0Q2hhdExpc3RUaXRsZU1lbnRpb25zIiwid2l0aG91dE1lbnRpb25zIiwidHJpbSIsInNsYXNoUmVnZXgiLCJSZWdFeHAiLCJzb3VyY2UiLCJ3aXRob3V0U2xhc2giLCJ3aXRob3V0SW5jb21wbGV0ZVNsYXNoIiwiTWVudGlvbkNoaXAiLCJfcmVmOCIsIm5vcm1hbGl6ZWRMYWJlbCIsInVybCIsIl9zcGxpdExhYmVsRmlyc3RXb3JkMiIsImhhbmRsZUNsaWNrIiwiaGFuZGxlS2V5RG93biIsImhhc0lubGluZU1hcmtlcnMiLCJpbmNsdWRlcyIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJtYXJrZXJzIiwibGVuZ3RoIiwib3V0IiwibGFzdElkeCIsImZvckVhY2giLCJtYXJrZXIiLCJpbmRleCIsInB1c2giLCJzbGljZSIsImtpbmQiLCJpbmxpbmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFjdE5vZGUsIFJlYWN0RWxlbWVudCwgTW91c2VFdmVudCwgS2V5Ym9hcmRFdmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHN0eWxlZCwgeyBjc3MgfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cydcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbiwgQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1MgfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7XG4gIE1FTlRJT05fQ0hJUF9DT0xPUlMsXG4gIE1FTlRJT05fQ0hJUF9OT05fVEFTS19IT1ZFUl9CRyxcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvbkNoaXAvQ29udGV4dE1lbnRpb25DaGlwLnN0eWxlcydcbmltcG9ydCB7IFNsYXNoQ29tbWFuZENoaXAgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL1NsYXNoQ29tbWFuZENoaXAnXG5pbXBvcnQgeyBTQ1NsYXNoQ2hpcCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvU2xhc2hDb21tYW5kQ2hpcC9TbGFzaENvbW1hbmRDaGlwLnN0eWxlcydcbmltcG9ydCB7IFNMQVNIX0NPTU1BTkRfTUFSS0VSX1JFR0VYIH0gZnJvbSAnLi9zbGFzaENvbW1hbmRNYXJrZXInXG5pbXBvcnQgeyBWSU9MRVRfSUFfQ09MT1JTIH0gZnJvbSAnLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7IFNDVGFza0xpbmsgfSBmcm9tICcuLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9uZXdTdHlsZXMnXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsIH0gZnJvbSAnLi9jb250ZXh0TWVudGlvbkxhYmVsJ1xuaW1wb3J0IHsgb3BlblRhc2tJbkNvclBhbmVsIH0gZnJvbSAnLi9vcGVuVGFza0luQ29yUGFuZWwnXG5pbXBvcnQge1xuICBjb2xsZWN0SW5saW5lTWFya2VycyxcbiAgZm9ybWF0U2tpbGxMYWJlbCxcbiAgZ2V0TWVudGlvblVybCxcbiAgTUFJQV9NRU5USU9OX1BST1RPQ09MLFxuICBtZW50aW9uQ2hpbGRyZW5Ub0xhYmVsLFxuICBNRU5USU9OX01BUktFUl9SRUdFWCxcbiAgcGFyc2VNZW50aW9uUHJvdG9jb2xIcmVmLFxuICBzcGxpdExhYmVsRmlyc3RXb3JkLFxufSBmcm9tICcuL3JlbmRlckNvbnRleHRNZW50aW9ucy5oZWxwZXJzJ1xuXG5leHBvcnQgeyBNQUlBX01FTlRJT05fUFJPVE9DT0wsIE1FTlRJT05fTUFSS0VSX1JFR0VYIH0gZnJvbSAnLi9yZW5kZXJDb250ZXh0TWVudGlvbnMuaGVscGVycydcblxuLyoqXG4gKiBGb3JtYXRvIGRlbCBtYXJjYWRvciBxdWUgdmlhamEgZW4gZWwgdGV4dG8gZGVsIG1lbnNhamU6XG4gKiAgIFtbbWVudGlvbjo8dHlwZT46PGlkPnw8bGFiZWw+XV1cbiAqXG4gKiBFbCBlZGl0b3IgbG8gZW1pdGUgY3VhbmRvIHNlcmlhbGl6YSBlbCBjb250ZW50ZWRpdGFibGUsIGVsIGJhY2tlbmQgbG9cbiAqIHBlcnNpc3RlIHRhbCBjdWFsIHkgYWwgcmVuZGVyaXphciBzZSB0cmFuc2Zvcm1hIGVuIHVuIGxpbmsgbWFya2Rvd24gY29uXG4gKiB1biBwcm90b2NvbG8gcHJvcGlvIHF1ZSBgQ3VzdG9tTGlua2AgaW50ZXJjZXB0YSB5IGRpYnVqYSBjb21vIHNwYW5cbiAqIGVzdGlsYWRvLlxuICpcbiAqIFBvciBzZXBhcmFkbywgbGEgbWV0YWRhdGEgYGNvbnRleHRfbWVzc2FnZWAgbGxldmEgbG9zIHZhbG9yZXMgbGltcGlvc1xuICogKGlkICsgbmFtZSkgcGFyYSBxdWUgZWwgYmFja2VuZCBwdWVkYSBpbnRlcnByZXRhciBsYXMgZW50aWRhZGVzIHNpblxuICogdGVuZXIgcXVlIHBhcnNlYXIgZWwgdGV4dG8uXG4gKi9cbi8qKlxuICogTGFiZWwgcHVlZGUgY29udGVuZXIgYF1gIChlajogXCJbRWR1Y2F0ZV1CbG9nIFBvc3QgLi4uXCIpLCBwb3IgZXNvXG4gKiBzZSBjYXB0dXJhIGRlIGZvcm1hIGxhenkgaGFzdGEgZWwgY2llcnJlIHJlYWwgYF1dYC5cbiAqL1xuY29uc3QgSU5DT01QTEVURV9NRU5USU9OX01BUktFUl9SRUdFWCA9IC9cXFtcXFttZW50aW9uOltcXHNcXFNdKiQvXG5jb25zdCBJTkNPTVBMRVRFX1NMQVNIX01BUktFUl9SRUdFWCA9IC9cXFtcXFtzbGFzaF9jb21tYW5kOltefFxcXV0rXFx8KFtcXHNcXFNdKikkL1xuXG4vKiogR2VuZXJhIGVsIG1hcmNhZG9yIHBhcmEgdW4gbWVudGlvbiBkYWRvLiBMbyB1c2EgZWwgZWRpdG9yIGFsIHNlcmlhbGl6YXIuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplTWVudGlvbiA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IHN0cmluZyA9PlxuICBgW1ttZW50aW9uOiR7bWVudGlvbi50eXBlfToke21lbnRpb24uaWR9fCR7bWVudGlvbi5sYWJlbH1dXWBcblxuLyoqXG4gKiBDb252aWVydGUgY2FkYSBgW1ttZW50aW9uOi4uLl1dYCBlbiB1biBsaW5rIG1hcmtkb3duIGNvbiBwcm90b2NvbG8gcHJvcGlvXG4gKiBwYXJhIHF1ZSBTdHJlYW1kb3duIGxvIGVtaXRhIGNvbW8gYDxhPmAgeSBgQ3VzdG9tTGlua2AgbG8gaW50ZXJjZXB0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHRleHRcbiAgcmV0dXJuIHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCB0eXBlLCBpZCwgbGFiZWwpID0+IHtcbiAgICBjb25zdCBzYWZlTGFiZWwgPSBTdHJpbmcobGFiZWwpLnJlcGxhY2UoL1tcXFxcXFxdXS9nLCAnXFxcXCQmJylcbiAgICByZXR1cm4gYFske3NhZmVMYWJlbH1dKCR7TUFJQV9NRU5USU9OX1BST1RPQ09MfSR7dHlwZX0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSl9KWBcbiAgfSlcbn1cblxuY29uc3QgU2tpbGxJbmxpbmVDaGlwID0gKHsgbGFiZWwgfTogeyBsYWJlbDogc3RyaW5nIH0pOiBSZWFjdEVsZW1lbnQgPT4gKFxuICA8U0NTbGFzaENoaXAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU30gZGF0YS1tZW50aW9uLXR5cGU9XCJza2lsbFwiIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiPlxuICAgIHtmb3JtYXRTa2lsbExhYmVsKGxhYmVsKX1cbiAgPC9TQ1NsYXNoQ2hpcD5cbilcblxuY29uc3QgSU5MSU5FX01FTlRJT05fSE9WRVJfQkc6IFBhcnRpYWw8UmVjb3JkPENvbnRleHRFbnRpdHlUeXBlLCBzdHJpbmc+PiA9IHtcbiAgcHJvamVjdDogVklPTEVUX0lBX0NPTE9SU1sxMDBdLFxufVxuXG5jb25zdCBpbmxpbmVNZW50aW9uSG92ZXJDc3MgPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIGlzQ2xpY2thYmxlPzogYm9vbGVhbikgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3NraWxsJykgcmV0dXJuIGNzc2BgXG4gIGNvbnN0IGJnID0gSU5MSU5FX01FTlRJT05fSE9WRVJfQkdbdHlwZV0gPz8gTUVOVElPTl9DSElQX05PTl9UQVNLX0hPVkVSX0JHXG4gIHJldHVybiBjc3NgXG4gICAgYmFja2dyb3VuZDogJHtiZ307XG4gICAgb3BhY2l0eTogJHtpc0NsaWNrYWJsZSA/IDAuOTUgOiAxfTtcbiAgYFxufVxuXG4vKiogU3BhbiBpbmxpbmUgZXN0aWxhZG8gKG1lbmNpb25lcyBuby10YXNrIGVuIGNoYXQpLiAqL1xuY29uc3QgU0NJbmxpbmVNZW50aW9uID0gc3R5bGVkLnNwYW48eyAkdHlwZTogQ29udGV4dEVudGl0eVR5cGU7ICRpc0NsaWNrYWJsZT86IGJvb2xlYW4gfT5gXG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgbWFyZ2luOiAwIDFweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LWZhbWlseTogdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgYmFja2dyb3VuZDogJHsoeyAkdHlwZSB9KSA9PiAoTUVOVElPTl9DSElQX0NPTE9SU1skdHlwZV0gPz8gTUVOVElPTl9DSElQX0NPTE9SUy51c2VyKS5iZ307XG4gIGNvbG9yOiAkeyh7ICR0eXBlIH0pID0+IChNRU5USU9OX0NISVBfQ09MT1JTWyR0eXBlXSA/PyBNRU5USU9OX0NISVBfQ09MT1JTLnVzZXIpLmZnfTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgY3Vyc29yOiAkeyh7ICRpc0NsaWNrYWJsZSB9KSA9PiAoJGlzQ2xpY2thYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKX07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAmOmhvdmVyIHtcbiAgICAkeyh7ICR0eXBlLCAkaXNDbGlja2FibGUgfSkgPT4gaW5saW5lTWVudGlvbkhvdmVyQ3NzKCR0eXBlLCAkaXNDbGlja2FibGUpfVxuICB9XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvbkljb24gPSBzdHlsZWQuc3Bhbjx7ICR0YXNrPzogYm9vbGVhbiB9PmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgd2lkdGg6ICR7KHsgJHRhc2sgfSkgPT4gKCR0YXNrID8gJzE2cHgnIDogJzE0cHgnKX07XG4gIGhlaWdodDogJHsoeyAkdGFzayB9KSA9PiAoJHRhc2sgPyAnMTZweCcgOiAnMTRweCcpfTtcbmBcblxuY29uc3QgU0NJbmxpbmVNZW50aW9uSWNvblJvdyA9IHN0eWxlZC5zcGFuYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuYFxuXG5jb25zdCBTQ0lubGluZU1lbnRpb25Xb3JkID0gc3R5bGVkLnNwYW5gXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvblJlc3QgPSBzdHlsZWQuc3BhbmBcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbmBcblxuLyoqXG4gKiBTaSBlbCBocmVmIGNvcnJlc3BvbmRlIGFsIHByb3RvY29sbyBkZSBtZW50aW9uLCBkZXZ1ZWx2ZSB1biBub2RvIGVzdGlsYWRvIHBvciB0aXBvLlxuICogTGFzIHRhcmVhcyB1c2FuIGA8YT5gIGNvbW8gbG9zIGVubGFjZXMgZGUgdGFyZWEgZGVsIGFnZW50ZSAoYC5oYXMtdGFzay1saW5rc2ApLlxuICovXG5leHBvcnQgY29uc3QgcmVuZGVyTWVudGlvbkxpbmsgPSAoaHJlZjogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGlsZHJlbjogUmVhY3ROb2RlKTogUmVhY3ROb2RlIHwgbnVsbCA9PiB7XG4gIGlmICghaHJlZiB8fCAhaHJlZi5zdGFydHNXaXRoKE1BSUFfTUVOVElPTl9QUk9UT0NPTCkpIHJldHVybiBudWxsXG4gIGNvbnN0IHsgdHlwZSwgaWQgfSA9IHBhcnNlTWVudGlvblByb3RvY29sSHJlZihocmVmKVxuICBjb25zdCBsYWJlbCA9IG1lbnRpb25DaGlsZHJlblRvTGFiZWwoY2hpbGRyZW4pXG4gIGlmICh0eXBlID09PSAnc2tpbGwnKSByZXR1cm4gPFNraWxsSW5saW5lQ2hpcCBsYWJlbD17bGFiZWx9IC8+XG4gIGNvbnN0IGlzVGFzayA9IHR5cGUgPT09ICd0YXNrJ1xuICBjb25zdCBpY29uU2l6ZSA9IGlzVGFzayA/IDE2IDogMTRcbiAgY29uc3QgdGFza1VybCA9IGAvdGFza3MvJHtpZH0vZGV0YWlsYFxuXG4gIGNvbnN0IGhhbmRsZVRhc2tDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgb3BlblRhc2tJbkNvclBhbmVsKGlkLCAnZGV0YWlsJylcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRhc2tLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ICE9PSAnRW50ZXInICYmIGUua2V5ICE9PSAnICcpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIG9wZW5UYXNrSW5Db3JQYW5lbChpZCwgJ2RldGFpbCcpXG4gIH1cblxuICBpZiAoaXNUYXNrKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ1Rhc2tMaW5rXG4gICAgICAgIGhyZWY9e3Rhc2tVcmx9XG4gICAgICAgIGNsYXNzTmFtZT17Q09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1N9XG4gICAgICAgIGRhdGEtY29yLWxpbms9XCJ0YXNrXCJcbiAgICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhc2tDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVUYXNrS2V5RG93bn1cbiAgICAgID5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9TQ1Rhc2tMaW5rPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBwcm9qZWN0VXJsID0gaXNQcm9qZWN0ID8gYC9wcm9qZWN0cy8ke2lkfS9kYXNoYm9hcmRgIDogbnVsbFxuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobGFiZWwpXG5cbiAgY29uc3QgaGFuZGxlUHJvamVjdENsaWNrID0gKGU6IE1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghcHJvamVjdFVybCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHdpbmRvdy5vcGVuKHByb2plY3RVcmwsICdfYmxhbmsnKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNQcm9qZWN0fVxuICAgICAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU31cbiAgICAgIGRhdGEtbWVudGlvbi10eXBlPXt0eXBlfVxuICAgICAgZGF0YS1tZW50aW9uLXN1cmZhY2U9XCJjaGF0XCJcbiAgICAgIG9uQ2xpY2s9e2lzUHJvamVjdCA/IGhhbmRsZVByb2plY3RDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzUHJvamVjdCA/ICdidXR0b24nIDogdW5kZWZpbmVkfVxuICAgICAgdGFiSW5kZXg9e2lzUHJvamVjdCA/IDAgOiB1bmRlZmluZWR9XG4gICAgPlxuICAgICAge3Nob3dJY29uID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uUm93PlxuICAgICAgICAgICAgPFNDSW5saW5lTWVudGlvbkljb24gJHRhc2s9e2lzVGFza30+XG4gICAgICAgICAgICAgIHtnZXRDb250ZXh0TWVudGlvbkljb24odHlwZSwgTUVOVElPTl9DSElQX0NPTE9SU1t0eXBlXS5mZywgaWQsIGljb25TaXplKX1cbiAgICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvbj5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25Xb3JkPntmaXJzdFdvcmR9PC9TQ0lubGluZU1lbnRpb25Xb3JkPlxuICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICB7cmVzdCA/IDxTQ0lubGluZU1lbnRpb25SZXN0PntyZXN0fTwvU0NJbmxpbmVNZW50aW9uUmVzdD4gOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgeyFzaG93SWNvbiA/IGxhYmVsIDogbnVsbH1cbiAgICA8L1NDSW5saW5lTWVudGlvbj5cbiAgKVxufVxuXG4vKiogUXVpdGEgbG9zIG1hcmtlcnMgZGVsIHRleHRvLCBkZWphbmRvIHNvbG8gYGxhYmVsYC4gw5p0aWwgcGFyYSBmYWxsYmFjayBwbGFuby4gKi9cbmV4cG9ydCBjb25zdCBzdHJpcE1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICB0ZXh0LnJlcGxhY2UoTUVOVElPTl9NQVJLRVJfUkVHRVgsIChfbSwgX3R5cGUsIF9pZCwgbGFiZWwpID0+IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoU3RyaW5nKGxhYmVsKSkpXG5cbi8qKlxuICogVMOtdHVsb3MgZGUgY29udmVyc2FjacOzbiAocC4gZWouIGBsYXN0X3F1ZXN0aW9uYCBkZXJpdmFkbyBkZWwgcHJpbWVyIG1lbnNhamUpIHB1ZWRlblxuICogaW5jbHVpciBlbCB0ZXh0byBzZXJpYWxpemFkbyBgW1ttZW50aW9uOnR5cGU6aWR8bGFiZWxdXWAuIFBhcmEgc2lkZWJhciB5IGxpc3RhZG9zLFxuICogcmVlbXBsYXphIGNhZGEgYmxvcXVlIHBvciBgbGFiZWxgIGVuIHRleHRvIHBsYW5vLCBzaW4gZWwgbWFyY2Fkb3IgY3J1ZG8uXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRDaGF0TGlzdFRpdGxlTWVudGlvbnMgPSAodGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dCA9PT0gJycpIHJldHVybiB0ZXh0ID8/ICcnXG4gIGNvbnN0IHdpdGhvdXRNZW50aW9ucyA9IHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCBfdHlwZSwgX2lkLCBsYWJlbCkgPT5cbiAgICBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKFN0cmluZyhsYWJlbCkudHJpbSgpKVxuICApXG4gIGNvbnN0IHNsYXNoUmVnZXggPSBuZXcgUmVnRXhwKFNMQVNIX0NPTU1BTkRfTUFSS0VSX1JFR0VYLnNvdXJjZSwgJ2cnKVxuICBjb25zdCB3aXRob3V0U2xhc2ggPSB3aXRob3V0TWVudGlvbnMucmVwbGFjZShzbGFzaFJlZ2V4LCAoX20sIF9pZCwgbGFiZWwpID0+IGAvJHtTdHJpbmcobGFiZWwpLnRyaW0oKX1gKVxuICBjb25zdCB3aXRob3V0SW5jb21wbGV0ZVNsYXNoID0gd2l0aG91dFNsYXNoLnJlcGxhY2UoXG4gICAgSU5DT01QTEVURV9TTEFTSF9NQVJLRVJfUkVHRVgsXG4gICAgKF9tLCBsYWJlbCkgPT4gYC8ke1N0cmluZyhsYWJlbCkudHJpbSgpfWBcbiAgKVxuICByZXR1cm4gd2l0aG91dEluY29tcGxldGVTbGFzaC5yZXBsYWNlKElOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVgsICcnKS50cmltKClcbn1cblxuY29uc3QgTWVudGlvbkNoaXAgPSAoeyB0eXBlLCBpZCwgbGFiZWwgfTogeyB0eXBlOiBDb250ZXh0RW50aXR5VHlwZTsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRMYWJlbCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobGFiZWwpXG4gIGlmICh0eXBlID09PSAnc2tpbGwnKSByZXR1cm4gPFNraWxsSW5saW5lQ2hpcCBsYWJlbD17bm9ybWFsaXplZExhYmVsfSAvPlxuICBjb25zdCB1cmwgPSBnZXRNZW50aW9uVXJsKHR5cGUsIGlkKVxuICBjb25zdCBpc0NsaWNrYWJsZSA9ICEhdXJsXG4gIGNvbnN0IGlzVGFzayA9IHR5cGUgPT09ICd0YXNrJ1xuICBjb25zdCBpc1Byb2plY3QgPSB0eXBlID09PSAncHJvamVjdCdcbiAgY29uc3Qgc2hvd0ljb24gPSAhaXNQcm9qZWN0XG4gIGNvbnN0IGljb25TaXplID0gaXNUYXNrID8gMTYgOiAxNFxuICBjb25zdCB7IGZpcnN0V29yZCwgcmVzdCB9ID0gc3BsaXRMYWJlbEZpcnN0V29yZChub3JtYWxpemVkTGFiZWwpXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQW5jaG9yRWxlbWVudCB8IEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWlzQ2xpY2thYmxlIHx8ICF1cmwpIHJldHVyblxuICAgIGlmICh0eXBlID09PSAndGFzaycpIHtcbiAgICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSByZXR1cm5cbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgb3BlblRhc2tJbkNvclBhbmVsKGlkLCAnZGV0YWlsJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxBbmNob3JFbGVtZW50IHwgSFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghaXNDbGlja2FibGUgfHwgdHlwZSAhPT0gJ3Rhc2snKSByZXR1cm5cbiAgICBpZiAoZS5rZXkgIT09ICdFbnRlcicgJiYgZS5rZXkgIT09ICcgJykgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgb3BlblRhc2tJbkNvclBhbmVsKGlkLCAnZGV0YWlsJylcbiAgfVxuXG4gIGlmICh0eXBlID09PSAndGFzaycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNDVGFza0xpbmtcbiAgICAgICAgaHJlZj17dXJsID8/ICcjJ31cbiAgICAgICAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU31cbiAgICAgICAgZGF0YS1jb3ItbGluaz1cInRhc2tcIlxuICAgICAgICBkYXRhLW1lbnRpb24tdHlwZT1cInRhc2tcIlxuICAgICAgICBkYXRhLW1lbnRpb24tc3VyZmFjZT1cImNoYXRcIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgPlxuICAgICAgICB7bm9ybWFsaXplZExhYmVsfVxuICAgICAgPC9TQ1Rhc2tMaW5rPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDSW5saW5lTWVudGlvblxuICAgICAgJHR5cGU9e3R5cGV9XG4gICAgICAkaXNDbGlja2FibGU9e2lzQ2xpY2thYmxlfVxuICAgICAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU31cbiAgICAgIGRhdGEtbWVudGlvbi10eXBlPXt0eXBlfVxuICAgICAgZGF0YS1tZW50aW9uLXN1cmZhY2U9XCJjaGF0XCJcbiAgICAgIG9uQ2xpY2s9e2lzQ2xpY2thYmxlID8gaGFuZGxlQ2xpY2sgOiB1bmRlZmluZWR9XG4gICAgICByb2xlPXtpc0NsaWNrYWJsZSA/ICdidXR0b24nIDogdW5kZWZpbmVkfVxuICAgICAgdGFiSW5kZXg9e2lzQ2xpY2thYmxlID8gMCA6IHVuZGVmaW5lZH1cbiAgICA+XG4gICAgICB7c2hvd0ljb24gPyAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFNDSW5saW5lTWVudGlvbkljb25Sb3c+XG4gICAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uSWNvbiAkdGFzaz17aXNUYXNrfT5cbiAgICAgICAgICAgICAge2dldENvbnRleHRNZW50aW9uSWNvbih0eXBlLCBNRU5USU9OX0NISVBfQ09MT1JTW3R5cGVdLmZnLCBpZCwgaWNvblNpemUpfVxuICAgICAgICAgICAgPC9TQ0lubGluZU1lbnRpb25JY29uPlxuICAgICAgICAgICAgPFNDSW5saW5lTWVudGlvbldvcmQ+e2ZpcnN0V29yZH08L1NDSW5saW5lTWVudGlvbldvcmQ+XG4gICAgICAgICAgPC9TQ0lubGluZU1lbnRpb25JY29uUm93PlxuICAgICAgICAgIHtyZXN0ID8gPFNDSW5saW5lTWVudGlvblJlc3Q+e3Jlc3R9PC9TQ0lubGluZU1lbnRpb25SZXN0PiA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7IXNob3dJY29uID8gbm9ybWFsaXplZExhYmVsIDogbnVsbH1cbiAgICA8L1NDSW5saW5lTWVudGlvbj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgaGFzSW5saW5lTWFya2VycyA9ICh0ZXh0OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIHRleHQuaW5jbHVkZXMoJ1tbbWVudGlvbjonKSB8fCB0ZXh0LmluY2x1ZGVzKCdbW3NsYXNoX2NvbW1hbmQ6Jylcbn1cblxuZXhwb3J0IGNvbnN0IHJlbmRlclRleHRXaXRoTWVudGlvbnMgPSAodGV4dDogc3RyaW5nKTogQXJyYXk8c3RyaW5nIHwgUmVhY3RFbGVtZW50PiA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFt0ZXh0XVxuICBjb25zdCBtYXJrZXJzID0gY29sbGVjdElubGluZU1hcmtlcnModGV4dClcbiAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gW3RleHRdXG5cbiAgY29uc3Qgb3V0OiBBcnJheTxzdHJpbmcgfCBSZWFjdEVsZW1lbnQ+ID0gW11cbiAgbGV0IGxhc3RJZHggPSAwXG4gIG1hcmtlcnMuZm9yRWFjaChtYXJrZXIgPT4ge1xuICAgIGlmIChtYXJrZXIuaW5kZXggPiBsYXN0SWR4KSBvdXQucHVzaCh0ZXh0LnNsaWNlKGxhc3RJZHgsIG1hcmtlci5pbmRleCkpXG4gICAgaWYgKG1hcmtlci5raW5kID09PSAnbWVudGlvbicpIHtcbiAgICAgIG91dC5wdXNoKFxuICAgICAgICA8TWVudGlvbkNoaXBcbiAgICAgICAgICBrZXk9e2BtZW50aW9uLSR7bWFya2VyLmluZGV4fS0ke21hcmtlci50eXBlfS0ke21hcmtlci5pZH1gfVxuICAgICAgICAgIHR5cGU9e21hcmtlci50eXBlfVxuICAgICAgICAgIGlkPXttYXJrZXIuaWR9XG4gICAgICAgICAgbGFiZWw9e21hcmtlci5sYWJlbH1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0LnB1c2goPFNsYXNoQ29tbWFuZENoaXAga2V5PXtgc2xhc2gtJHttYXJrZXIuaW5kZXh9LSR7bWFya2VyLmlkfWB9IGxhYmVsPXttYXJrZXIubGFiZWx9IGlubGluZT17ZmFsc2V9IC8+KVxuICAgIH1cbiAgICBsYXN0SWR4ID0gbWFya2VyLmluZGV4ICsgbWFya2VyLmxlbmd0aFxuICB9KVxuICBpZiAobGFzdElkeCA8IHRleHQubGVuZ3RoKSBvdXQucHVzaCh0ZXh0LnNsaWNlKGxhc3RJZHgpKVxuICByZXR1cm4gb3V0XG59XG4iXSwibWFwcGluZ3MiOiJBQUNBLE9BQU9BLE1BQU0sSUFBSUMsR0FBRyxRQUFRLG1CQUFtQjtBQUMvQyxTQUE0Q0MsMEJBQTBCLFFBQVEseUJBQXlCO0FBQ3ZHLFNBQ0VDLG1CQUFtQixFQUNuQkMsOEJBQThCLFFBQ3pCLGtFQUFrRTtBQUN6RSxTQUFTQyxnQkFBZ0IsUUFBUSxzQ0FBc0M7QUFDdkUsU0FBU0MsV0FBVyxRQUFRLDhEQUE4RDtBQUMxRixTQUFTQywwQkFBMEIsUUFBUSxzQkFBc0I7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ25ELFNBQVNDLFVBQVUsUUFBUSxrREFBa0Q7QUFDN0UsU0FBU0MscUJBQXFCLFFBQVEsdUJBQXVCO0FBQzdELFNBQVNDLDRCQUE0QixRQUFRLHVCQUF1QjtBQUNwRSxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBc0I7QUFDekQsU0FDRUMsb0JBQW9CLEVBQ3BCQyxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYkMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsRUFDdEJDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVBQ3hCQyxtQkFBbUIsUUFDZCxpQ0FBaUM7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQUV4QyxTQUFTVixxQkFBcUIsRUFBRUUsb0JBQW9CLFFBQVEsaUNBQWlDOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTVMsK0JBQStCLEdBQUcsc0JBQXNCO0FBQzlELElBQU1DLDZCQUE2QixHQUFHLHVDQUF1Qzs7QUFFN0U7QUFDQSxPQUFPLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlDLE9BQXVCO0VBQUEsb0JBQUFDLE1BQUEsQ0FDekNELE9BQU8sQ0FBQ0UsSUFBSSxPQUFBRCxNQUFBLENBQUlELE9BQU8sQ0FBQ0csRUFBRSxPQUFBRixNQUFBLENBQUlELE9BQU8sQ0FBQ0ksS0FBSztBQUFBLENBQUk7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJQyxJQUFZLEVBQWE7RUFDL0QsSUFBSSxDQUFDQSxJQUFJLEVBQUUsT0FBT0EsSUFBSTtFQUN0QixPQUFPQSxJQUFJLENBQUNDLE9BQU8sQ0FBQ25CLG9CQUFvQixFQUFFLFVBQUNvQixFQUFFLEVBQUVOLElBQUksRUFBRUMsRUFBRSxFQUFFQyxLQUFLLEVBQUs7SUFDakUsSUFBTUssU0FBUyxHQUFHQyxNQUFNLENBQUNOLEtBQUssQ0FBQyxDQUFDRyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUMxRCxXQUFBTixNQUFBLENBQVdRLFNBQVMsUUFBQVIsTUFBQSxDQUFLZixxQkFBcUIsRUFBQWUsTUFBQSxDQUFHQyxJQUFJLE9BQUFELE1BQUEsQ0FBSVUsa0JBQWtCLENBQUNELE1BQU0sQ0FBQ1AsRUFBRSxDQUFDLENBQUM7RUFDekYsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELElBQU1TLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQUMsSUFBQTtFQUFBLElBQU1ULEtBQUssR0FBQVMsSUFBQSxDQUFMVCxLQUFLO0VBQUEsb0JBQzlCWixJQUFBLENBQUNoQixXQUFXO0lBQUNzQyxTQUFTLEVBQUUxQywwQkFBMkI7SUFBQyxxQkFBa0IsT0FBTztJQUFDLHdCQUFxQixNQUFNO0lBQUEyQyxRQUFBLEVBQ3RHL0IsZ0JBQWdCLENBQUNvQixLQUFLO0VBQUMsQ0FDYixDQUFDO0FBQUEsQ0FDZjtBQUVELElBQU1ZLHVCQUFtRSxHQUFHO0VBQzFFQyxPQUFPLEVBQUV2QyxnQkFBZ0IsQ0FBQyxHQUFHO0FBQy9CLENBQUM7QUFFRCxJQUFNd0MscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSWhCLElBQXVCLEVBQUVpQixXQUFxQixFQUFLO0VBQUEsSUFBQUMscUJBQUE7RUFDaEYsSUFBSWxCLElBQUksS0FBSyxPQUFPLEVBQUUsT0FBTy9CLEdBQUc7RUFDaEMsSUFBTWtELEVBQUUsSUFBQUQscUJBQUEsR0FBR0osdUJBQXVCLENBQUNkLElBQUksQ0FBQyxjQUFBa0IscUJBQUEsY0FBQUEscUJBQUEsR0FBSTlDLDhCQUE4QjtFQUMxRSxPQUFPSCxHQUFHLG9DQUNNa0QsRUFBRSxFQUNMRixXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFFckMsQ0FBQzs7QUFFRDtBQUNBLElBQU1HLGVBQWUsR0FBR3BELE1BQU0sQ0FBQ3FELElBQUksQ0FBQUMsVUFBQTtFQUFBQyxXQUFBO0VBQUFDLFdBQUE7QUFBQSx3VkFTbkIsVUFBQUMsS0FBQTtFQUFBLElBQUFDLHFCQUFBO0VBQUEsSUFBR0MsS0FBSyxHQUFBRixLQUFBLENBQUxFLEtBQUs7RUFBQSxPQUFPLEVBQUFELHFCQUFBLEdBQUN2RCxtQkFBbUIsQ0FBQ3dELEtBQUssQ0FBQyxjQUFBRCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJdkQsbUJBQW1CLENBQUN5RCxJQUFJLEVBQUVULEVBQUU7QUFBQSxHQUMvRSxVQUFBVSxLQUFBO0VBQUEsSUFBQUMsc0JBQUE7RUFBQSxJQUFHSCxLQUFLLEdBQUFFLEtBQUEsQ0FBTEYsS0FBSztFQUFBLE9BQU8sRUFBQUcsc0JBQUEsR0FBQzNELG1CQUFtQixDQUFDd0QsS0FBSyxDQUFDLGNBQUFHLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUkzRCxtQkFBbUIsQ0FBQ3lELElBQUksRUFBRUcsRUFBRTtBQUFBLEdBSXpFLFVBQUFDLEtBQUE7RUFBQSxJQUFHQyxZQUFZLEdBQUFELEtBQUEsQ0FBWkMsWUFBWTtFQUFBLE9BQVFBLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUztBQUFBLENBQUMsRUFLbEUsVUFBQUMsS0FBQTtFQUFBLElBQUdQLEtBQUssR0FBQU8sS0FBQSxDQUFMUCxLQUFLO0lBQUVNLFlBQVksR0FBQUMsS0FBQSxDQUFaRCxZQUFZO0VBQUEsT0FBT2pCLHFCQUFxQixDQUFDVyxLQUFLLEVBQUVNLFlBQVksQ0FBQztBQUFBLEVBRTVFO0FBRUQsSUFBTUUsbUJBQW1CLEdBQUduRSxNQUFNLENBQUNxRCxJQUFJLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEscUlBTTVCLFVBQUFZLEtBQUE7RUFBQSxJQUFHQyxLQUFLLEdBQUFELEtBQUEsQ0FBTEMsS0FBSztFQUFBLE9BQVFBLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTTtBQUFBLENBQUMsRUFDdkMsVUFBQUMsS0FBQTtFQUFBLElBQUdELEtBQUssR0FBQUMsS0FBQSxDQUFMRCxLQUFLO0VBQUEsT0FBUUEsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNO0FBQUEsQ0FBQyxDQUNuRDtBQUVELElBQU1FLHNCQUFzQixHQUFHdkUsTUFBTSxDQUFDcUQsSUFBSSxDQUFBQyxVQUFBO0VBQUFDLFdBQUE7RUFBQUMsV0FBQTtBQUFBLHVHQU16QztBQUVELElBQU1nQixtQkFBbUIsR0FBR3hFLE1BQU0sQ0FBQ3FELElBQUksQ0FBQUMsVUFBQTtFQUFBQyxXQUFBO0VBQUFDLFdBQUE7QUFBQSxpREFHdEM7QUFFRCxJQUFNaUIsbUJBQW1CLEdBQUd6RSxNQUFNLENBQUNxRCxJQUFJLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsOEJBRXRDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNa0IsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUMsSUFBd0IsRUFBRTlCLFFBQW1CLEVBQXVCO0VBQ3BHLElBQUksQ0FBQzhCLElBQUksSUFBSSxDQUFDQSxJQUFJLENBQUNDLFVBQVUsQ0FBQzVELHFCQUFxQixDQUFDLEVBQUUsT0FBTyxJQUFJO0VBQ2pFLElBQUE2RCxxQkFBQSxHQUFxQjFELHdCQUF3QixDQUFDd0QsSUFBSSxDQUFDO0lBQTNDM0MsSUFBSSxHQUFBNkMscUJBQUEsQ0FBSjdDLElBQUk7SUFBRUMsRUFBRSxHQUFBNEMscUJBQUEsQ0FBRjVDLEVBQUU7RUFDaEIsSUFBTUMsS0FBSyxHQUFHakIsc0JBQXNCLENBQUM0QixRQUFRLENBQUM7RUFDOUMsSUFBSWIsSUFBSSxLQUFLLE9BQU8sRUFBRSxvQkFBT1YsSUFBQSxDQUFDb0IsZUFBZTtJQUFDUixLQUFLLEVBQUVBO0VBQU0sQ0FBRSxDQUFDO0VBQzlELElBQU00QyxNQUFNLEdBQUc5QyxJQUFJLEtBQUssTUFBTTtFQUM5QixJQUFNK0MsUUFBUSxHQUFHRCxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDakMsSUFBTUUsT0FBTyxhQUFBakQsTUFBQSxDQUFhRSxFQUFFLFlBQVM7RUFFckMsSUFBTWdELGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSUMsQ0FBZ0MsRUFBSztJQUM1RCxJQUFJQSxDQUFDLENBQUNDLE9BQU8sSUFBSUQsQ0FBQyxDQUFDRSxPQUFPLEVBQUU7SUFDNUJGLENBQUMsQ0FBQ0csY0FBYyxDQUFDLENBQUM7SUFDbEJILENBQUMsQ0FBQ0ksZUFBZSxDQUFDLENBQUM7SUFDbkIxRSxrQkFBa0IsQ0FBQ3FCLEVBQUUsRUFBRSxRQUFRLENBQUM7RUFDbEMsQ0FBQztFQUVELElBQU1zRCxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFJTCxDQUFtQyxFQUFLO0lBQ2pFLElBQUlBLENBQUMsQ0FBQ00sR0FBRyxLQUFLLE9BQU8sSUFBSU4sQ0FBQyxDQUFDTSxHQUFHLEtBQUssR0FBRyxFQUFFO0lBQ3hDTixDQUFDLENBQUNHLGNBQWMsQ0FBQyxDQUFDO0lBQ2xCekUsa0JBQWtCLENBQUNxQixFQUFFLEVBQUUsUUFBUSxDQUFDO0VBQ2xDLENBQUM7RUFFRCxJQUFJNkMsTUFBTSxFQUFFO0lBQ1Ysb0JBQ0V4RCxJQUFBLENBQUNiLFVBQVU7TUFDVGtFLElBQUksRUFBRUssT0FBUTtNQUNkcEMsU0FBUyxFQUFFMUMsMEJBQTJCO01BQ3RDLGlCQUFjLE1BQU07TUFDcEIscUJBQW1COEIsSUFBSztNQUN4Qix3QkFBcUIsTUFBTTtNQUMzQnlELE9BQU8sRUFBRVIsZUFBZ0I7TUFDekJTLFNBQVMsRUFBRUgsaUJBQWtCO01BQUExQyxRQUFBLEVBRTVCWDtJQUFLLENBQ0ksQ0FBQztFQUVqQjtFQUVBLElBQU15RCxTQUFTLEdBQUczRCxJQUFJLEtBQUssU0FBUztFQUNwQyxJQUFNNEQsVUFBVSxHQUFHRCxTQUFTLGdCQUFBNUQsTUFBQSxDQUFnQkUsRUFBRSxrQkFBZSxJQUFJO0VBQ2pFLElBQU00RCxRQUFRLEdBQUcsQ0FBQ0YsU0FBUztFQUMzQixJQUFBRyxvQkFBQSxHQUE0QjFFLG1CQUFtQixDQUFDYyxLQUFLLENBQUM7SUFBOUM2RCxTQUFTLEdBQUFELG9CQUFBLENBQVRDLFNBQVM7SUFBRUMsSUFBSSxHQUFBRixvQkFBQSxDQUFKRSxJQUFJO0VBRXZCLElBQU1DLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUlmLENBQThCLEVBQUs7SUFDN0QsSUFBSSxDQUFDVSxVQUFVLEVBQUU7SUFDakJWLENBQUMsQ0FBQ0csY0FBYyxDQUFDLENBQUM7SUFDbEJILENBQUMsQ0FBQ0ksZUFBZSxDQUFDLENBQUM7SUFDbkJZLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUCxVQUFVLEVBQUUsUUFBUSxDQUFDO0VBQ25DLENBQUM7RUFFRCxvQkFDRXBFLEtBQUEsQ0FBQzRCLGVBQWU7SUFDZE8sS0FBSyxFQUFFM0IsSUFBSztJQUNaaUMsWUFBWSxFQUFFMEIsU0FBVTtJQUN4Qi9DLFNBQVMsRUFBRTFDLDBCQUEyQjtJQUN0QyxxQkFBbUI4QixJQUFLO0lBQ3hCLHdCQUFxQixNQUFNO0lBQzNCeUQsT0FBTyxFQUFFRSxTQUFTLEdBQUdNLGtCQUFrQixHQUFHRyxTQUFVO0lBQ3BEQyxJQUFJLEVBQUVWLFNBQVMsR0FBRyxRQUFRLEdBQUdTLFNBQVU7SUFDdkNFLFFBQVEsRUFBRVgsU0FBUyxHQUFHLENBQUMsR0FBR1MsU0FBVTtJQUFBdkQsUUFBQSxHQUVuQ2dELFFBQVEsZ0JBQ1ByRSxLQUFBLENBQUFFLFNBQUE7TUFBQW1CLFFBQUEsZ0JBQ0VyQixLQUFBLENBQUMrQyxzQkFBc0I7UUFBQTFCLFFBQUEsZ0JBQ3JCdkIsSUFBQSxDQUFDNkMsbUJBQW1CO1VBQUNFLEtBQUssRUFBRVMsTUFBTztVQUFBakMsUUFBQSxFQUNoQ25DLHFCQUFxQixDQUFDc0IsSUFBSSxFQUFFN0IsbUJBQW1CLENBQUM2QixJQUFJLENBQUMsQ0FBQytCLEVBQUUsRUFBRTlCLEVBQUUsRUFBRThDLFFBQVE7UUFBQyxDQUNyRCxDQUFDLGVBQ3RCekQsSUFBQSxDQUFDa0QsbUJBQW1CO1VBQUEzQixRQUFBLEVBQUVrRDtRQUFTLENBQXNCLENBQUM7TUFBQSxDQUNoQyxDQUFDLEVBQ3hCQyxJQUFJLGdCQUFHMUUsSUFBQSxDQUFDbUQsbUJBQW1CO1FBQUE1QixRQUFBLEVBQUVtRDtNQUFJLENBQXNCLENBQUMsR0FBRyxJQUFJO0lBQUEsQ0FDaEUsQ0FBQyxHQUNELElBQUksRUFDUCxDQUFDSCxRQUFRLEdBQUczRCxLQUFLLEdBQUcsSUFBSTtFQUFBLENBQ1YsQ0FBQztBQUV0QixDQUFDOztBQUVEO0FBQ0EsT0FBTyxJQUFNcUUsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSW5FLElBQVk7RUFBQSxPQUM5Q0EsSUFBSSxDQUFDQyxPQUFPLENBQUNuQixvQkFBb0IsRUFBRSxVQUFDb0IsRUFBRSxFQUFFa0UsS0FBSyxFQUFFQyxHQUFHLEVBQUV2RSxLQUFLO0lBQUEsT0FBS3ZCLDRCQUE0QixDQUFDNkIsTUFBTSxDQUFDTixLQUFLLENBQUMsQ0FBQztFQUFBLEVBQUM7QUFBQTs7QUFFNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTXdFLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBMkJBLENBQUl0RSxJQUErQixFQUFhO0VBQ3RGLElBQUlBLElBQUksSUFBSSxJQUFJLElBQUlBLElBQUksS0FBSyxFQUFFLEVBQUUsT0FBT0EsSUFBSSxhQUFKQSxJQUFJLGNBQUpBLElBQUksR0FBSSxFQUFFO0VBQ2xELElBQU11RSxlQUFlLEdBQUd2RSxJQUFJLENBQUNDLE9BQU8sQ0FBQ25CLG9CQUFvQixFQUFFLFVBQUNvQixFQUFFLEVBQUVrRSxLQUFLLEVBQUVDLEdBQUcsRUFBRXZFLEtBQUs7SUFBQSxPQUMvRXZCLDRCQUE0QixDQUFDNkIsTUFBTSxDQUFDTixLQUFLLENBQUMsQ0FBQzBFLElBQUksQ0FBQyxDQUFDLENBQUM7RUFBQSxDQUNwRCxDQUFDO0VBQ0QsSUFBTUMsVUFBVSxHQUFHLElBQUlDLE1BQU0sQ0FBQ3ZHLDBCQUEwQixDQUFDd0csTUFBTSxFQUFFLEdBQUcsQ0FBQztFQUNyRSxJQUFNQyxZQUFZLEdBQUdMLGVBQWUsQ0FBQ3RFLE9BQU8sQ0FBQ3dFLFVBQVUsRUFBRSxVQUFDdkUsRUFBRSxFQUFFbUUsR0FBRyxFQUFFdkUsS0FBSztJQUFBLFdBQUFILE1BQUEsQ0FBU1MsTUFBTSxDQUFDTixLQUFLLENBQUMsQ0FBQzBFLElBQUksQ0FBQyxDQUFDO0VBQUEsQ0FBRSxDQUFDO0VBQ3hHLElBQU1LLHNCQUFzQixHQUFHRCxZQUFZLENBQUMzRSxPQUFPLENBQ2pEVCw2QkFBNkIsRUFDN0IsVUFBQ1UsRUFBRSxFQUFFSixLQUFLO0lBQUEsV0FBQUgsTUFBQSxDQUFTUyxNQUFNLENBQUNOLEtBQUssQ0FBQyxDQUFDMEUsSUFBSSxDQUFDLENBQUM7RUFBQSxDQUN6QyxDQUFDO0VBQ0QsT0FBT0ssc0JBQXNCLENBQUM1RSxPQUFPLENBQUNWLCtCQUErQixFQUFFLEVBQUUsQ0FBQyxDQUFDaUYsSUFBSSxDQUFDLENBQUM7QUFDbkYsQ0FBQztBQUVELElBQU1NLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBQyxLQUFBLEVBQW9GO0VBQUEsSUFBOUVuRixJQUFJLEdBQUFtRixLQUFBLENBQUpuRixJQUFJO0lBQUVDLEVBQUUsR0FBQWtGLEtBQUEsQ0FBRmxGLEVBQUU7SUFBRUMsS0FBSyxHQUFBaUYsS0FBQSxDQUFMakYsS0FBSztFQUNwQyxJQUFNa0YsZUFBZSxHQUFHekcsNEJBQTRCLENBQUN1QixLQUFLLENBQUM7RUFDM0QsSUFBSUYsSUFBSSxLQUFLLE9BQU8sRUFBRSxvQkFBT1YsSUFBQSxDQUFDb0IsZUFBZTtJQUFDUixLQUFLLEVBQUVrRjtFQUFnQixDQUFFLENBQUM7RUFDeEUsSUFBTUMsR0FBRyxHQUFHdEcsYUFBYSxDQUFDaUIsSUFBSSxFQUFFQyxFQUFFLENBQUM7RUFDbkMsSUFBTWdCLFdBQVcsR0FBRyxDQUFDLENBQUNvRSxHQUFHO0VBQ3pCLElBQU12QyxNQUFNLEdBQUc5QyxJQUFJLEtBQUssTUFBTTtFQUM5QixJQUFNMkQsU0FBUyxHQUFHM0QsSUFBSSxLQUFLLFNBQVM7RUFDcEMsSUFBTTZELFFBQVEsR0FBRyxDQUFDRixTQUFTO0VBQzNCLElBQU1aLFFBQVEsR0FBR0QsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFO0VBQ2pDLElBQUF3QyxxQkFBQSxHQUE0QmxHLG1CQUFtQixDQUFDZ0csZUFBZSxDQUFDO0lBQXhEckIsU0FBUyxHQUFBdUIscUJBQUEsQ0FBVHZCLFNBQVM7SUFBRUMsSUFBSSxHQUFBc0IscUJBQUEsQ0FBSnRCLElBQUk7RUFFdkIsSUFBTXVCLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJckMsQ0FBa0QsRUFBSztJQUMxRSxJQUFJLENBQUNqQyxXQUFXLElBQUksQ0FBQ29FLEdBQUcsRUFBRTtJQUMxQixJQUFJckYsSUFBSSxLQUFLLE1BQU0sRUFBRTtNQUNuQixJQUFJa0QsQ0FBQyxDQUFDQyxPQUFPLElBQUlELENBQUMsQ0FBQ0UsT0FBTyxFQUFFO01BQzVCRixDQUFDLENBQUNHLGNBQWMsQ0FBQyxDQUFDO01BQ2xCSCxDQUFDLENBQUNJLGVBQWUsQ0FBQyxDQUFDO01BQ25CMUUsa0JBQWtCLENBQUNxQixFQUFFLEVBQUUsUUFBUSxDQUFDO01BQ2hDO0lBQ0Y7SUFDQWlELENBQUMsQ0FBQ0csY0FBYyxDQUFDLENBQUM7SUFDbEJhLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDa0IsR0FBRyxFQUFFLFFBQVEsQ0FBQztFQUM1QixDQUFDO0VBRUQsSUFBTUcsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJdEMsQ0FBcUQsRUFBSztJQUMvRSxJQUFJLENBQUNqQyxXQUFXLElBQUlqQixJQUFJLEtBQUssTUFBTSxFQUFFO0lBQ3JDLElBQUlrRCxDQUFDLENBQUNNLEdBQUcsS0FBSyxPQUFPLElBQUlOLENBQUMsQ0FBQ00sR0FBRyxLQUFLLEdBQUcsRUFBRTtJQUN4Q04sQ0FBQyxDQUFDRyxjQUFjLENBQUMsQ0FBQztJQUNsQnpFLGtCQUFrQixDQUFDcUIsRUFBRSxFQUFFLFFBQVEsQ0FBQztFQUNsQyxDQUFDO0VBRUQsSUFBSUQsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUNuQixvQkFDRVYsSUFBQSxDQUFDYixVQUFVO01BQ1RrRSxJQUFJLEVBQUUwQyxHQUFHLGFBQUhBLEdBQUcsY0FBSEEsR0FBRyxHQUFJLEdBQUk7TUFDakJ6RSxTQUFTLEVBQUUxQywwQkFBMkI7TUFDdEMsaUJBQWMsTUFBTTtNQUNwQixxQkFBa0IsTUFBTTtNQUN4Qix3QkFBcUIsTUFBTTtNQUMzQnVGLE9BQU8sRUFBRThCLFdBQVk7TUFDckI3QixTQUFTLEVBQUU4QixhQUFjO01BQUEzRSxRQUFBLEVBRXhCdUU7SUFBZSxDQUNOLENBQUM7RUFFakI7RUFFQSxvQkFDRTVGLEtBQUEsQ0FBQzRCLGVBQWU7SUFDZE8sS0FBSyxFQUFFM0IsSUFBSztJQUNaaUMsWUFBWSxFQUFFaEIsV0FBWTtJQUMxQkwsU0FBUyxFQUFFMUMsMEJBQTJCO0lBQ3RDLHFCQUFtQjhCLElBQUs7SUFDeEIsd0JBQXFCLE1BQU07SUFDM0J5RCxPQUFPLEVBQUV4QyxXQUFXLEdBQUdzRSxXQUFXLEdBQUduQixTQUFVO0lBQy9DQyxJQUFJLEVBQUVwRCxXQUFXLEdBQUcsUUFBUSxHQUFHbUQsU0FBVTtJQUN6Q0UsUUFBUSxFQUFFckQsV0FBVyxHQUFHLENBQUMsR0FBR21ELFNBQVU7SUFBQXZELFFBQUEsR0FFckNnRCxRQUFRLGdCQUNQckUsS0FBQSxDQUFBRSxTQUFBO01BQUFtQixRQUFBLGdCQUNFckIsS0FBQSxDQUFDK0Msc0JBQXNCO1FBQUExQixRQUFBLGdCQUNyQnZCLElBQUEsQ0FBQzZDLG1CQUFtQjtVQUFDRSxLQUFLLEVBQUVTLE1BQU87VUFBQWpDLFFBQUEsRUFDaENuQyxxQkFBcUIsQ0FBQ3NCLElBQUksRUFBRTdCLG1CQUFtQixDQUFDNkIsSUFBSSxDQUFDLENBQUMrQixFQUFFLEVBQUU5QixFQUFFLEVBQUU4QyxRQUFRO1FBQUMsQ0FDckQsQ0FBQyxlQUN0QnpELElBQUEsQ0FBQ2tELG1CQUFtQjtVQUFBM0IsUUFBQSxFQUFFa0Q7UUFBUyxDQUFzQixDQUFDO01BQUEsQ0FDaEMsQ0FBQyxFQUN4QkMsSUFBSSxnQkFBRzFFLElBQUEsQ0FBQ21ELG1CQUFtQjtRQUFBNUIsUUFBQSxFQUFFbUQ7TUFBSSxDQUFzQixDQUFDLEdBQUcsSUFBSTtJQUFBLENBQ2hFLENBQUMsR0FDRCxJQUFJLEVBQ1AsQ0FBQ0gsUUFBUSxHQUFHdUIsZUFBZSxHQUFHLElBQUk7RUFBQSxDQUNwQixDQUFDO0FBRXRCLENBQUM7QUFFRCxPQUFPLElBQU1LLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlyRixJQUFZLEVBQWM7RUFDekQsSUFBSSxDQUFDQSxJQUFJLEVBQUUsT0FBTyxLQUFLO0VBQ3ZCLE9BQU9BLElBQUksQ0FBQ3NGLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSXRGLElBQUksQ0FBQ3NGLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztBQUN6RSxDQUFDO0FBRUQsT0FBTyxJQUFNQyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJdkYsSUFBWSxFQUFtQztFQUNwRixJQUFJLENBQUNBLElBQUksRUFBRSxPQUFPLENBQUNBLElBQUksQ0FBQztFQUN4QixJQUFNd0YsT0FBTyxHQUFHL0csb0JBQW9CLENBQUN1QixJQUFJLENBQUM7RUFDMUMsSUFBSXdGLE9BQU8sQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUN6RixJQUFJLENBQUM7RUFFdkMsSUFBTTBGLEdBQWlDLEdBQUcsRUFBRTtFQUM1QyxJQUFJQyxPQUFPLEdBQUcsQ0FBQztFQUNmSCxPQUFPLENBQUNJLE9BQU8sQ0FBQyxVQUFBQyxNQUFNLEVBQUk7SUFDeEIsSUFBSUEsTUFBTSxDQUFDQyxLQUFLLEdBQUdILE9BQU8sRUFBRUQsR0FBRyxDQUFDSyxJQUFJLENBQUMvRixJQUFJLENBQUNnRyxLQUFLLENBQUNMLE9BQU8sRUFBRUUsTUFBTSxDQUFDQyxLQUFLLENBQUMsQ0FBQztJQUN2RSxJQUFJRCxNQUFNLENBQUNJLElBQUksS0FBSyxTQUFTLEVBQUU7TUFDN0JQLEdBQUcsQ0FBQ0ssSUFBSSxjQUNON0csSUFBQSxDQUFDNEYsV0FBVztRQUVWbEYsSUFBSSxFQUFFaUcsTUFBTSxDQUFDakcsSUFBSztRQUNsQkMsRUFBRSxFQUFFZ0csTUFBTSxDQUFDaEcsRUFBRztRQUNkQyxLQUFLLEVBQUUrRixNQUFNLENBQUMvRjtNQUFNLGNBQUFILE1BQUEsQ0FISmtHLE1BQU0sQ0FBQ0MsS0FBSyxPQUFBbkcsTUFBQSxDQUFJa0csTUFBTSxDQUFDakcsSUFBSSxPQUFBRCxNQUFBLENBQUlrRyxNQUFNLENBQUNoRyxFQUFFLENBSXpELENBQ0gsQ0FBQztJQUNILENBQUMsTUFBTTtNQUNMNkYsR0FBRyxDQUFDSyxJQUFJLGNBQUM3RyxJQUFBLENBQUNqQixnQkFBZ0I7UUFBNEM2QixLQUFLLEVBQUUrRixNQUFNLENBQUMvRixLQUFNO1FBQUNvRyxNQUFNLEVBQUU7TUFBTSxZQUFBdkcsTUFBQSxDQUFoRWtHLE1BQU0sQ0FBQ0MsS0FBSyxPQUFBbkcsTUFBQSxDQUFJa0csTUFBTSxDQUFDaEcsRUFBRSxDQUF5QyxDQUFDLENBQUM7SUFDL0c7SUFDQThGLE9BQU8sR0FBR0UsTUFBTSxDQUFDQyxLQUFLLEdBQUdELE1BQU0sQ0FBQ0osTUFBTTtFQUN4QyxDQUFDLENBQUM7RUFDRixJQUFJRSxPQUFPLEdBQUczRixJQUFJLENBQUN5RixNQUFNLEVBQUVDLEdBQUcsQ0FBQ0ssSUFBSSxDQUFDL0YsSUFBSSxDQUFDZ0csS0FBSyxDQUFDTCxPQUFPLENBQUMsQ0FBQztFQUN4RCxPQUFPRCxHQUFHO0FBQ1osQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,222 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import { normalizeHitlToolName } from './hitlAnalytics';
3
+ var THINKING_MESSAGE_KEYS = ['chat.activity.thinking.analyzing', 'chat.activity.thinking.reviewing', 'chat.activity.thinking.planning'];
4
+ export var GENERATING_MESSAGE_KEYS = ['chat.activity.generating.considering', 'chat.activity.generating.almostReady', 'chat.activity.generating.preparing'];
5
+ export var SEARCH_MESSAGE_KEYS = ['chat.activity.search.scanning', 'chat.activity.search.summarizing'];
6
+ export var DEEP_SEARCH_MESSAGE_KEYS = ['chat.activity.deepSearch.exploring', 'chat.activity.deepSearch.crossChecking'];
7
+ var ATTACHMENT_MESSAGE_KEYS = ['chat.activity.attachment.reading', 'chat.activity.attachment.extracting'];
8
+ var ATTACHMENT_MESSAGE_KEYS_PLURAL = ['chat.activity.attachment.readingPlural', 'chat.activity.attachment.extractingPlural'];
9
+ export var WRITING_ACTIVITY_MESSAGE_KEY = 'chat.activity.writing.composing';
10
+ var TOOL_ACTION_IDS = {
11
+ create_task: 'createTask',
12
+ clone_task: 'createTask',
13
+ create_tasks_batch: 'createTasksBatch',
14
+ create_agent: 'createAgent',
15
+ edit_agent: 'editAgent',
16
+ edit_task: 'editTask',
17
+ edit_tasks_batch: 'editTasksBatch',
18
+ delete_task: 'deleteTask',
19
+ delete_tasks_batch: 'deleteTasksBatch',
20
+ assign: 'assignUser',
21
+ task_assign: 'assignUser',
22
+ task_desassign: 'unassignUser',
23
+ desassign: 'unassignUser',
24
+ task_unassign: 'unassignUser',
25
+ assign_task_label: 'assignLabel',
26
+ create_labels: 'createLabel',
27
+ edit_project: 'editProject',
28
+ create_checklist_item: 'createChecklistItem',
29
+ update_task_type: 'updateTaskType',
30
+ update_estimated_hours: 'updateEstimatedHours',
31
+ update_deliverable: 'updateDeliverable',
32
+ create_hour: 'logHours',
33
+ create_hours: 'logHours',
34
+ create_checklist: 'createChecklist',
35
+ get_task_date_hours: 'queryHours',
36
+ configure_agent_access: 'configureAgentAccess',
37
+ send_task_message: 'sendTaskMessage',
38
+ delete_checklist_item: 'deleteChecklistItem',
39
+ remove_task_type: 'removeTaskType',
40
+ remove_task_label: 'removeLabel',
41
+ count_deliverable: 'updateDeliverableCount',
42
+ create_rework: 'createRework',
43
+ update_rework: 'updateRework',
44
+ get_project_with_tasks_info: 'readProjectTasks',
45
+ get_task: 'readTask',
46
+ get_task_history: 'readTask',
47
+ get_task_labels: 'readTask',
48
+ get_task_types: 'readTaskTypes',
49
+ get_task_type_categories: 'readTaskTypes',
50
+ get_project_fee_consumption: 'readProject',
51
+ get_project_tab_evolution: 'readProject',
52
+ get_project_tab_evolution_costs: 'readProject',
53
+ get_project_performance_tab_time_by_grouped: 'readProject',
54
+ get_deliverable_by_project_id: 'readProject',
55
+ get_rework_by_project_id: 'readProject',
56
+ get_contract: 'readProject',
57
+ list_projects: 'listProjects',
58
+ get_client: 'readClient',
59
+ get_client_statuses: 'readClient',
60
+ get_clients_with_filters: 'readClient',
61
+ list_clients: 'readClient',
62
+ get_hours: 'readHours',
63
+ get_hours_capacity: 'readHours',
64
+ get_project_hours_by_user_and_task: 'readHours',
65
+ get_project_hours_by_user_monthly: 'readHours',
66
+ get_working_time: 'readHours',
67
+ get_charging_period: 'readHours',
68
+ summarize_hours: 'readHours',
69
+ recommend_hours_from_planner: 'readHours',
70
+ get_planner: 'readPlanner',
71
+ list_users: 'readUsers',
72
+ get_dashboard_by_company: 'readMetrics',
73
+ get_dashboard_data: 'readMetrics',
74
+ get_recent_activity: 'readMetrics',
75
+ list_contracts: 'readBilling',
76
+ list_fees: 'readBilling',
77
+ list_invoices: 'readBilling',
78
+ checklist: 'readChecklist',
79
+ reworks: 'readReworks',
80
+ tavily_search: 'searchWeb',
81
+ get_user_id: 'readReferences',
82
+ get_client_id_based_on_name: 'readReferences',
83
+ get_project_id_based_on_name: 'readReferences',
84
+ get_task_id_based_on_title: 'readReferences',
85
+ get_user_position_id_based_on_name: 'readReferences',
86
+ get_label_colors: 'readReferences',
87
+ get_models: 'readReferences',
88
+ create_project: 'createProject',
89
+ create_client: 'createClient',
90
+ edit_client: 'editClient',
91
+ create_user: 'createUser',
92
+ edit_user: 'editUser',
93
+ create_task_type: 'createTaskType',
94
+ edit_hour: 'editHours',
95
+ delete_hour: 'deleteHours',
96
+ delete_hours: 'deleteHours',
97
+ create_allocation: 'createAllocation',
98
+ edit_allocation: 'editAllocation',
99
+ delete_allocation: 'deleteAllocation',
100
+ archive_project: 'editProject',
101
+ assign_project_members: 'editProject',
102
+ unassign_project_members: 'editProject',
103
+ delete_task_attachment: 'editTask',
104
+ set_task_favorite: 'editTask',
105
+ generate_resume: 'readProject',
106
+ get_brands_from_client: 'readClient',
107
+ get_calendar_integration: 'readCalendar',
108
+ list_calendar_events: 'readCalendar',
109
+ get_capacity_planning: 'readPlanner',
110
+ get_checklist: 'readChecklist',
111
+ get_faq_profitability_income: 'readProject',
112
+ get_faq_project_progress: 'readProject',
113
+ get_help: 'readHelp',
114
+ get_lead: 'readClient',
115
+ get_my_hours: 'readHours',
116
+ get_project_decisions: 'readProject',
117
+ get_project_history_info: 'readProject',
118
+ get_project_labels: 'readProject',
119
+ get_projects_with_filters: 'listProjects',
120
+ get_recent_clients: 'readClient',
121
+ get_recent_projects: 'listProjects',
122
+ get_reworks_with_filters: 'readReworks',
123
+ get_task_attachments: 'readTask',
124
+ get_task_followers: 'readTask',
125
+ get_task_hours_charged: 'readHours',
126
+ get_task_links: 'readTask',
127
+ get_task_messages: 'readTask',
128
+ get_task_reworks: 'readReworks',
129
+ get_task_subtasks: 'readTask',
130
+ list_tasks: 'readTask',
131
+ get_team: 'readTeam',
132
+ get_team_members: 'readTeam',
133
+ list_teams: 'readTeam',
134
+ get_user_activity: 'readMetrics',
135
+ global_search: 'globalSearch',
136
+ handoff_to_orchestrator: 'askAnotherSpecialist',
137
+ get_skill: 'useSkill'
138
+ };
139
+ export var actionMessageKey = function actionMessageKey(actionId, tense) {
140
+ return "chat.activity.actions.".concat(actionId, ".").concat(tense);
141
+ };
142
+ export var lookupToolActionId = function lookupToolActionId(toolName) {
143
+ return TOOL_ACTION_IDS[normalizeHitlToolName(toolName)];
144
+ };
145
+ export var resolveToolActionLabelFromDictionary = function resolveToolActionLabelFromDictionary(toolName, translate, tense) {
146
+ var actionId = lookupToolActionId(toolName);
147
+ return actionId ? translate(actionMessageKey(actionId, tense)) : null;
148
+ };
149
+ var HITL_TOOL_NAMES_BY_SPECIFICITY = Object.keys(TOOL_ACTION_IDS).sort(function (a, b) {
150
+ return b.length - a.length;
151
+ });
152
+
153
+ /**
154
+ * Detecta identificadores crudos de tool (snake_case / kebab-case sin espacios) que el backend
155
+ * puede enviar cuando aún no hay traducción. No deben mostrarse al usuario: se usa un fallback
156
+ * genérico hasta que el nombre se agregue al diccionario.
157
+ */
158
+ export var looksLikeRawToolName = function looksLikeRawToolName(message) {
159
+ return /^[a-z0-9]+(?:[_-][a-z0-9]+)+$/i.test(message.trim());
160
+ };
161
+
162
+ /** Mensajes genéricos del backend cuando no hay detalle de tool (continue-thread). */
163
+ export var isGenericResumeNodeMessage = function isGenericResumeNodeMessage(message) {
164
+ var normalized = message.trim().toLowerCase();
165
+ return normalized.startsWith('ejecutando acción aprobada') || normalized.startsWith('executing approved action') || normalized.startsWith('executando ação aprovada');
166
+ };
167
+ export var resolveHitlToolFromNodeMessage = function resolveHitlToolFromNodeMessage(nodeMessage) {
168
+ var normalized = nodeMessage.toLowerCase().trim();
169
+ if (!normalized) return null;
170
+ if (TOOL_ACTION_IDS[normalized]) {
171
+ return normalized;
172
+ }
173
+ var asToolName = normalizeHitlToolName(normalized.replace(/\s+/g, '_'));
174
+ if (TOOL_ACTION_IDS[asToolName]) {
175
+ return asToolName;
176
+ }
177
+ var matchedTool = HITL_TOOL_NAMES_BY_SPECIFICITY.find(function (toolName) {
178
+ return normalized.includes(toolName);
179
+ });
180
+ return matchedTool !== null && matchedTool !== void 0 ? matchedTool : null;
181
+ };
182
+ export var resolvePendingActionsForThread = function resolvePendingActionsForThread(context, threadId) {
183
+ var _ref, _context$pendingActio, _context$approval, _context$threadIds;
184
+ var pending = (_ref = (_context$pendingActio = context === null || context === void 0 ? void 0 : context.pendingActions) !== null && _context$pendingActio !== void 0 ? _context$pendingActio : context === null || context === void 0 || (_context$approval = context.approval) === null || _context$approval === void 0 ? void 0 : _context$approval.pending_actions) !== null && _ref !== void 0 ? _ref : [];
185
+ if (!pending.length) return [];
186
+ if (threadId) {
187
+ var forThread = pending.filter(function (action) {
188
+ return action.thread_id === threadId;
189
+ });
190
+ if (forThread.length) return forThread;
191
+ }
192
+ if (context !== null && context !== void 0 && (_context$threadIds = context.threadIds) !== null && _context$threadIds !== void 0 && _context$threadIds.length) {
193
+ return pending.filter(function (action) {
194
+ var _context$threadIds2;
195
+ return (_context$threadIds2 = context.threadIds) === null || _context$threadIds2 === void 0 ? void 0 : _context$threadIds2.includes(action.thread_id);
196
+ });
197
+ }
198
+ return pending;
199
+ };
200
+ export var detectToolsFromPendingActions = function detectToolsFromPendingActions(actions) {
201
+ return _toConsumableArray(new Set(actions.map(function (action) {
202
+ return normalizeHitlToolName(action.tool_name);
203
+ }).filter(Boolean)));
204
+ };
205
+ export var getMessageKeysForPhase = function getMessageKeysForPhase(phase) {
206
+ var attachmentsCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
207
+ switch (phase) {
208
+ case 'generating':
209
+ return GENERATING_MESSAGE_KEYS;
210
+ case 'thinking':
211
+ return THINKING_MESSAGE_KEYS;
212
+ case 'search':
213
+ return SEARCH_MESSAGE_KEYS;
214
+ case 'deep_search':
215
+ return DEEP_SEARCH_MESSAGE_KEYS;
216
+ case 'attachment':
217
+ return attachmentsCount > 1 ? ATTACHMENT_MESSAGE_KEYS_PLURAL : ATTACHMENT_MESSAGE_KEYS;
218
+ default:
219
+ return null;
220
+ }
221
+ };
222
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJUSElOS0lOR19NRVNTQUdFX0tFWVMiLCJHRU5FUkFUSU5HX01FU1NBR0VfS0VZUyIsIlNFQVJDSF9NRVNTQUdFX0tFWVMiLCJERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVMiLCJBVFRBQ0hNRU5UX01FU1NBR0VfS0VZUyIsIkFUVEFDSE1FTlRfTUVTU0FHRV9LRVlTX1BMVVJBTCIsIldSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkiLCJUT09MX0FDVElPTl9JRFMiLCJjcmVhdGVfdGFzayIsImNsb25lX3Rhc2siLCJjcmVhdGVfdGFza3NfYmF0Y2giLCJjcmVhdGVfYWdlbnQiLCJlZGl0X2FnZW50IiwiZWRpdF90YXNrIiwiZWRpdF90YXNrc19iYXRjaCIsImRlbGV0ZV90YXNrIiwiZGVsZXRlX3Rhc2tzX2JhdGNoIiwiYXNzaWduIiwidGFza19hc3NpZ24iLCJ0YXNrX2Rlc2Fzc2lnbiIsImRlc2Fzc2lnbiIsInRhc2tfdW5hc3NpZ24iLCJhc3NpZ25fdGFza19sYWJlbCIsImNyZWF0ZV9sYWJlbHMiLCJlZGl0X3Byb2plY3QiLCJjcmVhdGVfY2hlY2tsaXN0X2l0ZW0iLCJ1cGRhdGVfdGFza190eXBlIiwidXBkYXRlX2VzdGltYXRlZF9ob3VycyIsInVwZGF0ZV9kZWxpdmVyYWJsZSIsImNyZWF0ZV9ob3VyIiwiY3JlYXRlX2hvdXJzIiwiY3JlYXRlX2NoZWNrbGlzdCIsImdldF90YXNrX2RhdGVfaG91cnMiLCJjb25maWd1cmVfYWdlbnRfYWNjZXNzIiwic2VuZF90YXNrX21lc3NhZ2UiLCJkZWxldGVfY2hlY2tsaXN0X2l0ZW0iLCJyZW1vdmVfdGFza190eXBlIiwicmVtb3ZlX3Rhc2tfbGFiZWwiLCJjb3VudF9kZWxpdmVyYWJsZSIsImNyZWF0ZV9yZXdvcmsiLCJ1cGRhdGVfcmV3b3JrIiwiZ2V0X3Byb2plY3Rfd2l0aF90YXNrc19pbmZvIiwiZ2V0X3Rhc2siLCJnZXRfdGFza19oaXN0b3J5IiwiZ2V0X3Rhc2tfbGFiZWxzIiwiZ2V0X3Rhc2tfdHlwZXMiLCJnZXRfdGFza190eXBlX2NhdGVnb3JpZXMiLCJnZXRfcHJvamVjdF9mZWVfY29uc3VtcHRpb24iLCJnZXRfcHJvamVjdF90YWJfZXZvbHV0aW9uIiwiZ2V0X3Byb2plY3RfdGFiX2V2b2x1dGlvbl9jb3N0cyIsImdldF9wcm9qZWN0X3BlcmZvcm1hbmNlX3RhYl90aW1lX2J5X2dyb3VwZWQiLCJnZXRfZGVsaXZlcmFibGVfYnlfcHJvamVjdF9pZCIsImdldF9yZXdvcmtfYnlfcHJvamVjdF9pZCIsImdldF9jb250cmFjdCIsImxpc3RfcHJvamVjdHMiLCJnZXRfY2xpZW50IiwiZ2V0X2NsaWVudF9zdGF0dXNlcyIsImdldF9jbGllbnRzX3dpdGhfZmlsdGVycyIsImxpc3RfY2xpZW50cyIsImdldF9ob3VycyIsImdldF9ob3Vyc19jYXBhY2l0eSIsImdldF9wcm9qZWN0X2hvdXJzX2J5X3VzZXJfYW5kX3Rhc2siLCJnZXRfcHJvamVjdF9ob3Vyc19ieV91c2VyX21vbnRobHkiLCJnZXRfd29ya2luZ190aW1lIiwiZ2V0X2NoYXJnaW5nX3BlcmlvZCIsInN1bW1hcml6ZV9ob3VycyIsInJlY29tbWVuZF9ob3Vyc19mcm9tX3BsYW5uZXIiLCJnZXRfcGxhbm5lciIsImxpc3RfdXNlcnMiLCJnZXRfZGFzaGJvYXJkX2J5X2NvbXBhbnkiLCJnZXRfZGFzaGJvYXJkX2RhdGEiLCJnZXRfcmVjZW50X2FjdGl2aXR5IiwibGlzdF9jb250cmFjdHMiLCJsaXN0X2ZlZXMiLCJsaXN0X2ludm9pY2VzIiwiY2hlY2tsaXN0IiwicmV3b3JrcyIsInRhdmlseV9zZWFyY2giLCJnZXRfdXNlcl9pZCIsImdldF9jbGllbnRfaWRfYmFzZWRfb25fbmFtZSIsImdldF9wcm9qZWN0X2lkX2Jhc2VkX29uX25hbWUiLCJnZXRfdGFza19pZF9iYXNlZF9vbl90aXRsZSIsImdldF91c2VyX3Bvc2l0aW9uX2lkX2Jhc2VkX29uX25hbWUiLCJnZXRfbGFiZWxfY29sb3JzIiwiZ2V0X21vZGVscyIsImNyZWF0ZV9wcm9qZWN0IiwiY3JlYXRlX2NsaWVudCIsImVkaXRfY2xpZW50IiwiY3JlYXRlX3VzZXIiLCJlZGl0X3VzZXIiLCJjcmVhdGVfdGFza190eXBlIiwiZWRpdF9ob3VyIiwiZGVsZXRlX2hvdXIiLCJkZWxldGVfaG91cnMiLCJjcmVhdGVfYWxsb2NhdGlvbiIsImVkaXRfYWxsb2NhdGlvbiIsImRlbGV0ZV9hbGxvY2F0aW9uIiwiYXJjaGl2ZV9wcm9qZWN0IiwiYXNzaWduX3Byb2plY3RfbWVtYmVycyIsInVuYXNzaWduX3Byb2plY3RfbWVtYmVycyIsImRlbGV0ZV90YXNrX2F0dGFjaG1lbnQiLCJzZXRfdGFza19mYXZvcml0ZSIsImdlbmVyYXRlX3Jlc3VtZSIsImdldF9icmFuZHNfZnJvbV9jbGllbnQiLCJnZXRfY2FsZW5kYXJfaW50ZWdyYXRpb24iLCJsaXN0X2NhbGVuZGFyX2V2ZW50cyIsImdldF9jYXBhY2l0eV9wbGFubmluZyIsImdldF9jaGVja2xpc3QiLCJnZXRfZmFxX3Byb2ZpdGFiaWxpdHlfaW5jb21lIiwiZ2V0X2ZhcV9wcm9qZWN0X3Byb2dyZXNzIiwiZ2V0X2hlbHAiLCJnZXRfbGVhZCIsImdldF9teV9ob3VycyIsImdldF9wcm9qZWN0X2RlY2lzaW9ucyIsImdldF9wcm9qZWN0X2hpc3RvcnlfaW5mbyIsImdldF9wcm9qZWN0X2xhYmVscyIsImdldF9wcm9qZWN0c193aXRoX2ZpbHRlcnMiLCJnZXRfcmVjZW50X2NsaWVudHMiLCJnZXRfcmVjZW50X3Byb2plY3RzIiwiZ2V0X3Jld29ya3Nfd2l0aF9maWx0ZXJzIiwiZ2V0X3Rhc2tfYXR0YWNobWVudHMiLCJnZXRfdGFza19mb2xsb3dlcnMiLCJnZXRfdGFza19ob3Vyc19jaGFyZ2VkIiwiZ2V0X3Rhc2tfbGlua3MiLCJnZXRfdGFza19tZXNzYWdlcyIsImdldF90YXNrX3Jld29ya3MiLCJnZXRfdGFza19zdWJ0YXNrcyIsImxpc3RfdGFza3MiLCJnZXRfdGVhbSIsImdldF90ZWFtX21lbWJlcnMiLCJsaXN0X3RlYW1zIiwiZ2V0X3VzZXJfYWN0aXZpdHkiLCJnbG9iYWxfc2VhcmNoIiwiaGFuZG9mZl90b19vcmNoZXN0cmF0b3IiLCJnZXRfc2tpbGwiLCJhY3Rpb25NZXNzYWdlS2V5IiwiYWN0aW9uSWQiLCJ0ZW5zZSIsImNvbmNhdCIsImxvb2t1cFRvb2xBY3Rpb25JZCIsInRvb2xOYW1lIiwicmVzb2x2ZVRvb2xBY3Rpb25MYWJlbEZyb21EaWN0aW9uYXJ5IiwidHJhbnNsYXRlIiwiSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJhIiwiYiIsImxlbmd0aCIsImxvb2tzTGlrZVJhd1Rvb2xOYW1lIiwibWVzc2FnZSIsInRlc3QiLCJ0cmltIiwiaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UiLCJub3JtYWxpemVkIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwicmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlIiwibm9kZU1lc3NhZ2UiLCJhc1Rvb2xOYW1lIiwicmVwbGFjZSIsIm1hdGNoZWRUb29sIiwiZmluZCIsImluY2x1ZGVzIiwicmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkIiwiY29udGV4dCIsInRocmVhZElkIiwiX3JlZiIsIl9jb250ZXh0JHBlbmRpbmdBY3RpbyIsIl9jb250ZXh0JGFwcHJvdmFsIiwiX2NvbnRleHQkdGhyZWFkSWRzIiwicGVuZGluZyIsInBlbmRpbmdBY3Rpb25zIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJmb3JUaHJlYWQiLCJmaWx0ZXIiLCJhY3Rpb24iLCJ0aHJlYWRfaWQiLCJ0aHJlYWRJZHMiLCJfY29udGV4dCR0aHJlYWRJZHMyIiwiZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMiLCJhY3Rpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwibWFwIiwidG9vbF9uYW1lIiwiQm9vbGVhbiIsImdldE1lc3NhZ2VLZXlzRm9yUGhhc2UiLCJwaGFzZSIsImF0dGFjaG1lbnRzQ291bnQiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcy5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHlQaGFzZSB9IGZyb20gJy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QsIFBlbmRpbmdBY3Rpb24gfSBmcm9tICcuLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgbm9ybWFsaXplSGl0bFRvb2xOYW1lIH0gZnJvbSAnLi9oaXRsQW5hbHl0aWNzJ1xuXG5jb25zdCBUSElOS0lOR19NRVNTQUdFX0tFWVMgPSBbXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLmFuYWx5emluZycsXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLnJldmlld2luZycsXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLnBsYW5uaW5nJyxcbl0gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IEdFTkVSQVRJTkdfTUVTU0FHRV9LRVlTID0gW1xuICAnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nLmNvbnNpZGVyaW5nJyxcbiAgJ2NoYXQuYWN0aXZpdHkuZ2VuZXJhdGluZy5hbG1vc3RSZWFkeScsXG4gICdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmcucHJlcGFyaW5nJyxcbl0gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9NRVNTQUdFX0tFWVMgPSBbJ2NoYXQuYWN0aXZpdHkuc2VhcmNoLnNjYW5uaW5nJywgJ2NoYXQuYWN0aXZpdHkuc2VhcmNoLnN1bW1hcml6aW5nJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IERFRVBfU0VBUkNIX01FU1NBR0VfS0VZUyA9IFtcbiAgJ2NoYXQuYWN0aXZpdHkuZGVlcFNlYXJjaC5leHBsb3JpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS5kZWVwU2VhcmNoLmNyb3NzQ2hlY2tpbmcnLFxuXSBhcyBjb25zdFxuXG5jb25zdCBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZUyA9IFsnY2hhdC5hY3Rpdml0eS5hdHRhY2htZW50LnJlYWRpbmcnLCAnY2hhdC5hY3Rpdml0eS5hdHRhY2htZW50LmV4dHJhY3RpbmcnXSBhcyBjb25zdFxuXG5jb25zdCBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZU19QTFVSQUwgPSBbXG4gICdjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQucmVhZGluZ1BsdXJhbCcsXG4gICdjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQuZXh0cmFjdGluZ1BsdXJhbCcsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZID0gJ2NoYXQuYWN0aXZpdHkud3JpdGluZy5jb21wb3NpbmcnIGFzIGNvbnN0XG5cbmV4cG9ydCB0eXBlIEFjdGlvblRlbnNlID0gJ3ByZXNlbnQnIHwgJ3Bhc3QnXG5cbmNvbnN0IFRPT0xfQUNUSU9OX0lEUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY3JlYXRlX3Rhc2s6ICdjcmVhdGVUYXNrJyxcbiAgY2xvbmVfdGFzazogJ2NyZWF0ZVRhc2snLFxuICBjcmVhdGVfdGFza3NfYmF0Y2g6ICdjcmVhdGVUYXNrc0JhdGNoJyxcbiAgY3JlYXRlX2FnZW50OiAnY3JlYXRlQWdlbnQnLFxuICBlZGl0X2FnZW50OiAnZWRpdEFnZW50JyxcbiAgZWRpdF90YXNrOiAnZWRpdFRhc2snLFxuICBlZGl0X3Rhc2tzX2JhdGNoOiAnZWRpdFRhc2tzQmF0Y2gnLFxuICBkZWxldGVfdGFzazogJ2RlbGV0ZVRhc2snLFxuICBkZWxldGVfdGFza3NfYmF0Y2g6ICdkZWxldGVUYXNrc0JhdGNoJyxcbiAgYXNzaWduOiAnYXNzaWduVXNlcicsXG4gIHRhc2tfYXNzaWduOiAnYXNzaWduVXNlcicsXG4gIHRhc2tfZGVzYXNzaWduOiAndW5hc3NpZ25Vc2VyJyxcbiAgZGVzYXNzaWduOiAndW5hc3NpZ25Vc2VyJyxcbiAgdGFza191bmFzc2lnbjogJ3VuYXNzaWduVXNlcicsXG4gIGFzc2lnbl90YXNrX2xhYmVsOiAnYXNzaWduTGFiZWwnLFxuICBjcmVhdGVfbGFiZWxzOiAnY3JlYXRlTGFiZWwnLFxuICBlZGl0X3Byb2plY3Q6ICdlZGl0UHJvamVjdCcsXG4gIGNyZWF0ZV9jaGVja2xpc3RfaXRlbTogJ2NyZWF0ZUNoZWNrbGlzdEl0ZW0nLFxuICB1cGRhdGVfdGFza190eXBlOiAndXBkYXRlVGFza1R5cGUnLFxuICB1cGRhdGVfZXN0aW1hdGVkX2hvdXJzOiAndXBkYXRlRXN0aW1hdGVkSG91cnMnLFxuICB1cGRhdGVfZGVsaXZlcmFibGU6ICd1cGRhdGVEZWxpdmVyYWJsZScsXG4gIGNyZWF0ZV9ob3VyOiAnbG9nSG91cnMnLFxuICBjcmVhdGVfaG91cnM6ICdsb2dIb3VycycsXG4gIGNyZWF0ZV9jaGVja2xpc3Q6ICdjcmVhdGVDaGVja2xpc3QnLFxuICBnZXRfdGFza19kYXRlX2hvdXJzOiAncXVlcnlIb3VycycsXG4gIGNvbmZpZ3VyZV9hZ2VudF9hY2Nlc3M6ICdjb25maWd1cmVBZ2VudEFjY2VzcycsXG4gIHNlbmRfdGFza19tZXNzYWdlOiAnc2VuZFRhc2tNZXNzYWdlJyxcbiAgZGVsZXRlX2NoZWNrbGlzdF9pdGVtOiAnZGVsZXRlQ2hlY2tsaXN0SXRlbScsXG4gIHJlbW92ZV90YXNrX3R5cGU6ICdyZW1vdmVUYXNrVHlwZScsXG4gIHJlbW92ZV90YXNrX2xhYmVsOiAncmVtb3ZlTGFiZWwnLFxuICBjb3VudF9kZWxpdmVyYWJsZTogJ3VwZGF0ZURlbGl2ZXJhYmxlQ291bnQnLFxuICBjcmVhdGVfcmV3b3JrOiAnY3JlYXRlUmV3b3JrJyxcbiAgdXBkYXRlX3Jld29yazogJ3VwZGF0ZVJld29yaycsXG4gIGdldF9wcm9qZWN0X3dpdGhfdGFza3NfaW5mbzogJ3JlYWRQcm9qZWN0VGFza3MnLFxuICBnZXRfdGFzazogJ3JlYWRUYXNrJyxcbiAgZ2V0X3Rhc2tfaGlzdG9yeTogJ3JlYWRUYXNrJyxcbiAgZ2V0X3Rhc2tfbGFiZWxzOiAncmVhZFRhc2snLFxuICBnZXRfdGFza190eXBlczogJ3JlYWRUYXNrVHlwZXMnLFxuICBnZXRfdGFza190eXBlX2NhdGVnb3JpZXM6ICdyZWFkVGFza1R5cGVzJyxcbiAgZ2V0X3Byb2plY3RfZmVlX2NvbnN1bXB0aW9uOiAncmVhZFByb2plY3QnLFxuICBnZXRfcHJvamVjdF90YWJfZXZvbHV0aW9uOiAncmVhZFByb2plY3QnLFxuICBnZXRfcHJvamVjdF90YWJfZXZvbHV0aW9uX2Nvc3RzOiAncmVhZFByb2plY3QnLFxuICBnZXRfcHJvamVjdF9wZXJmb3JtYW5jZV90YWJfdGltZV9ieV9ncm91cGVkOiAncmVhZFByb2plY3QnLFxuICBnZXRfZGVsaXZlcmFibGVfYnlfcHJvamVjdF9pZDogJ3JlYWRQcm9qZWN0JyxcbiAgZ2V0X3Jld29ya19ieV9wcm9qZWN0X2lkOiAncmVhZFByb2plY3QnLFxuICBnZXRfY29udHJhY3Q6ICdyZWFkUHJvamVjdCcsXG4gIGxpc3RfcHJvamVjdHM6ICdsaXN0UHJvamVjdHMnLFxuICBnZXRfY2xpZW50OiAncmVhZENsaWVudCcsXG4gIGdldF9jbGllbnRfc3RhdHVzZXM6ICdyZWFkQ2xpZW50JyxcbiAgZ2V0X2NsaWVudHNfd2l0aF9maWx0ZXJzOiAncmVhZENsaWVudCcsXG4gIGxpc3RfY2xpZW50czogJ3JlYWRDbGllbnQnLFxuICBnZXRfaG91cnM6ICdyZWFkSG91cnMnLFxuICBnZXRfaG91cnNfY2FwYWNpdHk6ICdyZWFkSG91cnMnLFxuICBnZXRfcHJvamVjdF9ob3Vyc19ieV91c2VyX2FuZF90YXNrOiAncmVhZEhvdXJzJyxcbiAgZ2V0X3Byb2plY3RfaG91cnNfYnlfdXNlcl9tb250aGx5OiAncmVhZEhvdXJzJyxcbiAgZ2V0X3dvcmtpbmdfdGltZTogJ3JlYWRIb3VycycsXG4gIGdldF9jaGFyZ2luZ19wZXJpb2Q6ICdyZWFkSG91cnMnLFxuICBzdW1tYXJpemVfaG91cnM6ICdyZWFkSG91cnMnLFxuICByZWNvbW1lbmRfaG91cnNfZnJvbV9wbGFubmVyOiAncmVhZEhvdXJzJyxcbiAgZ2V0X3BsYW5uZXI6ICdyZWFkUGxhbm5lcicsXG4gIGxpc3RfdXNlcnM6ICdyZWFkVXNlcnMnLFxuICBnZXRfZGFzaGJvYXJkX2J5X2NvbXBhbnk6ICdyZWFkTWV0cmljcycsXG4gIGdldF9kYXNoYm9hcmRfZGF0YTogJ3JlYWRNZXRyaWNzJyxcbiAgZ2V0X3JlY2VudF9hY3Rpdml0eTogJ3JlYWRNZXRyaWNzJyxcbiAgbGlzdF9jb250cmFjdHM6ICdyZWFkQmlsbGluZycsXG4gIGxpc3RfZmVlczogJ3JlYWRCaWxsaW5nJyxcbiAgbGlzdF9pbnZvaWNlczogJ3JlYWRCaWxsaW5nJyxcbiAgY2hlY2tsaXN0OiAncmVhZENoZWNrbGlzdCcsXG4gIHJld29ya3M6ICdyZWFkUmV3b3JrcycsXG4gIHRhdmlseV9zZWFyY2g6ICdzZWFyY2hXZWInLFxuICBnZXRfdXNlcl9pZDogJ3JlYWRSZWZlcmVuY2VzJyxcbiAgZ2V0X2NsaWVudF9pZF9iYXNlZF9vbl9uYW1lOiAncmVhZFJlZmVyZW5jZXMnLFxuICBnZXRfcHJvamVjdF9pZF9iYXNlZF9vbl9uYW1lOiAncmVhZFJlZmVyZW5jZXMnLFxuICBnZXRfdGFza19pZF9iYXNlZF9vbl90aXRsZTogJ3JlYWRSZWZlcmVuY2VzJyxcbiAgZ2V0X3VzZXJfcG9zaXRpb25faWRfYmFzZWRfb25fbmFtZTogJ3JlYWRSZWZlcmVuY2VzJyxcbiAgZ2V0X2xhYmVsX2NvbG9yczogJ3JlYWRSZWZlcmVuY2VzJyxcbiAgZ2V0X21vZGVsczogJ3JlYWRSZWZlcmVuY2VzJyxcbiAgY3JlYXRlX3Byb2plY3Q6ICdjcmVhdGVQcm9qZWN0JyxcbiAgY3JlYXRlX2NsaWVudDogJ2NyZWF0ZUNsaWVudCcsXG4gIGVkaXRfY2xpZW50OiAnZWRpdENsaWVudCcsXG4gIGNyZWF0ZV91c2VyOiAnY3JlYXRlVXNlcicsXG4gIGVkaXRfdXNlcjogJ2VkaXRVc2VyJyxcbiAgY3JlYXRlX3Rhc2tfdHlwZTogJ2NyZWF0ZVRhc2tUeXBlJyxcbiAgZWRpdF9ob3VyOiAnZWRpdEhvdXJzJyxcbiAgZGVsZXRlX2hvdXI6ICdkZWxldGVIb3VycycsXG4gIGRlbGV0ZV9ob3VyczogJ2RlbGV0ZUhvdXJzJyxcbiAgY3JlYXRlX2FsbG9jYXRpb246ICdjcmVhdGVBbGxvY2F0aW9uJyxcbiAgZWRpdF9hbGxvY2F0aW9uOiAnZWRpdEFsbG9jYXRpb24nLFxuICBkZWxldGVfYWxsb2NhdGlvbjogJ2RlbGV0ZUFsbG9jYXRpb24nLFxuICBhcmNoaXZlX3Byb2plY3Q6ICdlZGl0UHJvamVjdCcsXG4gIGFzc2lnbl9wcm9qZWN0X21lbWJlcnM6ICdlZGl0UHJvamVjdCcsXG4gIHVuYXNzaWduX3Byb2plY3RfbWVtYmVyczogJ2VkaXRQcm9qZWN0JyxcbiAgZGVsZXRlX3Rhc2tfYXR0YWNobWVudDogJ2VkaXRUYXNrJyxcbiAgc2V0X3Rhc2tfZmF2b3JpdGU6ICdlZGl0VGFzaycsXG4gIGdlbmVyYXRlX3Jlc3VtZTogJ3JlYWRQcm9qZWN0JyxcbiAgZ2V0X2JyYW5kc19mcm9tX2NsaWVudDogJ3JlYWRDbGllbnQnLFxuICBnZXRfY2FsZW5kYXJfaW50ZWdyYXRpb246ICdyZWFkQ2FsZW5kYXInLFxuICBsaXN0X2NhbGVuZGFyX2V2ZW50czogJ3JlYWRDYWxlbmRhcicsXG4gIGdldF9jYXBhY2l0eV9wbGFubmluZzogJ3JlYWRQbGFubmVyJyxcbiAgZ2V0X2NoZWNrbGlzdDogJ3JlYWRDaGVja2xpc3QnLFxuICBnZXRfZmFxX3Byb2ZpdGFiaWxpdHlfaW5jb21lOiAncmVhZFByb2plY3QnLFxuICBnZXRfZmFxX3Byb2plY3RfcHJvZ3Jlc3M6ICdyZWFkUHJvamVjdCcsXG4gIGdldF9oZWxwOiAncmVhZEhlbHAnLFxuICBnZXRfbGVhZDogJ3JlYWRDbGllbnQnLFxuICBnZXRfbXlfaG91cnM6ICdyZWFkSG91cnMnLFxuICBnZXRfcHJvamVjdF9kZWNpc2lvbnM6ICdyZWFkUHJvamVjdCcsXG4gIGdldF9wcm9qZWN0X2hpc3RvcnlfaW5mbzogJ3JlYWRQcm9qZWN0JyxcbiAgZ2V0X3Byb2plY3RfbGFiZWxzOiAncmVhZFByb2plY3QnLFxuICBnZXRfcHJvamVjdHNfd2l0aF9maWx0ZXJzOiAnbGlzdFByb2plY3RzJyxcbiAgZ2V0X3JlY2VudF9jbGllbnRzOiAncmVhZENsaWVudCcsXG4gIGdldF9yZWNlbnRfcHJvamVjdHM6ICdsaXN0UHJvamVjdHMnLFxuICBnZXRfcmV3b3Jrc193aXRoX2ZpbHRlcnM6ICdyZWFkUmV3b3JrcycsXG4gIGdldF90YXNrX2F0dGFjaG1lbnRzOiAncmVhZFRhc2snLFxuICBnZXRfdGFza19mb2xsb3dlcnM6ICdyZWFkVGFzaycsXG4gIGdldF90YXNrX2hvdXJzX2NoYXJnZWQ6ICdyZWFkSG91cnMnLFxuICBnZXRfdGFza19saW5rczogJ3JlYWRUYXNrJyxcbiAgZ2V0X3Rhc2tfbWVzc2FnZXM6ICdyZWFkVGFzaycsXG4gIGdldF90YXNrX3Jld29ya3M6ICdyZWFkUmV3b3JrcycsXG4gIGdldF90YXNrX3N1YnRhc2tzOiAncmVhZFRhc2snLFxuICBsaXN0X3Rhc2tzOiAncmVhZFRhc2snLFxuICBnZXRfdGVhbTogJ3JlYWRUZWFtJyxcbiAgZ2V0X3RlYW1fbWVtYmVyczogJ3JlYWRUZWFtJyxcbiAgbGlzdF90ZWFtczogJ3JlYWRUZWFtJyxcbiAgZ2V0X3VzZXJfYWN0aXZpdHk6ICdyZWFkTWV0cmljcycsXG4gIGdsb2JhbF9zZWFyY2g6ICdnbG9iYWxTZWFyY2gnLFxuXG4gIGhhbmRvZmZfdG9fb3JjaGVzdHJhdG9yOiAnYXNrQW5vdGhlclNwZWNpYWxpc3QnLFxuICBnZXRfc2tpbGw6ICd1c2VTa2lsbCcsXG59XG5cbmV4cG9ydCBjb25zdCBhY3Rpb25NZXNzYWdlS2V5ID0gKGFjdGlvbklkOiBzdHJpbmcsIHRlbnNlOiBBY3Rpb25UZW5zZSk6IHN0cmluZyA9PlxuICBgY2hhdC5hY3Rpdml0eS5hY3Rpb25zLiR7YWN0aW9uSWR9LiR7dGVuc2V9YFxuXG5leHBvcnQgY29uc3QgbG9va3VwVG9vbEFjdGlvbklkID0gKHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgVE9PTF9BQ1RJT05fSURTW25vcm1hbGl6ZUhpdGxUb29sTmFtZSh0b29sTmFtZSldXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlVG9vbEFjdGlvbkxhYmVsRnJvbURpY3Rpb25hcnkgPSAoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRyYW5zbGF0ZTogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcsXG4gIHRlbnNlOiBBY3Rpb25UZW5zZVxuKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGFjdGlvbklkID0gbG9va3VwVG9vbEFjdGlvbklkKHRvb2xOYW1lKVxuICByZXR1cm4gYWN0aW9uSWQgPyB0cmFuc2xhdGUoYWN0aW9uTWVzc2FnZUtleShhY3Rpb25JZCwgdGVuc2UpKSA6IG51bGxcbn1cblxuY29uc3QgSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZID0gT2JqZWN0LmtleXMoVE9PTF9BQ1RJT05fSURTKS5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKVxuXG4vKipcbiAqIERldGVjdGEgaWRlbnRpZmljYWRvcmVzIGNydWRvcyBkZSB0b29sIChzbmFrZV9jYXNlIC8ga2ViYWItY2FzZSBzaW4gZXNwYWNpb3MpIHF1ZSBlbCBiYWNrZW5kXG4gKiBwdWVkZSBlbnZpYXIgY3VhbmRvIGHDum4gbm8gaGF5IHRyYWR1Y2Npw7NuLiBObyBkZWJlbiBtb3N0cmFyc2UgYWwgdXN1YXJpbzogc2UgdXNhIHVuIGZhbGxiYWNrXG4gKiBnZW7DqXJpY28gaGFzdGEgcXVlIGVsIG5vbWJyZSBzZSBhZ3JlZ3VlIGFsIGRpY2Npb25hcmlvLlxuICovXG5leHBvcnQgY29uc3QgbG9va3NMaWtlUmF3VG9vbE5hbWUgPSAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiA9PiAvXlthLXowLTldKyg/OltfLV1bYS16MC05XSspKyQvaS50ZXN0KG1lc3NhZ2UudHJpbSgpKVxuXG4vKiogTWVuc2FqZXMgZ2Vuw6lyaWNvcyBkZWwgYmFja2VuZCBjdWFuZG8gbm8gaGF5IGRldGFsbGUgZGUgdG9vbCAoY29udGludWUtdGhyZWFkKS4gKi9cbmV4cG9ydCBjb25zdCBpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG1lc3NhZ2UudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIChcbiAgICBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ2VqZWN1dGFuZG8gYWNjacOzbiBhcHJvYmFkYScpIHx8XG4gICAgbm9ybWFsaXplZC5zdGFydHNXaXRoKCdleGVjdXRpbmcgYXBwcm92ZWQgYWN0aW9uJykgfHxcbiAgICBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ2V4ZWN1dGFuZG8gYcOnw6NvIGFwcm92YWRhJylcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlID0gKG5vZGVNZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vZGVNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIG51bGxcblxuICBpZiAoVE9PTF9BQ1RJT05fSURTW25vcm1hbGl6ZWRdKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIGNvbnN0IGFzVG9vbE5hbWUgPSBub3JtYWxpemVIaXRsVG9vbE5hbWUobm9ybWFsaXplZC5yZXBsYWNlKC9cXHMrL2csICdfJykpXG4gIGlmIChUT09MX0FDVElPTl9JRFNbYXNUb29sTmFtZV0pIHtcbiAgICByZXR1cm4gYXNUb29sTmFtZVxuICB9XG5cbiAgY29uc3QgbWF0Y2hlZFRvb2wgPSBISVRMX1RPT0xfTkFNRVNfQllfU1BFQ0lGSUNJVFkuZmluZCh0b29sTmFtZSA9PiBub3JtYWxpemVkLmluY2x1ZGVzKHRvb2xOYW1lKSlcbiAgcmV0dXJuIG1hdGNoZWRUb29sID8/IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gIG1lc3NhZ2VJZD86IHN0cmluZ1xuICBtZXNzYWdlVGV4dD86IHN0cmluZ1xuICBhcHByb3ZhbD86IEFwcHJvdmFsUmVxdWVzdFxuICBwZW5kaW5nQWN0aW9ucz86IFBlbmRpbmdBY3Rpb25bXVxuICB0aHJlYWRJZHM/OiBzdHJpbmdbXVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkID0gKFxuICBjb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHRocmVhZElkPzogc3RyaW5nXG4pOiBQZW5kaW5nQWN0aW9uW10gPT4ge1xuICBjb25zdCBwZW5kaW5nID0gY29udGV4dD8ucGVuZGluZ0FjdGlvbnMgPz8gY29udGV4dD8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyA/PyBbXVxuICBpZiAoIXBlbmRpbmcubGVuZ3RoKSByZXR1cm4gW11cblxuICBpZiAodGhyZWFkSWQpIHtcbiAgICBjb25zdCBmb3JUaHJlYWQgPSBwZW5kaW5nLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLnRocmVhZF9pZCA9PT0gdGhyZWFkSWQpXG4gICAgaWYgKGZvclRocmVhZC5sZW5ndGgpIHJldHVybiBmb3JUaHJlYWRcbiAgfVxuXG4gIGlmIChjb250ZXh0Py50aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBwZW5kaW5nLmZpbHRlcihhY3Rpb24gPT4gY29udGV4dC50aHJlYWRJZHM/LmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICB9XG5cbiAgcmV0dXJuIHBlbmRpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGRldGVjdFRvb2xzRnJvbVBlbmRpbmdBY3Rpb25zID0gKGFjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZ1tdID0+IFtcbiAgLi4ubmV3IFNldChhY3Rpb25zLm1hcChhY3Rpb24gPT4gbm9ybWFsaXplSGl0bFRvb2xOYW1lKGFjdGlvbi50b29sX25hbWUpKS5maWx0ZXIoQm9vbGVhbikpLFxuXVxuXG5leHBvcnQgY29uc3QgZ2V0TWVzc2FnZUtleXNGb3JQaGFzZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSwgYXR0YWNobWVudHNDb3VudCA9IDApOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGwgPT4ge1xuICBzd2l0Y2ggKHBoYXNlKSB7XG4gICAgY2FzZSAnZ2VuZXJhdGluZyc6XG4gICAgICByZXR1cm4gR0VORVJBVElOR19NRVNTQUdFX0tFWVNcbiAgICBjYXNlICd0aGlua2luZyc6XG4gICAgICByZXR1cm4gVEhJTktJTkdfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAnc2VhcmNoJzpcbiAgICAgIHJldHVybiBTRUFSQ0hfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAnZGVlcF9zZWFyY2gnOlxuICAgICAgcmV0dXJuIERFRVBfU0VBUkNIX01FU1NBR0VfS0VZU1xuICAgIGNhc2UgJ2F0dGFjaG1lbnQnOlxuICAgICAgcmV0dXJuIGF0dGFjaG1lbnRzQ291bnQgPiAxID8gQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNfUExVUkFMIDogQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBRUEsU0FBU0EscUJBQXFCLFFBQVEsaUJBQWlCO0FBRXZELElBQU1DLHFCQUFxQixHQUFHLENBQzVCLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsaUNBQWlDLENBQ3pCO0FBRVYsT0FBTyxJQUFNQyx1QkFBdUIsR0FBRyxDQUNyQyxzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLG9DQUFvQyxDQUM1QjtBQUVWLE9BQU8sSUFBTUMsbUJBQW1CLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxrQ0FBa0MsQ0FBVTtBQUVqSCxPQUFPLElBQU1DLHdCQUF3QixHQUFHLENBQ3RDLG9DQUFvQyxFQUNwQyx3Q0FBd0Ms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