@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 _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
@@ -15,7 +14,7 @@ import { USERS_DIRECTORY } from '../services/query/usersDirectoryQuery';
15
14
  import { SEARCH_QUERY_DEBOUNCE_MS } from '../constants/config';
16
15
  import { useDebounce } from './useDebounce';
17
16
  import { useT } from './useT';
18
- import { buildFiltersForType, buildSearchEntitiesExtra, buildUsersDirectoryFilters, mapClientToItem, mapCorUserToUserItem, mapMcpSlugsToItems, mapRecentTaskToItem, mapSearchToItem, mapUserToItem, normalizePositiveInt, normalizeProjectsFallbackRecord, normalizeTaskFamilyRecord, resolveClientsPagination, resolveProjectFallbackPagination, resolveTaskFallbackPagination, resolveUsersPagination, appendUniqueMentionItems, buildProjectFallbackArguments, buildTaskFamilyScopeFilter, buildUserDirectoryItems, canLoadMoreEntitySearch, resolveEntitySearchRecentsTrigger } from './useEntitySearch.helpers';
17
+ import { buildFiltersForType, buildSearchEntitiesExtra, buildUsersDirectoryFilters, mapClientToItem, mapMcpSlugsToItems, mapRecentTaskToItem, mapSearchToItem, mapUserToItem, normalizePositiveInt, normalizeProjectsFallbackRecord, normalizeTaskFamilyRecord, resolveClientsPagination, resolveProjectFallbackPagination, resolveTaskFallbackPagination, resolveUsersPagination, appendUniqueMentionItems, buildProjectFallbackArguments, buildTaskFamilyScopeFilter, buildUserDirectoryItems, canLoadMoreEntitySearch, resolveEntitySearchRecentsTrigger, buildRecentTaskFilters, buildUserRecentsWithMe, mergeUsersDirectoryLoadMore, resolveDebouncedSearchPaginationSource, isRecentsFetchGenerationStale } from './useEntitySearch.helpers';
19
18
  export var useEntitySearch = function useEntitySearch(type, scope) {
20
19
  var _scope$mcpSlugs;
21
20
  var corUser = useUser();
@@ -148,7 +147,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
148
147
  _useLazyQuery0 = _slicedToArray(_useLazyQuery9, 1),
149
148
  fetchProjectsFallback = _useLazyQuery0[0];
150
149
  var fetchRecent = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
151
- var generation, _stableScope$mcpSlugs, slugs, _fallbackData$project, _fallbackData$project2, argumentsFilter, _yield$fetchProjectsF, fallbackData, mapped, recentTaskFilters, data, taskItems, _fallbackData$taskFam, _fallbackData$taskFam2, scopeFilter, _yield$fetchTaskFamil, _fallbackData, _data$users$data, _data$users, _yield$fetchUsersDire, _data, _mapped, meItem, withoutMe, _t;
150
+ var generation, _stableScope$mcpSlugs, slugs, _fallbackData$project, _fallbackData$project2, argumentsFilter, _yield$fetchProjectsF, fallbackData, mapped, data, taskItems, _fallbackData$taskFam, _fallbackData$taskFam2, scopeFilter, _yield$fetchTaskFamil, _fallbackData, _data$users$data, _data$users, _yield$fetchUsersDire, _data, _t;
152
151
  return _regeneratorRuntime.wrap(function (_context) {
153
152
  while (1) switch (_context.prev = _context.next) {
154
153
  case 0:
@@ -198,7 +197,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
198
197
  case 4:
199
198
  _yield$fetchProjectsF = _context.sent;
200
199
  fallbackData = _yield$fetchProjectsF.data;
201
- if (!(generation !== recentsFetchGenerationRef.current)) {
200
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
202
201
  _context.next = 5;
203
202
  break;
204
203
  }
@@ -212,7 +211,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
212
211
  setHideRecentsLabel(mapped.length > 0);
213
212
  setActivePaginationSource('project-fallback');
214
213
  syncProjectFallbackPagination(fallbackData);
215
- if (!(generation !== recentsFetchGenerationRef.current)) {
214
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
216
215
  _context.next = 6;
217
216
  break;
218
217
  }
@@ -226,20 +225,11 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
226
225
  _context.next = 15;
227
226
  break;
228
227
  }
229
- if (stableScope.agentEntity === 'project') {
230
- recentTaskFilters = {
231
- projectId: stableScope.projectId
232
- };
233
- } else if (stableScope.agentEntity === 'client') {
234
- recentTaskFilters = {
235
- clientId: stableScope.clientId
236
- };
237
- }
238
228
  _context.next = 8;
239
- return getRecentTasks(recentTaskFilters);
229
+ return getRecentTasks(buildRecentTaskFilters(stableScope));
240
230
  case 8:
241
231
  data = _context.sent;
242
- if (!(generation !== recentsFetchGenerationRef.current)) {
232
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
243
233
  _context.next = 9;
244
234
  break;
245
235
  }
@@ -268,7 +258,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
268
258
  case 10:
269
259
  _yield$fetchTaskFamil = _context.sent;
270
260
  _fallbackData = _yield$fetchTaskFamil.data;
271
- if (!(generation !== recentsFetchGenerationRef.current)) {
261
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
272
262
  _context.next = 11;
273
263
  break;
274
264
  }
@@ -289,7 +279,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
289
279
  setActivePaginationSource('none');
290
280
  setHasMore(false);
291
281
  case 13:
292
- if (!(generation !== recentsFetchGenerationRef.current)) {
282
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
293
283
  _context.next = 14;
294
284
  break;
295
285
  }
@@ -313,33 +303,26 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
313
303
  case 16:
314
304
  _yield$fetchUsersDire = _context.sent;
315
305
  _data = _yield$fetchUsersDire.data;
316
- if (!(generation !== recentsFetchGenerationRef.current)) {
306
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
317
307
  _context.next = 17;
318
308
  break;
319
309
  }
320
310
  return _context.abrupt("return");
321
311
  case 17:
322
- _mapped = ((_data$users$data = _data === null || _data === void 0 || (_data$users = _data.users) === null || _data$users === void 0 ? void 0 : _data$users.data) !== null && _data$users$data !== void 0 ? _data$users$data : []).map(function (u) {
323
- return mapUserToItem(u, '');
324
- });
325
- if (!(generation !== recentsFetchGenerationRef.current)) {
312
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
326
313
  _context.next = 18;
327
314
  break;
328
315
  }
329
316
  return _context.abrupt("return");
330
317
  case 18:
331
- meItem = mapCorUserToUserItem(corUser, '', t('contextMention.me'));
332
- withoutMe = _mapped.filter(function (item) {
333
- return String(item.id) !== String(meItem.id);
334
- });
335
- setItems([meItem].concat(_toConsumableArray(withoutMe)));
318
+ setItems(buildUserRecentsWithMe((_data$users$data = _data === null || _data === void 0 || (_data$users = _data.users) === null || _data$users === void 0 ? void 0 : _data$users.data) !== null && _data$users$data !== void 0 ? _data$users$data : [], corUser, t('contextMention.me')));
336
319
  syncUsersPagination(_data);
337
320
  setHideRecentsLabel(false);
338
321
  setActivePaginationSource('users');
339
322
  _context.next = 21;
340
323
  break;
341
324
  case 19:
342
- if (!(generation !== recentsFetchGenerationRef.current)) {
325
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
343
326
  _context.next = 20;
344
327
  break;
345
328
  }
@@ -356,7 +339,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
356
339
  case 22:
357
340
  _context.prev = 22;
358
341
  _t = _context["catch"](2);
359
- if (!(generation !== recentsFetchGenerationRef.current)) {
342
+ if (!isRecentsFetchGenerationStale(generation, recentsFetchGenerationRef.current)) {
360
343
  _context.next = 23;
361
344
  break;
362
345
  }
@@ -400,7 +383,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
400
383
  perPage: 20
401
384
  }
402
385
  });
403
- setActivePaginationSource('clients-search');
386
+ setActivePaginationSource(resolveDebouncedSearchPaginationSource(type));
404
387
  } else if (type === 'user') {
405
388
  fetchUsersDirectory({
406
389
  variables: {
@@ -408,7 +391,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
408
391
  page: 1
409
392
  }
410
393
  });
411
- setActivePaginationSource('users');
394
+ setActivePaginationSource(resolveDebouncedSearchPaginationSource(type));
412
395
  } else if (type === 'project' || type === 'task') {
413
396
  var filters = buildFiltersForType(type);
414
397
  var extra = buildSearchEntitiesExtra(type, stableScope);
@@ -420,7 +403,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
420
403
  extra: extra
421
404
  } : {})
422
405
  });
423
- setActivePaginationSource('none');
406
+ setActivePaginationSource(resolveDebouncedSearchPaginationSource(type));
424
407
  setHasMore(false);
425
408
  }
426
409
  }, [debouncedSearchValue, type, stableScope, fetchSearchEntities, fetchSearchClients, fetchUsersDirectory]);
@@ -503,7 +486,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
503
486
  case 3:
504
487
  _yield$fetchUsersDire2 = _context2.sent;
505
488
  data = _yield$fetchUsersDire2.data;
506
- if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
489
+ if (!isRecentsFetchGenerationStale(loadMoreBaselineGen, recentsFetchGenerationRef.current)) {
507
490
  _context2.next = 4;
508
491
  break;
509
492
  }
@@ -513,21 +496,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
513
496
  return mapUserToItem(u, q);
514
497
  });
515
498
  setItems(function (prev) {
516
- if (!q) {
517
- var _prev$;
518
- var meItem = ((_prev$ = prev[0]) === null || _prev$ === void 0 ? void 0 : _prev$.type) === 'user' ? prev[0] : mapCorUserToUserItem(corUser, '', t('contextMention.me'));
519
- var existingIds = new Set(prev.map(function (item) {
520
- return String(item.id);
521
- }));
522
- var appended = nextItems.filter(function (item) {
523
- return !existingIds.has(String(item.id));
524
- });
525
- var withoutMe = prev.filter(function (item) {
526
- return String(item.id) !== String(meItem.id);
527
- });
528
- return [meItem].concat(_toConsumableArray(withoutMe), _toConsumableArray(appended));
529
- }
530
- return appendUniqueMentionItems(prev, nextItems);
499
+ return mergeUsersDirectoryLoadMore(prev, nextItems, corUser, q, t('contextMention.me'));
531
500
  });
532
501
  syncUsersPagination(data);
533
502
  _context2.next = 14;
@@ -550,7 +519,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
550
519
  case 6:
551
520
  _yield$fetchSearchCli = _context2.sent;
552
521
  _data2 = _yield$fetchSearchCli.data;
553
- if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
522
+ if (!isRecentsFetchGenerationStale(loadMoreBaselineGen, recentsFetchGenerationRef.current)) {
554
523
  _context2.next = 7;
555
524
  break;
556
525
  }
@@ -586,7 +555,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
586
555
  case 9:
587
556
  _yield$fetchTaskFamil2 = _context2.sent;
588
557
  _data3 = _yield$fetchTaskFamil2.data;
589
- if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
558
+ if (!isRecentsFetchGenerationStale(loadMoreBaselineGen, recentsFetchGenerationRef.current)) {
590
559
  _context2.next = 10;
591
560
  break;
592
561
  }
@@ -621,7 +590,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
621
590
  case 12:
622
591
  _yield$fetchProjectsF2 = _context2.sent;
623
592
  _data4 = _yield$fetchProjectsF2.data;
624
- if (!(loadMoreBaselineGen !== recentsFetchGenerationRef.current)) {
593
+ if (!isRecentsFetchGenerationStale(loadMoreBaselineGen, recentsFetchGenerationRef.current)) {
625
594
  _context2.next = 13;
626
595
  break;
627
596
  }
@@ -697,4 +666,4 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
697
666
  fetchRecent: fetchRecent
698
667
  };
699
668
  };
700
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlBST0pFQ1RTX0ZBTExCQUNLIiwiU0VBUkNIX0VOVElUSUVTIiwiVEFTS19GQU1JTFlfRkFMTEJBQ0siLCJTRUFSQ0hfQ0xJRU5UUyIsIlVTRVJTX0RJUkVDVE9SWSIsIlNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyIsInVzZURlYm91bmNlIiwidXNlVCIsImJ1aWxkRmlsdGVyc0ZvclR5cGUiLCJidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEiLCJidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyIsIm1hcENsaWVudFRvSXRlbSIsIm1hcENvclVzZXJUb1VzZXJJdGVtIiwibWFwTWNwU2x1Z3NUb0l0ZW1zIiwibWFwUmVjZW50VGFza1RvSXRlbSIsIm1hcFNlYXJjaFRvSXRlbSIsIm1hcFVzZXJUb0l0ZW0iLCJub3JtYWxpemVQb3NpdGl2ZUludCIsIm5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQiLCJub3JtYWxpemVUYXNrRmFtaWx5UmVjb3JkIiwicmVzb2x2ZUNsaWVudHNQYWdpbmF0aW9uIiwicmVzb2x2ZVByb2plY3RGYWxsYmFja1BhZ2luYXRpb24iLCJyZXNvbHZlVGFza0ZhbGxiYWNrUGFnaW5hdGlvbiIsInJlc29sdmVVc2Vyc1BhZ2luYXRpb24iLCJhcHBlbmRVbmlxdWVNZW50aW9uSXRlbXMiLCJidWlsZFByb2plY3RGYWxsYmFja0FyZ3VtZW50cyIsImJ1aWxkVGFza0ZhbWlseVNjb3BlRmlsdGVyIiwiYnVpbGRVc2VyRGlyZWN0b3J5SXRlbXMiLCJjYW5Mb2FkTW9yZUVudGl0eVNlYXJjaCIsInJlc29sdmVFbnRpdHlTZWFyY2hSZWNlbnRzVHJpZ2dlciIsInVzZUVudGl0eVNlYXJjaCIsInR5cGUiLCJzY29wZSIsIl9zY29wZSRtY3BTbHVncyIsImNvclVzZXIiLCJfdXNlVCIsInQiLCJyZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VhcmNoVmFsdWUiLCJzZXRTZWFyY2hWYWx1ZSIsImRlYm91bmNlZFNlYXJjaFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpdGVtcyIsInNldEl0ZW1zIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiZXJyb3IiLCJzZXRFcnJvciIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwiaGlkZVJlY2VudHNMYWJlbCIsInNldEhpZGVSZWNlbnRzTGFiZWwiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJoYXNNb3JlIiwic2V0SGFzTW9yZSIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJpc0xvYWRpbmdNb3JlIiwic2V0SXNMb2FkaW5nTW9yZSIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJjdXJyZW50UGFnZSIsInNldEN1cnJlbnRQYWdlIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UiLCJzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlIiwibWNwU2x1Z3NLZXkiLCJtY3BTbHVncyIsImpvaW4iLCJzaG93UHJvamVjdE5hbWVJblRhc2tSb3ciLCJhZ2VudEVudGl0eSIsInN0YWJsZVNjb3BlIiwiX3Njb3BlJGNsaWVudElkIiwiX3Njb3BlJHByb2plY3RJZCIsIl9zY29wZSRtY3BTbHVnczIiLCJfc2NvcGUkYWdlbnRFbnRpdHkiLCJjbGllbnRJZCIsInByb2plY3RJZCIsIl91c2VMYXp5UXVlcnkiLCJ2YXJpYWJsZXMiLCJsaW1pdCIsImZldGNoUG9saWN5IiwiX3VzZUxhenlRdWVyeTIiLCJmZXRjaFNlYXJjaEVudGl0aWVzIiwiX3VzZUxhenlRdWVyeTIkIiwic2VhcmNoRGF0YSIsImRhdGEiLCJzZWFyY2hMb2FkaW5nIiwic2VhcmNoRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5MyIsIl91c2VMYXp5UXVlcnk0IiwiZmV0Y2hTZWFyY2hDbGllbnRzIiwiX3VzZUxhenlRdWVyeTQkIiwiY2xpZW50c0RhdGEiLCJjbGllbnRzTG9hZGluZyIsImNsaWVudHNFcnJvciIsIl91c2VMYXp5UXVlcnk1IiwiX3VzZUxhenlRdWVyeTYiLCJmZXRjaFVzZXJzRGlyZWN0b3J5IiwiX3VzZUxhenlRdWVyeTYkIiwidXNlcnNEYXRhIiwidXNlcnNMb2FkaW5nIiwidXNlcnNFcnJvciIsInN5bmNVc2Vyc1BhZ2luYXRpb24iLCJwYXlsb2FkIiwiX3Jlc29sdmVVc2Vyc1BhZ2luYXRpIiwicGFnZSIsIm1vcmUiLCJzeW5jQ2xpZW50c1BhZ2luYXRpb24iLCJfcmVzb2x2ZUNsaWVudHNQYWdpbmEiLCJzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbiIsIl9yZXNvbHZlVGFza0ZhbGxiYWNrUCIsInN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uIiwiX3Jlc29sdmVQcm9qZWN0RmFsbGJhIiwiX3VzZUxhenlRdWVyeTciLCJfdXNlTGF6eVF1ZXJ5OCIsImZldGNoVGFza0ZhbWlseUZhbGxiYWNrIiwiX3VzZUxhenlRdWVyeTkiLCJfdXNlTGF6eVF1ZXJ5MCIsImZldGNoUHJvamVjdHNGYWxsYmFjayIsImZldGNoUmVjZW50IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJnZW5lcmF0aW9uIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzIiwic2x1Z3MiLCJfZmFsbGJhY2tEYXRhJHByb2plY3QiLCJfZmFsbGJhY2tEYXRhJHByb2plY3QyIiwiYXJndW1lbnRzRmlsdGVyIiwiX3lpZWxkJGZldGNoUHJvamVjdHNGIiwiZmFsbGJhY2tEYXRhIiwibWFwcGVkIiwicmVjZW50VGFza0ZpbHRlcnMiLCJ0YXNrSXRlbXMiLCJfZmFsbGJhY2tEYXRhJHRhc2tGYW0iLCJfZmFsbGJhY2tEYXRhJHRhc2tGYW0yIiwic2NvcGVGaWx0ZXIiLCJfeWllbGQkZmV0Y2hUYXNrRmFtaWwiLCJfZmFsbGJhY2tEYXRhIiwiX2RhdGEkdXNlcnMkZGF0YSIsIl9kYXRhJHVzZXJzIiwiX3lpZWxkJGZldGNoVXNlcnNEaXJlIiwiX2RhdGEiLCJfbWFwcGVkIiwibWVJdGVtIiwid2l0aG91dE1lIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImN1cnJlbnQiLCJhYnJ1cHQiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwicGVyUGFnZSIsInNlbnQiLCJwcm9qZWN0cyIsIm1hcCIsImZpbHRlciIsIml0ZW0iLCJsZW5ndGgiLCJ0YXNrIiwiYXJjaGl2ZWQiLCJwYWdpbmF0aW9uIiwib2Zmc2V0Iiwic2l6ZSIsInRhc2tGYW1pbHkiLCJmaWx0ZXJzIiwidXNlcnMiLCJ1IiwiU3RyaW5nIiwiaWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJmaW5pc2giLCJzdG9wIiwicSIsInRyaW0iLCJfc3RhYmxlU2NvcGUkbWNwU2x1Z3MyIiwibmFtZSIsImV4dHJhIiwidW5kZWZpbmVkIiwiX2NsaWVudHNEYXRhJGNsaWVudHMiLCJjbGllbnRzIiwiYyIsIl91c2Vyc0RhdGEkdXNlcnMiLCJzZWFyY2giLCJyIiwibG9hZE1vcmUiLCJfY2FsbGVlMiIsInNhZmVDdXJyZW50UGFnZSIsIm5leHRQYWdlIiwibG9hZE1vcmVCYXNlbGluZUdlbiIsIl9kYXRhJHVzZXJzJGRhdGEyIiwiX2RhdGEkdXNlcnMyIiwiX3lpZWxkJGZldGNoVXNlcnNEaXJlMiIsIm5leHRJdGVtcyIsIl9kYXRhMiRjbGllbnRzJGRhdGEiLCJfZGF0YTIkY2xpZW50cyIsIl95aWVsZCRmZXRjaFNlYXJjaENsaSIsIl9kYXRhMiIsIl9uZXh0SXRlbXMiLCJfZGF0YTMkdGFza0ZhbWlseSRkYXQiLCJfZGF0YTMkdGFza0ZhbWlseSIsIl95aWVsZCRmZXRjaFRhc2tGYW1pbDIiLCJfZGF0YTMiLCJfbmV4dEl0ZW1zMiIsIl9kYXRhNCRwcm9qZWN0cyRkYXRhIiwiX2RhdGE0JHByb2plY3RzIiwiX3lpZWxkJGZldGNoUHJvamVjdHNGMiIsIl9kYXRhNCIsIl9uZXh0SXRlbXMzIiwiX3QyIiwiX2NvbnRleHQyIiwiX3ByZXYkIiwiZXhpc3RpbmdJZHMiLCJTZXQiLCJhcHBlbmRlZCIsImhhcyIsImNvbnNvbGUiLCJzb3VyY2UiLCJmZXRjaFJlY2VudFJlZiIsInJlY2VudHNUcmlnZ2VyIiwidXBkYXRlU2VhcmNoVmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlRW50aXR5U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUxhenlRdWVyeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0UmVjZW50VGFza3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHR5cGUgeyBSZWNlbnRUYXNrSXRlbSB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50VGFza3MvZ2V0UmVjZW50VGFza3MnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IFBST0pFQ1RTX0ZBTExCQUNLLCBTRUFSQ0hfRU5USVRJRVMsIFRBU0tfRkFNSUxZX0ZBTExCQUNLIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvZW50aXR5U2VhcmNoUXVlcnknXG5pbXBvcnQgeyBTRUFSQ0hfQ0xJRU5UUyB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L0NsaWVudFNlYXJjaFF1ZXJ5J1xuaW1wb3J0IHsgVVNFUlNfRElSRUNUT1JZIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvdXNlcnNEaXJlY3RvcnlRdWVyeSdcbmltcG9ydCB7IFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4vdXNlRGVib3VuY2UnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHtcbiAgYnVpbGRGaWx0ZXJzRm9yVHlwZSxcbiAgYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhLFxuICBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyxcbiAgbWFwQ2xpZW50VG9JdGVtLFxuICBtYXBDb3JVc2VyVG9Vc2VySXRlbSxcbiAgbWFwTWNwU2x1Z3NUb0l0ZW1zLFxuICBtYXBSZWNlbnRUYXNrVG9JdGVtLFxuICBtYXBTZWFyY2hUb0l0ZW0sXG4gIG1hcFVzZXJUb0l0ZW0sXG4gIG5vcm1hbGl6ZVBvc2l0aXZlSW50LFxuICBub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkLFxuICBub3JtYWxpemVUYXNrRmFtaWx5UmVjb3JkLFxuICByZXNvbHZlQ2xpZW50c1BhZ2luYXRpb24sXG4gIHJlc29sdmVQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uLFxuICByZXNvbHZlVGFza0ZhbGxiYWNrUGFnaW5hdGlvbixcbiAgcmVzb2x2ZVVzZXJzUGFnaW5hdGlvbixcbiAgYXBwZW5kVW5pcXVlTWVudGlvbkl0ZW1zLFxuICBidWlsZFByb2plY3RGYWxsYmFja0FyZ3VtZW50cyxcbiAgYnVpbGRUYXNrRmFtaWx5U2NvcGVGaWx0ZXIsXG4gIGJ1aWxkVXNlckRpcmVjdG9yeUl0ZW1zLFxuICBjYW5Mb2FkTW9yZUVudGl0eVNlYXJjaCxcbiAgcmVzb2x2ZUVudGl0eVNlYXJjaFJlY2VudHNUcmlnZ2VyLFxuICB0eXBlIEVudGl0eVNlYXJjaFBhZ2luYXRpb25Tb3VyY2UsXG4gIHR5cGUgRW50aXR5U2VhcmNoU2NvcGUsXG4gIHR5cGUgRmFsbGJhY2tQcm9qZWN0UmVjb3JkLFxuICB0eXBlIFJhd0NsaWVudCxcbiAgdHlwZSBSYXdEaXJlY3RvcnlVc2VyLFxuICB0eXBlIFJhd1NlYXJjaFJlc3VsdCxcbiAgdHlwZSBUYXNrRmFtaWx5UmVjb3JkLFxufSBmcm9tICcuL3VzZUVudGl0eVNlYXJjaC5oZWxwZXJzJ1xuXG5leHBvcnQgdHlwZSB7IEVudGl0eVNlYXJjaFNjb3BlIH0gZnJvbSAnLi91c2VFbnRpdHlTZWFyY2guaGVscGVycydcblxudHlwZSBTZWFyY2hFbnRpdGllc0RhdGEgPSB7IHNlYXJjaDogUmF3U2VhcmNoUmVzdWx0W10gfCBudWxsIH1cbnR5cGUgU2VhcmNoQ2xpZW50c0RhdGEgPSB7XG4gIGNsaWVudHM6IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBwZXJQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIHBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgbGFzdFBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YTogUmF3Q2xpZW50W11cbiAgfSB8IG51bGxcbn1cbnR5cGUgVXNlcnNEaXJlY3RvcnlEYXRhID0ge1xuICB1c2Vyczoge1xuICAgIHRvdGFsPzogbnVtYmVyIHwgbnVsbFxuICAgIHBlclBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgcGFnZT86IG51bWJlciB8IG51bGxcbiAgICBsYXN0UGFnZT86IG51bWJlciB8IG51bGxcbiAgICBkYXRhOiBSYXdEaXJlY3RvcnlVc2VyW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbnR5cGUgVGFza0ZhbWlseURhdGEgPSB7XG4gIHRhc2tGYW1pbHk/OiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgcGVyUGFnZT86IG51bWJlciB8IG51bGxcbiAgICBwYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGxhc3RQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGRhdGE/OiBUYXNrRmFtaWx5UmVjb3JkW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbnR5cGUgUHJvamVjdHNGYWxsYmFja0RhdGEgPSB7XG4gIHByb2plY3RzPzoge1xuICAgIHRvdGFsPzogbnVtYmVyIHwgbnVsbFxuICAgIHBlclBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgcGFnZT86IG51bWJlciB8IG51bGxcbiAgICBsYXN0UGFnZT86IG51bWJlciB8IG51bGxcbiAgICBkYXRhPzogRmFsbGJhY2tQcm9qZWN0UmVjb3JkW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCB1c2VFbnRpdHlTZWFyY2ggPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpID0+IHtcbiAgY29uc3QgY29yVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICAvKiogRXZpdGEgYXBsaWNhciByZXN1bHRhZG9zIGRlIHVuIGBmZXRjaFJlY2VudGAgdmllam8gY3VhbmRvIGVsIHVzdWFyaW8geWEgY2FtYmnDsyBkZSB0YWIgKHJhY2UgYXN5bmMpLiAqL1xuICBjb25zdCByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUylcbiAgY29uc3QgW2l0ZW1zLCBzZXRJdGVtc10gPSB1c2VTdGF0ZTxDb250ZXh0TWVudGlvbkl0ZW1bXT4oW10pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGlkZVJlY2VudHNMYWJlbCwgc2V0SGlkZVJlY2VudHNMYWJlbF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc01vcmUsIHNldEhhc01vcmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc0xvYWRpbmdNb3JlLCBzZXRJc0xvYWRpbmdNb3JlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudFBhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlKDEpXG4gIGNvbnN0IFthY3RpdmVQYWdpbmF0aW9uU291cmNlLCBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlXSA9IHVzZVN0YXRlPEVudGl0eVNlYXJjaFBhZ2luYXRpb25Tb3VyY2U+KCdub25lJylcblxuICBjb25zdCBtY3BTbHVnc0tleSA9IChzY29wZT8ubWNwU2x1Z3MgPz8gW10pLmpvaW4oJ3wnKVxuICBjb25zdCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPSBzY29wZT8uYWdlbnRFbnRpdHkgIT09ICdwcm9qZWN0J1xuXG4gIC8vIEVzdGFiaWxpemFtb3MgZWwgc2NvcGUgcGFyYSBubyBkaXNwYXJhciBmZXRjaHMgcG9yIGNhbWJpb3MgZGUgaWRlbnRpZGFkIGRlIG9iamV0by5cbiAgY29uc3Qgc3RhYmxlU2NvcGUgPSB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoe1xuICAgICAgY2xpZW50SWQ6IHNjb3BlPy5jbGllbnRJZCA/PyBudWxsLFxuICAgICAgcHJvamVjdElkOiBzY29wZT8ucHJvamVjdElkID8/IG51bGwsXG4gICAgICBtY3BTbHVnczogc2NvcGU/Lm1jcFNsdWdzID8/IFtdLFxuICAgICAgYWdlbnRFbnRpdHk6IHNjb3BlPy5hZ2VudEVudGl0eSA/PyBudWxsLFxuICAgIH0pLFxuICAgIFtzY29wZT8uY2xpZW50SWQsIHNjb3BlPy5wcm9qZWN0SWQsIG1jcFNsdWdzS2V5LCBzY29wZT8uYWdlbnRFbnRpdHldXG4gIClcblxuICAvLyAtLS0gU2VhcmNoOiBwcm9qZWN0IHwgdGFzayAoR3JhcGhRTDogc2VhcmNoKSAtLS1cbiAgY29uc3QgW2ZldGNoU2VhcmNoRW50aXRpZXMsIHsgZGF0YTogc2VhcmNoRGF0YSwgbG9hZGluZzogc2VhcmNoTG9hZGluZywgZXJyb3I6IHNlYXJjaEVycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8U2VhcmNoRW50aXRpZXNEYXRhPihTRUFSQ0hfRU5USVRJRVMsIHtcbiAgICAgIHZhcmlhYmxlczogeyBsaW1pdDogMjAgfSxcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIC8vIC0tLSBTZWFyY2g6IGNsaWVudCAoR3JhcGhRTCkgLS0tXG4gIGNvbnN0IFtmZXRjaFNlYXJjaENsaWVudHMsIHsgZGF0YTogY2xpZW50c0RhdGEsIGxvYWRpbmc6IGNsaWVudHNMb2FkaW5nLCBlcnJvcjogY2xpZW50c0Vycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8U2VhcmNoQ2xpZW50c0RhdGE+KFNFQVJDSF9DTElFTlRTLCB7XG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICAvLyAtLS0gU2VhcmNoOiB1c2VyIChHcmFwaFFMOiB1c2VycykgLS0tXG4gIGNvbnN0IFtmZXRjaFVzZXJzRGlyZWN0b3J5LCB7IGRhdGE6IHVzZXJzRGF0YSwgbG9hZGluZzogdXNlcnNMb2FkaW5nLCBlcnJvcjogdXNlcnNFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFVzZXJzRGlyZWN0b3J5RGF0YT4oVVNFUlNfRElSRUNUT1JZLCB7XG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICBjb25zdCBzeW5jVXNlcnNQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKHBheWxvYWQ/OiBVc2Vyc0RpcmVjdG9yeURhdGEgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgeyBwYWdlLCBoYXNNb3JlOiBtb3JlIH0gPSByZXNvbHZlVXNlcnNQYWdpbmF0aW9uKHBheWxvYWQpXG4gICAgc2V0Q3VycmVudFBhZ2UocGFnZSlcbiAgICBzZXRIYXNNb3JlKG1vcmUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN5bmNDbGllbnRzUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKChwYXlsb2FkPzogU2VhcmNoQ2xpZW50c0RhdGEgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgeyBwYWdlLCBoYXNNb3JlOiBtb3JlIH0gPSByZXNvbHZlQ2xpZW50c1BhZ2luYXRpb24ocGF5bG9hZClcbiAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgIHNldEhhc01vcmUobW9yZSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24gPSB1c2VDYWxsYmFjaygocGF5bG9hZD86IFRhc2tGYW1pbHlEYXRhIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHsgcGFnZSwgaGFzTW9yZTogbW9yZSB9ID0gcmVzb2x2ZVRhc2tGYWxsYmFja1BhZ2luYXRpb24ocGF5bG9hZClcbiAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgIHNldEhhc01vcmUobW9yZSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24gPSB1c2VDYWxsYmFjaygocGF5bG9hZD86IFByb2plY3RzRmFsbGJhY2tEYXRhIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHsgcGFnZSwgaGFzTW9yZTogbW9yZSB9ID0gcmVzb2x2ZVByb2plY3RGYWxsYmFja1BhZ2luYXRpb24ocGF5bG9hZClcbiAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgIHNldEhhc01vcmUobW9yZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgW2ZldGNoVGFza0ZhbWlseUZhbGxiYWNrXSA9IHVzZUxhenlRdWVyeTxUYXNrRmFtaWx5RGF0YT4oVEFTS19GQU1JTFlfRkFMTEJBQ0ssIHtcbiAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gIH0pXG5cbiAgY29uc3QgW2ZldGNoUHJvamVjdHNGYWxsYmFja10gPSB1c2VMYXp5UXVlcnk8UHJvamVjdHNGYWxsYmFja0RhdGE+KFBST0pFQ1RTX0ZBTExCQUNLLCB7XG4gICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICB9KVxuXG4gIGNvbnN0IGZldGNoUmVjZW50ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCArPSAxXG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudFxuXG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgICBjb25zdCBzbHVncyA9IHN0YWJsZVNjb3BlLm1jcFNsdWdzID8/IFtdXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICBzZXRJdGVtcyhtYXBNY3BTbHVnc1RvSXRlbXMoc2x1Z3MsICcnKSlcbiAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgICBzZXRJdGVtcyhbXSlcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNGaWx0ZXIgPSBidWlsZFByb2plY3RGYWxsYmFja0FyZ3VtZW50cyhzdGFibGVTY29wZSlcbiAgICAgICAgY29uc3QgeyBkYXRhOiBmYWxsYmFja0RhdGEgfSA9IGF3YWl0IGZldGNoUHJvamVjdHNGYWxsYmFjayh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAuLi4oYXJndW1lbnRzRmlsdGVyID8geyBhcmd1bWVudHM6IGFyZ3VtZW50c0ZpbHRlciB9IDoge30pLFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBtYXBwZWQgPSAoZmFsbGJhY2tEYXRhPy5wcm9qZWN0cz8uZGF0YSA/PyBbXSlcbiAgICAgICAgICAubWFwKG5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQpXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUmF3U2VhcmNoUmVzdWx0ID0+IGl0ZW0gIT09IG51bGwpXG4gICAgICAgICAgLm1hcChpdGVtID0+IG1hcFNlYXJjaFRvSXRlbShpdGVtLCAncHJvamVjdCcsICcnKSlcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChtYXBwZWQubGVuZ3RoID4gMClcbiAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgncHJvamVjdC1mYWxsYmFjaycpXG4gICAgICAgIHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uKGZhbGxiYWNrRGF0YSlcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIGxldCByZWNlbnRUYXNrRmlsdGVyczogeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyBjbGllbnRJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGwgfSB8IHVuZGVmaW5lZFxuICAgICAgICBpZiAoc3RhYmxlU2NvcGUuYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICAgIHJlY2VudFRhc2tGaWx0ZXJzID0geyBwcm9qZWN0SWQ6IHN0YWJsZVNjb3BlLnByb2plY3RJZCB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhYmxlU2NvcGUuYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnKSB7XG4gICAgICAgICAgcmVjZW50VGFza0ZpbHRlcnMgPSB7IGNsaWVudElkOiBzdGFibGVTY29wZS5jbGllbnRJZCB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlY2VudFRhc2tzKHJlY2VudFRhc2tGaWx0ZXJzKVxuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgbGV0IHRhc2tJdGVtcyA9IChkYXRhID8/IFtdKS5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICBpZiAodGFza0l0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IHNjb3BlRmlsdGVyID0gYnVpbGRUYXNrRmFtaWx5U2NvcGVGaWx0ZXIoc3RhYmxlU2NvcGUpXG4gICAgICAgICAgY29uc3QgeyBkYXRhOiBmYWxsYmFja0RhdGEgfSA9IGF3YWl0IGZldGNoVGFza0ZhbWlseUZhbGxiYWNrKHtcbiAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICBmaWx0ZXI6IHsgYXJjaGl2ZWQ6IGZhbHNlLCAuLi5zY29wZUZpbHRlciB9LFxuICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7IG9mZnNldDogMCwgc2l6ZTogMjAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgICB0YXNrSXRlbXMgPSAoZmFsbGJhY2tEYXRhPy50YXNrRmFtaWx5Py5kYXRhID8/IFtdKVxuICAgICAgICAgICAgLm1hcChub3JtYWxpemVUYXNrRmFtaWx5UmVjb3JkKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUmVjZW50VGFza0l0ZW0gPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAgIC5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwodGFza0l0ZW1zLmxlbmd0aCA+IDApXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgndGFzay1mYWxsYmFjaycpXG4gICAgICAgICAgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24oZmFsbGJhY2tEYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgc2V0SXRlbXModGFza0l0ZW1zKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzKCcnKSxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IChkYXRhPy51c2Vycz8uZGF0YSA/PyBbXSkubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCAnJykpXG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBtZUl0ZW0gPSBtYXBDb3JVc2VyVG9Vc2VySXRlbShjb3JVc2VyLCAnJywgdCgnY29udGV4dE1lbnRpb24ubWUnKSlcbiAgICAgICAgY29uc3Qgd2l0aG91dE1lID0gbWFwcGVkLmZpbHRlcihpdGVtID0+IFN0cmluZyhpdGVtLmlkKSAhPT0gU3RyaW5nKG1lSXRlbS5pZCkpXG4gICAgICAgIHNldEl0ZW1zKFttZUl0ZW0sIC4uLndpdGhvdXRNZV0pXG4gICAgICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24oZGF0YSlcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgndXNlcnMnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIHNldEl0ZW1zKFtdKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmIChnZW5lcmF0aW9uICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgIHNldEl0ZW1zKFtdKVxuICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGdlbmVyYXRpb24gPT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkge1xuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHR5cGUsXG4gICAgc3RhYmxlU2NvcGUsXG4gICAgZmV0Y2hVc2Vyc0RpcmVjdG9yeSxcbiAgICBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayxcbiAgICBmZXRjaFByb2plY3RzRmFsbGJhY2ssXG4gICAgc3luY1VzZXJzUGFnaW5hdGlvbixcbiAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbixcbiAgICBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbixcbiAgICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3csXG4gICAgY29yVXNlcixcbiAgICB0LFxuICBdKVxuXG4gIC8vIERpc3BhcmFyIHNlYXJjaCBhbCBjYW1iaWFyIGRlYm91bmNlZCB2YWx1ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcblxuICAgIGlmICh0eXBlID09PSAnbWNwJykge1xuICAgICAgY29uc3Qgc2x1Z3MgPSBzdGFibGVTY29wZS5tY3BTbHVncyA/PyBbXVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgc2V0SXRlbXMobWFwTWNwU2x1Z3NUb0l0ZW1zKHNsdWdzLCBxKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcSkgcmV0dXJuXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIGZldGNoU2VhcmNoQ2xpZW50cyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGZpbHRlcjogeyBuYW1lOiBxIH0sXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJQYWdlOiAyMCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdjbGllbnRzLXNlYXJjaCcpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgIGZldGNoVXNlcnNEaXJlY3Rvcnkoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXJzOiBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyhxKSxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ3VzZXJzJylcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwcm9qZWN0JyB8fCB0eXBlID09PSAndGFzaycpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBidWlsZEZpbHRlcnNGb3JUeXBlKHR5cGUpXG4gICAgICBjb25zdCBleHRyYSA9IGJ1aWxkU2VhcmNoRW50aXRpZXNFeHRyYSh0eXBlLCBzdGFibGVTY29wZSlcbiAgICAgIGZldGNoU2VhcmNoRW50aXRpZXMoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBxLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgLi4uKGV4dHJhICE9PSB1bmRlZmluZWQgPyB7IGV4dHJhIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZFNlYXJjaFZhbHVlLCB0eXBlLCBzdGFibGVTY29wZSwgZmV0Y2hTZWFyY2hFbnRpdGllcywgZmV0Y2hTZWFyY2hDbGllbnRzLCBmZXRjaFVzZXJzRGlyZWN0b3J5XSlcblxuICAvLyBTaW5jcm9uaXphciByZXN1bHRhZG9zIGRlIHNlYXJjaFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlID09PSAnbWNwJykgcmV0dXJuXG5cbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG4gICAgaWYgKCFxKSByZXR1cm5cbiAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuXG4gICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICBzZXRMb2FkaW5nKGNsaWVudHNMb2FkaW5nKVxuICAgICAgaWYgKGNsaWVudHNFcnJvcikge1xuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChjbGllbnRzRGF0YT8uY2xpZW50cz8uZGF0YSkge1xuICAgICAgICBzZXRJdGVtcyhjbGllbnRzRGF0YS5jbGllbnRzLmRhdGEubWFwKGMgPT4gbWFwQ2xpZW50VG9JdGVtKGMsIHEpKSlcbiAgICAgICAgc3luY0NsaWVudHNQYWdpbmF0aW9uKGNsaWVudHNEYXRhKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgc2V0TG9hZGluZyh1c2Vyc0xvYWRpbmcpXG4gICAgICBpZiAodXNlcnNFcnJvcikge1xuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICh1c2Vyc0RhdGE/LnVzZXJzPy5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKGJ1aWxkVXNlckRpcmVjdG9yeUl0ZW1zKHVzZXJzRGF0YS51c2Vycy5kYXRhLCBjb3JVc2VyLCBxLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKSlcbiAgICAgICAgc3luY1VzZXJzUGFnaW5hdGlvbih1c2Vyc0RhdGEpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRMb2FkaW5nKHNlYXJjaExvYWRpbmcpXG4gICAgICBpZiAoc2VhcmNoRXJyb3IpIHtcbiAgICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRGF0YT8uc2VhcmNoKSB7XG4gICAgICAgIHNldEl0ZW1zKHNlYXJjaERhdGEuc2VhcmNoLm1hcChyID0+IG1hcFNlYXJjaFRvSXRlbShyLCB0eXBlLCBxLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKSlcbiAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXG4gICAgc2VhcmNoRGF0YSxcbiAgICBjbGllbnRzRGF0YSxcbiAgICB1c2Vyc0RhdGEsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBjbGllbnRzTG9hZGluZyxcbiAgICB1c2Vyc0xvYWRpbmcsXG4gICAgc2VhcmNoRXJyb3IsXG4gICAgY2xpZW50c0Vycm9yLFxuICAgIHVzZXJzRXJyb3IsXG4gICAgZGVib3VuY2VkU2VhcmNoVmFsdWUsXG4gICAgdHlwZSxcbiAgICBzeW5jQ2xpZW50c1BhZ2luYXRpb24sXG4gICAgc3luY1VzZXJzUGFnaW5hdGlvbixcbiAgICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3csXG4gICAgY29yVXNlcixcbiAgICB0LFxuICBdKVxuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghY2FuTG9hZE1vcmVFbnRpdHlTZWFyY2goaXNMb2FkaW5nTW9yZSwgaGFzTW9yZSwgYWN0aXZlUGFnaW5hdGlvblNvdXJjZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzYWZlQ3VycmVudFBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChjdXJyZW50UGFnZSwgMSlcbiAgICBjb25zdCBuZXh0UGFnZSA9IHNhZmVDdXJyZW50UGFnZSArIDFcbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG4gICAgY29uc3QgbG9hZE1vcmVCYXNlbGluZUdlbiA9IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudFxuICAgIHNldElzTG9hZGluZ01vcmUodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICd1c2VycycpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzKHEpLFxuICAgICAgICAgICAgcGFnZTogbmV4dFBhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy51c2Vycz8uZGF0YSA/PyBbXSkubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCBxKSlcbiAgICAgICAgc2V0SXRlbXMocHJldiA9PiB7XG4gICAgICAgICAgaWYgKCFxKSB7XG4gICAgICAgICAgICBjb25zdCBtZUl0ZW0gPVxuICAgICAgICAgICAgICBwcmV2WzBdPy50eXBlID09PSAndXNlcicgPyBwcmV2WzBdIDogbWFwQ29yVXNlclRvVXNlckl0ZW0oY29yVXNlciwgJycsIHQoJ2NvbnRleHRNZW50aW9uLm1lJykpXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBTdHJpbmcoaXRlbS5pZCkpKVxuICAgICAgICAgICAgY29uc3QgYXBwZW5kZWQgPSBuZXh0SXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWV4aXN0aW5nSWRzLmhhcyhTdHJpbmcoaXRlbS5pZCkpKVxuICAgICAgICAgICAgY29uc3Qgd2l0aG91dE1lID0gcHJldi5maWx0ZXIoaXRlbSA9PiBTdHJpbmcoaXRlbS5pZCkgIT09IFN0cmluZyhtZUl0ZW0uaWQpKVxuICAgICAgICAgICAgcmV0dXJuIFttZUl0ZW0sIC4uLndpdGhvdXRNZSwgLi4uYXBwZW5kZWRdXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhcHBlbmRVbmlxdWVNZW50aW9uSXRlbXMocHJldiwgbmV4dEl0ZW1zKVxuICAgICAgICB9KVxuICAgICAgICBzeW5jVXNlcnNQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICdjbGllbnRzLXNlYXJjaCcpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFNlYXJjaENsaWVudHMoe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgZmlsdGVyOiB7IG5hbWU6IHEgfSxcbiAgICAgICAgICAgIHBhZ2U6IG5leHRQYWdlLFxuICAgICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy5jbGllbnRzPy5kYXRhID8/IFtdKS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgcSkpXG4gICAgICAgIHNldEl0ZW1zKHByZXYgPT4gYXBwZW5kVW5pcXVlTWVudGlvbkl0ZW1zKHByZXYsIG5leHRJdGVtcykpXG4gICAgICAgIHN5bmNDbGllbnRzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAndGFzay1mYWxsYmFjaycpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVGaWx0ZXIgPSBidWlsZFRhc2tGYW1pbHlTY29wZUZpbHRlcihzdGFibGVTY29wZSlcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmaWx0ZXI6IHsgYXJjaGl2ZWQ6IGZhbHNlLCAuLi5zY29wZUZpbHRlciB9LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogeyBvZmZzZXQ6IChuZXh0UGFnZSAtIDEpICogMjAsIHNpemU6IDIwIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy50YXNrRmFtaWx5Py5kYXRhID8/IFtdKVxuICAgICAgICAgIC5tYXAobm9ybWFsaXplVGFza0ZhbWlseVJlY29yZClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSZWNlbnRUYXNrSXRlbSA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgIC5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IGFwcGVuZFVuaXF1ZU1lbnRpb25JdGVtcyhwcmV2LCBuZXh0SXRlbXMpKVxuICAgICAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAncHJvamVjdC1mYWxsYmFjaycpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzRmlsdGVyID0gYnVpbGRQcm9qZWN0RmFsbGJhY2tBcmd1bWVudHMoc3RhYmxlU2NvcGUpXG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrKHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIC4uLihhcmd1bWVudHNGaWx0ZXIgPyB7IGFyZ3VtZW50czogYXJndW1lbnRzRmlsdGVyIH0gOiB7fSksXG4gICAgICAgICAgICBwYWdlOiBuZXh0UGFnZSxcbiAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChsb2FkTW9yZUJhc2VsaW5lR2VuICE9PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICBjb25zdCBuZXh0SXRlbXMgPSAoZGF0YT8ucHJvamVjdHM/LmRhdGEgPz8gW10pXG4gICAgICAgICAgLm1hcChub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFJhd1NlYXJjaFJlc3VsdCA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiBtYXBTZWFyY2hUb0l0ZW0oaXRlbSwgJ3Byb2plY3QnLCAnJykpXG4gICAgICAgIHNldEl0ZW1zKHByZXYgPT4gYXBwZW5kVW5pcXVlTWVudGlvbkl0ZW1zKHByZXYsIG5leHRJdGVtcykpXG4gICAgICAgIHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAobG9hZE1vcmVCYXNlbGluZUdlbiAhPT0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VFbnRpdHlTZWFyY2hdIGxvYWRNb3JlIGZhaWxlZCcsIHtcbiAgICAgICAgc291cmNlOiBhY3RpdmVQYWdpbmF0aW9uU291cmNlLFxuICAgICAgICBuZXh0UGFnZSxcbiAgICAgICAgZXJyb3I6IGVycixcbiAgICAgIH0pXG4gICAgICAvLyBFdml0YSBsb29wIGRlIHJlaW50ZW50b3MgYXV0b23DoXRpY29zIHBvciBzY3JvbGwgY3VhbmRvIGJhY2tlbmQgZXN0w6EgY2HDrWRvIChlai4gNTAzKS5cbiAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmdNb3JlKGZhbHNlKVxuICAgIH1cbiAgfSwgW1xuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgaGFzTW9yZSxcbiAgICBjdXJyZW50UGFnZSxcbiAgICBhY3RpdmVQYWdpbmF0aW9uU291cmNlLFxuICAgIGRlYm91bmNlZFNlYXJjaFZhbHVlLFxuICAgIGZldGNoVXNlcnNEaXJlY3RvcnksXG4gICAgZmV0Y2hTZWFyY2hDbGllbnRzLFxuICAgIGZldGNoVGFza0ZhbWlseUZhbGxiYWNrLFxuICAgIGZldGNoUHJvamVjdHNGYWxsYmFjayxcbiAgICBzdGFibGVTY29wZS5wcm9qZWN0SWQsXG4gICAgc3RhYmxlU2NvcGUuY2xpZW50SWQsXG4gICAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93LFxuICAgIGNvclVzZXIsXG4gICAgdCxcbiAgICBzeW5jQ2xpZW50c1BhZ2luYXRpb24sXG4gICAgc3luY1VzZXJzUGFnaW5hdGlvbixcbiAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbixcbiAgICBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbixcbiAgXSlcblxuICAvLyBNYW50ZW5lbW9zIHVuYSByZWYgYSBsYSDDumx0aW1hIGZldGNoUmVjZW50IHBhcmEgcXVlIGVsIGVmZmVjdCBkZSByZWNlbnRzIG5vIHNlXG4gIC8vIHJlLWRpc3BhcmUgc29sbyBwb3JxdWUgY2FtYmnDsyBsYSBpZGVudGlkYWQgZGUgZmV0Y2hSZWNlbnQgKHNjb3BlL2NvclVzZXIvdCkuXG4gIGNvbnN0IGZldGNoUmVjZW50UmVmID0gdXNlUmVmKGZldGNoUmVjZW50KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoUmVjZW50UmVmLmN1cnJlbnQgPSBmZXRjaFJlY2VudFxuICB9LCBbZmV0Y2hSZWNlbnRdKVxuXG4gIC8vIFRyaWdnZXIgZGUgcmVjZW50czogbG9zIHJlY2VudHMgZGUgdXNlciBOTyBkZXBlbmRlbiBkZWwgc2NvcGUsIGFzw60gcXVlIGNhbWJpYXJcbiAgLy8gZGUgcHJveWVjdG8vY2xpZW50ZSBubyBkZWJlIHJlLWZldGNoZWFybG9zLiBMb3MgdGlwb3Mgc2NvcGVhZG9zIChwcm9qZWN0L3Rhc2spIHPDrS5cbiAgY29uc3QgcmVjZW50c1RyaWdnZXIgPSByZXNvbHZlRW50aXR5U2VhcmNoUmVjZW50c1RyaWdnZXIodHlwZSwgc3RhYmxlU2NvcGUsIG1jcFNsdWdzS2V5KVxuXG4gIC8vIEN1YW5kbyBzZSBsaW1waWEgZWwgc2VhcmNoLCB2b2x2ZXIgYSByZWNlbnRzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKCkpIHtcbiAgICAgIGZldGNoUmVjZW50UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZFNlYXJjaFZhbHVlLCByZWNlbnRzVHJpZ2dlcl0pXG5cbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlOiBzZXRTZWFyY2hWYWx1ZSxcbiAgICBmZXRjaFJlY2VudCxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsU0FBU0EsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3pFLFNBQVNDLGNBQWMsUUFBUSw2Q0FBNkM7QUFFNUUsU0FBU0MsT0FBTyxRQUFRLHFCQUFxQjtBQUM3QyxTQUFTQyxpQkFBaUIsRUFBRUMsZUFBZSxFQUFFQyxvQkFBb0IsUUFBUSxxQ0FBcUM7QUFDOUcsU0FBU0MsY0FBYyxRQUFR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
669
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlBST0pFQ1RTX0ZBTExCQUNLIiwiU0VBUkNIX0VOVElUSUVTIiwiVEFTS19GQU1JTFlfRkFMTEJBQ0siLCJTRUFSQ0hfQ0xJRU5UUyIsIlVTRVJTX0RJUkVDVE9SWSIsIlNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyIsInVzZURlYm91bmNlIiwidXNlVCIsImJ1aWxkRmlsdGVyc0ZvclR5cGUiLCJidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEiLCJidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyIsIm1hcENsaWVudFRvSXRlbSIsIm1hcE1jcFNsdWdzVG9JdGVtcyIsIm1hcFJlY2VudFRhc2tUb0l0ZW0iLCJtYXBTZWFyY2hUb0l0ZW0iLCJtYXBVc2VyVG9JdGVtIiwibm9ybWFsaXplUG9zaXRpdmVJbnQiLCJub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkIiwibm9ybWFsaXplVGFza0ZhbWlseVJlY29yZCIsInJlc29sdmVDbGllbnRzUGFnaW5hdGlvbiIsInJlc29sdmVQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uIiwicmVzb2x2ZVRhc2tGYWxsYmFja1BhZ2luYXRpb24iLCJyZXNvbHZlVXNlcnNQYWdpbmF0aW9uIiwiYXBwZW5kVW5pcXVlTWVudGlvbkl0ZW1zIiwiYnVpbGRQcm9qZWN0RmFsbGJhY2tBcmd1bWVudHMiLCJidWlsZFRhc2tGYW1pbHlTY29wZUZpbHRlciIsImJ1aWxkVXNlckRpcmVjdG9yeUl0ZW1zIiwiY2FuTG9hZE1vcmVFbnRpdHlTZWFyY2giLCJyZXNvbHZlRW50aXR5U2VhcmNoUmVjZW50c1RyaWdnZXIiLCJidWlsZFJlY2VudFRhc2tGaWx0ZXJzIiwiYnVpbGRVc2VyUmVjZW50c1dpdGhNZSIsIm1lcmdlVXNlcnNEaXJlY3RvcnlMb2FkTW9yZSIsInJlc29sdmVEZWJvdW5jZWRTZWFyY2hQYWdpbmF0aW9uU291cmNlIiwiaXNSZWNlbnRzRmV0Y2hHZW5lcmF0aW9uU3RhbGUiLCJ1c2VFbnRpdHlTZWFyY2giLCJ0eXBlIiwic2NvcGUiLCJfc2NvcGUkbWNwU2x1Z3MiLCJjb3JVc2VyIiwiX3VzZVQiLCJ0IiwicmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlYXJjaFZhbHVlIiwic2V0U2VhcmNoVmFsdWUiLCJkZWJvdW5jZWRTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXRlbXMiLCJzZXRJdGVtcyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImhpZGVSZWNlbnRzTGFiZWwiLCJzZXRIaWRlUmVjZW50c0xhYmVsIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwiaGFzTW9yZSIsInNldEhhc01vcmUiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiaXNMb2FkaW5nTW9yZSIsInNldElzTG9hZGluZ01vcmUiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiY3VycmVudFBhZ2UiLCJzZXRDdXJyZW50UGFnZSIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJhY3RpdmVQYWdpbmF0aW9uU291cmNlIiwic2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSIsIm1jcFNsdWdzS2V5IiwibWNwU2x1Z3MiLCJqb2luIiwic2hvd1Byb2plY3ROYW1lSW5UYXNrUm93IiwiYWdlbnRFbnRpdHkiLCJzdGFibGVTY29wZSIsIl9zY29wZSRjbGllbnRJZCIsIl9zY29wZSRwcm9qZWN0SWQiLCJfc2NvcGUkbWNwU2x1Z3MyIiwiX3Njb3BlJGFnZW50RW50aXR5IiwiY2xpZW50SWQiLCJwcm9qZWN0SWQiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJmZXRjaFBvbGljeSIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hFbnRpdGllcyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJkYXRhIiwic2VhcmNoTG9hZGluZyIsInNlYXJjaEVycm9yIiwiX3VzZUxhenlRdWVyeTMiLCJfdXNlTGF6eVF1ZXJ5NCIsImZldGNoU2VhcmNoQ2xpZW50cyIsIl91c2VMYXp5UXVlcnk0JCIsImNsaWVudHNEYXRhIiwiY2xpZW50c0xvYWRpbmciLCJjbGllbnRzRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5NSIsIl91c2VMYXp5UXVlcnk2IiwiZmV0Y2hVc2Vyc0RpcmVjdG9yeSIsIl91c2VMYXp5UXVlcnk2JCIsInVzZXJzRGF0YSIsInVzZXJzTG9hZGluZyIsInVzZXJzRXJyb3IiLCJzeW5jVXNlcnNQYWdpbmF0aW9uIiwicGF5bG9hZCIsIl9yZXNvbHZlVXNlcnNQYWdpbmF0aSIsInBhZ2UiLCJtb3JlIiwic3luY0NsaWVudHNQYWdpbmF0aW9uIiwiX3Jlc29sdmVDbGllbnRzUGFnaW5hIiwic3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24iLCJfcmVzb2x2ZVRhc2tGYWxsYmFja1AiLCJzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbiIsIl9yZXNvbHZlUHJvamVjdEZhbGxiYSIsIl91c2VMYXp5UXVlcnk3IiwiX3VzZUxhenlRdWVyeTgiLCJmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayIsIl91c2VMYXp5UXVlcnk5IiwiX3VzZUxhenlRdWVyeTAiLCJmZXRjaFByb2plY3RzRmFsbGJhY2siLCJmZXRjaFJlY2VudCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZ2VuZXJhdGlvbiIsIl9zdGFibGVTY29wZSRtY3BTbHVncyIsInNsdWdzIiwiX2ZhbGxiYWNrRGF0YSRwcm9qZWN0IiwiX2ZhbGxiYWNrRGF0YSRwcm9qZWN0MiIsImFyZ3VtZW50c0ZpbHRlciIsIl95aWVsZCRmZXRjaFByb2plY3RzRiIsImZhbGxiYWNrRGF0YSIsIm1hcHBlZCIsInRhc2tJdGVtcyIsIl9mYWxsYmFja0RhdGEkdGFza0ZhbSIsIl9mYWxsYmFja0RhdGEkdGFza0ZhbTIiLCJzY29wZUZpbHRlciIsIl95aWVsZCRmZXRjaFRhc2tGYW1pbCIsIl9mYWxsYmFja0RhdGEiLCJfZGF0YSR1c2VycyRkYXRhIiwiX2RhdGEkdXNlcnMiLCJfeWllbGQkZmV0Y2hVc2Vyc0RpcmUiLCJfZGF0YSIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJjdXJyZW50IiwiYWJydXB0IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsInBlclBhZ2UiLCJzZW50IiwicHJvamVjdHMiLCJtYXAiLCJmaWx0ZXIiLCJpdGVtIiwibGVuZ3RoIiwidGFzayIsImFyY2hpdmVkIiwicGFnaW5hdGlvbiIsIm9mZnNldCIsInNpemUiLCJ0YXNrRmFtaWx5IiwiZmlsdGVycyIsInVzZXJzIiwiZmluaXNoIiwic3RvcCIsInEiLCJ0cmltIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzMiIsIm5hbWUiLCJleHRyYSIsInVuZGVmaW5lZCIsIl9jbGllbnRzRGF0YSRjbGllbnRzIiwiY2xpZW50cyIsImMiLCJfdXNlcnNEYXRhJHVzZXJzIiwic2VhcmNoIiwiciIsImxvYWRNb3JlIiwiX2NhbGxlZTIiLCJzYWZlQ3VycmVudFBhZ2UiLCJuZXh0UGFnZSIsImxvYWRNb3JlQmFzZWxpbmVHZW4iLCJfZGF0YSR1c2VycyRkYXRhMiIsIl9kYXRhJHVzZXJzMiIsIl95aWVsZCRmZXRjaFVzZXJzRGlyZTIiLCJuZXh0SXRlbXMiLCJfZGF0YTIkY2xpZW50cyRkYXRhIiwiX2RhdGEyJGNsaWVudHMiLCJfeWllbGQkZmV0Y2hTZWFyY2hDbGkiLCJfZGF0YTIiLCJfbmV4dEl0ZW1zIiwiX2RhdGEzJHRhc2tGYW1pbHkkZGF0IiwiX2RhdGEzJHRhc2tGYW1pbHkiLCJfeWllbGQkZmV0Y2hUYXNrRmFtaWwyIiwiX2RhdGEzIiwiX25leHRJdGVtczIiLCJfZGF0YTQkcHJvamVjdHMkZGF0YSIsIl9kYXRhNCRwcm9qZWN0cyIsIl95aWVsZCRmZXRjaFByb2plY3RzRjIiLCJfZGF0YTQiLCJfbmV4dEl0ZW1zMyIsIl90MiIsIl9jb250ZXh0MiIsInUiLCJjb25zb2xlIiwic291cmNlIiwiZmV0Y2hSZWNlbnRSZWYiLCJyZWNlbnRzVHJpZ2dlciIsInVwZGF0ZVNlYXJjaFZhbHVlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUVudGl0eVNlYXJjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VMYXp5UXVlcnkgfSBmcm9tICdAYXBvbGxvL2NsaWVudCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFJlY2VudFRhc2tzIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9SZWNlbnRUYXNrcy9nZXRSZWNlbnRUYXNrcydcbmltcG9ydCB0eXBlIHsgUmVjZW50VGFza0l0ZW0gfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBQUk9KRUNUU19GQUxMQkFDSywgU0VBUkNIX0VOVElUSUVTLCBUQVNLX0ZBTUlMWV9GQUxMQkFDSyB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L2VudGl0eVNlYXJjaFF1ZXJ5J1xuaW1wb3J0IHsgU0VBUkNIX0NMSUVOVFMgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS9DbGllbnRTZWFyY2hRdWVyeSdcbmltcG9ydCB7IFVTRVJTX0RJUkVDVE9SWSB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L3VzZXJzRGlyZWN0b3J5UXVlcnknXG5pbXBvcnQgeyBTRUFSQ0hfUVVFUllfREVCT1VOQ0VfTVMgfSBmcm9tICcuLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlRGVib3VuY2UgfSBmcm9tICcuL3VzZURlYm91bmNlJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4vdXNlVCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbkl0ZW0gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7XG4gIGJ1aWxkRmlsdGVyc0ZvclR5cGUsXG4gIGJ1aWxkU2VhcmNoRW50aXRpZXNFeHRyYSxcbiAgYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMsXG4gIG1hcENsaWVudFRvSXRlbSxcbiAgbWFwTWNwU2x1Z3NUb0l0ZW1zLFxuICBtYXBSZWNlbnRUYXNrVG9JdGVtLFxuICBtYXBTZWFyY2hUb0l0ZW0sXG4gIG1hcFVzZXJUb0l0ZW0sXG4gIG5vcm1hbGl6ZVBvc2l0aXZlSW50LFxuICBub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkLFxuICBub3JtYWxpemVUYXNrRmFtaWx5UmVjb3JkLFxuICByZXNvbHZlQ2xpZW50c1BhZ2luYXRpb24sXG4gIHJlc29sdmVQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uLFxuICByZXNvbHZlVGFza0ZhbGxiYWNrUGFnaW5hdGlvbixcbiAgcmVzb2x2ZVVzZXJzUGFnaW5hdGlvbixcbiAgYXBwZW5kVW5pcXVlTWVudGlvbkl0ZW1zLFxuICBidWlsZFByb2plY3RGYWxsYmFja0FyZ3VtZW50cyxcbiAgYnVpbGRUYXNrRmFtaWx5U2NvcGVGaWx0ZXIsXG4gIGJ1aWxkVXNlckRpcmVjdG9yeUl0ZW1zLFxuICBjYW5Mb2FkTW9yZUVudGl0eVNlYXJjaCxcbiAgcmVzb2x2ZUVudGl0eVNlYXJjaFJlY2VudHNUcmlnZ2VyLFxuICBidWlsZFJlY2VudFRhc2tGaWx0ZXJzLFxuICBidWlsZFVzZXJSZWNlbnRzV2l0aE1lLFxuICBtZXJnZVVzZXJzRGlyZWN0b3J5TG9hZE1vcmUsXG4gIHJlc29sdmVEZWJvdW5jZWRTZWFyY2hQYWdpbmF0aW9uU291cmNlLFxuICBpc1JlY2VudHNGZXRjaEdlbmVyYXRpb25TdGFsZSxcbiAgdHlwZSBFbnRpdHlTZWFyY2hQYWdpbmF0aW9uU291cmNlLFxuICB0eXBlIEVudGl0eVNlYXJjaFNjb3BlLFxuICB0eXBlIEZhbGxiYWNrUHJvamVjdFJlY29yZCxcbiAgdHlwZSBSYXdDbGllbnQsXG4gIHR5cGUgUmF3RGlyZWN0b3J5VXNlcixcbiAgdHlwZSBSYXdTZWFyY2hSZXN1bHQsXG4gIHR5cGUgVGFza0ZhbWlseVJlY29yZCxcbn0gZnJvbSAnLi91c2VFbnRpdHlTZWFyY2guaGVscGVycydcblxuZXhwb3J0IHR5cGUgeyBFbnRpdHlTZWFyY2hTY29wZSB9IGZyb20gJy4vdXNlRW50aXR5U2VhcmNoLmhlbHBlcnMnXG5cbnR5cGUgU2VhcmNoRW50aXRpZXNEYXRhID0geyBzZWFyY2g6IFJhd1NlYXJjaFJlc3VsdFtdIHwgbnVsbCB9XG50eXBlIFNlYXJjaENsaWVudHNEYXRhID0ge1xuICBjbGllbnRzOiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgcGVyUGFnZT86IG51bWJlciB8IG51bGxcbiAgICBwYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGxhc3RQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGRhdGE6IFJhd0NsaWVudFtdXG4gIH0gfCBudWxsXG59XG50eXBlIFVzZXJzRGlyZWN0b3J5RGF0YSA9IHtcbiAgdXNlcnM6IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBwZXJQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIHBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgbGFzdFBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YTogUmF3RGlyZWN0b3J5VXNlcltdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG50eXBlIFRhc2tGYW1pbHlEYXRhID0ge1xuICB0YXNrRmFtaWx5Pzoge1xuICAgIHRvdGFsPzogbnVtYmVyIHwgbnVsbFxuICAgIHBlclBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgcGFnZT86IG51bWJlciB8IG51bGxcbiAgICBsYXN0UGFnZT86IG51bWJlciB8IG51bGxcbiAgICBkYXRhPzogVGFza0ZhbWlseVJlY29yZFtdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG50eXBlIFByb2plY3RzRmFsbGJhY2tEYXRhID0ge1xuICBwcm9qZWN0cz86IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBwZXJQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIHBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgbGFzdFBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YT86IEZhbGxiYWNrUHJvamVjdFJlY29yZFtdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgdXNlRW50aXR5U2VhcmNoID0gKHR5cGU6IENvbnRleHRFbnRpdHlUeXBlLCBzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKSA9PiB7XG4gIGNvbnN0IGNvclVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgLyoqIEV2aXRhIGFwbGljYXIgcmVzdWx0YWRvcyBkZSB1biBgZmV0Y2hSZWNlbnRgIHZpZWpvIGN1YW5kbyBlbCB1c3VhcmlvIHlhIGNhbWJpw7MgZGUgdGFiIChyYWNlIGFzeW5jKS4gKi9cbiAgY29uc3QgcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBkZWJvdW5jZWRTZWFyY2hWYWx1ZSA9IHVzZURlYm91bmNlKHNlYXJjaFZhbHVlLCBTRUFSQ0hfUVVFUllfREVCT1VOQ0VfTVMpXG4gIGNvbnN0IFtpdGVtcywgc2V0SXRlbXNdID0gdXNlU3RhdGU8Q29udGV4dE1lbnRpb25JdGVtW10+KFtdKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hpZGVSZWNlbnRzTGFiZWwsIHNldEhpZGVSZWNlbnRzTGFiZWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoYXNNb3JlLCBzZXRIYXNNb3JlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNMb2FkaW5nTW9yZSwgc2V0SXNMb2FkaW5nTW9yZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2N1cnJlbnRQYWdlLCBzZXRDdXJyZW50UGFnZV0gPSB1c2VTdGF0ZSgxKVxuICBjb25zdCBbYWN0aXZlUGFnaW5hdGlvblNvdXJjZSwgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZV0gPSB1c2VTdGF0ZTxFbnRpdHlTZWFyY2hQYWdpbmF0aW9uU291cmNlPignbm9uZScpXG5cbiAgY29uc3QgbWNwU2x1Z3NLZXkgPSAoc2NvcGU/Lm1jcFNsdWdzID8/IFtdKS5qb2luKCd8JylcbiAgY29uc3Qgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID0gc2NvcGU/LmFnZW50RW50aXR5ICE9PSAncHJvamVjdCdcblxuICAvLyBFc3RhYmlsaXphbW9zIGVsIHNjb3BlIHBhcmEgbm8gZGlzcGFyYXIgZmV0Y2hzIHBvciBjYW1iaW9zIGRlIGlkZW50aWRhZCBkZSBvYmpldG8uXG4gIGNvbnN0IHN0YWJsZVNjb3BlID0gdXNlTWVtbzxFbnRpdHlTZWFyY2hTY29wZT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNsaWVudElkOiBzY29wZT8uY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RJZDogc2NvcGU/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgbWNwU2x1Z3M6IHNjb3BlPy5tY3BTbHVncyA/PyBbXSxcbiAgICAgIGFnZW50RW50aXR5OiBzY29wZT8uYWdlbnRFbnRpdHkgPz8gbnVsbCxcbiAgICB9KSxcbiAgICBbc2NvcGU/LmNsaWVudElkLCBzY29wZT8ucHJvamVjdElkLCBtY3BTbHVnc0tleSwgc2NvcGU/LmFnZW50RW50aXR5XVxuICApXG5cbiAgLy8gLS0tIFNlYXJjaDogcHJvamVjdCB8IHRhc2sgKEdyYXBoUUw6IHNlYXJjaCkgLS0tXG4gIGNvbnN0IFtmZXRjaFNlYXJjaEVudGl0aWVzLCB7IGRhdGE6IHNlYXJjaERhdGEsIGxvYWRpbmc6IHNlYXJjaExvYWRpbmcsIGVycm9yOiBzZWFyY2hFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaEVudGl0aWVzRGF0YT4oU0VBUkNIX0VOVElUSUVTLCB7XG4gICAgICB2YXJpYWJsZXM6IHsgbGltaXQ6IDIwIH0sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICAvLyAtLS0gU2VhcmNoOiBjbGllbnQgKEdyYXBoUUwpIC0tLVxuICBjb25zdCBbZmV0Y2hTZWFyY2hDbGllbnRzLCB7IGRhdGE6IGNsaWVudHNEYXRhLCBsb2FkaW5nOiBjbGllbnRzTG9hZGluZywgZXJyb3I6IGNsaWVudHNFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaENsaWVudHNEYXRhPihTRUFSQ0hfQ0xJRU5UUywge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgLy8gLS0tIFNlYXJjaDogdXNlciAoR3JhcGhRTDogdXNlcnMpIC0tLVxuICBjb25zdCBbZmV0Y2hVc2Vyc0RpcmVjdG9yeSwgeyBkYXRhOiB1c2Vyc0RhdGEsIGxvYWRpbmc6IHVzZXJzTG9hZGluZywgZXJyb3I6IHVzZXJzRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxVc2Vyc0RpcmVjdG9yeURhdGE+KFVTRVJTX0RJUkVDVE9SWSwge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgY29uc3Qgc3luY1VzZXJzUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKChwYXlsb2FkPzogVXNlcnNEaXJlY3RvcnlEYXRhIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHsgcGFnZSwgaGFzTW9yZTogbW9yZSB9ID0gcmVzb2x2ZVVzZXJzUGFnaW5hdGlvbihwYXlsb2FkKVxuICAgIHNldEN1cnJlbnRQYWdlKHBhZ2UpXG4gICAgc2V0SGFzTW9yZShtb3JlKVxuICB9LCBbXSlcblxuICBjb25zdCBzeW5jQ2xpZW50c1BhZ2luYXRpb24gPSB1c2VDYWxsYmFjaygocGF5bG9hZD86IFNlYXJjaENsaWVudHNEYXRhIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHsgcGFnZSwgaGFzTW9yZTogbW9yZSB9ID0gcmVzb2x2ZUNsaWVudHNQYWdpbmF0aW9uKHBheWxvYWQpXG4gICAgc2V0Q3VycmVudFBhZ2UocGFnZSlcbiAgICBzZXRIYXNNb3JlKG1vcmUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN5bmNUYXNrRmFsbGJhY2tQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKHBheWxvYWQ/OiBUYXNrRmFtaWx5RGF0YSB8IG51bGwpID0+IHtcbiAgICBjb25zdCB7IHBhZ2UsIGhhc01vcmU6IG1vcmUgfSA9IHJlc29sdmVUYXNrRmFsbGJhY2tQYWdpbmF0aW9uKHBheWxvYWQpXG4gICAgc2V0Q3VycmVudFBhZ2UocGFnZSlcbiAgICBzZXRIYXNNb3JlKG1vcmUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKHBheWxvYWQ/OiBQcm9qZWN0c0ZhbGxiYWNrRGF0YSB8IG51bGwpID0+IHtcbiAgICBjb25zdCB7IHBhZ2UsIGhhc01vcmU6IG1vcmUgfSA9IHJlc29sdmVQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uKHBheWxvYWQpXG4gICAgc2V0Q3VycmVudFBhZ2UocGFnZSlcbiAgICBzZXRIYXNNb3JlKG1vcmUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IFtmZXRjaFRhc2tGYW1pbHlGYWxsYmFja10gPSB1c2VMYXp5UXVlcnk8VGFza0ZhbWlseURhdGE+KFRBU0tfRkFNSUxZX0ZBTExCQUNLLCB7XG4gICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICB9KVxuXG4gIGNvbnN0IFtmZXRjaFByb2plY3RzRmFsbGJhY2tdID0gdXNlTGF6eVF1ZXJ5PFByb2plY3RzRmFsbGJhY2tEYXRhPihQUk9KRUNUU19GQUxMQkFDSywge1xuICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlY2VudCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQgKz0gMVxuICAgIGNvbnN0IGdlbmVyYXRpb24gPSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnRcblxuICAgIGlmICh0eXBlID09PSAnbWNwJykge1xuICAgICAgY29uc3Qgc2x1Z3MgPSBzdGFibGVTY29wZS5tY3BTbHVncyA/PyBbXVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgc2V0SXRlbXMobWFwTWNwU2x1Z3NUb0l0ZW1zKHNsdWdzLCAnJykpXG4gICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHNldEVycm9yKGZhbHNlKVxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0SXRlbXMoW10pXG4gICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ25vbmUnKVxuICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzRmlsdGVyID0gYnVpbGRQcm9qZWN0RmFsbGJhY2tBcmd1bWVudHMoc3RhYmxlU2NvcGUpXG4gICAgICAgIGNvbnN0IHsgZGF0YTogZmFsbGJhY2tEYXRhIH0gPSBhd2FpdCBmZXRjaFByb2plY3RzRmFsbGJhY2soe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgLi4uKGFyZ3VtZW50c0ZpbHRlciA/IHsgYXJndW1lbnRzOiBhcmd1bWVudHNGaWx0ZXIgfSA6IHt9KSxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBwZXJQYWdlOiAyMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBpZiAoaXNSZWNlbnRzRmV0Y2hHZW5lcmF0aW9uU3RhbGUoZ2VuZXJhdGlvbiwgcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IChmYWxsYmFja0RhdGE/LnByb2plY3RzPy5kYXRhID8/IFtdKVxuICAgICAgICAgIC5tYXAobm9ybWFsaXplUHJvamVjdHNGYWxsYmFja1JlY29yZClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSYXdTZWFyY2hSZXN1bHQgPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAubWFwKGl0ZW0gPT4gbWFwU2VhcmNoVG9JdGVtKGl0ZW0sICdwcm9qZWN0JywgJycpKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKG1hcHBlZC5sZW5ndGggPiAwKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdwcm9qZWN0LWZhbGxiYWNrJylcbiAgICAgICAgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24oZmFsbGJhY2tEYXRhKVxuICAgICAgICBpZiAoaXNSZWNlbnRzRmV0Y2hHZW5lcmF0aW9uU3RhbGUoZ2VuZXJhdGlvbiwgcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRUYXNrcyhidWlsZFJlY2VudFRhc2tGaWx0ZXJzKHN0YWJsZVNjb3BlKSlcbiAgICAgICAgaWYgKGlzUmVjZW50c0ZldGNoR2VuZXJhdGlvblN0YWxlKGdlbmVyYXRpb24sIHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkpIHJldHVyblxuICAgICAgICBsZXQgdGFza0l0ZW1zID0gKGRhdGEgPz8gW10pLm1hcCh0YXNrID0+IG1hcFJlY2VudFRhc2tUb0l0ZW0odGFzaywgJycsIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdykpXG4gICAgICAgIGlmICh0YXNrSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3Qgc2NvcGVGaWx0ZXIgPSBidWlsZFRhc2tGYW1pbHlTY29wZUZpbHRlcihzdGFibGVTY29wZSlcbiAgICAgICAgICBjb25zdCB7IGRhdGE6IGZhbGxiYWNrRGF0YSB9ID0gYXdhaXQgZmV0Y2hUYXNrRmFtaWx5RmFsbGJhY2soe1xuICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIGZpbHRlcjogeyBhcmNoaXZlZDogZmFsc2UsIC4uLnNjb3BlRmlsdGVyIH0sXG4gICAgICAgICAgICAgIHBhZ2luYXRpb246IHsgb2Zmc2V0OiAwLCBzaXplOiAyMCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChpc1JlY2VudHNGZXRjaEdlbmVyYXRpb25TdGFsZShnZW5lcmF0aW9uLCByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpKSByZXR1cm5cbiAgICAgICAgICB0YXNrSXRlbXMgPSAoZmFsbGJhY2tEYXRhPy50YXNrRmFtaWx5Py5kYXRhID8/IFtdKVxuICAgICAgICAgICAgLm1hcChub3JtYWxpemVUYXNrRmFtaWx5UmVjb3JkKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUmVjZW50VGFza0l0ZW0gPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAgIC5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwodGFza0l0ZW1zLmxlbmd0aCA+IDApXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgndGFzay1mYWxsYmFjaycpXG4gICAgICAgICAgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24oZmFsbGJhY2tEYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWNlbnRzRmV0Y2hHZW5lcmF0aW9uU3RhbGUoZ2VuZXJhdGlvbiwgcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgICAgIHNldEl0ZW1zKHRhc2tJdGVtcylcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hVc2Vyc0RpcmVjdG9yeSh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycygnJyksXG4gICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChpc1JlY2VudHNGZXRjaEdlbmVyYXRpb25TdGFsZShnZW5lcmF0aW9uLCByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpKSByZXR1cm5cbiAgICAgICAgaWYgKGlzUmVjZW50c0ZldGNoR2VuZXJhdGlvblN0YWxlKGdlbmVyYXRpb24sIHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkpIHJldHVyblxuICAgICAgICBzZXRJdGVtcyhidWlsZFVzZXJSZWNlbnRzV2l0aE1lKGRhdGE/LnVzZXJzPy5kYXRhID8/IFtdLCBjb3JVc2VyLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKSlcbiAgICAgICAgc3luY1VzZXJzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCd1c2VycycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNSZWNlbnRzRmV0Y2hHZW5lcmF0aW9uU3RhbGUoZ2VuZXJhdGlvbiwgcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgICAgIHNldEl0ZW1zKFtdKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmIChpc1JlY2VudHNGZXRjaEdlbmVyYXRpb25TdGFsZShnZW5lcmF0aW9uLCByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpKSByZXR1cm5cbiAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICBzZXRJdGVtcyhbXSlcbiAgICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChnZW5lcmF0aW9uID09PSByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICB0eXBlLFxuICAgIHN0YWJsZVNjb3BlLFxuICAgIGZldGNoVXNlcnNEaXJlY3RvcnksXG4gICAgZmV0Y2hUYXNrRmFtaWx5RmFsbGJhY2ssXG4gICAgZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrLFxuICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24sXG4gICAgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24sXG4gICAgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24sXG4gICAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93LFxuICAgIGNvclVzZXIsXG4gICAgdCxcbiAgXSlcblxuICAvLyBEaXNwYXJhciBzZWFyY2ggYWwgY2FtYmlhciBkZWJvdW5jZWQgdmFsdWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG5cbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHtcbiAgICAgIGNvbnN0IHNsdWdzID0gc3RhYmxlU2NvcGUubWNwU2x1Z3MgPz8gW11cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHNldEl0ZW1zKG1hcE1jcFNsdWdzVG9JdGVtcyhzbHVncywgcSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXEpIHJldHVyblxuXG4gICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICBmZXRjaFNlYXJjaENsaWVudHMoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXI6IHsgbmFtZTogcSB9LFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZShyZXNvbHZlRGVib3VuY2VkU2VhcmNoUGFnaW5hdGlvblNvdXJjZSh0eXBlKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgZmV0Y2hVc2Vyc0RpcmVjdG9yeSh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGZpbHRlcnM6IGJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzKHEpLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZShyZXNvbHZlRGVib3VuY2VkU2VhcmNoUGFnaW5hdGlvblNvdXJjZSh0eXBlKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwcm9qZWN0JyB8fCB0eXBlID09PSAndGFzaycpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBidWlsZEZpbHRlcnNGb3JUeXBlKHR5cGUpXG4gICAgICBjb25zdCBleHRyYSA9IGJ1aWxkU2VhcmNoRW50aXRpZXNFeHRyYSh0eXBlLCBzdGFibGVTY29wZSlcbiAgICAgIGZldGNoU2VhcmNoRW50aXRpZXMoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBxLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgLi4uKGV4dHJhICE9PSB1bmRlZmluZWQgPyB7IGV4dHJhIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZShyZXNvbHZlRGVib3VuY2VkU2VhcmNoUGFnaW5hdGlvblNvdXJjZSh0eXBlKSlcbiAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbZGVib3VuY2VkU2VhcmNoVmFsdWUsIHR5cGUsIHN0YWJsZVNjb3BlLCBmZXRjaFNlYXJjaEVudGl0aWVzLCBmZXRjaFNlYXJjaENsaWVudHMsIGZldGNoVXNlcnNEaXJlY3RvcnldKVxuXG4gIC8vIFNpbmNyb25pemFyIHJlc3VsdGFkb3MgZGUgc2VhcmNoXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSByZXR1cm5cblxuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcbiAgICBpZiAoIXEpIHJldHVyblxuICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHNldExvYWRpbmcoY2xpZW50c0xvYWRpbmcpXG4gICAgICBpZiAoY2xpZW50c0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGNsaWVudHNEYXRhPy5jbGllbnRzPy5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKGNsaWVudHNEYXRhLmNsaWVudHMuZGF0YS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgcSkpKVxuICAgICAgICBzeW5jQ2xpZW50c1BhZ2luYXRpb24oY2xpZW50c0RhdGEpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICBzZXRMb2FkaW5nKHVzZXJzTG9hZGluZylcbiAgICAgIGlmICh1c2Vyc0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHVzZXJzRGF0YT8udXNlcnM/LmRhdGEpIHtcbiAgICAgICAgc2V0SXRlbXMoYnVpbGRVc2VyRGlyZWN0b3J5SXRlbXModXNlcnNEYXRhLnVzZXJzLmRhdGEsIGNvclVzZXIsIHEsIHQoJ2NvbnRleHRNZW50aW9uLm1lJykpKVxuICAgICAgICBzeW5jVXNlcnNQYWdpbmF0aW9uKHVzZXJzRGF0YSlcbiAgICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldExvYWRpbmcoc2VhcmNoTG9hZGluZylcbiAgICAgIGlmIChzZWFyY2hFcnJvcikge1xuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChzZWFyY2hEYXRhPy5zZWFyY2gpIHtcbiAgICAgICAgc2V0SXRlbXMoc2VhcmNoRGF0YS5zZWFyY2gubWFwKHIgPT4gbWFwU2VhcmNoVG9JdGVtKHIsIHR5cGUsIHEsIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdykpKVxuICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzZWFyY2hEYXRhLFxuICAgIGNsaWVudHNEYXRhLFxuICAgIHVzZXJzRGF0YSxcbiAgICBzZWFyY2hMb2FkaW5nLFxuICAgIGNsaWVudHNMb2FkaW5nLFxuICAgIHVzZXJzTG9hZGluZyxcbiAgICBzZWFyY2hFcnJvcixcbiAgICBjbGllbnRzRXJyb3IsXG4gICAgdXNlcnNFcnJvcixcbiAgICBkZWJvdW5jZWRTZWFyY2hWYWx1ZSxcbiAgICB0eXBlLFxuICAgIHN5bmNDbGllbnRzUGFnaW5hdGlvbixcbiAgICBzeW5jVXNlcnNQYWdpbmF0aW9uLFxuICAgIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyxcbiAgICBjb3JVc2VyLFxuICAgIHQsXG4gIF0pXG5cbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFjYW5Mb2FkTW9yZUVudGl0eVNlYXJjaChpc0xvYWRpbmdNb3JlLCBoYXNNb3JlLCBhY3RpdmVQYWdpbmF0aW9uU291cmNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNhZmVDdXJyZW50UGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KGN1cnJlbnRQYWdlLCAxKVxuICAgIGNvbnN0IG5leHRQYWdlID0gc2FmZUN1cnJlbnRQYWdlICsgMVxuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcbiAgICBjb25zdCBsb2FkTW9yZUJhc2VsaW5lR2VuID0gcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50XG4gICAgc2V0SXNMb2FkaW5nTW9yZSh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBpZiAoYWN0aXZlUGFnaW5hdGlvblNvdXJjZSA9PT0gJ3VzZXJzJykge1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGZldGNoVXNlcnNEaXJlY3Rvcnkoe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgZmlsdGVyczogYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMocSksXG4gICAgICAgICAgICBwYWdlOiBuZXh0UGFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBpZiAoaXNSZWNlbnRzRmV0Y2hHZW5lcmF0aW9uU3RhbGUobG9hZE1vcmVCYXNlbGluZUdlbiwgcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy51c2Vycz8uZGF0YSA/PyBbXSkubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCBxKSlcbiAgICAgICAgc2V0SXRlbXMocHJldiA9PiBtZXJnZVVzZXJzRGlyZWN0b3J5TG9hZE1vcmUocHJldiwgbmV4dEl0ZW1zLCBjb3JVc2VyLCBxLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKSlcbiAgICAgICAgc3luY1VzZXJzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAnY2xpZW50cy1zZWFyY2gnKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hTZWFyY2hDbGllbnRzKHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcjogeyBuYW1lOiBxIH0sXG4gICAgICAgICAgICBwYWdlOiBuZXh0UGFnZSxcbiAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChpc1JlY2VudHNGZXRjaEdlbmVyYXRpb25TdGFsZShsb2FkTW9yZUJhc2VsaW5lR2VuLCByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpKSByZXR1cm5cbiAgICAgICAgY29uc3QgbmV4dEl0ZW1zID0gKGRhdGE/LmNsaWVudHM/LmRhdGEgPz8gW10pLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCBxKSlcbiAgICAgICAgc2V0SXRlbXMocHJldiA9PiBhcHBlbmRVbmlxdWVNZW50aW9uSXRlbXMocHJldiwgbmV4dEl0ZW1zKSlcbiAgICAgICAgc3luY0NsaWVudHNQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICd0YXNrLWZhbGxiYWNrJykge1xuICAgICAgICBjb25zdCBzY29wZUZpbHRlciA9IGJ1aWxkVGFza0ZhbWlseVNjb3BlRmlsdGVyKHN0YWJsZVNjb3BlKVxuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGZldGNoVGFza0ZhbWlseUZhbGxiYWNrKHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGZpbHRlcjogeyBhcmNoaXZlZDogZmFsc2UsIC4uLnNjb3BlRmlsdGVyIH0sXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7IG9mZnNldDogKG5leHRQYWdlIC0gMSkgKiAyMCwgc2l6ZTogMjAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBpZiAoaXNSZWNlbnRzRmV0Y2hHZW5lcmF0aW9uU3RhbGUobG9hZE1vcmVCYXNlbGluZUdlbiwgcmVjZW50c0ZldGNoR2VuZXJhdGlvblJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy50YXNrRmFtaWx5Py5kYXRhID8/IFtdKVxuICAgICAgICAgIC5tYXAobm9ybWFsaXplVGFza0ZhbWlseVJlY29yZClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSZWNlbnRUYXNrSXRlbSA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgIC5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IGFwcGVuZFVuaXF1ZU1lbnRpb25JdGVtcyhwcmV2LCBuZXh0SXRlbXMpKVxuICAgICAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAncHJvamVjdC1mYWxsYmFjaycpIHtcbiAgICAgICAgY29uc3QgYXJndW1lbnRzRmlsdGVyID0gYnVpbGRQcm9qZWN0RmFsbGJhY2tBcmd1bWVudHMoc3RhYmxlU2NvcGUpXG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrKHtcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIC4uLihhcmd1bWVudHNGaWx0ZXIgPyB7IGFyZ3VtZW50czogYXJndW1lbnRzRmlsdGVyIH0gOiB7fSksXG4gICAgICAgICAgICBwYWdlOiBuZXh0UGFnZSxcbiAgICAgICAgICAgIHBlclBhZ2U6IDIwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChpc1JlY2VudHNGZXRjaEdlbmVyYXRpb25TdGFsZShsb2FkTW9yZUJhc2VsaW5lR2VuLCByZWNlbnRzRmV0Y2hHZW5lcmF0aW9uUmVmLmN1cnJlbnQpKSByZXR1cm5cbiAgICAgICAgY29uc3QgbmV4dEl0ZW1zID0gKGRhdGE/LnByb2plY3RzPy5kYXRhID8/IFtdKVxuICAgICAgICAgIC5tYXAobm9ybWFsaXplUHJvamVjdHNGYWxsYmFja1JlY29yZClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSYXdTZWFyY2hSZXN1bHQgPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAubWFwKGl0ZW0gPT4gbWFwU2VhcmNoVG9JdGVtKGl0ZW0sICdwcm9qZWN0JywgJycpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IGFwcGVuZFVuaXF1ZU1lbnRpb25JdGVtcyhwcmV2LCBuZXh0SXRlbXMpKVxuICAgICAgICBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGxvYWRNb3JlQmFzZWxpbmVHZW4gIT09IHJlY2VudHNGZXRjaEdlbmVyYXRpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICBjb25zb2xlLmVycm9yKCdbdXNlRW50aXR5U2VhcmNoXSBsb2FkTW9yZSBmYWlsZWQnLCB7XG4gICAgICAgIHNvdXJjZTogYWN0aXZlUGFnaW5hdGlvblNvdXJjZSxcbiAgICAgICAgbmV4dFBhZ2UsXG4gICAgICAgIGVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgICAgLy8gRXZpdGEgbG9vcCBkZSByZWludGVudG9zIGF1dG9tw6F0aWNvcyBwb3Igc2Nyb2xsIGN1YW5kbyBiYWNrZW5kIGVzdMOhIGNhw61kbyAoZWouIDUwMykuXG4gICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nTW9yZShmYWxzZSlcbiAgICB9XG4gIH0sIFtcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGhhc01vcmUsXG4gICAgY3VycmVudFBhZ2UsXG4gICAgYWN0aXZlUGFnaW5hdGlvblNvdXJjZSxcbiAgICBkZWJvdW5jZWRTZWFyY2hWYWx1ZSxcbiAgICBmZXRjaFVzZXJzRGlyZWN0b3J5LFxuICAgIGZldGNoU2VhcmNoQ2xpZW50cyxcbiAgICBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayxcbiAgICBmZXRjaFByb2plY3RzRmFsbGJhY2ssXG4gICAgc3RhYmxlU2NvcGUucHJvamVjdElkLFxuICAgIHN0YWJsZVNjb3BlLmNsaWVudElkLFxuICAgIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyxcbiAgICBjb3JVc2VyLFxuICAgIHQsXG4gICAgc3luY0NsaWVudHNQYWdpbmF0aW9uLFxuICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24sXG4gICAgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24sXG4gICAgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24sXG4gIF0pXG5cbiAgLy8gTWFudGVuZW1vcyB1bmEgcmVmIGEgbGEgw7psdGltYSBmZXRjaFJlY2VudCBwYXJhIHF1ZSBlbCBlZmZlY3QgZGUgcmVjZW50cyBubyBzZVxuICAvLyByZS1kaXNwYXJlIHNvbG8gcG9ycXVlIGNhbWJpw7MgbGEgaWRlbnRpZGFkIGRlIGZldGNoUmVjZW50IChzY29wZS9jb3JVc2VyL3QpLlxuICBjb25zdCBmZXRjaFJlY2VudFJlZiA9IHVzZVJlZihmZXRjaFJlY2VudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFJlY2VudFJlZi5jdXJyZW50ID0gZmV0Y2hSZWNlbnRcbiAgfSwgW2ZldGNoUmVjZW50XSlcblxuICAvLyBUcmlnZ2VyIGRlIHJlY2VudHM6IGxvcyByZWNlbnRzIGRlIHVzZXIgTk8gZGVwZW5kZW4gZGVsIHNjb3BlLCBhc8OtIHF1ZSBjYW1iaWFyXG4gIC8vIGRlIHByb3llY3RvL2NsaWVudGUgbm8gZGViZSByZS1mZXRjaGVhcmxvcy4gTG9zIHRpcG9zIHNjb3BlYWRvcyAocHJvamVjdC90YXNrKSBzw60uXG4gIGNvbnN0IHJlY2VudHNUcmlnZ2VyID0gcmVzb2x2ZUVudGl0eVNlYXJjaFJlY2VudHNUcmlnZ2VyKHR5cGUsIHN0YWJsZVNjb3BlLCBtY3BTbHVnc0tleSlcblxuICAvLyBDdWFuZG8gc2UgbGltcGlhIGVsIHNlYXJjaCwgdm9sdmVyIGEgcmVjZW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpKSB7XG4gICAgICBmZXRjaFJlY2VudFJlZi5jdXJyZW50KClcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hWYWx1ZSwgcmVjZW50c1RyaWdnZXJdKVxuXG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBoaWRlUmVjZW50c0xhYmVsLFxuICAgIGhhc01vcmUsXG4gICAgaXNMb2FkaW5nTW9yZSxcbiAgICBsb2FkTW9yZSxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZTogc2V0U2VhcmNoVmFsdWUsXG4gICAgZmV0Y2hSZWNlbnQsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBU0EsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3pFLFNBQVNDLGNBQWMsUUFBUSw2Q0FBNkM7QUFFNUUsU0FBU0MsT0FBTyxRQUFRLHFCQUFxQjtBQUM3QyxTQUFTQyxpQkFBaUIsRUFBRUMsZUFBZSxFQUFFQyxvQkFBb0IsUUFBUSxxQ0FBcUM7QUFDOUcsU0FBU0MsY0FBYyxRQUFRLHFDQUFxQztBQUNwRSxTQUFTQyxlQUFlLFFBQVEsdUNBQXVDO0FBQ3ZFLFNBQVNDLHdCQUF3QixRQUFRLHFCQUFxQjtBQUM5RCxTQUFTQyxXQUFXLFFBQVEsZUFBZTtBQUMzQyxTQUFTQyxJQUFJLFFBQVEsUUFBUTtBQUU3QixTQUNFQyxtQkFBbUIsRUFDbkJDLHdCQUF3QixFQUN4QkMsMEJBQTBCLEVBQzFCQyxlQUFlLEVBQ2ZDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ25CQyxlQUFlLEVBQ2ZDLGFBQWEsRUFDYkMsb0JBQW9CLEVBQ3BCQywrQkFBK0IsRUFDL0JDLHlCQUF5QixFQUN6QkMsd0JBQXdCLEVBQ3hCQyxnQ0FBZ0MsRUFDaENDLDZCQUE2QixFQUM3QkMsc0JBQXNCLEVBQ3RCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsMEJBQTBCLEVBQzFCQyx1QkFBdUIsRUFDdkJDLHVCQUF1QixFQUN2QkMsaUNBQWlDLEVBQ2pDQyxzQkFBc0IsRUFDdEJDLHNC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