@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,7 +1,4 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
2
  /* eslint-disable react/function-component-definition */
6
3
  /* eslint-disable jsx-a11y/click-events-have-key-events */
7
4
  /* eslint-disable jsx-a11y/no-static-element-interactions */
@@ -11,9 +8,9 @@ import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
11
8
  import { ListChecklist } from '@projectcor/icons/lib/components/ListChecklist';
12
9
  import { useT } from '../../../hooks/useT';
13
10
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
14
- import { SCCAIHomeContainer, SCCAIHomeScroll, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeTitle, SCCAIHomeTitleBlock, SCCAIHomeSubtitle, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextsSectionHeader, SCCAIHomeRecentContextsSectionTitle, SCCAIHomeRecentContextsSectionSubtitle, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillIcon, SCCAIHomeRecentContextPillText, SCCAIHomeRecentContextPillSkeleton, MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX } from './styles';
11
+ import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeTitle, SCCAIHomeTitleBlock, SCCAIHomeSubtitle, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextsSectionHeader, SCCAIHomeRecentContextsSectionTitle, SCCAIHomeRecentContextsSectionSubtitle, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillIcon, SCCAIHomeRecentContextPillText, SCCAIHomeRecentContextPillSkeleton, MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX } from './styles';
15
12
  import { useGlobalContext } from '../../../context/global-context';
16
- import { useUser, CORUserRole, isCollaboratorRole, isManagerRole } from '../../../context/cor-user';
13
+ import { useUser, isCollaboratorRole, isManagerRole } from '../../../context/cor-user';
17
14
  import { useResizeListener } from '../../../hooks/useResize';
18
15
  import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
19
16
  import { orchestratorHasHoursSubagent } from '../../../utils/orchestratorSubagents';
@@ -29,6 +26,7 @@ import { useRecentContexts } from '../../../hooks/useRecentContexts';
29
26
  import { MAIAIsologo } from '../../atoms/icons/MAIAIsologo';
30
27
  import { TemplateGradientIcon } from '../../atoms/icons/TemplateGradientIcon';
31
28
  import { ChatAIHomeMaiaker } from './ChatAIHomeMaiaker';
29
+ import { resolveActiveContextFromGlobal, resolveAllowedRecentContextTypes, resolveFaqsContextEntityType, resolveFuasSection, resolveHasPinnedContext, resolveHeaderTaskContextSubtitleKey, resolveHomeGreeting, resolveHomeScrollGradients, resolveMaiaHomeLang, resolveOrchestratorHomeLayout, resolvePinnedEntityType, resolveProjectSummaryFeatureAccess, resolveRealListsAgentId, resolveRealListsEntityType, resolveRecentContextPinOutcome, resolveShouldShowFaqs, resolveShouldShowFuas, resolveFloatingCustomCenter, filterRecentContextsByTypes, buildRecentContextSkeletonKeys, resolveShowRecentContextsBlock, resolvePlannerFuasVisibility, resolveHomeDynamicPanelVisibility, resolveMaiaHeaderStackLayout, resolveShowAgentIntroduction, buildFaqsFetchKey, shouldRefetchFaqs, shouldClearPinnedContextOnHomeStart, resolveRecentContextsSectionCopyKeys, resolveOrchestratorRecentContextsSubtitleKey, buildPinGlobalContextPatch, resolveHomeContextGreetingKey, shouldCheckHomeScroll, shouldObserveHomeScrollContent, shouldRenderRecentContextsPanel, shouldResetHomeScrollGradients } from './ChatAIHome.helpers';
32
30
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
33
31
  export var FrequentQuestions = /*#__PURE__*/function (FrequentQuestions) {
34
32
  FrequentQuestions["rentabilidad_proyecto"] = "rentabilidad_proyecto";
@@ -67,21 +65,6 @@ var RecentContextPill = function RecentContextPill(_ref) {
67
65
  })]
68
66
  });
69
67
  };
70
- var parseNumericId = function parseNumericId(value) {
71
- if (value === null || value === undefined || value === '') return null;
72
- var parsed = Number(value);
73
- return Number.isFinite(parsed) ? parsed : null;
74
- };
75
- var getAllowedRecentContextTypes = function getAllowedRecentContextTypes(roleId) {
76
- var normalizedRoleId = Number(roleId);
77
- if (normalizedRoleId === CORUserRole.CLEVEL || normalizedRoleId === CORUserRole.DIRECTOR || normalizedRoleId === CORUserRole.PROJECT_MANAGER) {
78
- return new Set(['client', 'project', 'task']);
79
- }
80
- if (isCollaboratorRole(roleId)) {
81
- return new Set(['task']);
82
- }
83
- return new Set();
84
- };
85
68
  export var ChatAIHome = function ChatAIHome(_ref2) {
86
69
  var handlers = _ref2.handlers,
87
70
  onStartChat = _ref2.onStartChat,
@@ -104,52 +87,49 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
104
87
  setTask = _useGlobalContext.setTask,
105
88
  setChipsProject = _useGlobalContext.setChipsProject;
106
89
  var isMAIA = validateIsMaia(agent);
107
- var floatingCustomCenter = !!(floating && (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom');
108
- var lang = i18n.language === 'br' ? 'pt' : i18n.language;
109
- var summaryProjectAccess = typeof window !== 'undefined' && (String(window.MAIA_PROJECT_SUMMARY_FEATURE_ACCESS).toLowerCase() === 'true' || String(window.maiaProjectSummaryAccess).toLowerCase() === 'true');
90
+ var floatingCustomCenter = resolveFloatingCustomCenter(floating, agent === null || agent === void 0 ? void 0 : agent.type);
91
+ var lang = resolveMaiaHomeLang(i18n.language);
92
+ var summaryProjectAccess = typeof window !== 'undefined' && resolveProjectSummaryFeatureAccess(window);
110
93
  var faqsAccess = true;
111
94
  var showProjectSummary = !!(isMAIA && summaryProjectAccess);
112
95
  // El orchestrator (type === 'orchestrator') muestra FAQs/FUAs agregadas de sus subagentes,
113
96
  // así que NO se trata como maiaker acá.
114
97
  var isMaiaker = isMaiakerAgent(agent);
115
- var isHeaderHome = isMAIA && section === 'header' && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator';
116
- // El orchestrator usa el home en 2 pasos (contextos recientes ↔ FAQs/FUAs) en header/project/client/task.
117
- // En project/client/task, al limpiar el contexto (p. ej. al reseleccionar MAIA
118
- // desde el listado de agentes) se muestra el selector de contextos recientes en lugar de un home vacío.
119
- var isOrchestrator = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator';
120
- // Planner: home de FUAs del orchestrator (sin selector de contextos).
121
- // Si el usuario navega a Maiaker u otro agente, section sigue siendo `planner` pero ya no es este home.
122
- var isPlannerHome = section === 'planner' && isOrchestrator;
123
- // Homes de sección (project/client/task): sin isologo, contenido top-left, columna 448px centrada.
124
- var isSectionOrchestratorHome = isOrchestrator && !isHeaderHome && !isPlannerHome;
125
98
  var hasHoursSubagent = orchestratorHasHoursSubagent(agent);
126
-
127
- // Home del orchestrator en 2 pasos:
128
- // - Paso 1 (sin contexto pineado): se muestran solo los contextos recientes.
129
- // - Paso 2 (contexto pineado): se muestran las FAQs/acciones que referencian ese contexto.
130
- var hasPinnedContext = !!(task !== null && task !== void 0 && task.id || chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId || client !== null && client !== void 0 && client.id || project !== null && project !== void 0 && project.id);
131
- var isRecentContextsStep = isOrchestrator && !hasPinnedContext && !isPlannerHome;
132
- // Header paso 1 compacto (sin isologo, pills full-width): colaborador y managers (C-Level/Director/PM).
133
- var isHeaderTaskContextHome = section === 'header' && isRecentContextsStep && (isCollaboratorRole(user.role_id) || isManagerRole(user.role_id));
134
- // Bloque FUAs planner + sección de contextos recientes con títulos (colaborador o manager con hour).
135
- var isHeaderHoursAgentHome = isHeaderTaskContextHome && hasHoursSubagent;
136
- var isHeaderManagerHoursHome = isHeaderHoursAgentHome && isManagerRole(user.role_id);
137
- var headerTaskContextSubtitleKey = useMemo(function () {
138
- if (isHeaderHoursAgentHome) {
139
- if (isHeaderManagerHoursHome) return 'homeMenu.contextHome.subtitleManagerWithHours';
140
- return 'homeMenu.contextHome.subtitleCollaboratorWithHours';
141
- }
142
- if (isManagerRole(user.role_id)) return 'homeMenu.contextHome.subtitle';
143
- return 'homeMenu.contextHome.subtitleCollaborator';
144
- }, [isHeaderHoursAgentHome, isHeaderManagerHoursHome, user.role_id]);
145
- var isContextHomeStep = isHeaderHome && hasPinnedContext;
146
- // Header paso 2 (FAQs/FUAs con contexto) y homes de sección comparten layout: sin isologo, texto a la izquierda.
147
- var isLeftAlignedOrchestratorHome = isSectionOrchestratorHome || isContextHomeStep;
99
+ var hasPinnedContext = resolveHasPinnedContext({
100
+ taskId: task === null || task === void 0 ? void 0 : task.id,
101
+ chipsProjectId: chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId,
102
+ clientId: client === null || client === void 0 ? void 0 : client.id,
103
+ projectId: project === null || project === void 0 ? void 0 : project.id
104
+ });
105
+ var _resolveOrchestratorH = resolveOrchestratorHomeLayout({
106
+ section: section,
107
+ agentType: agent === null || agent === void 0 ? void 0 : agent.type,
108
+ isMaia: isMAIA,
109
+ hasHoursSubagent: hasHoursSubagent,
110
+ roleId: user.role_id,
111
+ hasPinnedContext: hasPinnedContext
112
+ }),
113
+ isHeaderHome = _resolveOrchestratorH.isHeaderHome,
114
+ isOrchestrator = _resolveOrchestratorH.isOrchestrator,
115
+ isPlannerHome = _resolveOrchestratorH.isPlannerHome,
116
+ isRecentContextsStep = _resolveOrchestratorH.isRecentContextsStep,
117
+ isHeaderTaskContextHome = _resolveOrchestratorH.isHeaderTaskContextHome,
118
+ isHeaderHoursAgentHome = _resolveOrchestratorH.isHeaderHoursAgentHome,
119
+ isHeaderManagerHoursHome = _resolveOrchestratorH.isHeaderManagerHoursHome,
120
+ isContextHomeStep = _resolveOrchestratorH.isContextHomeStep,
121
+ isLeftAlignedOrchestratorHome = _resolveOrchestratorH.isLeftAlignedOrchestratorHome;
122
+ var headerTaskContextSubtitleKey = resolveHeaderTaskContextSubtitleKey({
123
+ isHeaderHoursAgentHome: isHeaderHoursAgentHome,
124
+ isHeaderManagerHoursHome: isHeaderManagerHoursHome,
125
+ isManager: isManagerRole(user.role_id)
126
+ });
148
127
  var allowedRecentContextTypes = useMemo(function () {
149
- if (isHeaderManagerHoursHome) return getAllowedRecentContextTypes(user.role_id);
150
- if (isHeaderTaskContextHome && isManagerRole(user.role_id)) return getAllowedRecentContextTypes(user.role_id);
151
- if (isHeaderTaskContextHome) return new Set(['task']);
152
- return getAllowedRecentContextTypes(user.role_id);
128
+ return resolveAllowedRecentContextTypes({
129
+ isHeaderManagerHoursHome: isHeaderManagerHoursHome,
130
+ isHeaderTaskContextHome: isHeaderTaskContextHome,
131
+ roleId: user.role_id
132
+ });
153
133
  }, [user.role_id, isHeaderManagerHoursHome, isHeaderTaskContextHome]);
154
134
 
155
135
  // Contexto activo para derivar FAQs/acciones (paso 2). Preferimos el pill clickeado;
@@ -162,70 +142,65 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
162
142
  if (!hasPinnedContext) setSelectedContext(null);
163
143
  }, [hasPinnedContext]);
164
144
  var activeContext = useMemo(function () {
165
- if (selectedContext) return selectedContext;
166
- if (!isContextHomeStep) return null;
167
- if (task !== null && task !== void 0 && task.id) return {
168
- type: 'task',
169
- id: task.id,
170
- name: task.name
171
- };
172
- if (chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId) return {
173
- type: 'project',
174
- id: chipsProject.projectId,
175
- name: chipsProject.projectName
176
- };
177
- if (client !== null && client !== void 0 && client.id) return {
178
- type: 'client',
179
- id: client.id,
180
- name: client.name
181
- };
182
- return null;
145
+ return resolveActiveContextFromGlobal({
146
+ isContextHomeStep: isContextHomeStep,
147
+ selectedContext: selectedContext,
148
+ task: task !== null && task !== void 0 && task.id ? {
149
+ id: task.id,
150
+ name: task.name
151
+ } : null,
152
+ chipsProject: chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId ? {
153
+ projectId: chipsProject.projectId,
154
+ projectName: chipsProject.projectName
155
+ } : null,
156
+ client: client !== null && client !== void 0 && client.id ? {
157
+ id: client.id,
158
+ name: client.name
159
+ } : null
160
+ });
183
161
  }, [selectedContext, isContextHomeStep, task === null || task === void 0 ? void 0 : task.id, task === null || task === void 0 ? void 0 : task.name, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectName, client === null || client === void 0 ? void 0 : client.id, client === null || client === void 0 ? void 0 : client.name]);
184
-
185
- // entity_type del contexto pineado (project/client/task), tomado del contexto global.
186
- // Aplica tanto al abrir MAIA desde una sección específica como al cambiar de conversación.
187
162
  var pinnedEntityType = useMemo(function () {
188
- if (task !== null && task !== void 0 && task.id) return 'task';
189
- if (chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId || project !== null && project !== void 0 && project.id) return 'project';
190
- if (client !== null && client !== void 0 && client.id) return 'client';
191
- return undefined;
163
+ return resolvePinnedEntityType({
164
+ taskId: task === null || task === void 0 ? void 0 : task.id,
165
+ chipsProjectId: chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId,
166
+ clientId: client === null || client === void 0 ? void 0 : client.id,
167
+ projectId: project === null || project === void 0 ? void 0 : project.id
168
+ });
192
169
  }, [task === null || task === void 0 ? void 0 : task.id, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, project === null || project === void 0 ? void 0 : project.id, client === null || client === void 0 ? void 0 : client.id]);
193
-
194
- // FAQs solo con contexto cliente pineado (header paso 2 o sección client).
195
- // Proyecto, tarea y planner muestran solo FUAs.
196
170
  var faqsContextEntityType = useMemo(function () {
197
- if (isPlannerHome || isRecentContextsStep) return undefined;
198
- if (isHeaderHome) {
199
- var _activeContext$type;
200
- return isContextHomeStep ? (_activeContext$type = activeContext === null || activeContext === void 0 ? void 0 : activeContext.type) !== null && _activeContext$type !== void 0 ? _activeContext$type : pinnedEntityType : undefined;
201
- }
202
- return pinnedEntityType;
171
+ return resolveFaqsContextEntityType({
172
+ isPlannerHome: isPlannerHome,
173
+ isRecentContextsStep: isRecentContextsStep,
174
+ isHeaderHome: isHeaderHome,
175
+ isContextHomeStep: isContextHomeStep,
176
+ activeContextType: activeContext === null || activeContext === void 0 ? void 0 : activeContext.type,
177
+ pinnedEntityType: pinnedEntityType
178
+ });
203
179
  }, [isPlannerHome, isRecentContextsStep, isHeaderHome, isContextHomeStep, activeContext === null || activeContext === void 0 ? void 0 : activeContext.type, pinnedEntityType]);
204
180
  var isClientContextForFaqs = faqsContextEntityType === 'client';
205
181
  // `section` que se consulta para las FUAs: en no-header sigue el tipo de contexto pineado.
206
182
  // En planner se fuerza la section API `planner`.
207
- var fuasSection = function () {
208
- if (isPlannerHome) return 'planner';
209
- if (!isHeaderHome && pinnedEntityType) return pinnedEntityType;
210
- return section;
211
- }();
212
-
213
- // FAQs/acciones:
214
- // - header-home (orchestrator), paso 2: filtradas por `entity_type` del contexto seleccionado.
215
- // - homes de proyecto/cliente/tarea (sección): filtradas por el `entity_type` del contexto seteado.
216
- // - planner: FUAs con section=planner, sin entity_type ni FAQs.
217
- var realListsAgentId = function () {
218
- if (!isMAIA || isMaiaker) return undefined;
219
- // Paso 1 (contextos recientes, sin contexto): no se piden FAQs/FUAs.
220
- if (isRecentContextsStep) return undefined;
221
- if (isHeaderHome) return isContextHomeStep ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
222
- return agent === null || agent === void 0 ? void 0 : agent.id;
223
- }();
224
- var realListsEntityType = function (_activeContext$type2) {
225
- if (isPlannerHome) return 'planner';
226
- if (!isHeaderHome) return pinnedEntityType;
227
- return isContextHomeStep ? (_activeContext$type2 = activeContext === null || activeContext === void 0 ? void 0 : activeContext.type) !== null && _activeContext$type2 !== void 0 ? _activeContext$type2 : pinnedEntityType : undefined;
228
- }();
183
+ var fuasSection = resolveFuasSection({
184
+ isPlannerHome: isPlannerHome,
185
+ isHeaderHome: isHeaderHome,
186
+ pinnedEntityType: pinnedEntityType,
187
+ section: section
188
+ });
189
+ var realListsAgentId = resolveRealListsAgentId({
190
+ isMaia: isMAIA,
191
+ isMaiaker: isMaiaker,
192
+ isRecentContextsStep: isRecentContextsStep,
193
+ isHeaderHome: isHeaderHome,
194
+ isContextHomeStep: isContextHomeStep,
195
+ agentId: agent === null || agent === void 0 ? void 0 : agent.id
196
+ });
197
+ var realListsEntityType = resolveRealListsEntityType({
198
+ isPlannerHome: isPlannerHome,
199
+ isHeaderHome: isHeaderHome,
200
+ isContextHomeStep: isContextHomeStep,
201
+ activeContextType: activeContext === null || activeContext === void 0 ? void 0 : activeContext.type,
202
+ pinnedEntityType: pinnedEntityType
203
+ });
229
204
  var _useFrequentlyUsedAct = useFrequentlyUsedActions(realListsAgentId, fuasSection, realListsEntityType),
230
205
  agentFuas = _useFrequentlyUsedAct.actions,
231
206
  fuasLoading = _useFrequentlyUsedAct.loading;
@@ -235,12 +210,6 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
235
210
  var _useFrequentlyUsedAct3 = useFrequentlyUsedActions(isHeaderManagerHoursHome ? agent === null || agent === void 0 ? void 0 : agent.id : undefined, 'home_with_hours'),
236
211
  managerHomeFuas = _useFrequentlyUsedAct3.actions,
237
212
  managerHomeFuasLoading = _useFrequentlyUsedAct3.loading;
238
- // A11: my-day + should-review CTAs only for collaborator (role_id=4) + fullscreen header home.
239
- // Both FUAs share section=home_collaborator (order 1 my-day / order 2 should-review).
240
- var shouldFetchCollaboratorFullscreenFuas = Boolean(expanded && isCollaboratorRole(user.role_id) && isHeaderHome);
241
- var _useFrequentlyUsedAct4 = useFrequentlyUsedActions(shouldFetchCollaboratorFullscreenFuas ? agent === null || agent === void 0 ? void 0 : agent.id : undefined, 'home_collaborator'),
242
- collaboratorFullscreenFuas = _useFrequentlyUsedAct4.actions,
243
- collaboratorFullscreenFuasLoading = _useFrequentlyUsedAct4.loading;
244
213
  var headerHoursFuas = useMemo(function () {
245
214
  if (isHeaderManagerHoursHome) return sortManagerHoursHomeFuas(managerHomeFuas);
246
215
  return collaboratorPlannerFuas;
@@ -260,16 +229,10 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
260
229
  fetchedRecentContexts = _useRecentContexts.contexts,
261
230
  recentContextsLoading = _useRecentContexts.loading;
262
231
  var recentContexts = useMemo(function () {
263
- return fetchedRecentContexts.filter(function (context) {
264
- return allowedRecentContextTypes.has(context.type);
265
- });
232
+ return filterRecentContextsByTypes(fetchedRecentContexts, allowedRecentContextTypes);
266
233
  }, [fetchedRecentContexts, allowedRecentContextTypes]);
267
234
  var recentContextSkeletonKeys = useMemo(function () {
268
- return Array.from({
269
- length: recentContextsLimit
270
- }, function (_, index) {
271
- return "recent-context-skeleton-".concat(index + 1);
272
- });
235
+ return buildRecentContextSkeletonKeys(recentContextsLimit);
273
236
  }, [recentContextsLimit]);
274
237
  var faqsListAgentId = isClientContextForFaqs ? realListsAgentId : undefined;
275
238
  var faqsListEntityType = isClientContextForFaqs ? realListsEntityType : undefined;
@@ -279,12 +242,11 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
279
242
  handleGetFrequentlyAskedQuestions = _useFrequentlyAskedQu.handleGetFrequentlyAskedQuestions;
280
243
  var faqsFetchRef = useRef(null);
281
244
  useEffect(function () {
282
- var _faqsFetchRef$current;
283
245
  // FAQs solo para contexto cliente; el resto muestra solo FUAs.
284
246
  if (!realListsAgentId || !isClientContextForFaqs) return;
285
- var currentKey = "".concat(realListsAgentId, "-").concat(lang, "-").concat(realListsEntityType !== null && realListsEntityType !== void 0 ? realListsEntityType : 'all');
286
- var lastKey = faqsFetchRef.current ? "".concat(faqsFetchRef.current.agentId, "-").concat(faqsFetchRef.current.lang, "-").concat((_faqsFetchRef$current = faqsFetchRef.current.entityType) !== null && _faqsFetchRef$current !== void 0 ? _faqsFetchRef$current : 'all') : null;
287
- if (currentKey !== lastKey) {
247
+ var currentKey = buildFaqsFetchKey(realListsAgentId, lang, realListsEntityType);
248
+ var lastKey = faqsFetchRef.current ? buildFaqsFetchKey(faqsFetchRef.current.agentId, faqsFetchRef.current.lang, faqsFetchRef.current.entityType) : null;
249
+ if (shouldRefetchFaqs(currentKey, lastKey)) {
288
250
  faqsFetchRef.current = {
289
251
  agentId: realListsAgentId,
290
252
  lang: lang,
@@ -301,19 +263,44 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
301
263
  var fuas = agentFuas;
302
264
  var faqsAreLoading = faqsLoading;
303
265
  var fuasAreLoading = fuasLoading;
304
- var showRecentContextsBlock = isRecentContextsStep && (recentContextsLoading || recentContexts.length > 0);
305
- var shouldShowFaqs = isMAIA && isClientContextForFaqs && !isRecentContextsStep && (isContextHomeStep || !isHeaderHome && faqsAccess) && !isMaiaker && (faqs.length > 0 || faqsAreLoading);
306
- var shouldShowFuas = !isRecentContextsStep && !isMaiaker && (isContextHomeStep || !isHeaderHome) && (fuas.length > 0 || fuasAreLoading);
307
- var shouldShowPlannerFuasLoading = isHeaderHoursAgentHome && headerHoursFuasLoading && headerHoursFuas.length === 0;
308
- var shouldShowPlannerFuasContent = isHeaderHoursAgentHome && headerHoursFuas.length > 0;
309
- var shouldShowPlannerFuas = shouldShowPlannerFuasLoading || shouldShowPlannerFuasContent;
310
- var shouldShowCollaboratorFullscreenFuasLoading = shouldFetchCollaboratorFullscreenFuas && collaboratorFullscreenFuasLoading && collaboratorFullscreenFuas.length === 0;
311
- var shouldShowCollaboratorFullscreenFuasContent = shouldFetchCollaboratorFullscreenFuas && collaboratorFullscreenFuas.length > 0;
312
- var shouldShowCollaboratorFullscreenFuas = shouldShowCollaboratorFullscreenFuasLoading || shouldShowCollaboratorFullscreenFuasContent;
266
+ var shouldShowFaqs = resolveShouldShowFaqs({
267
+ isMaia: isMAIA,
268
+ isClientContextForFaqs: isClientContextForFaqs,
269
+ isRecentContextsStep: isRecentContextsStep,
270
+ isContextHomeStep: isContextHomeStep,
271
+ isHeaderHome: isHeaderHome,
272
+ faqsAccess: faqsAccess,
273
+ isMaiaker: isMaiaker,
274
+ faqsCount: faqs.length,
275
+ faqsLoading: faqsAreLoading
276
+ });
277
+ var shouldShowFuas = resolveShouldShowFuas({
278
+ isRecentContextsStep: isRecentContextsStep,
279
+ isMaiaker: isMaiaker,
280
+ isContextHomeStep: isContextHomeStep,
281
+ isHeaderHome: isHeaderHome,
282
+ fuasCount: fuas.length,
283
+ fuasLoading: fuasAreLoading
284
+ });
285
+ var _resolvePlannerFuasVi = resolvePlannerFuasVisibility({
286
+ isHeaderHoursAgentHome: isHeaderHoursAgentHome,
287
+ headerHoursFuasLoading: headerHoursFuasLoading,
288
+ headerHoursFuasCount: headerHoursFuas.length
289
+ }),
290
+ shouldShowPlannerFuas = _resolvePlannerFuasVi.shouldShowPlannerFuas;
313
291
  var showProjectSummaryCard = showProjectSummary && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project';
314
- var showFAQs = !!(showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || shouldShowPlannerFuas || shouldShowCollaboratorFullscreenFuas || showProjectSummaryCard || isMaiaker);
315
- var homeScrollableLayout = showFAQs;
316
- var showDynamicSection = showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || shouldShowPlannerFuas || shouldShowCollaboratorFullscreenFuas || isMaiaker;
292
+ var showRecentContextsBlock = resolveShowRecentContextsBlock(isRecentContextsStep, recentContextsLoading, recentContexts.length);
293
+ var _resolveHomeDynamicPa = resolveHomeDynamicPanelVisibility({
294
+ showRecentContextsBlock: showRecentContextsBlock,
295
+ shouldShowFaqs: shouldShowFaqs,
296
+ shouldShowFuas: shouldShowFuas,
297
+ shouldShowPlannerFuas: shouldShowPlannerFuas,
298
+ isMaiaker: isMaiaker,
299
+ showProjectSummaryCard: showProjectSummaryCard
300
+ }),
301
+ showFAQs = _resolveHomeDynamicPa.showFAQs,
302
+ showDynamicSection = _resolveHomeDynamicPa.showDynamicSection,
303
+ homeScrollableLayout = _resolveHomeDynamicPa.homeScrollableLayout;
317
304
 
318
305
  // Lógica del scroll con gradientes
319
306
  var contentContainerRef = useRef(null);
@@ -334,97 +321,43 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
334
321
  // Saludo fijo por tipo de contexto (i18n). Custom agents siguen usando agent.introduction.
335
322
  // Planner usa título + bajada propios (`plannerHome`), no este greeting.
336
323
  var greeting = useMemo(function () {
337
- if (isMaiaker || isPlannerHome || isRecentContextsStep) return '';
338
- if (isMAIA && pinnedEntityType) {
339
- return t("homeMenu.contextHome.contextGreeting.".concat(pinnedEntityType));
340
- }
341
- var intro = agent === null || agent === void 0 ? void 0 : agent.introduction;
342
- if (!intro) return '';
343
- if (Array.isArray(intro) && intro.length > 0) {
344
- return intro[Math.floor(Math.random() * intro.length)];
345
- }
346
- return typeof intro === 'string' ? intro : '';
324
+ var _agent$introduction;
325
+ return resolveHomeGreeting({
326
+ isMaiaker: isMaiaker,
327
+ isPlannerHome: isPlannerHome,
328
+ isRecentContextsStep: isRecentContextsStep,
329
+ isMaia: isMAIA,
330
+ pinnedEntityType: pinnedEntityType,
331
+ contextGreeting: function () {
332
+ var greetingKey = resolveHomeContextGreetingKey(isMAIA, pinnedEntityType);
333
+ return greetingKey ? t(greetingKey) : undefined;
334
+ }(),
335
+ agentIntroduction: (_agent$introduction = agent === null || agent === void 0 ? void 0 : agent.introduction) !== null && _agent$introduction !== void 0 ? _agent$introduction : undefined
336
+ });
347
337
  }, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.introduction, isMaiaker, isPlannerHome, isMAIA, pinnedEntityType, isRecentContextsStep, t]);
348
338
  var handleSelectRecentContext = useCallback(function (context, order) {
349
- var _context$parents, _context$parents2, _context$parents3, _context$parents4;
350
339
  event(EVENTS.aiChatContextSelected, {
351
340
  order: order,
352
341
  type: context.type
353
342
  });
354
- var contextId = parseNumericId(context.id);
355
- var clientId = parseNumericId((_context$parents = context.parents) === null || _context$parents === void 0 ? void 0 : _context$parents.client_id);
356
- var projectId = parseNumericId((_context$parents2 = context.parents) === null || _context$parents2 === void 0 ? void 0 : _context$parents2.project_id);
357
- var clientName = ((_context$parents3 = context.parents) === null || _context$parents3 === void 0 ? void 0 : _context$parents3.client_name) || '';
358
- var projectName = ((_context$parents4 = context.parents) === null || _context$parents4 === void 0 ? void 0 : _context$parents4.project_name) || '';
343
+ var pinOutcome = resolveRecentContextPinOutcome(context, t('homeMenu.recentContexts.types.project'));
359
344
  setSelectedContext(context);
360
345
  setTask(null);
361
346
  setProject(null);
362
347
  setClient === null || setClient === void 0 || setClient(null);
363
348
  setChipsProject(null);
364
- if (context.type === 'client') {
365
- if (contextId == null) return;
366
- setClient === null || setClient === void 0 || setClient({
367
- id: contextId,
368
- name: context.name
369
- });
370
- } else if (context.type === 'project') {
371
- if (contextId == null) return;
372
- setProject(_objectSpread(_objectSpread({
373
- id: contextId,
374
- name: context.name
375
- }, clientId != null ? {
376
- clientId: clientId
377
- } : {}), clientId != null ? {
378
- client: {
379
- id: clientId,
380
- name: clientName
381
- }
382
- } : {}));
383
- setChipsProject({
384
- projectId: String(contextId),
385
- projectName: context.name,
386
- clientName: clientName
387
- });
388
- } else if (context.type === 'task') {
389
- setTask(_objectSpread(_objectSpread({
390
- id: context.id,
391
- name: context.name
392
- }, projectId != null ? {
393
- projectId: projectId
394
- } : {}), clientId != null ? {
395
- clientId: clientId
396
- } : {}));
397
- if (clientId != null) {
398
- setClient === null || setClient === void 0 || setClient({
399
- id: clientId,
400
- name: clientName
401
- });
402
- }
403
- if (projectId != null) {
404
- setProject(_objectSpread(_objectSpread({
405
- id: projectId,
406
- name: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId)
407
- }, clientId != null ? {
408
- clientId: clientId
409
- } : {}), clientId != null ? {
410
- client: {
411
- id: clientId,
412
- name: clientName
413
- }
414
- } : {}));
415
- setChipsProject({
416
- projectId: String(projectId),
417
- projectName: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId),
418
- clientName: clientName
419
- });
420
- }
421
- }
349
+ var contextPatch = buildPinGlobalContextPatch(pinOutcome);
350
+ if (!contextPatch) return;
351
+ setClient === null || setClient === void 0 || setClient(contextPatch.client);
352
+ setProject(contextPatch.project);
353
+ setTask(contextPatch.task);
354
+ setChipsProject(contextPatch.chipsProject);
422
355
  requestAnimationFrame(function () {
423
356
  document.dispatchEvent(new CustomEvent('maia-input-refocus'));
424
357
  });
425
358
  }, [event, setChipsProject, setClient, setProject, setTask, t]);
426
- var handleHomeStartChat = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData) {
427
- if (isHeaderManagerHoursHome && fuaId) {
359
+ var handleHomeStartChat = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId) {
360
+ if (shouldClearPinnedContextOnHomeStart(isHeaderManagerHoursHome, fuaId)) {
428
361
  flushSync(function () {
429
362
  setSelectedContext(null);
430
363
  setTask(null);
@@ -433,18 +366,27 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
433
366
  setChipsProject(null);
434
367
  });
435
368
  }
436
- onStartChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData);
369
+ onStartChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId);
437
370
  }, [isHeaderManagerHoursHome, onStartChat, setChipsProject, setClient, setProject, setTask]);
438
371
  var renderRecentContexts = function renderRecentContexts() {
439
- if (!isRecentContextsStep) return null;
372
+ if (!shouldRenderRecentContextsPanel(isRecentContextsStep)) return null;
440
373
  return /*#__PURE__*/_jsxs(SCCAIHomeRecentContexts, {
441
374
  $fixedContentWidth: isHeaderTaskContextHome ? MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX : undefined,
442
- children: [isHeaderHoursAgentHome ? /*#__PURE__*/_jsxs(SCCAIHomeRecentContextsSectionHeader, {
443
- children: [/*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionTitle, {
444
- children: t(isHeaderManagerHoursHome ? 'homeMenu.contextHome.recentContextsSectionManager.title' : 'homeMenu.contextHome.recentTasksSection.title')
445
- }), /*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionSubtitle, {
446
- children: t(isHeaderManagerHoursHome ? 'homeMenu.contextHome.recentContextsSectionManager.subtitle' : 'homeMenu.contextHome.recentTasksSection.subtitle')
447
- })]
375
+ children: [isHeaderHoursAgentHome ? /*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionHeader, {
376
+ children: function () {
377
+ var _resolveRecentContext = resolveRecentContextsSectionCopyKeys({
378
+ isHeaderManagerHoursHome: isHeaderManagerHoursHome
379
+ }),
380
+ titleKey = _resolveRecentContext.titleKey,
381
+ subtitleKey = _resolveRecentContext.subtitleKey;
382
+ return /*#__PURE__*/_jsxs(_Fragment, {
383
+ children: [/*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionTitle, {
384
+ children: t(titleKey)
385
+ }), /*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionSubtitle, {
386
+ children: t(subtitleKey)
387
+ })]
388
+ });
389
+ }()
448
390
  }) : null, /*#__PURE__*/_jsxs(SCCAIHomeRecentContextsList, {
449
391
  $flushPills: isHeaderTaskContextHome,
450
392
  children: [recentContextsLoading && recentContextSkeletonKeys.map(function (key) {
@@ -464,15 +406,13 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
464
406
  };
465
407
  var checkScroll = useCallback(function () {
466
408
  var container = contentContainerRef.current;
467
- if (!container || !homeScrollableLayout) return;
409
+ if (!container || !shouldCheckHomeScroll(container, homeScrollableLayout)) return;
468
410
  var scrollTop = container.scrollTop,
469
411
  scrollHeight = container.scrollHeight,
470
412
  clientHeight = container.clientHeight;
471
- var isScrollable = scrollHeight > clientHeight;
472
- var isAtTop = scrollTop === 0;
473
- var isAtBottom = scrollTop + clientHeight >= scrollHeight - 1;
474
- setShowTopGradient(isScrollable && !isAtTop);
475
- setShowBottomGradient(isScrollable && !isAtBottom);
413
+ var gradients = resolveHomeScrollGradients(scrollTop, scrollHeight, clientHeight);
414
+ setShowTopGradient(gradients.showTop);
415
+ setShowBottomGradient(gradients.showBottom);
476
416
  }, [homeScrollableLayout]);
477
417
  var handleScroll = useCallback(function () {
478
418
  checkScroll();
@@ -485,7 +425,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
485
425
  }, 150);
486
426
  }, [checkScroll]);
487
427
  useEffect(function () {
488
- if (!homeScrollableLayout) {
428
+ if (shouldResetHomeScrollGradients(homeScrollableLayout)) {
489
429
  setShowTopGradient(false);
490
430
  setShowBottomGradient(false);
491
431
  return undefined;
@@ -504,7 +444,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
504
444
  var resizeObserver = new ResizeObserver(scheduleCheckScroll);
505
445
  resizeObserver.observe(container);
506
446
  var scrollContent = container.firstElementChild;
507
- if (scrollContent instanceof Element) {
447
+ if (shouldObserveHomeScrollContent(scrollContent)) {
508
448
  resizeObserver.observe(scrollContent);
509
449
  }
510
450
  var timeoutId = window.setTimeout(scheduleCheckScroll, 100);
@@ -541,8 +481,15 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
541
481
  })]
542
482
  });
543
483
  }
544
- var contentAlignStart = isPlannerHome || isHeaderTaskContextHome || isLeftAlignedOrchestratorHome;
545
- var maiaHeaderStackNeedsGap = isRecentContextsStep && !isHeaderTaskContextHome && !isPlannerHome || !isRecentContextsStep && !!greeting && !isPlannerHome && !isHeaderTaskContextHome && !isLeftAlignedOrchestratorHome;
484
+ var _resolveMaiaHeaderSta = resolveMaiaHeaderStackLayout({
485
+ isPlannerHome: isPlannerHome,
486
+ isHeaderTaskContextHome: isHeaderTaskContextHome,
487
+ isLeftAlignedOrchestratorHome: isLeftAlignedOrchestratorHome,
488
+ isRecentContextsStep: isRecentContextsStep,
489
+ hasGreeting: Boolean(greeting)
490
+ }),
491
+ contentAlignStart = _resolveMaiaHeaderSta.contentAlignStart,
492
+ maiaHeaderStackNeedsGap = _resolveMaiaHeaderSta.maiaHeaderStackNeedsGap;
546
493
  return /*#__PURE__*/_jsxs(SCCAIHomeMaiaHeaderStack, {
547
494
  $noGap: !maiaHeaderStackNeedsGap,
548
495
  $align: contentAlignStart ? 'start' : 'center',
@@ -583,7 +530,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
583
530
  })
584
531
  }), /*#__PURE__*/_jsx(SCCAIHomeSubtitle, {
585
532
  $align: isLeftAlignedOrchestratorHome ? 'start' : undefined,
586
- children: t(isCollaboratorRole(user.role_id) ? 'homeMenu.contextHome.subtitleCollaborator' : 'homeMenu.contextHome.subtitle')
533
+ children: t(resolveOrchestratorRecentContextsSubtitleKey(isCollaboratorRole(user.role_id)))
587
534
  })]
588
535
  }), !isPlannerHome && !isRecentContextsStep && greeting && /*#__PURE__*/_jsx(SCCAIHomeGreeting, {
589
536
  $align: isLeftAlignedOrchestratorHome ? 'start' : undefined,
@@ -592,96 +539,94 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
592
539
  })]
593
540
  });
594
541
  };
595
- var fixedHomeContentWidth = isHeaderTaskContextHome || isLeftAlignedOrchestratorHome ? MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX : undefined;
596
- var contentAlignStart = isPlannerHome || isHeaderTaskContextHome || isLeftAlignedOrchestratorHome;
597
- var showAgentIntroduction = section !== 'project' && !isMAIA && !!(agent !== null && agent !== void 0 && agent.introduction);
598
- var homeMain = /*#__PURE__*/_jsx(SCCAIHomeContent, {
599
- showFAQs: homeScrollableLayout,
600
- $isAgentView: !isMAIA,
601
- $floatingCustomCenter: floatingCustomCenter,
602
- $centerVertically: isPlannerHome,
542
+ var _resolveMaiaHeaderSta2 = resolveMaiaHeaderStackLayout({
543
+ isPlannerHome: isPlannerHome,
544
+ isHeaderTaskContextHome: isHeaderTaskContextHome,
545
+ isLeftAlignedOrchestratorHome: isLeftAlignedOrchestratorHome,
546
+ isRecentContextsStep: isRecentContextsStep,
547
+ hasGreeting: Boolean(greeting)
548
+ }),
549
+ contentAlignStart = _resolveMaiaHeaderSta2.contentAlignStart,
550
+ fixedHomeContentWidthCollaborator = _resolveMaiaHeaderSta2.fixedHomeContentWidthCollaborator;
551
+ var fixedHomeContentWidth = fixedHomeContentWidthCollaborator ? MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX : undefined;
552
+ var showAgentIntroduction = resolveShowAgentIntroduction(section, isMAIA, Boolean(agent === null || agent === void 0 ? void 0 : agent.introduction));
553
+ return /*#__PURE__*/_jsxs(SCCAIHomeContainer, {
554
+ showFAQs: showFAQs,
603
555
  $alignStart: isLeftAlignedOrchestratorHome,
604
- $fixedContentWidth: fixedHomeContentWidth,
605
- children: /*#__PURE__*/_jsxs(SCCAIHomeContentInner, {
556
+ children: [homeScrollableLayout && /*#__PURE__*/_jsx(SCCAIHomeGradientTop, {
557
+ $show: showTopGradient
558
+ }), /*#__PURE__*/_jsx(SCCAIHomeContent, {
559
+ ref: contentContainerRef,
606
560
  showFAQs: homeScrollableLayout,
607
561
  $isAgentView: !isMAIA,
608
562
  $floatingCustomCenter: floatingCustomCenter,
609
563
  $centerVertically: isPlannerHome,
610
- $alignStart: isHeaderTaskContextHome || isLeftAlignedOrchestratorHome,
611
- $headerCollaboratorHome: isHeaderTaskContextHome,
612
- $sectionOrchestratorHome: isLeftAlignedOrchestratorHome,
613
- children: [/*#__PURE__*/_jsxs(SCCAIHomeHeader, {
614
- $gap: showAgentIntroduction ? '20px' : '0',
615
- $maxWidth: isMAIA ? '100%' : '380px',
564
+ $alignStart: isLeftAlignedOrchestratorHome,
565
+ $fixedContentWidth: fixedHomeContentWidth,
566
+ children: /*#__PURE__*/_jsxs(SCCAIHomeContentInner, {
567
+ showFAQs: homeScrollableLayout,
616
568
  $isAgentView: !isMAIA,
617
- $align: contentAlignStart ? 'start' : 'center',
618
- children: [renderHeaderContent(), showAgentIntroduction ? /*#__PURE__*/_jsx(SCCAIHomeIntroduction, {
619
- expanded: expanded,
620
- children: agent.introduction
621
- }) : null]
622
- }), showProjectSummaryCard && /*#__PURE__*/_jsxs(SCCAHWrapperSummaryProject, {
623
- onClick: handlers.projectSummary,
624
- children: [/*#__PURE__*/_jsx(SCCAIHomeProjectSummary, {
625
- children: /*#__PURE__*/_jsx(TemplateGradientIcon, {
626
- height: 24,
627
- width: 24
628
- })
629
- }), /*#__PURE__*/_jsxs(SCCAIHomeProjectSummaryContent, {
630
- children: [/*#__PURE__*/_jsx(SCCAIHomeProjectSummaryTitle, {
631
- children: t('homeMenu.projectSummary.title')
632
- }), /*#__PURE__*/_jsx(SCCAIHomeProjectSummaryDescription, {
633
- children: t('homeMenu.projectSummary.description')
569
+ $floatingCustomCenter: floatingCustomCenter,
570
+ $centerVertically: isPlannerHome,
571
+ $alignStart: isHeaderTaskContextHome || isLeftAlignedOrchestratorHome,
572
+ $headerCollaboratorHome: isHeaderTaskContextHome,
573
+ $sectionOrchestratorHome: isLeftAlignedOrchestratorHome,
574
+ children: [/*#__PURE__*/_jsxs(SCCAIHomeHeader, {
575
+ $gap: showAgentIntroduction ? '20px' : '0',
576
+ $maxWidth: isMAIA ? '100%' : '380px',
577
+ $isAgentView: !isMAIA,
578
+ $align: contentAlignStart ? 'start' : 'center',
579
+ children: [renderHeaderContent(), showAgentIntroduction && agent ? /*#__PURE__*/_jsx(SCCAIHomeIntroduction, {
580
+ expanded: expanded,
581
+ children: agent.introduction
582
+ }) : null]
583
+ }), showProjectSummaryCard && /*#__PURE__*/_jsxs(SCCAHWrapperSummaryProject, {
584
+ onClick: handlers.projectSummary,
585
+ children: [/*#__PURE__*/_jsx(SCCAIHomeProjectSummary, {
586
+ children: /*#__PURE__*/_jsx(TemplateGradientIcon, {
587
+ height: 24,
588
+ width: 24
589
+ })
590
+ }), /*#__PURE__*/_jsxs(SCCAIHomeProjectSummaryContent, {
591
+ children: [/*#__PURE__*/_jsx(SCCAIHomeProjectSummaryTitle, {
592
+ children: t('homeMenu.projectSummary.title')
593
+ }), /*#__PURE__*/_jsx(SCCAIHomeProjectSummaryDescription, {
594
+ children: t('homeMenu.projectSummary.description')
595
+ })]
634
596
  })]
597
+ }), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
598
+ $grow: isMaiaker,
599
+ $alignStart: isHeaderTaskContextHome || isLeftAlignedOrchestratorHome,
600
+ children: [shouldShowPlannerFuas ? /*#__PURE__*/_jsx(FrequentlyUsedActions, {
601
+ variant: "planner",
602
+ onStartChat: handleHomeStartChat,
603
+ agentId: agent === null || agent === void 0 ? void 0 : agent.id,
604
+ isScrolling: isScrolling,
605
+ actions: headerHoursFuas,
606
+ loading: headerHoursFuasLoading
607
+ }) : null, renderRecentContexts(), shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
608
+ onStartChat: onStartChat,
609
+ showFAQs: showFAQs,
610
+ showProjectSummary: showProjectSummary,
611
+ agentId: agent === null || agent === void 0 ? void 0 : agent.id,
612
+ lang: lang,
613
+ isScrolling: isScrolling,
614
+ faqs: faqs,
615
+ loading: faqsAreLoading
616
+ }), shouldShowFuas && /*#__PURE__*/_jsx(FrequentlyUsedActions, {
617
+ onStartChat: onStartChat,
618
+ agentId: agent === null || agent === void 0 ? void 0 : agent.id,
619
+ isScrolling: isScrolling,
620
+ actions: fuas,
621
+ loading: fuasAreLoading
622
+ }), isMaiaker ? /*#__PURE__*/_jsx(ChatAIHomeMaiaker, {
623
+ onStartChat: onStartChat
624
+ }) : null]
635
625
  })]
636
- }), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
637
- $grow: isMaiaker,
638
- $alignStart: isHeaderTaskContextHome || isLeftAlignedOrchestratorHome,
639
- children: [shouldShowCollaboratorFullscreenFuas ? /*#__PURE__*/_jsx(FrequentlyUsedActions, {
640
- onStartChat: handleHomeStartChat,
641
- agentId: agent === null || agent === void 0 ? void 0 : agent.id,
642
- isScrolling: isScrolling,
643
- actions: collaboratorFullscreenFuas,
644
- loading: collaboratorFullscreenFuasLoading
645
- }) : null, shouldShowPlannerFuas ? /*#__PURE__*/_jsx(FrequentlyUsedActions, {
646
- variant: "planner",
647
- onStartChat: handleHomeStartChat,
648
- agentId: agent === null || agent === void 0 ? void 0 : agent.id,
649
- isScrolling: isScrolling,
650
- actions: headerHoursFuas,
651
- loading: headerHoursFuasLoading
652
- }) : null, renderRecentContexts(), shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
653
- onStartChat: onStartChat,
654
- showFAQs: showFAQs,
655
- showProjectSummary: showProjectSummary,
656
- agentId: agent === null || agent === void 0 ? void 0 : agent.id,
657
- lang: lang,
658
- isScrolling: isScrolling,
659
- faqs: faqs,
660
- loading: faqsAreLoading
661
- }), shouldShowFuas && /*#__PURE__*/_jsx(FrequentlyUsedActions, {
662
- onStartChat: onStartChat,
663
- agentId: agent === null || agent === void 0 ? void 0 : agent.id,
664
- isScrolling: isScrolling,
665
- actions: fuas,
666
- loading: fuasAreLoading
667
- }), isMaiaker ? /*#__PURE__*/_jsx(ChatAIHomeMaiaker, {
668
- onStartChat: onStartChat
669
- }) : null]
670
- })]
671
- })
672
- });
673
- return /*#__PURE__*/_jsxs(SCCAIHomeContainer, {
674
- showFAQs: showFAQs,
675
- $alignStart: isLeftAlignedOrchestratorHome,
676
- children: [homeScrollableLayout && /*#__PURE__*/_jsx(SCCAIHomeGradientTop, {
677
- $show: showTopGradient
678
- }), homeScrollableLayout ? /*#__PURE__*/_jsx(SCCAIHomeScroll, {
679
- ref: contentContainerRef,
680
- $scrollable: true,
681
- children: homeMain
682
- }) : homeMain, homeScrollableLayout && /*#__PURE__*/_jsx(SCCAIHomeGradientBottom, {
626
+ })
627
+ }), homeScrollableLayout && /*#__PURE__*/_jsx(SCCAIHomeGradientBottom, {
683
628
  $show: showBottomGradient
684
629
  })]
685
630
  });
686
631
  };
687
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImZsdXNoU3luYyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lU2Nyb2xsIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lVGl0bGVCbG9jayIsIlNDQ0FJSG9tZVN1YnRpdGxlIiwiU0NDQUlIb21lRHluYW1pY1NlY3Rpb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cyIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlciIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24iLCJNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJDT1JVc2VyUm9sZSIsImlzQ29sbGFib3JhdG9yUm9sZSIsImlzTWFuYWdlclJvbGUiLCJ1c2VSZXNpemVMaXN0ZW5lciIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm9yY2hlc3RyYXRvckhhc0hvdXJzU3ViYWdlbnQiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFpYWtlckFnZW50IiwiRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwic29ydE1hbmFnZXJIb3Vyc0hvbWVGdWFzIiwicmVzb2x2ZVJlY2VudENvbnRleHRzSG9tZUxpbWl0IiwidXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwidXNlUmVjZW50Q29udGV4dHMiLCJNQUlBSXNvbG9nbyIsIlRlbXBsYXRlR3JhZGllbnRJY29uIiwiQ2hhdEFJSG9tZU1haWFrZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJGcmVxdWVudFF1ZXN0aW9ucyIsIlJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IiLCJSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFgiLCJSZWNlbnRDb250ZXh0UGlsbCIsIl9yZWYiLCJjb250ZXh0IiwibGFiZWwiLCJvbkNsaWNrIiwiX3JlZiRmdWxsV2lkdGgiLCJmdWxsV2lkdGgiLCJ0ZXh0UmVmIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwic2hvd1Rvb2x0aXAiLCJ0eXBlIiwiJGZ1bGxXaWR0aCIsImNoaWxkcmVuIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVuZGVmaW5lZCIsInJlZiIsInRpdGxlIiwicGFyc2VOdW1lcmljSWQiLCJ2YWx1ZSIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIm5vcm1hbGl6ZWRSb2xlSWQiLCJDTEVWRUwiLCJESVJFQ1RPUiIsIlBST0pFQ1RfTUFOQUdFUiIsIlNldCIsIkNoYXRBSUhvbWUiLCJfcmVmMiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsImV2ZW50IiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiY2xpZW50IiwicHJvamVjdCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0Iiwic2V0VGFzayIsInNldENoaXBzUHJvamVjdCIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJTdHJpbmciLCJNQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUyIsInRvTG93ZXJDYXNlIiwibWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzIiwiZmFxc0FjY2VzcyIsInNob3dQcm9qZWN0U3VtbWFyeSIsImlzTWFpYWtlciIsImlzSGVhZGVySG9tZSIsImlzT3JjaGVzdHJhdG9yIiwiaXNQbGFubmVySG9tZSIsImlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCJoYXNIb3Vyc1N1YmFnZW50IiwiaGFzUGlubmVkQ29udGV4dCIsImlkIiwicHJvamVjdElkIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0hlYWRlclRhc2tDb250ZXh0SG9tZSIsInJvbGVfaWQiLCJpc0hlYWRlckhvdXJzQWdlbnRIb21lIiwiaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lIiwiaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsImlzQ29udGV4dEhvbWVTdGVwIiwiaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUiLCJhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRDb250ZXh0Iiwic2V0U2VsZWN0ZWRDb250ZXh0IiwiYWN0aXZlQ29udGV4dCIsIm5hbWUiLCJwcm9qZWN0TmFtZSIsInBpbm5lZEVudGl0eVR5cGUiLCJmYXFzQ29udGV4dEVudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlIiwiaXNDbGllbnRDb250ZXh0Rm9yRmFxcyIsImZ1YXNTZWN0aW9uIiwicmVhbExpc3RzQWdlbnRJZCIsInJlYWxMaXN0c0VudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlMiIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsImxvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QyIiwiY29sbGFib3JhdG9yUGxhbm5lckZ1YXMiLCJjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QzIiwibWFuYWdlckhvbWVGdWFzIiwibWFuYWdlckhvbWVGdWFzTG9hZGluZyIsInNob3VsZEZldGNoQ29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMiLCJCb29sZWFuIiwiX3VzZUZyZXF1ZW50bHlVc2VkQWN0NCIsImNvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzIiwiY29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXNMb2FkaW5nIiwiaGVhZGVySG91cnNGdWFzIiwiaGVhZGVySG91cnNGdWFzTG9hZGluZyIsInJlY2VudENvbnRleHRzTGltaXQiLCJmdWFzQ291bnQiLCJsZW5ndGgiLCJfdXNlUmVjZW50Q29udGV4dHMiLCJlbmFibGVkIiwibGltaXQiLCJmZXRjaGVkUmVjZW50Q29udGV4dHMiLCJjb250ZXh0cyIsInJlY2VudENvbnRleHRzTG9hZGluZyIsInJlY2VudENvbnRleHRzIiwiZmlsdGVyIiwiaGFzIiwicmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyIsIkFycmF5IiwiZnJvbSIsIl8iLCJpbmRleCIsImNvbmNhdCIsImZhcXNMaXN0QWdlbnRJZCIsImZhcXNMaXN0RW50aXR5VHlwZSIsIl91c2VGcmVxdWVudGx5QXNrZWRRdSIsImFnZW50RmFxcyIsImZhcXMiLCJmYXFzTG9hZGluZyIsImhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsImZhcXNGZXRjaFJlZiIsIl9mYXFzRmV0Y2hSZWYkY3VycmVudCIsImN1cnJlbnRLZXkiLCJsYXN0S2V5IiwiY3VycmVudCIsImFnZW50SWQiLCJlbnRpdHlUeXBlIiwiZnVhcyIsImZhcXNBcmVMb2FkaW5nIiwiZnVhc0FyZUxvYWRpbmciLCJzaG93UmVjZW50Q29udGV4dHNCbG9jayIsInNob3VsZFNob3dGYXFzIiwic2hvdWxkU2hvd0Z1YXMiLCJzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nIiwic2hvdWxkU2hvd1BsYW5uZXJGdWFzQ29udGVudCIsInNob3VsZFNob3dQbGFubmVyRnVhcyIsInNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmciLCJzaG91bGRTaG93Q29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXNDb250ZW50Iiwic2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzIiwic2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCIsImVudGl0eSIsInNob3dGQVFzIiwiaG9tZVNjcm9sbGFibGVMYXlvdXQiLCJzaG93RHluYW1pY1NlY3Rpb24iLCJjb250ZW50Q29udGFpbmVyUmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNTY3JvbGxpbmciLCJzZXRJc1Njcm9sbGluZyIsInNjcm9sbFRpbWVvdXRSZWYiLCJncmVldGluZyIsImludHJvIiwiaW50cm9kdWN0aW9uIiwiaXNBcnJheSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQiLCJvcmRlciIsIl9jb250ZXh0JHBhcmVudHMiLCJfY29udGV4dCRwYXJlbnRzMiIsIl9jb250ZXh0JHBhcmVudHMzIiwiX2NvbnRleHQkcGFyZW50czQiLCJhaUNoYXRDb250ZXh0U2VsZWN0ZWQiLCJjb250ZXh0SWQiLCJjbGllbnRJZCIsInBhcmVudHMiLCJjbGllbnRfaWQiLCJwcm9qZWN0X2lkIiwiY2xpZW50TmFtZSIsImNsaWVudF9uYW1lIiwicHJvamVjdF9uYW1lIiwiX29iamVjdFNwcmVhZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlSG9tZVN0YXJ0Q2hhdCIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwicmVuZGVyUmVjZW50Q29udGV4dHMiLCIkZml4ZWRDb250ZW50V2lkdGgiLCIkZmx1c2hQaWxscyIsIm1hcCIsImtleSIsInRyaW0iLCJjaGVja1Njcm9sbCIsImNvbnRhaW5lciIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImlzU2Nyb2xsYWJsZSIsImlzQXRUb3AiLCJpc0F0Qm90dG9tIiwiaGFuZGxlU2Nyb2xsIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInNjaGVkdWxlQ2hlY2tTY3JvbGwiLCJhZGRFdmVudExpc3RlbmVyIiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJzY3JvbGxDb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJFbGVtZW50IiwidGltZW91dElkIiwibGF0ZVRpbWVvdXRJZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkaXNjb25uZWN0IiwicmVuZGVySGVhZGVyQ29udGVudCIsIl9hZ2VudCRjcmVhdGVkX2J5IiwiX2FnZW50JGNyZWF0ZWRfYnkyIiwiZW1vamkiLCJjcmVhdGVkX2J5IiwiaXNfZGVsZXRlZCIsImNvbnRlbnRBbGlnblN0YXJ0IiwibWFpYUhlYWRlclN0YWNrTmVlZHNHYXAiLCIkbm9HYXAiLCIkYWxpZ24iLCIkc2l6ZSIsImZpcnN0TmFtZSIsIiRjb2xsYWJvcmF0b3JIb21lIiwiZml4ZWRIb21lQ29udGVudFdpZHRoIiwic2hvd0FnZW50SW50cm9kdWN0aW9uIiwiaG9tZU1haW4iLCIkaXNBZ2VudFZpZXciLCIkZmxvYXRpbmdDdXN0b21DZW50ZXIiLCIkY2VudGVyVmVydGljYWxseSIsIiRhbGlnblN0YXJ0IiwiJGhlYWRlckNvbGxhYm9yYXRvckhvbWUiLCIkc2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCIkZ2FwIiwiJG1heFdpZHRoIiwicHJvamVjdFN1bW1hcnkiLCIkZ3JvdyIsInZhcmlhbnQiLCIkc2hvdyIsIiRzY3JvbGxhYmxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSUhvbWUvQ2hhdEFJSG9tZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IExpc3RDaGVja2xpc3QgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9MaXN0Q2hlY2tsaXN0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5cbmltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICcuLi9DaGF0QUlNb2RhbC9jb25zdGFudHMnXG5cbmltcG9ydCB7XG4gIFNDQ0FJSG9tZUNvbnRhaW5lcixcbiAgU0NDQUlIb21lU2Nyb2xsLFxuICBTQ0NBSUhvbWVDb250ZW50LFxuICBTQ0NBSUhvbWVDb250ZW50SW5uZXIsXG4gIFNDQ0FJSG9tZUdyYWRpZW50VG9wLFxuICBTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSxcbiAgU0NDQUlIb21lSGVhZGVyLFxuICBTQ0NBSUhvbWVHcmVldGluZyxcbiAgU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVBZ2VudEluZm8sXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5LFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGUsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24sXG4gIFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0LFxuICBTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24sXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dCxcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWUsXG4gIFNDQ0FJSG9tZUljb25Db250YWluZXIsXG4gIFNDQ0FJSG9tZUxvZ29XcmFwcGVyLFxuICBTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2ssXG4gIFNDQ0FJSG9tZVRpdGxlLFxuICBTQ0NBSUhvbWVUaXRsZUJsb2NrLFxuICBTQ0NBSUhvbWVTdWJ0aXRsZSxcbiAgU0NDQUlIb21lRHluYW1pY1NlY3Rpb24sXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uVGl0bGUsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24sXG4gIE1BSUFfSEVBREVSX0NPTExBQk9SQVRPUl9IT01FX0NPTlRFTlRfV0lEVEhfUFgsXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCwgdHlwZSBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXJSb2xlLCBpc0NvbGxhYm9yYXRvclJvbGUsIGlzTWFuYWdlclJvbGUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgb3JjaGVzdHJhdG9ySGFzSG91cnNTdWJhZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL29yY2hlc3RyYXRvclN1YmFnZW50cydcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMnXG5pbXBvcnQgeyBGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyBzb3J0TWFuYWdlckhvdXJzSG9tZUZ1YXMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zb3J0TWFuYWdlckhvdXJzSG9tZUZ1YXMnXG5pbXBvcnQgeyByZXNvbHZlUmVjZW50Q29udGV4dHNIb21lTGltaXQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZWNlbnRDb250ZXh0c0hvbWVMaW1pdCdcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IHVzZVJlY2VudENvbnRleHRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgdHlwZSB7IFJlY2VudENvbnRleHRJdGVtLCBSZWNlbnRDb250ZXh0VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL01BSUFJc29sb2dvJ1xuaW1wb3J0IHsgVGVtcGxhdGVHcmFkaWVudEljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9UZW1wbGF0ZUdyYWRpZW50SWNvbidcbmltcG9ydCB7IENoYXRBSUhvbWVNYWlha2VyIH0gZnJvbSAnLi9DaGF0QUlIb21lTWFpYWtlcidcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgIHNjSWQ/OiBzdHJpbmcsXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbiAgaGFuZGxlcnM6IFJlY29yZDxvcHRpb25zLCAoKSA9PiB2b2lkPlxuICBleHBhbmRlZD86IGJvb2xlYW5cbiAgZmxvYXRpbmc/OiBib29sZWFuXG59XG5cbmV4cG9ydCBlbnVtIEZyZXF1ZW50UXVlc3Rpb25zIHtcbiAgcmVudGFiaWxpZGFkX3Byb3llY3RvID0gJ3JlbnRhYmlsaWRhZF9wcm95ZWN0bycsXG4gIGF2YW5jZV9wcm95ZWN0byA9ICdhdmFuY2VfcHJveWVjdG8nLFxufVxuXG5jb25zdCBSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SID0gJyM0RDRENEQnXG5jb25zdCBSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFggPSAxNVxuXG5jb25zdCBSZWNlbnRDb250ZXh0UGlsbCA9ICh7XG4gIGNvbnRleHQsXG4gIGxhYmVsLFxuICBvbkNsaWNrLFxuICBmdWxsV2lkdGggPSBmYWxzZSxcbn06IHtcbiAgY29udGV4dDogUmVjZW50Q29udGV4dEl0ZW1cbiAgbGFiZWw6IHN0cmluZ1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkXG4gIGZ1bGxXaWR0aD86IGJvb2xlYW5cbn0pID0+IHtcbiAgY29uc3QgdGV4dFJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXAgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKHRleHRSZWYsIFtsYWJlbF0pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGwgdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e29uQ2xpY2t9ICRmdWxsV2lkdGg9e2Z1bGxXaWR0aH0+XG4gICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uPlxuICAgICAgICB7Y29udGV4dC50eXBlID09PSAndGFzaycgPyAoXG4gICAgICAgICAgPExpc3RDaGVja2xpc3QgY29sb3I9e1JFQ0VOVF9DT05URVhUX0lDT05fQ09MT1J9IHdpZHRoPVwiMTVweFwiIGhlaWdodD1cIjE1cHhcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGdldENvbnRleHRNZW50aW9uSWNvbihjb250ZXh0LnR5cGUsIFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IsIHVuZGVmaW5lZCwgUkVDRU5UX0NPTlRFWFRfSUNPTl9TSVpFX1BYKVxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24+XG4gICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxUZXh0IHJlZj17dGV4dFJlZn0+XG4gICAgICAgIHtzaG93VG9vbHRpcCA/IChcbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17bGFiZWx9PlxuICAgICAgICAgICAgPHNwYW4+e2xhYmVsfTwvc3Bhbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgbGFiZWxcbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxUZXh0PlxuICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGw+XG4gIClcbn1cblxuY29uc3QgcGFyc2VOdW1lcmljSWQgPSAodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIG51bGxcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG59XG5cbmNvbnN0IGdldEFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMgPSAocm9sZUlkPzogQ09SVXNlclJvbGUgfCBudW1iZXIgfCBzdHJpbmcpOiBTZXQ8UmVjZW50Q29udGV4dFR5cGU+ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFJvbGVJZCA9IE51bWJlcihyb2xlSWQpXG4gIGlmIChcbiAgICBub3JtYWxpemVkUm9sZUlkID09PSBDT1JVc2VyUm9sZS5DTEVWRUwgfHxcbiAgICBub3JtYWxpemVkUm9sZUlkID09PSBDT1JVc2VyUm9sZS5ESVJFQ1RPUiB8fFxuICAgIG5vcm1hbGl6ZWRSb2xlSWQgPT09IENPUlVzZXJSb2xlLlBST0pFQ1RfTUFOQUdFUlxuICApIHtcbiAgICByZXR1cm4gbmV3IFNldChbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snXSlcbiAgfVxuICBpZiAoaXNDb2xsYWJvcmF0b3JSb2xlKHJvbGVJZCkpIHtcbiAgICByZXR1cm4gbmV3IFNldChbJ3Rhc2snXSlcbiAgfVxuICByZXR1cm4gbmV3IFNldCgpXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlIb21lID0gKHsgaGFuZGxlcnMsIG9uU3RhcnRDaGF0LCBleHBhbmRlZCwgZmxvYXRpbmcgfTogQ2hhdEFJSG9tZVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgYWdlbnQsIHNlY3Rpb24sIGNsaWVudCwgcHJvamVjdCwgdGFzaywgY2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHNldENoaXBzUHJvamVjdCB9ID1cbiAgICB1c2VHbG9iYWxDb250ZXh0KClcblxuICBjb25zdCBpc01BSUEgPSB2YWxpZGF0ZUlzTWFpYShhZ2VudCBhcyBBZ2VudClcbiAgY29uc3QgZmxvYXRpbmdDdXN0b21DZW50ZXIgPSAhIShmbG9hdGluZyAmJiBhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbScpXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0JyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBjb25zdCBzdW1tYXJ5UHJvamVjdEFjY2VzcyA9XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoU3RyaW5nKHdpbmRvdy5NQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICBTdHJpbmcod2luZG93Lm1haWFQcm9qZWN0U3VtbWFyeUFjY2VzcykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKVxuICBjb25zdCBmYXFzQWNjZXNzID0gdHJ1ZVxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnkgPSAhIShpc01BSUEgJiYgc3VtbWFyeVByb2plY3RBY2Nlc3MpXG4gIC8vIEVsIG9yY2hlc3RyYXRvciAodHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIG11ZXN0cmEgRkFRcy9GVUFzIGFncmVnYWRhcyBkZSBzdXMgc3ViYWdlbnRlcyxcbiAgLy8gYXPDrSBxdWUgTk8gc2UgdHJhdGEgY29tbyBtYWlha2VyIGFjw6EuXG4gIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICBjb25zdCBpc0hlYWRlckhvbWUgPSBpc01BSUEgJiYgc2VjdGlvbiA9PT0gJ2hlYWRlcicgJiYgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InXG4gIC8vIEVsIG9yY2hlc3RyYXRvciB1c2EgZWwgaG9tZSBlbiAyIHBhc29zIChjb250ZXh0b3MgcmVjaWVudGVzIOKGlCBGQVFzL0ZVQXMpIGVuIGhlYWRlci9wcm9qZWN0L2NsaWVudC90YXNrLlxuICAvLyBFbiBwcm9qZWN0L2NsaWVudC90YXNrLCBhbCBsaW1waWFyIGVsIGNvbnRleHRvIChwLiBlai4gYWwgcmVzZWxlY2Npb25hciBNQUlBXG4gIC8vIGRlc2RlIGVsIGxpc3RhZG8gZGUgYWdlbnRlcykgc2UgbXVlc3RyYSBlbCBzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzIGVuIGx1Z2FyIGRlIHVuIGhvbWUgdmFjw61vLlxuICBjb25zdCBpc09yY2hlc3RyYXRvciA9IGlzTUFJQSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcidcbiAgLy8gUGxhbm5lcjogaG9tZSBkZSBGVUFzIGRlbCBvcmNoZXN0cmF0b3IgKHNpbiBzZWxlY3RvciBkZSBjb250ZXh0b3MpLlxuICAvLyBTaSBlbCB1c3VhcmlvIG5hdmVnYSBhIE1haWFrZXIgdSBvdHJvIGFnZW50ZSwgc2VjdGlvbiBzaWd1ZSBzaWVuZG8gYHBsYW5uZXJgIHBlcm8geWEgbm8gZXMgZXN0ZSBob21lLlxuICBjb25zdCBpc1BsYW5uZXJIb21lID0gc2VjdGlvbiA9PT0gJ3BsYW5uZXInICYmIGlzT3JjaGVzdHJhdG9yXG4gIC8vIEhvbWVzIGRlIHNlY2Npw7NuIChwcm9qZWN0L2NsaWVudC90YXNrKTogc2luIGlzb2xvZ28sIGNvbnRlbmlkbyB0b3AtbGVmdCwgY29sdW1uYSA0NDhweCBjZW50cmFkYS5cbiAgY29uc3QgaXNTZWN0aW9uT3JjaGVzdHJhdG9ySG9tZSA9IGlzT3JjaGVzdHJhdG9yICYmICFpc0hlYWRlckhvbWUgJiYgIWlzUGxhbm5lckhvbWVcbiAgY29uc3QgaGFzSG91cnNTdWJhZ2VudCA9IG9yY2hlc3RyYXRvckhhc0hvdXJzU3ViYWdlbnQoYWdlbnQpXG5cbiAgLy8gSG9tZSBkZWwgb3JjaGVzdHJhdG9yIGVuIDIgcGFzb3M6XG4gIC8vICAtIFBhc28gMSAoc2luIGNvbnRleHRvIHBpbmVhZG8pOiBzZSBtdWVzdHJhbiBzb2xvIGxvcyBjb250ZXh0b3MgcmVjaWVudGVzLlxuICAvLyAgLSBQYXNvIDIgKGNvbnRleHRvIHBpbmVhZG8pOiBzZSBtdWVzdHJhbiBsYXMgRkFRcy9hY2Npb25lcyBxdWUgcmVmZXJlbmNpYW4gZXNlIGNvbnRleHRvLlxuICBjb25zdCBoYXNQaW5uZWRDb250ZXh0ID0gISEodGFzaz8uaWQgfHwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgY2xpZW50Py5pZCB8fCBwcm9qZWN0Py5pZClcbiAgY29uc3QgaXNSZWNlbnRDb250ZXh0c1N0ZXAgPSBpc09yY2hlc3RyYXRvciAmJiAhaGFzUGlubmVkQ29udGV4dCAmJiAhaXNQbGFubmVySG9tZVxuICAvLyBIZWFkZXIgcGFzbyAxIGNvbXBhY3RvIChzaW4gaXNvbG9nbywgcGlsbHMgZnVsbC13aWR0aCk6IGNvbGFib3JhZG9yIHkgbWFuYWdlcnMgKEMtTGV2ZWwvRGlyZWN0b3IvUE0pLlxuICBjb25zdCBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSA9XG4gICAgc2VjdGlvbiA9PT0gJ2hlYWRlcicgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgKGlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpIHx8IGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKSlcbiAgLy8gQmxvcXVlIEZVQXMgcGxhbm5lciArIHNlY2Npw7NuIGRlIGNvbnRleHRvcyByZWNpZW50ZXMgY29uIHTDrXR1bG9zIChjb2xhYm9yYWRvciBvIG1hbmFnZXIgY29uIGhvdXIpLlxuICBjb25zdCBpc0hlYWRlckhvdXJzQWdlbnRIb21lID0gaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiYgaGFzSG91cnNTdWJhZ2VudFxuICBjb25zdCBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPSBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmIGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKVxuICBjb25zdCBoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzSGVhZGVySG91cnNBZ2VudEhvbWUpIHtcbiAgICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHJldHVybiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVNYW5hZ2VyV2l0aEhvdXJzJ1xuICAgICAgcmV0dXJuICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZUNvbGxhYm9yYXRvcldpdGhIb3VycydcbiAgICB9XG4gICAgaWYgKGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKSkgcmV0dXJuICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZSdcbiAgICByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlQ29sbGFib3JhdG9yJ1xuICB9LCBbaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSwgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCB1c2VyLnJvbGVfaWRdKVxuICBjb25zdCBpc0NvbnRleHRIb21lU3RlcCA9IGlzSGVhZGVySG9tZSAmJiBoYXNQaW5uZWRDb250ZXh0XG4gIC8vIEhlYWRlciBwYXNvIDIgKEZBUXMvRlVBcyBjb24gY29udGV4dG8pIHkgaG9tZXMgZGUgc2VjY2nDs24gY29tcGFydGVuIGxheW91dDogc2luIGlzb2xvZ28sIHRleHRvIGEgbGEgaXpxdWllcmRhLlxuICBjb25zdCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA9IGlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUgfHwgaXNDb250ZXh0SG9tZVN0ZXBcblxuICBjb25zdCBhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSkgcmV0dXJuIGdldEFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXModXNlci5yb2xlX2lkKVxuICAgIGlmIChpc0hlYWRlclRhc2tDb250ZXh0SG9tZSAmJiBpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZCkpIHJldHVybiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHVzZXIucm9sZV9pZClcbiAgICBpZiAoaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUpIHJldHVybiBuZXcgU2V0PFJlY2VudENvbnRleHRUeXBlPihbJ3Rhc2snXSlcbiAgICByZXR1cm4gZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyh1c2VyLnJvbGVfaWQpXG4gIH0sIFt1c2VyLnJvbGVfaWQsIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSwgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWVdKVxuXG4gIC8vIENvbnRleHRvIGFjdGl2byBwYXJhIGRlcml2YXIgRkFRcy9hY2Npb25lcyAocGFzbyAyKS4gUHJlZmVyaW1vcyBlbCBwaWxsIGNsaWNrZWFkbztcbiAgLy8gc2kgbm8sIGxvIHJlY29uc3RydWltb3MgZGVzZGUgZWwgY29udGV4dG8gZ2xvYmFsLlxuICBjb25zdCBbc2VsZWN0ZWRDb250ZXh0LCBzZXRTZWxlY3RlZENvbnRleHRdID0gdXNlU3RhdGU8UmVjZW50Q29udGV4dEl0ZW0gfCBudWxsPihudWxsKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaGFzUGlubmVkQ29udGV4dCkgc2V0U2VsZWN0ZWRDb250ZXh0KG51bGwpXG4gIH0sIFtoYXNQaW5uZWRDb250ZXh0XSlcblxuICBjb25zdCBhY3RpdmVDb250ZXh0ID0gdXNlTWVtbzxSZWNlbnRDb250ZXh0SXRlbSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRDb250ZXh0KSByZXR1cm4gc2VsZWN0ZWRDb250ZXh0XG4gICAgaWYgKCFpc0NvbnRleHRIb21lU3RlcCkgcmV0dXJuIG51bGxcbiAgICBpZiAodGFzaz8uaWQpIHJldHVybiB7IHR5cGU6ICd0YXNrJywgaWQ6IHRhc2suaWQsIG5hbWU6IHRhc2submFtZSB9XG4gICAgaWYgKGNoaXBzUHJvamVjdD8ucHJvamVjdElkKSByZXR1cm4geyB0eXBlOiAncHJvamVjdCcsIGlkOiBjaGlwc1Byb2plY3QucHJvamVjdElkLCBuYW1lOiBjaGlwc1Byb2plY3QucHJvamVjdE5hbWUgfVxuICAgIGlmIChjbGllbnQ/LmlkKSByZXR1cm4geyB0eXBlOiAnY2xpZW50JywgaWQ6IGNsaWVudC5pZCwgbmFtZTogY2xpZW50Lm5hbWUgfVxuICAgIHJldHVybiBudWxsXG4gIH0sIFtcbiAgICBzZWxlY3RlZENvbnRleHQsXG4gICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgdGFzaz8uaWQsXG4gICAgdGFzaz8ubmFtZSxcbiAgICBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjaGlwc1Byb2plY3Q/LnByb2plY3ROYW1lLFxuICAgIGNsaWVudD8uaWQsXG4gICAgY2xpZW50Py5uYW1lLFxuICBdKVxuXG4gIC8vIGVudGl0eV90eXBlIGRlbCBjb250ZXh0byBwaW5lYWRvIChwcm9qZWN0L2NsaWVudC90YXNrKSwgdG9tYWRvIGRlbCBjb250ZXh0byBnbG9iYWwuXG4gIC8vIEFwbGljYSB0YW50byBhbCBhYnJpciBNQUlBIGRlc2RlIHVuYSBzZWNjacOzbiBlc3BlY8OtZmljYSBjb21vIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbi5cbiAgY29uc3QgcGlubmVkRW50aXR5VHlwZSA9IHVzZU1lbW88UmVjZW50Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICBpZiAodGFzaz8uaWQpIHJldHVybiAndGFzaydcbiAgICBpZiAoY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgcHJvamVjdD8uaWQpIHJldHVybiAncHJvamVjdCdcbiAgICBpZiAoY2xpZW50Py5pZCkgcmV0dXJuICdjbGllbnQnXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbdGFzaz8uaWQsIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLCBwcm9qZWN0Py5pZCwgY2xpZW50Py5pZF0pXG5cbiAgLy8gRkFRcyBzb2xvIGNvbiBjb250ZXh0byBjbGllbnRlIHBpbmVhZG8gKGhlYWRlciBwYXNvIDIgbyBzZWNjacOzbiBjbGllbnQpLlxuICAvLyBQcm95ZWN0bywgdGFyZWEgeSBwbGFubmVyIG11ZXN0cmFuIHNvbG8gRlVBcy5cbiAgY29uc3QgZmFxc0NvbnRleHRFbnRpdHlUeXBlID0gdXNlTWVtbzxSZWNlbnRDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgIGlmIChpc1BsYW5uZXJIb21lIHx8IGlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKGlzSGVhZGVySG9tZSkge1xuICAgICAgcmV0dXJuIGlzQ29udGV4dEhvbWVTdGVwID8gKGFjdGl2ZUNvbnRleHQ/LnR5cGUgPz8gcGlubmVkRW50aXR5VHlwZSkgOiB1bmRlZmluZWRcbiAgICB9XG4gICAgcmV0dXJuIHBpbm5lZEVudGl0eVR5cGVcbiAgfSwgW2lzUGxhbm5lckhvbWUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCBpc0hlYWRlckhvbWUsIGlzQ29udGV4dEhvbWVTdGVwLCBhY3RpdmVDb250ZXh0Py50eXBlLCBwaW5uZWRFbnRpdHlUeXBlXSlcbiAgY29uc3QgaXNDbGllbnRDb250ZXh0Rm9yRmFxcyA9IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9PT0gJ2NsaWVudCdcbiAgLy8gYHNlY3Rpb25gIHF1ZSBzZSBjb25zdWx0YSBwYXJhIGxhcyBGVUFzOiBlbiBuby1oZWFkZXIgc2lndWUgZWwgdGlwbyBkZSBjb250ZXh0byBwaW5lYWRvLlxuICAvLyBFbiBwbGFubmVyIHNlIGZ1ZXJ6YSBsYSBzZWN0aW9uIEFQSSBgcGxhbm5lcmAuXG4gIGNvbnN0IGZ1YXNTZWN0aW9uOiBTZWN0aW9uID0gKCgpID0+IHtcbiAgICBpZiAoaXNQbGFubmVySG9tZSkgcmV0dXJuICdwbGFubmVyJ1xuICAgIGlmICghaXNIZWFkZXJIb21lICYmIHBpbm5lZEVudGl0eVR5cGUpIHJldHVybiBwaW5uZWRFbnRpdHlUeXBlXG4gICAgcmV0dXJuIHNlY3Rpb25cbiAgfSkoKVxuXG4gIC8vIEZBUXMvYWNjaW9uZXM6XG4gIC8vICAtIGhlYWRlci1ob21lIChvcmNoZXN0cmF0b3IpLCBwYXNvIDI6IGZpbHRyYWRhcyBwb3IgYGVudGl0eV90eXBlYCBkZWwgY29udGV4dG8gc2VsZWNjaW9uYWRvLlxuICAvLyAgLSBob21lcyBkZSBwcm95ZWN0by9jbGllbnRlL3RhcmVhIChzZWNjacOzbik6IGZpbHRyYWRhcyBwb3IgZWwgYGVudGl0eV90eXBlYCBkZWwgY29udGV4dG8gc2V0ZWFkby5cbiAgLy8gIC0gcGxhbm5lcjogRlVBcyBjb24gc2VjdGlvbj1wbGFubmVyLCBzaW4gZW50aXR5X3R5cGUgbmkgRkFRcy5cbiAgY29uc3QgcmVhbExpc3RzQWdlbnRJZCA9ICgoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEgfHwgaXNNYWlha2VyKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgLy8gUGFzbyAxIChjb250ZXh0b3MgcmVjaWVudGVzLCBzaW4gY29udGV4dG8pOiBubyBzZSBwaWRlbiBGQVFzL0ZVQXMuXG4gICAgaWYgKGlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKGlzSGVhZGVySG9tZSkgcmV0dXJuIGlzQ29udGV4dEhvbWVTdGVwID8gYWdlbnQ/LmlkIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIGFnZW50Py5pZFxuICB9KSgpXG4gIGNvbnN0IHJlYWxMaXN0c0VudGl0eVR5cGUgPSAoKCkgPT4ge1xuICAgIGlmIChpc1BsYW5uZXJIb21lKSByZXR1cm4gJ3BsYW5uZXInXG4gICAgaWYgKCFpc0hlYWRlckhvbWUpIHJldHVybiBwaW5uZWRFbnRpdHlUeXBlXG4gICAgcmV0dXJuIGlzQ29udGV4dEhvbWVTdGVwID8gKGFjdGl2ZUNvbnRleHQ/LnR5cGUgPz8gcGlubmVkRW50aXR5VHlwZSkgOiB1bmRlZmluZWRcbiAgfSkoKVxuICBjb25zdCB7IGFjdGlvbnM6IGFnZW50RnVhcywgbG9hZGluZzogZnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICByZWFsTGlzdHNBZ2VudElkLFxuICAgIGZ1YXNTZWN0aW9uLFxuICAgIHJlYWxMaXN0c0VudGl0eVR5cGVcbiAgKVxuICBjb25zdCB7IGFjdGlvbnM6IGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzLCBsb2FkaW5nOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmICFpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ3BsYW5uZXInXG4gIClcbiAgY29uc3QgeyBhY3Rpb25zOiBtYW5hZ2VySG9tZUZ1YXMsIGxvYWRpbmc6IG1hbmFnZXJIb21lRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ2hvbWVfd2l0aF9ob3VycydcbiAgKVxuICAvLyBBMTE6IG15LWRheSArIHNob3VsZC1yZXZpZXcgQ1RBcyBvbmx5IGZvciBjb2xsYWJvcmF0b3IgKHJvbGVfaWQ9NCkgKyBmdWxsc2NyZWVuIGhlYWRlciBob21lLlxuICAvLyBCb3RoIEZVQXMgc2hhcmUgc2VjdGlvbj1ob21lX2NvbGxhYm9yYXRvciAob3JkZXIgMSBteS1kYXkgLyBvcmRlciAyIHNob3VsZC1yZXZpZXcpLlxuICBjb25zdCBzaG91bGRGZXRjaENvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzID0gQm9vbGVhbihleHBhbmRlZCAmJiBpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKSAmJiBpc0hlYWRlckhvbWUpXG4gIGNvbnN0IHsgYWN0aW9uczogY29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMsIGxvYWRpbmc6IGNvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzTG9hZGluZyB9ID0gdXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zKFxuICAgIHNob3VsZEZldGNoQ29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ2hvbWVfY29sbGFib3JhdG9yJ1xuICApXG4gIGNvbnN0IGhlYWRlckhvdXJzRnVhcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHJldHVybiBzb3J0TWFuYWdlckhvdXJzSG9tZUZ1YXMobWFuYWdlckhvbWVGdWFzKVxuICAgIHJldHVybiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc1xuICB9LCBbaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCBtYW5hZ2VySG9tZUZ1YXMsIGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzXSlcbiAgY29uc3QgaGVhZGVySG91cnNGdWFzTG9hZGluZyA9IGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSA/IG1hbmFnZXJIb21lRnVhc0xvYWRpbmcgOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmdcbiAgY29uc3QgcmVjZW50Q29udGV4dHNMaW1pdCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCh7XG4gICAgICAgIGlzSGVhZGVySG91cnNBZ2VudEhvbWUsXG4gICAgICAgIGZ1YXNMb2FkaW5nOiBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nLFxuICAgICAgICBmdWFzQ291bnQ6IGhlYWRlckhvdXJzRnVhcy5sZW5ndGgsXG4gICAgICB9KSxcbiAgICBbaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSwgaGVhZGVySG91cnNGdWFzTG9hZGluZywgaGVhZGVySG91cnNGdWFzLmxlbmd0aF1cbiAgKVxuICBjb25zdCB7IGNvbnRleHRzOiBmZXRjaGVkUmVjZW50Q29udGV4dHMsIGxvYWRpbmc6IHJlY2VudENvbnRleHRzTG9hZGluZyB9ID0gdXNlUmVjZW50Q29udGV4dHMoe1xuICAgIGVuYWJsZWQ6IGlzT3JjaGVzdHJhdG9yICYmICFpc1BsYW5uZXJIb21lLFxuICAgIGxpbWl0OiByZWNlbnRDb250ZXh0c0xpbWl0LFxuICB9KVxuICBjb25zdCByZWNlbnRDb250ZXh0cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZmV0Y2hlZFJlY2VudENvbnRleHRzLmZpbHRlcihjb250ZXh0ID0+IGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMuaGFzKGNvbnRleHQudHlwZSkpLFxuICAgIFtmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXNdXG4gIClcbiAgY29uc3QgcmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogcmVjZW50Q29udGV4dHNMaW1pdCB9LCAoXywgaW5kZXgpID0+IGByZWNlbnQtY29udGV4dC1za2VsZXRvbi0ke2luZGV4ICsgMX1gKSxcbiAgICBbcmVjZW50Q29udGV4dHNMaW1pdF1cbiAgKVxuICBjb25zdCBmYXFzTGlzdEFnZW50SWQgPSBpc0NsaWVudENvbnRleHRGb3JGYXFzID8gcmVhbExpc3RzQWdlbnRJZCA6IHVuZGVmaW5lZFxuICBjb25zdCBmYXFzTGlzdEVudGl0eVR5cGUgPSBpc0NsaWVudENvbnRleHRGb3JGYXFzID8gcmVhbExpc3RzRW50aXR5VHlwZSA6IHVuZGVmaW5lZFxuICBjb25zdCB7XG4gICAgZmFxczogYWdlbnRGYXFzLFxuICAgIGxvYWRpbmc6IGZhcXNMb2FkaW5nLFxuICAgIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyxcbiAgfSA9IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyhmYXFzTGlzdEFnZW50SWQsIGxhbmcsIGZhcXNMaXN0RW50aXR5VHlwZSlcbiAgY29uc3QgZmFxc0ZldGNoUmVmID0gdXNlUmVmPHsgYWdlbnRJZDogc3RyaW5nOyBsYW5nOiBzdHJpbmc7IGVudGl0eVR5cGU/OiBzdHJpbmcgfSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRkFRcyBzb2xvIHBhcmEgY29udGV4dG8gY2xpZW50ZTsgZWwgcmVzdG8gbXVlc3RyYSBzb2xvIEZVQXMuXG4gICAgaWYgKCFyZWFsTGlzdHNBZ2VudElkIHx8ICFpc0NsaWVudENvbnRleHRGb3JGYXFzKSByZXR1cm5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gYCR7cmVhbExpc3RzQWdlbnRJZH0tJHtsYW5nfS0ke3JlYWxMaXN0c0VudGl0eVR5cGUgPz8gJ2FsbCd9YFxuICAgIGNvbnN0IGxhc3RLZXkgPSBmYXFzRmV0Y2hSZWYuY3VycmVudFxuICAgICAgPyBgJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkfS0ke2ZhcXNGZXRjaFJlZi5jdXJyZW50Lmxhbmd9LSR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQuZW50aXR5VHlwZSA/PyAnYWxsJ31gXG4gICAgICA6IG51bGxcbiAgICBpZiAoY3VycmVudEtleSAhPT0gbGFzdEtleSkge1xuICAgICAgZmFxc0ZldGNoUmVmLmN1cnJlbnQgPSB7IGFnZW50SWQ6IHJlYWxMaXN0c0FnZW50SWQsIGxhbmcsIGVudGl0eVR5cGU6IHJlYWxMaXN0c0VudGl0eVR5cGUgfVxuICAgICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9KVxuICAgIH1cbiAgfSwgW3JlYWxMaXN0c0FnZW50SWQsIHJlYWxMaXN0c0VudGl0eVR5cGUsIGlzQ2xpZW50Q29udGV4dEZvckZhcXMsIGxhbmcsIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc10pXG5cbiAgY29uc3QgZmFxcyA9IGFnZW50RmFxc1xuICBjb25zdCBmdWFzID0gYWdlbnRGdWFzXG4gIGNvbnN0IGZhcXNBcmVMb2FkaW5nID0gZmFxc0xvYWRpbmdcbiAgY29uc3QgZnVhc0FyZUxvYWRpbmcgPSBmdWFzTG9hZGluZ1xuXG4gIGNvbnN0IHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrID0gaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgKHJlY2VudENvbnRleHRzTG9hZGluZyB8fCByZWNlbnRDb250ZXh0cy5sZW5ndGggPiAwKVxuICBjb25zdCBzaG91bGRTaG93RmFxcyA9XG4gICAgaXNNQUlBICYmXG4gICAgaXNDbGllbnRDb250ZXh0Rm9yRmFxcyAmJlxuICAgICFpc1JlY2VudENvbnRleHRzU3RlcCAmJlxuICAgIChpc0NvbnRleHRIb21lU3RlcCB8fCAoIWlzSGVhZGVySG9tZSAmJiBmYXFzQWNjZXNzKSkgJiZcbiAgICAhaXNNYWlha2VyICYmXG4gICAgKGZhcXMubGVuZ3RoID4gMCB8fCBmYXFzQXJlTG9hZGluZylcbiAgY29uc3Qgc2hvdWxkU2hvd0Z1YXMgPVxuICAgICFpc1JlY2VudENvbnRleHRzU3RlcCAmJiAhaXNNYWlha2VyICYmIChpc0NvbnRleHRIb21lU3RlcCB8fCAhaXNIZWFkZXJIb21lKSAmJiAoZnVhcy5sZW5ndGggPiAwIHx8IGZ1YXNBcmVMb2FkaW5nKVxuICBjb25zdCBzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nID0gaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nICYmIGhlYWRlckhvdXJzRnVhcy5sZW5ndGggPT09IDBcbiAgY29uc3Qgc2hvdWxkU2hvd1BsYW5uZXJGdWFzQ29udGVudCA9IGlzSGVhZGVySG91cnNBZ2VudEhvbWUgJiYgaGVhZGVySG91cnNGdWFzLmxlbmd0aCA+IDBcbiAgY29uc3Qgc2hvdWxkU2hvd1BsYW5uZXJGdWFzID0gc2hvdWxkU2hvd1BsYW5uZXJGdWFzTG9hZGluZyB8fCBzaG91bGRTaG93UGxhbm5lckZ1YXNDb250ZW50XG4gIGNvbnN0IHNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmcgPVxuICAgIHNob3VsZEZldGNoQ29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMgJiZcbiAgICBjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmcgJiZcbiAgICBjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcy5sZW5ndGggPT09IDBcbiAgY29uc3Qgc2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzQ29udGVudCA9XG4gICAgc2hvdWxkRmV0Y2hDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcyAmJiBjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcy5sZW5ndGggPiAwXG4gIGNvbnN0IHNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcyA9XG4gICAgc2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzTG9hZGluZyB8fCBzaG91bGRTaG93Q29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXNDb250ZW50XG5cbiAgY29uc3Qgc2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCA9IHNob3dQcm9qZWN0U3VtbWFyeSAmJiBhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCdcbiAgY29uc3Qgc2hvd0ZBUXMgPSAhIShcbiAgICBzaG93UmVjZW50Q29udGV4dHNCbG9jayB8fFxuICAgIHNob3VsZFNob3dGYXFzIHx8XG4gICAgc2hvdWxkU2hvd0Z1YXMgfHxcbiAgICBzaG91bGRTaG93UGxhbm5lckZ1YXMgfHxcbiAgICBzaG91bGRTaG93Q29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMgfHxcbiAgICBzaG93UHJvamVjdFN1bW1hcnlDYXJkIHx8XG4gICAgaXNNYWlha2VyXG4gIClcbiAgY29uc3QgaG9tZVNjcm9sbGFibGVMYXlvdXQgPSBzaG93RkFRc1xuICBjb25zdCBzaG93RHluYW1pY1NlY3Rpb24gPVxuICAgIHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrIHx8XG4gICAgc2hvdWxkU2hvd0ZhcXMgfHxcbiAgICBzaG91bGRTaG93RnVhcyB8fFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyB8fFxuICAgIHNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcyB8fFxuICAgIGlzTWFpYWtlclxuXG4gIC8vIEzDs2dpY2EgZGVsIHNjcm9sbCBjb24gZ3JhZGllbnRlc1xuICBjb25zdCBjb250ZW50Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzU2Nyb2xsaW5nLCBzZXRJc1Njcm9sbGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG5cbiAgLy8gU2FsdWRvIGZpam8gcG9yIHRpcG8gZGUgY29udGV4dG8gKGkxOG4pLiBDdXN0b20gYWdlbnRzIHNpZ3VlbiB1c2FuZG8gYWdlbnQuaW50cm9kdWN0aW9uLlxuICAvLyBQbGFubmVyIHVzYSB0w610dWxvICsgYmFqYWRhIHByb3Bpb3MgKGBwbGFubmVySG9tZWApLCBubyBlc3RlIGdyZWV0aW5nLlxuICBjb25zdCBncmVldGluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc01haWFrZXIgfHwgaXNQbGFubmVySG9tZSB8fCBpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuICcnXG5cbiAgICBpZiAoaXNNQUlBICYmIHBpbm5lZEVudGl0eVR5cGUpIHtcbiAgICAgIHJldHVybiB0KGBob21lTWVudS5jb250ZXh0SG9tZS5jb250ZXh0R3JlZXRpbmcuJHtwaW5uZWRFbnRpdHlUeXBlfWApXG4gICAgfVxuXG4gICAgY29uc3QgaW50cm8gPSBhZ2VudD8uaW50cm9kdWN0aW9uXG4gICAgaWYgKCFpbnRybykgcmV0dXJuICcnXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW50cm8pICYmIGludHJvLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBpbnRyb1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpbnRyby5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGludHJvID09PSAnc3RyaW5nJyA/IGludHJvIDogJydcbiAgfSwgW2FnZW50Py5pZCwgYWdlbnQ/LmludHJvZHVjdGlvbiwgaXNNYWlha2VyLCBpc1BsYW5uZXJIb21lLCBpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCB0XSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtLCBvcmRlcjogbnVtYmVyKSA9PiB7XG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0Q29udGV4dFNlbGVjdGVkLCB7IG9yZGVyLCB0eXBlOiBjb250ZXh0LnR5cGUgfSlcblxuICAgICAgY29uc3QgY29udGV4dElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5pZClcbiAgICAgIGNvbnN0IGNsaWVudElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5wYXJlbnRzPy5jbGllbnRfaWQpXG4gICAgICBjb25zdCBwcm9qZWN0SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LnBhcmVudHM/LnByb2plY3RfaWQpXG4gICAgICBjb25zdCBjbGllbnROYW1lID0gY29udGV4dC5wYXJlbnRzPy5jbGllbnRfbmFtZSB8fCAnJ1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSBjb250ZXh0LnBhcmVudHM/LnByb2plY3RfbmFtZSB8fCAnJ1xuXG4gICAgICBzZXRTZWxlY3RlZENvbnRleHQoY29udGV4dClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgaWYgKGNvbnRleHQudHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY29udGV4dElkLCBuYW1lOiBjb250ZXh0Lm5hbWUgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dC50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IGNvbnRleHRJZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGNvbnRleHRJZCksXG4gICAgICAgICAgcHJvamVjdE5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrKHtcbiAgICAgICAgICBpZDogY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCAhPSBudWxsID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGNsaWVudElkICE9IG51bGwpIHtcbiAgICAgICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9KVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgICAgaWQ6IHByb2plY3RJZCxcbiAgICAgICAgICAgIG5hbWU6IHByb2plY3ROYW1lIHx8IGAke3QoJ2hvbWVNZW51LnJlY2VudENvbnRleHRzLnR5cGVzLnByb2plY3QnKX0gJHtwcm9qZWN0SWR9YCxcbiAgICAgICAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZCB9IDoge30pLFxuICAgICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWUgfHwgYCR7dCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpfSAke3Byb2plY3RJZH1gLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZXZlbnQsIHNldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlSG9tZVN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBudWxsLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSAmJiBmdWFJZCkge1xuICAgICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGVkQ29udGV4dChudWxsKVxuICAgICAgICAgIHNldFRhc2sobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIG9uU3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZCwgY29udGV4dERhdGEpXG4gICAgfSxcbiAgICBbaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCBvblN0YXJ0Q2hhdCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdXG4gIClcblxuICBjb25zdCByZW5kZXJSZWNlbnRDb250ZXh0cyA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1xuICAgICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWCA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAge2lzSGVhZGVySG91cnNBZ2VudEhvbWUgPyAoXG4gICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QgJGZsdXNoUGlsbHM9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfT5cbiAgICAgICAgICB7cmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICByZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzLm1hcChrZXkgPT4gPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24ga2V5PXtrZXl9IC8+KX1cbiAgICAgICAgICB7IXJlY2VudENvbnRleHRzTG9hZGluZyAmJlxuICAgICAgICAgICAgcmVjZW50Q29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8UmVjZW50Q29udGV4dFBpbGxcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2NvbnRleHQudHlwZX0tJHtjb250ZXh0LmlkfWB9XG4gICAgICAgICAgICAgICAgY29udGV4dD17Y29udGV4dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17Y29udGV4dC5uYW1lLnRyaW0oKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0KGNvbnRleHQsIGluZGV4ICsgMSl9XG4gICAgICAgICAgICAgICAgZnVsbFdpZHRoPXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdD5cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHM+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgY2hlY2tTY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSByZXR1cm5cblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgY29uc3QgaXNTY3JvbGxhYmxlID0gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0XG4gICAgY29uc3QgaXNBdFRvcCA9IHNjcm9sbFRvcCA9PT0gMFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMVxuXG4gICAgc2V0U2hvd1RvcEdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdFRvcClcbiAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoaXNTY3JvbGxhYmxlICYmICFpc0F0Qm90dG9tKVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXRdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjaGVja1Njcm9sbCgpXG4gICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSlcblxuICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfVxuXG4gICAgc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc1Njcm9sbGluZyhmYWxzZSlcbiAgICB9LCAxNTApXG4gIH0sIFtjaGVja1Njcm9sbF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSB7XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQoZmFsc2UpXG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoZmFsc2UpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlZHVsZUNoZWNrU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgY2hlY2tTY3JvbGwoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzY2hlZHVsZUNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoc2NoZWR1bGVDaGVja1Njcm9sbClcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcilcbiAgICBjb25zdCBzY3JvbGxDb250ZW50ID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkXG4gICAgaWYgKHNjcm9sbENvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHNjcm9sbENvbnRlbnQpXG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoc2NoZWR1bGVDaGVja1Njcm9sbCwgMTAwKVxuICAgIGNvbnN0IGxhdGVUaW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChzY2hlZHVsZUNoZWNrU2Nyb2xsLCA0MDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGNsZWFyVGltZW91dChsYXRlVGltZW91dElkKVxuICAgICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0LCBjaGVja1Njcm9sbCwgaGFuZGxlU2Nyb2xsXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHJldHVyblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgfSwgW1xuICAgIGhvbWVTY3JvbGxhYmxlTGF5b3V0LFxuICAgIGNoZWNrU2Nyb2xsLFxuICAgIHJlY2VudENvbnRleHRzTG9hZGluZyxcbiAgICByZWNlbnRDb250ZXh0cy5sZW5ndGgsXG4gICAgaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoLFxuICAgIGZ1YXNMb2FkaW5nLFxuICAgIGZ1YXMubGVuZ3RoLFxuICAgIGZhcXNBcmVMb2FkaW5nLFxuICAgIGZhcXMubGVuZ3RoLFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyxcbiAgICBpc01haWFrZXIsXG4gIF0pXG5cbiAgY29uc3QgcmVuZGVySGVhZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICBpZiAoIWlzTUFJQSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgICAgICA8U0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgICAge2FnZW50Py5lbW9qaX0ge2FnZW50Py5uYW1lfVxuICAgICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgIHthZ2VudD8uY3JlYXRlZF9ieSAmJiAhaXNNQUlBICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXI+XG4gICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgYWdlbnQ/LmNyZWF0ZWRfYnk/LmlzX2RlbGV0ZWQgPyB0KCdob21lTWVudS5jcmVhdGVkQnlUb29sdGlwRGVsZXRlZCcpIDogdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcCcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY3JlYXRlZEJ5Jyl9eycgJ31cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT57YWdlbnQ/LmNyZWF0ZWRfYnk/Lm5hbWV9PC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIDwvU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRBbGlnblN0YXJ0ID0gaXNQbGFubmVySG9tZSB8fCBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSB8fCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZVxuXG4gICAgY29uc3QgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAgPVxuICAgICAgKGlzUmVjZW50Q29udGV4dHNTdGVwICYmICFpc0hlYWRlclRhc2tDb250ZXh0SG9tZSAmJiAhaXNQbGFubmVySG9tZSkgfHxcbiAgICAgICghaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiZcbiAgICAgICAgISFncmVldGluZyAmJlxuICAgICAgICAhaXNQbGFubmVySG9tZSAmJlxuICAgICAgICAhaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiZcbiAgICAgICAgIWlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2sgJG5vR2FwPXshbWFpYUhlYWRlclN0YWNrTmVlZHNHYXB9ICRhbGlnbj17Y29udGVudEFsaWduU3RhcnQgPyAnc3RhcnQnIDogJ2NlbnRlcid9PlxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmICFpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1BsYW5uZXJIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRzaXplPVwibWRcIiAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucGxhbm5lckhvbWUudGl0bGUnKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPVwic3RhcnRcIj57dCgnaG9tZU1lbnUucGxhbm5lckhvbWUuc3VidGl0bGUnKX08L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGVCbG9jaz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiICRmdWxsV2lkdGg+XG4gICAgICAgICAgICA8U0NDQUlIb21lVGl0bGUgJHNpemU9XCJjb250ZXh0XCIgJGFsaWduPVwic3RhcnRcIiAkZnVsbFdpZHRoPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY29udGV4dEhvbWUuZ3JlZXRpbmcnLCB7IG5hbWU6IHVzZXIuZmlyc3ROYW1lIH0pfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZSAkYWxpZ249XCJzdGFydFwiICRjb2xsYWJvcmF0b3JIb21lPlxuICAgICAgICAgICAgICB7dChoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZUJsb2NrPlxuICAgICAgICApfVxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRhbGlnbj17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnc3RhcnQnIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNvbnRleHRIb21lLmdyZWV0aW5nJywgeyBuYW1lOiB1c2VyLmZpcnN0TmFtZSB9KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICB7dChcbiAgICAgICAgICAgICAgICBpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKVxuICAgICAgICAgICAgICAgICAgPyAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVDb2xsYWJvcmF0b3InXG4gICAgICAgICAgICAgICAgICA6ICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICAgIHshaXNQbGFubmVySG9tZSAmJiAhaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgZ3JlZXRpbmcgJiYgKFxuICAgICAgICAgIDxTQ0NBSUhvbWVHcmVldGluZ1xuICAgICAgICAgICAgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAkc2l6ZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnbWQnIDogJ2xnJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Z3JlZXRpbmd9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVHcmVldGluZz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGZpeGVkSG9tZUNvbnRlbnRXaWR0aCA9XG4gICAgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWVcbiAgICAgID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWFxuICAgICAgOiB1bmRlZmluZWRcbiAgY29uc3QgY29udGVudEFsaWduU3RhcnQgPSBpc1BsYW5uZXJIb21lIHx8IGlzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lXG4gIGNvbnN0IHNob3dBZ2VudEludHJvZHVjdGlvbiA9IHNlY3Rpb24gIT09ICdwcm9qZWN0JyAmJiAhaXNNQUlBICYmICEhYWdlbnQ/LmludHJvZHVjdGlvblxuXG4gIGNvbnN0IGhvbWVNYWluID0gKFxuICAgIDxTQ0NBSUhvbWVDb250ZW50XG4gICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgJGNlbnRlclZlcnRpY2FsbHk9e2lzUGxhbm5lckhvbWV9XG4gICAgICAkYWxpZ25TdGFydD17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2ZpeGVkSG9tZUNvbnRlbnRXaWR0aH1cbiAgICA+XG4gICAgICA8U0NDQUlIb21lQ29udGVudElubmVyXG4gICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgICAkY2VudGVyVmVydGljYWxseT17aXNQbGFubmVySG9tZX1cbiAgICAgICAgJGFsaWduU3RhcnQ9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAkaGVhZGVyQ29sbGFib3JhdG9ySG9tZT17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWV9XG4gICAgICAgICRzZWN0aW9uT3JjaGVzdHJhdG9ySG9tZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSUhvbWVIZWFkZXJcbiAgICAgICAgICAkZ2FwPXtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gPyAnMjBweCcgOiAnMCd9XG4gICAgICAgICAgJG1heFdpZHRoPXtpc01BSUEgPyAnMTAwJScgOiAnMzgwcHgnfVxuICAgICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgICAkYWxpZ249e2NvbnRlbnRBbGlnblN0YXJ0ID8gJ3N0YXJ0JyA6ICdjZW50ZXInfVxuICAgICAgICA+XG4gICAgICAgICAge3JlbmRlckhlYWRlckNvbnRlbnQoKX1cblxuICAgICAgICAgIHtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gPyAoXG4gICAgICAgICAgICA8U0NDQUlIb21lSW50cm9kdWN0aW9uIGV4cGFuZGVkPXtleHBhbmRlZH0+e2FnZW50LmludHJvZHVjdGlvbn08L1NDQ0FJSG9tZUludHJvZHVjdGlvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TQ0NBSUhvbWVIZWFkZXI+XG4gICAgICAgIHtzaG93UHJvamVjdFN1bW1hcnlDYXJkICYmIChcbiAgICAgICAgICA8U0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Qgb25DbGljaz17aGFuZGxlcnMucHJvamVjdFN1bW1hcnl9PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICA8VGVtcGxhdGVHcmFkaWVudEljb24gaGVpZ2h0PXsyNH0gd2lkdGg9ezI0fSAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPnt0KCdob21lTWVudS5wcm9qZWN0U3VtbWFyeS50aXRsZScpfTwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LmRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50PlxuICAgICAgICAgIDwvU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Q+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93RHluYW1pY1NlY3Rpb24gJiYgKFxuICAgICAgICAgIDxTQ0NBSUhvbWVEeW5hbWljU2VjdGlvblxuICAgICAgICAgICAgJGdyb3c9e2lzTWFpYWtlcn1cbiAgICAgICAgICAgICRhbGlnblN0YXJ0PXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZSB8fCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzID8gKFxuICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e2hhbmRsZUhvbWVTdGFydENoYXR9XG4gICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nPXtpc1Njcm9sbGluZ31cbiAgICAgICAgICAgICAgICBhY3Rpb25zPXtjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc31cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzaG91bGRTaG93UGxhbm5lckZ1YXMgPyAoXG4gICAgICAgICAgICAgIDxGcmVxdWVudGx5VXNlZEFjdGlvbnNcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwicGxhbm5lclwiXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e2hhbmRsZUhvbWVTdGFydENoYXR9XG4gICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nPXtpc1Njcm9sbGluZ31cbiAgICAgICAgICAgICAgICBhY3Rpb25zPXtoZWFkZXJIb3Vyc0Z1YXN9XG4gICAgICAgICAgICAgICAgbG9hZGluZz17aGVhZGVySG91cnNGdWFzTG9hZGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3JlbmRlclJlY2VudENvbnRleHRzKCl9XG4gICAgICAgICAgICB7c2hvdWxkU2hvd0ZhcXMgJiYgKFxuICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgIHNob3dGQVFzPXtzaG93RkFRc31cbiAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgbGFuZz17bGFuZ31cbiAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgZmFxcz17ZmFxc31cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtmYXFzQXJlTG9hZGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7c2hvdWxkU2hvd0Z1YXMgJiYgKFxuICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgYWN0aW9ucz17ZnVhc31cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtmdWFzQXJlTG9hZGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aXNNYWlha2VyID8gPENoYXRBSUhvbWVNYWlha2VyIG9uU3RhcnRDaGF0PXtvblN0YXJ0Q2hhdH0gLz4gOiBudWxsfVxuICAgICAgICAgIDwvU0NDQUlIb21lRHluYW1pY1NlY3Rpb24+XG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZUNvbnRlbnRJbm5lcj5cbiAgICA8L1NDQ0FJSG9tZUNvbnRlbnQ+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVDb250YWluZXIgc2hvd0ZBUXM9e3Nob3dGQVFzfSAkYWxpZ25TdGFydD17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSAvPn1cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCA/IChcbiAgICAgICAgPFNDQ0FJSG9tZVNjcm9sbCByZWY9e2NvbnRlbnRDb250YWluZXJSZWZ9ICRzY3JvbGxhYmxlPlxuICAgICAgICAgIHtob21lTWFpbn1cbiAgICAgICAgPC9TQ0NBSUhvbWVTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICBob21lTWFpblxuICAgICAgKX1cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gLz59XG4gICAgPC9TQ0NBSUhvbWVDb250YWluZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLFFBQVEsT0FBTztBQUMxRixTQUFTQyxTQUFTLFFBQVEsV0FBVztBQUVyQyxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLFNBQVNDLGFBQWEsUUFBUSxnREFBZ0Q7QUFDOUUsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFJMUQsU0FDRUMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLHVCQUF1QixFQUN2QkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLDJCQUEyQixFQUMzQkMsa0JBQWtCLEVBQ2xCQyx1QkFBdUIsRUFDdkJDLDhCQUE4QixFQUM5QkMsNEJBQTRCLEVBQzVCQyxrQ0FBa0MsRUFDbENDLDBCQUEwQixFQUMxQkMscUJBQXFCLEVBQ3JCQywyQkFBMkIsRUFDM0JDLHNCQUFzQixFQUN0QkMsMEJBQTBCLEVBQzFCQyxzQkFBc0IsRUFDdEJDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVBQ3hCQyxjQUFjLEVBQ2RDLG1CQUFtQixFQUNuQkMsaUJBQWlCLEVBQ2pCQyx1QkFBdUIsRUFDdkJDLHVCQUF1QixFQUN2QkMsMkJBQTJCLEVBQzNCQyxvQ0FBb0MsRUFDcENDLG1DQUFtQyxFQUNuQ0Msc0NBQXNDLEVBQ3RDQywwQkFBMEIsRUFDMUJDLDhCQUE4QixFQUM5QkMsOEJBQThCLEVBQzlCQyxrQ0FBa0MsRUFDbENDLDhDQUE4QyxRQUN6QyxVQUFVO0FBQ2pCLFNBQVNDLGdCQUFnQixRQUFzQixpQ0FBaUM7QUFDaEYsU0FBU0MsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLGtCQUFrQixFQUFFQyxhQUFhLFFBQVEsMkJBQTJCO0FBQ25HLFNBQVNDLGlCQUFpQixRQUFRLDBCQUEwQjtBQUM1RCxTQUFTQyxxQkFBcUIsUUFBUSxvQ0FBb0M7QUFDMUUsU0FBU0MsNEJBQTRCLFFBQVEsc0NBQXNDO0FBQ25GLFNBQVNDLGNBQWMsUUFBUSx3Q0FBd0M7QUFDdkUsU0FBU0MsY0FBYyxRQUFRLGlDQUFpQztBQUdoRSxTQUFTQyx3QkFBd0IsUUFBUSxzQ0FBc0M7QUFDL0UsU0FBU0MscUJBQXFCLFFBQVEsbUNBQW1DO0FBQ3pFLFNBQVNDLHdCQUF3QixRQUFRLHlDQUF5QztBQUNsRixTQUFTQyx3QkFBd0IsUUFBUSx5Q0FBeUM7QUFDbEYsU0FBU0MsOEJBQThCLFFBQVEsd0NBQXdDO0FBQ3ZGLFNBQVNDLDJCQUEyQixRQUFRLDRDQUE0QztBQUN4RixTQUFTQyxpQkFBaUIsUUFBUSxrQ0FBa0M7QUFFcEUsU0FBU0MsV0FBVyxRQUFRLCtCQUErQjtBQUMzRCxTQUFTQyxvQkFBb0IsUUFBUSx3Q0FBd0M7QUFDN0UsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFrQnZELFdBQVlDLGlCQUFpQiwwQkFBakJBLGlCQUFpQjtFQUFqQkEsaUJBQWlCO0VBQWpCQSxpQkFBaUI7RUFBQSxPQUFqQkEsaUJBQWlCO0FBQUE7QUFLN0IsSUFBTUMseUJBQXlCLEdBQUcsU0FBUztBQUMzQyxJQUFNQywyQkFBMkIsR0FBRyxFQUFFO0FBRXRDLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUFDLElBQUEsRUFVakI7RUFBQSxJQVRKQyxPQUFPLEdBQUFELElBQUEsQ0FBUEMsT0FBTztJQUNQQyxLQUFLLEdBQUFGLElBQUEsQ0FBTEUsS0FBSztJQUNMQyxPQUFPLEdBQUFILElBQUEsQ0FBUEcsT0FBTztJQUFBQyxjQUFBLEdBQUFKLElBQUEsQ0FDUEssU0FBUztJQUFUQSxTQUFTLEdBQUFELGNBQUEsY0FBRyxLQUFLLEdBQUFBLGNBQUE7RUFPakIsSUFBTUUsT0FBTyxHQUFHbEYsTUFBTSxDQUFrQixJQUFJLENBQUM7RUFDN0MsSUFBQW1GLGtCQUFBLEdBQXdCaEMsaUJBQWlCLENBQUMrQixPQUFPLEVBQUUsQ0FBQ0osS0FBSyxDQUFDLENBQUM7SUFBbkRNLFdBQVcsR0FBQUQsa0JBQUEsQ0FBWEMsV0FBVztFQUVuQixvQkFDRWYsS0FBQSxDQUFDNUIsMEJBQTBCO0lBQUM0QyxJQUFJLEVBQUMsUUFBUTtJQUFDTixPQUFPLEVBQUVBLE9BQVE7SUFBQ08sVUFBVSxFQUFFTCxTQUFVO0lBQUFNLFFBQUEsZ0JBQ2hGcEIsSUFBQSxDQUFDekIsOEJBQThCO01BQUE2QyxRQUFBLEVBQzVCVixPQUFPLENBQUNRLElBQUksS0FBSyxNQUFNLGdCQUN0QmxCLElBQUEsQ0FBQzdELGFBQWE7UUFBQ2tGLEtBQUssRUFBRWYseUJBQTBCO1FBQUNnQixLQUFLLEVBQUMsTUFBTTtRQUFDQyxNQUFNLEVBQUM7TUFBTSxDQUFFLENBQUMsR0FFOUV0QyxxQkFBcUIsQ0FBQ3lCLE9BQU8sQ0FBQ1EsSUFBSSxFQUFFWix5QkFBeUIsRUFBRWtCLFNBQVMsRUFBRWpCLDJCQUEyQjtJQUN0RyxDQUM2QixDQUFDLGVBQ2pDUCxJQUFBLENBQUN4Qiw4QkFBOEI7TUFBQ2lELEdBQUcsRUFBRVYsT0FBUTtNQUFBSyxRQUFBLEVBQzFDSCxXQUFXLGdCQUNWakIsSUFBQSxDQUFDOUQsT0FBTztRQUFDd0YsS0FBSyxFQUFFZixLQUFNO1FBQUFTLFFBQUEsZUFDcEJwQixJQUFBO1VBQUFvQixRQUFBLEVBQU9UO1FBQUssQ0FBTztNQUFDLENBQ2IsQ0FBQyxHQUVWQTtJQUNELENBQzZCLENBQUM7RUFBQSxDQUNQLENBQUM7QUFFakMsQ0FBQztBQUVELElBQU1nQixjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUlDLEtBQThCLEVBQW9CO0VBQ3hFLElBQUlBLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS0osU0FBUyxJQUFJSSxLQUFLLEtBQUssRUFBRSxFQUFFLE9BQU8sSUFBSTtFQUN0RSxJQUFNQyxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDO0VBQzVCLE9BQU9FLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHLElBQUk7QUFDaEQsQ0FBQztBQUVELElBQU1HLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQUlDLE1BQXNDLEVBQTZCO0VBQ3ZHLElBQU1DLGdCQUFnQixHQUFHSixNQUFNLENBQUNHLE1BQU0sQ0FBQztFQUN2QyxJQUNFQyxnQkFBZ0IsS0FBS3JELFdBQVcsQ0FBQ3NELE1BQU0sSUFDdkNELGdCQUFnQixLQUFLckQsV0FBVyxDQUFDdUQsUUFBUSxJQUN6Q0YsZ0JBQWdCLEtBQUtyRCxXQUFXLENBQUN3RCxlQUFlLEVBQ2hEO0lBQ0EsT0FBTyxJQUFJQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQy9DO0VBQ0EsSUFBSXhELGtCQUFrQixDQUFDbUQsTUFBTSxDQUFDLEVBQUU7SUFDOUIsT0FBTyxJQUFJSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMxQjtFQUNBLE9BQU8sSUFBSUEsR0FBRyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUVELE9BQU8sSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQUFDLEtBQUEsRUFBdUU7RUFBQSxJQUFqRUMsUUFBUSxHQUFBRCxLQUFBLENBQVJDLFFBQVE7SUFBRUMsV0FBVyxHQUFBRixLQUFBLENBQVhFLFdBQVc7SUFBRUMsUUFBUSxHQUFBSCxLQUFBLENBQVJHLFFBQVE7SUFBRUMsUUFBUSxHQUFBSixLQUFBLENBQVJJLFFBQVE7RUFDcEUsSUFBQUMsS0FBQSxHQUFvQnpHLElBQUksQ0FBQyxDQUFDO0lBQWxCMEcsQ0FBQyxHQUFBRCxLQUFBLENBQURDLENBQUM7SUFBRUMsSUFBSSxHQUFBRixLQUFBLENBQUpFLElBQUk7RUFDZixJQUFNQyxLQUFLLEdBQUcxRyxRQUFRLENBQUMsQ0FBQztFQUN4QixJQUFNMkcsSUFBSSxHQUFHckUsT0FBTyxDQUFDLENBQUM7RUFDdEIsSUFBQXNFLGlCQUFBLEdBQ0V2RSxnQkFBZ0IsQ0FBQyxDQUFDO0lBRFp3RSxLQUFLLEdBQUFELGlCQUFBLENBQUxDLEtBQUs7SUFBRUMsT0FBTyxHQUFBRixpQkFBQSxDQUFQRSxPQUFPO0lBQUVDLE1BQU0sR0FBQUgsaUJBQUEsQ0FBTkcsTUFBTTtJQUFFQyxPQUFPLEdBQUFKLGlCQUFBLENBQVBJLE9BQU87SUFBRUMsSUFBSSxHQUFBTCxpQkFBQSxDQUFKSyxJQUFJO0lBQUVDLFlBQVksR0FBQU4saUJBQUEsQ0FBWk0sWUFBWTtJQUFFQyxTQUFTLEdBQUFQLGlCQUFBLENBQVRPLFNBQVM7SUFBRUMsVUFBVSxHQUFBUixpQkFBQSxDQUFWUSxVQUFVO0lBQUVDLE9BQU8sR0FBQVQsaUJBQUEsQ0FBUFMsT0FBTztJQUFFQyxlQUFlLEdBQUFWLGlCQUFBLENBQWZVLGVBQWU7RUFHNUcsSUFBTUMsTUFBTSxHQUFHMUUsY0FBYyxDQUFDZ0UsS0FBYyxDQUFDO0VBQzdDLElBQU1XLG9CQUFvQixHQUFHLENBQUMsRUFBRWxCLFFBQVEsSUFBSSxDQUFBTyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWpDLElBQUksTUFBSyxRQUFRLENBQUM7RUFDckUsSUFBTTZDLElBQUksR0FBR2hCLElBQUksQ0FBQ2lCLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHakIsSUFBSSxDQUFDaUIsUUFBUTtFQUUxRCxJQUFNQyxvQkFBb0IsR0FDeEIsT0FBT0MsTUFBTSxLQUFLLFdBQVcsS0FDNUJDLE1BQU0sQ0FBQ0QsTUFBTSxDQUFDRSxtQ0FBbUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFDMUVGLE1BQU0sQ0FBQ0QsTUFBTSxDQUFDSSx3QkFBd0IsQ0FBQyxDQUFDRCxXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQztFQUNyRSxJQUFNRSxVQUFVLEdBQUcsSUFBSTtFQUN2QixJQUFNQyxrQkFBa0IsR0FBRyxDQUFDLEVBQUVYLE1BQU0sSUFBSUksb0JBQW9CLENBQUM7RUFDN0Q7RUFDQTtFQUNBLElBQU1RLFNBQVMsR0FBR3JGLGNBQWMsQ0FBQytELEtBQUssQ0FBQztFQUN2QyxJQUFNdUIsWUFBWSxHQUFHYixNQUFNLElBQUlULE9BQU8sS0FBSyxRQUFRLElBQUksQ0FBQUQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVqQyxJQUFJLE1BQUssY0FBYztFQUNyRjtFQUNBO0VBQ0E7RUFDQSxJQUFNeUQsY0FBYyxHQUFHZCxNQUFNLElBQUksQ0FBQVYsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVqQyxJQUFJLE1BQUssY0FBYztFQUMvRDtFQUNBO0VBQ0EsSUFBTTBELGFBQWEsR0FBR3hCLE9BQU8sS0FBSyxTQUFTLElBQUl1QixjQUFjO0VBQzdEO0VBQ0EsSUFBTUUseUJBQXlCLEdBQUdGLGNBQWMsSUFBSSxDQUFDRCxZQUFZLElBQUksQ0FBQ0UsYUFBYTtFQUNuRixJQUFNRSxnQkFBZ0IsR0FBRzVGLDRCQUE0QixDQUFDaUUsS0FBSyxDQUFDOztFQUU1RDtFQUNBO0VBQ0E7RUFDQSxJQUFNNEIsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFeEIsSUFBSSxhQUFKQSxJQUFJLGVBQUpBLElBQUksQ0FBRXlCLEVBQUUsSUFBSXhCLFlBQVksYUFBWkEsWUFBWSxlQUFaQSxZQUFZLENBQUV5QixTQUFTLElBQUk1QixNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFMkIsRUFBRSxJQUFJMUIsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRTBCLEVBQUUsQ0FBQztFQUM3RixJQUFNRSxvQkFBb0IsR0FBR1AsY0FBYyxJQUFJLENBQUNJLGdCQUFnQixJQUFJLENBQUNILGFBQWE7RUFDbEY7RUFDQSxJQUFNTyx1QkFBdUIsR0FDM0IvQixPQUFPLEtBQUssUUFBUSxJQUFJOEIsb0JBQW9CLEtBQUtwRyxrQkFBa0IsQ0FBQ21FLElBQUksQ0FBQ21DLE9BQU8sQ0FBQyxJQUFJckcsYUFBYSxDQUFDa0UsSUFBSSxDQUFDbUMsT0FBTyxDQUFDLENBQUM7RUFDbkg7RUFDQSxJQUFNQyxzQkFBc0IsR0FBR0YsdUJBQXVCLElBQUlMLGdCQUFnQjtFQUMxRSxJQUFNUSx3QkFBd0IsR0FBR0Qsc0JBQXNCLElBQUl0RyxhQUFhLENBQUNrRSxJQUFJLENBQUNtQyxPQUFPLENBQUM7RUFDdEYsSUFBTUcsNEJBQTRCLEdBQUd2SixPQUFPLENBQUMsWUFBTTtJQUNqRCxJQUFJcUosc0JBQXNCLEVBQUU7TUFDMUIsSUFBSUMsd0JBQXdCLEVBQUUsT0FBTywrQ0FBK0M7TUFDcEYsT0FBTyxvREFBb0Q7SUFDN0Q7SUFDQSxJQUFJdkcsYUFBYSxDQUFDa0UsSUFBSSxDQUFDbUMsT0FBTyxDQUFDLEVBQUUsT0FBTywrQkFBK0I7SUFDdkUsT0FBTywyQ0FBMkM7RUFDcEQsQ0FBQyxFQUFFLENBQUNDLHNCQUFzQixFQUFFQyx3QkFBd0IsRUFBRXJDLElBQUksQ0FBQ21DLE9BQU8sQ0FBQyxDQUFDO0VBQ3BFLElBQU1JLGlCQUFpQixHQUFHZCxZQUFZLElBQUlLLGdCQUFnQjtFQUMxRDtFQUNBLElBQU1VLDZCQUE2QixHQUFHWix5QkFBeUIsSUFBSVcsaUJBQWlCO0VBRXBGLElBQU1FLHlCQUF5QixHQUFHMUosT0FBTyxDQUFDLFlBQU07SUFDOUMsSUFBSXNKLHdCQUF3QixFQUFFLE9BQU90RCw0QkFBNEIsQ0FBQ2lCLElBQUksQ0FBQ21DLE9BQU8sQ0FBQztJQUMvRSxJQUFJRCx1QkFBdUIsSUFBSXBHLGFBQWEsQ0FBQ2tFLElBQUksQ0FBQ21DLE9BQU8sQ0FBQyxFQUFFLE9BQU9wRCw0QkFBNEIsQ0FBQ2lCLElBQUksQ0FBQ21DLE9BQU8sQ0FBQztJQUM3RyxJQUFJRCx1QkFBdUIsRUFBRSxPQUFPLElBQUk3QyxHQUFHLENBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsT0FBT04sNEJBQTRCLENBQUNpQixJQUFJLENBQUNtQyxPQUFPLENBQUM7RUFDbkQsQ0FBQyxFQUFFLENBQUNuQyxJQUFJLENBQUNtQyxPQUFPLEVBQUVFLHdCQUF3QixFQUFFSCx1QkFBdUIsQ0FBQyxDQUFDOztFQUVyRTtFQUNBO0VBQ0EsSUFBQVEsU0FBQSxHQUE4QzdKLFFBQVEsQ0FBMkIsSUFBSSxDQUFDO0lBQUE4SixVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUEvRUcsZUFBZSxHQUFBRixVQUFBO0lBQUVHLGtCQUFrQixHQUFBSCxVQUFBO0VBQzFDakssU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUNvSixnQkFBZ0IsRUFBRWdCLGtCQUFrQixDQUFDLElBQUksQ0FBQztFQUNqRCxDQUFDLEVBQUUsQ0FBQ2hCLGdCQUFnQixDQUFDLENBQUM7RUFFdEIsSUFBTWlCLGFBQWEsR0FBR2hLLE9BQU8sQ0FBMkIsWUFBTTtJQUM1RCxJQUFJOEosZUFBZSxFQUFFLE9BQU9BLGVBQWU7SUFDM0MsSUFBSSxDQUFDTixpQkFBaUIsRUFBRSxPQUFPLElBQUk7SUFDbkMsSUFBSWpDLElBQUksYUFBSkEsSUFBSSxlQUFKQSxJQUFJLENBQUV5QixFQUFFLEVBQUUsT0FBTztNQUFFOUQsSUFBSSxFQUFFLE1BQU07TUFBRThELEVBQUUsRUFBRXpCLElBQUksQ0FBQ3lCLEVBQUU7TUFBRWlCLElBQUksRUFBRTFDLElBQUksQ0FBQzBDO0lBQUssQ0FBQztJQUNuRSxJQUFJekMsWUFBWSxhQUFaQSxZQUFZLGVBQVpBLFlBQVksQ0FBRXlCLFNBQVMsRUFBRSxPQUFPO01BQUUvRCxJQUFJLEVBQUUsU0FBUztNQUFFOEQsRUFBRSxFQUFFeEIsWUFBWSxDQUFDeUIsU0FBUztNQUFFZ0IsSUFBSSxFQUFFekMsWUFBWSxDQUFDMEM7SUFBWSxDQUFDO0lBQ25ILElBQUk3QyxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFMkIsRUFBRSxFQUFFLE9BQU87TUFBRTlELElBQUksRUFBRSxRQUFRO01BQUU4RCxFQUFFLEVBQUUzQixNQUFNLENBQUMyQixFQUFFO01BQUVpQixJQUFJLEVBQUU1QyxNQUFNLENBQUM0QztJQUFLLENBQUM7SUFDM0UsT0FBTyxJQUFJO0VBQ2IsQ0FBQyxFQUFFLENBQ0RILGVBQWUsRUFDZk4saUJBQWlCLEVBQ2pCakMsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUV5QixFQUFFLEVBQ1J6QixJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRTBDLElBQUksRUFDVnpDLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFeUIsU0FBUyxFQUN2QnpCLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFMEMsV0FBVyxFQUN6QjdDLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFMkIsRUFBRSxFQUNWM0IsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUU0QyxJQUFJLENBQ2IsQ0FBQzs7RUFFRjtFQUNBO0VBQ0EsSUFBTUUsZ0JBQWdCLEdBQUduSyxPQUFPLENBQWdDLFlBQU07SUFDcEUsSUFBSXVILElBQUksYUFBSkEsSUFBSSxlQUFKQSxJQUFJLENBQUV5QixFQUFFLEVBQUUsT0FBTyxNQUFNO0lBQzNCLElBQUl4QixZQUFZLGFBQVpBLFlBQVksZUFBWkEsWUFBWSxDQUFFeUIsU0FBUyxJQUFJM0IsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRTBCLEVBQUUsRUFBRSxPQUFPLFNBQVM7SUFDNUQsSUFBSTNCLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUUyQixFQUFFLEVBQUUsT0FBTyxRQUFRO0lBQy9CLE9BQU94RCxTQUFTO0VBQ2xCLENBQUMsRUFBRSxDQUFDK0IsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUV5QixFQUFFLEVBQUV4QixZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRXlCLFNBQVMsRUFBRTNCLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFMEIsRUFBRSxFQUFFM0IsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUUyQixFQUFFLENBQUMsQ0FBQzs7RUFFaEU7RUFDQTtFQUNBLElBQU1vQixxQkFBcUIsR0FBR3BLLE9BQU8sQ0FBZ0MsWUFBTTtJQUN6RSxJQUFJNEksYUFBYSxJQUFJTSxvQkFBb0IsRUFBRSxPQUFPMUQsU0FBUztJQUMzRCxJQUFJa0QsWUFBWSxFQUFFO01BQUEsSUFBQTJCLG1CQUFBO01BQ2hCLE9BQU9iLGlCQUFpQixJQUFBYSxtQkFBQSxHQUFJTCxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRTlFLElBQUksY0FBQW1GLG1CQUFBLGNBQUFBLG1CQUFBLEdBQUlGLGdCQUFnQixHQUFJM0UsU0FBUztJQUNsRjtJQUNBLE9BQU8yRSxnQkFBZ0I7RUFDekIsQ0FBQyxFQUFFLENBQUN2QixhQUFhLEVBQUVNLG9CQUFvQixFQUFFUixZQUFZLEVBQUVjLGlCQUFpQixFQUFFUSxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRTlFLElBQUksRUFBRWlGLGdCQUFnQixDQUFDLENBQUM7RUFDakgsSUFBTUcsc0JBQXNCLEdBQUdGLHFCQUFxQixLQUFLLFFBQVE7RUFDakU7RUFDQTtFQUNBLElBQU1HLFdBQW9CLEdBQUksWUFBTTtJQUNsQyxJQUFJM0IsYUFBYSxFQUFFLE9BQU8sU0FBUztJQUNuQyxJQUFJLENBQUNGLFlBQVksSUFBSXlCLGdCQUFnQixFQUFFLE9BQU9BLGdCQUFnQjtJQUM5RCxPQUFPL0MsT0FBTztFQUNoQixDQUFDLENBQUUsQ0FBQzs7RUFFSjtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1vRCxnQkFBZ0IsR0FBSSxZQUFNO0lBQzlCLElBQUksQ0FBQzNDLE1BQU0sSUFBSVksU0FBUyxFQUFFLE9BQU9qRCxTQUFTO0lBQzFDO0lBQ0EsSUFBSTBELG9CQUFvQixFQUFFLE9BQU8xRCxTQUFTO0lBQzFDLElBQUlrRCxZQUFZLEVBQUUsT0FBT2MsaUJBQWlCLEdBQUdyQyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTZCLEVBQUUsR0FBR3hELFNBQVM7SUFDbEUsT0FBTzJCLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkIsRUFBRTtFQUNsQixDQUFDLENBQUUsQ0FBQztFQUNKLElBQU15QixtQkFBbUIsR0FBSSxVQUFBQyxvQkFBQSxFQUFNO0lBQ2pDLElBQUk5QixhQUFhLEVBQUUsT0FBTyxTQUFTO0lBQ25DLElBQUksQ0FBQ0YsWUFBWSxFQUFFLE9BQU95QixnQkFBZ0I7SUFDMUMsT0FBT1gsaUJBQWlCLElBQUFrQixvQkFBQSxHQUFJVixhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRTlFLElBQUksY0FBQXdGLG9CQUFBLGNBQUFBLG9CQUFBLEdBQUlQLGdCQUFnQixHQUFJM0UsU0FBUztFQUNsRixDQUFDLENBQUUsQ0FBQztFQUNKLElBQUFtRixxQkFBQSxHQUFxRHBILHdCQUF3QixDQUMzRWlILGdCQUFnQixFQUNoQkQsV0FBVyxFQUNYRSxtQkFDRixDQUFDO0lBSmdCRyxTQUFTLEdBQUFELHFCQUFBLENBQWxCRSxPQUFPO0lBQXNCQyxXQUFXLEdBQUFILHFCQUFBLENBQXBCSSxPQUFPO0VBS25DLElBQUFDLHNCQUFBLEdBQXNGekgsd0JBQXdCLENBQzVHOEYsc0JBQXNCLElBQUksQ0FBQ0Msd0JBQXdCLEdBQUduQyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTZCLEVBQUUsR0FBR3hELFNBQVMsRUFDM0UsU0FDRixDQUFDO0lBSGdCeUYsdUJBQXVCLEdBQUFELHNCQUFBLENBQWhDSCxPQUFPO0lBQW9DSyw4QkFBOEIsR0FBQUYsc0JBQUEsQ0FBdkNELE9BQU87RUFJakQsSUFBQUksc0JBQUEsR0FBc0U1SCx3QkFBd0IsQ0FDNUYrRix3QkFBd0IsR0FBR25DLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkIsRUFBRSxHQUFHeEQsU0FBUyxFQUNoRCxpQkFDRixDQUFDO0lBSGdCNEYsZUFBZSxHQUFBRCxzQkFBQSxDQUF4Qk4sT0FBTztJQUE0QlEsc0JBQXNCLEdBQUFGLHNCQUFBLENBQS9CSixPQUFPO0VBSXpDO0VBQ0E7RUFDQSxJQUFNTyxxQ0FBcUMsR0FBR0MsT0FBTyxDQUFDNUUsUUFBUSxJQUFJN0Qsa0JBQWtCLENBQUNtRSxJQUFJLENBQUNtQyxPQUFPLENBQUMsSUFBSVYsWUFBWSxDQUFDO0VBQ25ILElBQUE4QyxzQkFBQSxHQUE0RmpJLHdCQUF3QixDQUNsSCtILHFDQUFxQyxHQUFHbkUsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU2QixFQUFFLEdBQUd4RCxTQUFTLEVBQzdELG1CQUNGLENBQUM7SUFIZ0JpRywwQkFBMEIsR0FBQUQsc0JBQUEsQ0FBbkNYLE9BQU87SUFBdUNhLGlDQUFpQyxHQUFBRixzQkFBQSxDQUExQ1QsT0FBTztFQUlwRCxJQUFNWSxlQUFlLEdBQUczTCxPQUFPLENBQUMsWUFBTTtJQUNwQyxJQUFJc0osd0JBQXdCLEVBQUUsT0FBTzlGLHdCQUF3QixDQUFDNEgsZUFBZSxDQUFDO0lBQzlFLE9BQU9ILHVCQUF1QjtFQUNoQyxDQUFDLEVBQUUsQ0FBQzNCLHdCQUF3QixFQUFFOEIsZUFBZSxFQUFFSCx1QkFBdUIsQ0FBQyxDQUFDO0VBQ3hFLElBQU1XLHNCQUFzQixHQUFHdEMsd0JBQXdCLEdBQUcrQixzQkFBc0IsR0FBR0gsOEJBQThCO0VBQ2pILElBQU1XLG1CQUFtQixHQUFHN0wsT0FBTyxDQUNqQztJQUFBLE9BQ0V5RCw4QkFBOEIsQ0FBQztNQUM3QjRGLHNCQUFzQixFQUF0QkEsc0JBQXNCO01BQ3RCeUIsV0FBVyxFQUFFYyxzQkFBc0I7TUFDbkNFLFNBQVMsRUFBRUgsZUFBZSxDQUFDSTtJQUM3QixDQUFDLENBQUM7RUFBQSxHQUNKLENBQUMxQyxzQkFBc0IsRUFBRXVDLHNCQUFzQixFQUFFRCxlQUFlLENBQUNJLE1BQU0sQ0FDekUsQ0FBQztFQUNELElBQUFDLGtCQUFBLEdBQTRFckksaUJBQWlCLENBQUM7TUFDNUZzSSxPQUFPLEVBQUV0RCxjQUFjLElBQUksQ0FBQ0MsYUFBYTtNQUN6Q3NELEtBQUssRUFBRUw7SUFDVCxDQUFDLENBQUM7SUFIZ0JNLHFCQUFxQixHQUFBSCxrQkFBQSxDQUEvQkksUUFBUTtJQUFrQ0MscUJBQXFCLEdBQUFMLGtCQUFBLENBQTlCakIsT0FBTztFQUloRCxJQUFNdUIsY0FBYyxHQUFHdE0sT0FBTyxDQUM1QjtJQUFBLE9BQU1tTSxxQkFBcUIsQ0FBQ0ksTUFBTSxDQUFDLFVBQUE3SCxPQUFPO01BQUEsT0FBSWdGLHlCQUF5QixDQUFDOEMsR0FBRyxDQUFDOUgsT0FBTyxDQUFDUSxJQUFJLENBQUM7SUFBQSxFQUFDO0VBQUEsR0FDMUYsQ0FBQ2lILHFCQUFxQixFQUFFekMseUJBQXlCLENBQ25ELENBQUM7RUFDRCxJQUFNK0MseUJBQXlCLEdBQUd6TSxPQUFPLENBQ3ZDO0lBQUEsT0FBTTBNLEtBQUssQ0FBQ0MsSUFBSSxDQUFDO01BQUVaLE1BQU0sRUFBRUY7SUFBb0IsQ0FBQyxFQUFFLFVBQUNlLENBQUMsRUFBRUMsS0FBSztNQUFBLGtDQUFBQyxNQUFBLENBQWdDRCxLQUFLLEdBQUcsQ0FBQztJQUFBLENBQUUsQ0FBQztFQUFBLEdBQ3ZHLENBQUNoQixtQkFBbUIsQ0FDdEIsQ0FBQztFQUNELElBQU1rQixlQUFlLEdBQUd6QyxzQkFBc0IsR0FBR0UsZ0JBQWdCLEdBQUdoRixTQUFTO0VBQzdFLElBQU13SCxrQkFBa0IsR0FBRzFDLHNCQUFzQixHQUFHRyxtQkFBbUIsR0FBR2pGLFNBQVM7RUFDbkYsSUFBQXlILHFCQUFBLEdBSUl2SiwyQkFBMkIsQ0FBQ3FKLGVBQWUsRUFBRWhGLElBQUksRUFBRWlGLGtCQUFrQixDQUFDO0lBSGxFRSxTQUFTLEdBQUFELHFCQUFBLENBQWZFLElBQUk7SUFDS0MsV0FBVyxHQUFBSCxxQkFBQSxDQUFwQmxDLE9BQU87SUFDUHNDLGlDQUFpQyxHQUFBSixxQkFBQSxDQUFqQ0ksaUNBQWlDO0VBRW5DLElBQU1DLFlBQVksR0FBR3pOLE1BQU0sQ0FBZ0UsSUFBSSxDQUFDO0VBQ2hHRixTQUFTLENBQUMsWUFBTTtJQUFBLElBQUE0TixxQkFBQTtJQUNkO0lBQ0EsSUFBSSxDQUFDL0MsZ0JBQWdCLElBQUksQ0FBQ0Ysc0JBQXNCLEVBQUU7SUFDbEQsSUFBTWtELFVBQVUsTUFBQVYsTUFBQSxDQUFNdEMsZ0JBQWdCLE9BQUFzQyxNQUFBLENBQUkvRSxJQUFJLE9BQUErRSxNQUFBLENBQUlyQyxtQkFBbUIsYUFBbkJBLG1CQUFtQixjQUFuQkEsbUJBQW1CLEdBQUksS0FBSyxDQUFFO0lBQ2hGLElBQU1nRCxPQUFPLEdBQUdILFlBQVksQ0FBQ0ksT0FBTyxNQUFBWixNQUFBLENBQzdCUSxZQUFZLENBQUNJLE9BQU8sQ0FBQ0MsT0FBTyxPQUFBYixNQUFBLENBQUlRLFlBQVksQ0FBQ0ksT0FBTyxDQUFDM0YsSUFBSSxPQUFBK0UsTUFBQSxFQUFBUyxxQkFBQSxHQUFJRCxZQUFZLENBQUNJLE9BQU8sQ0FBQ0UsVUFBVSxjQUFBTCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEtBQUssSUFDeEcsSUFBSTtJQUNSLElBQUlDLFVBQVUsS0FBS0MsT0FBTyxFQUFFO01BQzFCSCxZQUFZLENBQUNJLE9BQU8sR0FBRztRQUFFQyxPQUFPLEVBQUVuRCxnQkFBZ0I7UUFBRXpDLElBQUksRUFBSkEsSUFBSTtRQUFFNkYsVUFBVSxFQUFFbkQ7TUFBb0IsQ0FBQztNQUMzRjRDLGlDQUFpQyxDQUFDO1FBQUVNLE9BQU8sRUFBRW5ELGdCQUFnQjtRQUFFekMsSUFBSSxFQUFKQSxJQUFJO1FBQUU2RixVQUFVLEVBQUVuRDtNQUFvQixDQUFDLENBQUM7SUFDekc7RUFDRixDQUFDLEVBQUUsQ0FBQ0QsZ0JBQWdCLEVBQUVDLG1CQUFtQixFQUFFSCxzQkFBc0IsRUFBRXZDLElBQUksRUFBRXNGLGlDQUFpQyxDQUFDLENBQUM7RUFFNUcsSUFBTUYsSUFBSSxHQUFHRCxTQUFTO0VBQ3RCLElBQU1XLElBQUksR0FBR2pELFNBQVM7RUFDdEIsSUFBTWtELGNBQWMsR0FBR1YsV0FBVztFQUNsQyxJQUFNVyxjQUFjLEdBQUdqRCxXQUFXO0VBRWxDLElBQU1rRCx1QkFBdUIsR0FBRzlFLG9CQUFvQixLQUFLbUQscUJBQXFCLElBQUlDLGNBQWMsQ0FBQ1AsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM1RyxJQUFNa0MsY0FBYyxHQUNsQnBHLE1BQU0sSUFDTnlDLHNCQUFzQixJQUN0QixDQUFDcEIsb0JBQW9CLEtBQ3BCTSxpQkFBaUIsSUFBSyxDQUFDZCxZQUFZLElBQUlILFVBQVcsQ0FBQyxJQUNwRCxDQUFDRSxTQUFTLEtBQ1QwRSxJQUFJLENBQUNwQixNQUFNLEdBQUcsQ0FBQyxJQUFJK0IsY0FBYyxDQUFDO0VBQ3JDLElBQU1JLGNBQWMsR0FDbEIsQ0FBQ2hGLG9CQUFvQixJQUFJLENBQUNULFNBQVMsS0FBS2UsaUJBQWlCLElBQUksQ0FBQ2QsWUFBWSxDQUFDLEtBQUttRixJQUFJLENBQUM5QixNQUFNLEdBQUcsQ0FBQyxJQUFJZ0MsY0FBYyxDQUFDO0VBQ3BILElBQU1JLDRCQUE0QixHQUFHOUUsc0JBQXNCLElBQUl1QyxzQkFBc0IsSUFBSUQsZUFBZSxDQUFDSSxNQUFNLEtBQUssQ0FBQztFQUNySCxJQUFNcUMsNEJBQTRCLEdBQUcvRSxzQkFBc0IsSUFBSXNDLGVBQWUsQ0FBQ0ksTUFBTSxHQUFHLENBQUM7RUFDekYsSUFBTXNDLHFCQUFxQixHQUFHRiw0QkFBNEIsSUFBSUMsNEJBQTRCO0VBQzFGLElBQU1FLDJDQUEyQyxHQUMvQ2hELHFDQUFxQyxJQUNyQ0ksaUNBQWlDLElBQ2pDRCwwQkFBMEIsQ0FBQ00sTUFBTSxLQUFLLENBQUM7RUFDekMsSUFBTXdDLDJDQUEyQyxHQUMvQ2pELHFDQUFxQyxJQUFJRywwQkFBMEIsQ0FBQ00sTUFBTSxHQUFHLENBQUM7RUFDaEYsSUFBTXlDLG9DQUFvQyxHQUN4Q0YsMkNBQTJDLElBQUlDLDJDQUEyQztFQUU1RixJQUFNRSxzQkFBc0IsR0FBR2pHLGtCQUFrQixJQUFJLENBQUFyQixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXVILE1BQU0sTUFBSyxTQUFTO0VBQ2hGLElBQU1DLFFBQVEsR0FBRyxDQUFDLEVBQ2hCWCx1QkFBdUIsSUFDdkJDLGNBQWMsSUFDZEMsY0FBYyxJQUNkRyxxQkFBcUIsSUFDckJHLG9DQUFvQyxJQUNwQ0Msc0JBQXNCLElBQ3RCaEcsU0FBUyxDQUNWO0VBQ0QsSUFBTW1HLG9CQUFvQixHQUFHRCxRQUFRO0VBQ3JDLElBQU1FLGtCQUFrQixHQUN0QmIsdUJBQXVCLElBQ3ZCQyxjQUFjLElBQ2RDLGNBQWMsSUFDZEcscUJBQXFCLElBQ3JCRyxvQ0FBb0MsSUFDcEMvRixTQUFTOztFQUVYO0VBQ0EsSUFBTXFHLG1CQUFtQixHQUFHalAsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDeEQsSUFBQWtQLFVBQUEsR0FBOENqUCxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFrUCxVQUFBLEdBQUFuRixjQUFBLENBQUFrRixVQUFBO0lBQXRERSxlQUFlLEdBQUFELFVBQUE7SUFBRUUsa0JBQWtCLEdBQUFGLFVBQUE7RUFDMUMsSUFBQUcsVUFBQSxHQUFvRHJQLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQXNQLFVBQUEsR0FBQXZGLGNBQUEsQ0FBQXNGLFVBQUE7SUFBNURFLGtCQUFrQixHQUFBRCxVQUFBO0lBQUVFLHFCQUFxQixHQUFBRixVQUFBO0VBQ2hELElBQUFHLFVBQUEsR0FBc0N6UCxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUEwUCxVQUFBLEdBQUEzRixjQUFBLENBQUEwRixVQUFBO0lBQTlDRSxXQUFXLEdBQUFELFVBQUE7SUFBRUUsY0FBYyxHQUFBRixVQUFBO0VBQ2xDLElBQU1HLGdCQUFnQixHQUFHOVAsTUFBTSxDQUF1QyxJQUFJLENBQUM7O0VBRTNFO0VBQ0E7RUFDQSxJQUFNK1AsUUFBUSxHQUFHNVAsT0FBTyxDQUFDLFlBQU07SUFDN0IsSUFBSXlJLFNBQVMsSUFBSUcsYUFBYSxJQUFJTSxvQkFBb0IsRUFBRSxPQUFPLEVBQUU7SUFFakUsSUFBSXJCLE1BQU0sSUFBSXNDLGdCQUFnQixFQUFFO01BQzlCLE9BQU9yRCxDQUFDLHlDQUFBZ0csTUFBQSxDQUF5QzNDLGdCQUFnQixDQUFFLENBQUM7SUFDdEU7SUFFQSxJQUFNMEYsS0FBSyxHQUFHMUksS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUUySSxZQUFZO0lBQ2pDLElBQUksQ0FBQ0QsS0FBSyxFQUFFLE9BQU8sRUFBRTtJQUNyQixJQUFJbkQsS0FBSyxDQUFDcUQsT0FBTyxDQUFDRixLQUFLLENBQUMsSUFBSUEsS0FBSyxDQUFDOUQsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUM1QyxPQUFPOEQsS0FBSyxDQUFDRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0QsSUFBSSxDQUFDRSxNQUFNLENBQUMsQ0FBQyxHQUFHTCxLQUFLLENBQUM5RCxNQUFNLENBQUMsQ0FBQztJQUN4RDtJQUNBLE9BQU8sT0FBTzhELEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssR0FBRyxFQUFFO0VBQy9DLENBQUMsRUFBRSxDQUFDMUksS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU2QixFQUFFLEVBQUU3QixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTJJLFlBQVksRUFBRXJILFNBQVMsRUFBRUcsYUFBYSxFQUFFZixNQUFNLEVBQUVzQyxnQkFBZ0IsRUFBRWpCLG9CQUFvQixFQUFFcEMsQ0FBQyxDQUFDLENBQUM7RUFFakgsSUFBTXFKLHlCQUF5QixHQUFHcFEsV0FBVyxDQUMzQyxVQUFDMkUsT0FBMEIsRUFBRTBMLEtBQWEsRUFBSztJQUFBLElBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBO0lBQzdDeEosS0FBSyxDQUFDM0csTUFBTSxDQUFDb1EscUJBQXFCLEVBQUU7TUFBRUwsS0FBSyxFQUFMQSxLQUFLO01BQUVsTCxJQUFJLEVBQUVSLE9BQU8sQ0FBQ1E7SUFBSyxDQUFDLENBQUM7SUFFbEUsSUFBTXdMLFNBQVMsR0FBRy9LLGNBQWMsQ0FBQ2pCLE9BQU8sQ0FBQ3NFLEVBQUUsQ0FBQztJQUM1QyxJQUFNMkgsUUFBUSxHQUFHaEwsY0FBYyxFQUFBMEssZ0JBQUEsR0FBQzNMLE9BQU8sQ0FBQ2tNLE9BQU8sY0FBQVAsZ0JBQUEsdUJBQWZBLGdCQUFBLENBQWlCUSxTQUFTLENBQUM7SUFDM0QsSUFBTTVILFNBQVMsR0FBR3RELGNBQWMsRUFBQTJLLGlCQUFBLEdBQUM1TCxPQUFPLENBQUNrTSxPQUFPLGNBQUFOLGlCQUFBLHVCQUFmQSxpQkFBQSxDQUFpQlEsVUFBVSxDQUFDO0lBQzdELElBQU1DLFVBQVUsR0FBRyxFQUFBUixpQkFBQSxHQUFBN0wsT0FBTyxDQUFDa00sT0FBTyxjQUFBTCxpQkFBQSx1QkFBZkEsaUJBQUEsQ0FBaUJTLFdBQVcsS0FBSSxFQUFFO0lBQ3JELElBQU05RyxXQUFXLEdBQUcsRUFBQXNHLGlCQUFBLEdBQUE5TCxPQUFPLENBQUNrTSxPQUFPLGNBQUFKLGlCQUFBLHVCQUFmQSxpQkFBQSxDQUFpQlMsWUFBWSxLQUFJLEVBQUU7SUFFdkRsSCxrQkFBa0IsQ0FBQ3JGLE9BQU8sQ0FBQztJQUMzQmlELE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDYkQsVUFBVSxDQUFDLElBQUksQ0FBQztJQUNoQkQsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRyxJQUFJLENBQUM7SUFDakJHLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFFckIsSUFBSWxELE9BQU8sQ0FBQ1EsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUM3QixJQUFJd0wsU0FBUyxJQUFJLElBQUksRUFBRTtNQUN2QmpKLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUc7UUFBRXVCLEVBQUUsRUFBRTBILFNBQVM7UUFBRXpHLElBQUksRUFBRXZGLE9BQU8sQ0FBQ3VGO01BQUssQ0FBQyxDQUFDO0lBQ3BELENBQUMsTUFBTSxJQUFJdkYsT0FBTyxDQUFDUSxJQUFJLEtBQUssU0FBUyxFQUFFO01BQ3JDLElBQUl3TCxTQUFTLElBQUksSUFBSSxFQUFFO01BQ3ZCaEosVUFBVSxDQUFBd0osYUFBQSxDQUFBQSxhQUFBO1FBQ1JsSSxFQUFFLEVBQUUwSCxTQUFTO1FBQ2J6RyxJQUFJLEVBQUV2RixPQUFPLENBQUN1RjtNQUFJLEdBQ2QwRyxRQUFRLElBQUksSUFBSSxHQUFHO1FBQUVBLFFBQVEsRUFBUkE7TUFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3BDQSxRQUFRLElBQUksSUFBSSxHQUFHO1FBQUV0SixNQUFNLEVBQUU7VUFBRTJCLEVBQUUsRUFBRTJILFFBQVE7VUFBRTFHLElBQUksRUFBRThHO1FBQVc7TUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzNFLENBQUM7TUFDRm5KLGVBQWUsQ0FBQztRQUNkcUIsU0FBUyxFQUFFZCxNQUFNLENBQUN1SSxTQUFTLENBQUM7UUFDNUJ4RyxXQUFXLEVBQUV4RixPQUFPLENBQUN1RixJQUFJO1FBQ3pCOEcsVUFBVSxFQUFWQTtNQUNGLENBQUMsQ0FBQztJQUNKLENBQUMsTUFBTSxJQUFJck0sT0FBTyxDQUFDUSxJQUFJLEtBQUssTUFBTSxFQUFFO01BQ2xDeUMsT0FBTyxDQUFBdUosYUFBQSxDQUFBQSxhQUFBO1FBQ0xsSSxFQUFFLEVBQUV0RSxPQUFPLENBQUNzRSxFQUFFO1FBQ2RpQixJQUFJLEVBQUV2RixPQUFPLENBQUN1RjtNQUFJLEdBQ2RoQixTQUFTLElBQUksSUFBSSxHQUFHO1FBQUVBLFNBQVMsRUFBVEE7TUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3RDMEgsUUFBUSxJQUFJLElBQUksR0FBRztRQUFFQSxRQUFRLEVBQVJBO01BQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN6QyxDQUFDO01BQ0YsSUFBSUEsUUFBUSxJQUFJLElBQUksRUFBRTtRQUNwQmxKLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUc7VUFBRXVCLEVBQUUsRUFBRTJILFFBQVE7VUFBRTFHLElBQUksRUFBRThHO1FBQVcsQ0FBQyxDQUFDO01BQ2pEO01BQ0EsSUFBSTlILFNBQVMsSUFBSSxJQUFJLEVBQUU7UUFDckJ2QixVQUFVLENBQUF3SixhQUFBLENBQUFBLGFBQUE7VUFDUmxJLEVBQUUsRUFBRUMsU0FBUztVQUNiZ0IsSUFBSSxFQUFFQyxXQUFXLE9BQUE0QyxNQUFBLENBQU9oRyxDQUFDLENBQUMsdUNBQXVDLENBQUMsT0FBQWdHLE1BQUEsQ0FBSTdELFNBQVM7UUFBRSxHQUM3RTBILFFBQVEsSUFBSSxJQUFJLEdBQUc7VUFBRUEsUUFBUSxFQUFSQTtRQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDcENBLFFBQVEsSUFBSSxJQUFJLEdBQUc7VUFBRXRKLE1BQU0sRUFBRTtZQUFFMkIsRUFBRSxFQUFFMkgsUUFBUTtZQUFFMUcsSUFBSSxFQUFFOEc7VUFBVztRQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDM0UsQ0FBQztRQUNGbkosZUFBZSxDQUFDO1VBQ2RxQixTQUFTLEVBQUVkLE1BQU0sQ0FBQ2MsU0FBUyxDQUFDO1VBQzVCaUIsV0FBVyxFQUFFQSxXQUFXLE9BQUE0QyxNQUFBLENBQU9oRyxDQUFDLENBQUMsdUNBQXVDLENBQUMsT0FBQWdHLE1BQUEsQ0FBSTdELFNBQVMsQ0FBRTtVQUN4RjhILFVBQVUsRUFBVkE7UUFDRixDQUFDLENBQUM7TUFDSjtJQUNGO0lBRUFJLHFCQUFxQixDQUFDLFlBQU07TUFDMUJDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9ELENBQUMsQ0FBQztFQUNKLENBQUMsRUFDRCxDQUFDdEssS0FBSyxFQUFFWSxlQUFlLEVBQUVILFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUViLENBQUMsQ0FDNUQsQ0FBQztFQUVELElBQU15SyxtQkFBbUIsR0FBR3hSLFdBQVcsQ0FDckMsVUFDRXlSLE9BQWUsRUFDZkMsV0FBcUMsRUFDckNDLEtBQWMsRUFDZEMsaUJBQTBCLEVBQzFCQyxRQUFlLEVBQ2ZDLEtBQWMsRUFDZEMsSUFBYSxFQUNiQyxXQUFxQyxFQUNsQztJQUNILElBQUl6SSx3QkFBd0IsSUFBSXVJLEtBQUssRUFBRTtNQUNyQzVSLFNBQVMsQ0FBQyxZQUFNO1FBQ2Q4SixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDeEJwQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2JELFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDaEJELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO1FBQ2pCRyxlQUFlLENBQUMsSUFBSSxDQUFDO01BQ3ZCLENBQUMsQ0FBQztJQUNKO0lBQ0FsQixXQUFXLENBQUM4SyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsS0FBSyxFQUFFQyxpQkFBaUIsRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsV0FBVyxDQUFDO0VBQ2pHLENBQUMsRUFDRCxDQUFDekksd0JBQXdCLEVBQUU1QyxXQUFXLEVBQUVrQixlQUFlLEVBQUVILFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLENBQ3pGLENBQUM7RUFFRCxJQUFNcUssb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBQSxFQUFTO0lBQ2pDLElBQUksQ0FBQzlJLG9CQUFvQixFQUFFLE9BQU8sSUFBSTtJQUV0QyxvQkFDRWhGLEtBQUEsQ0FBQ2pDLHVCQUF1QjtNQUN0QmdRLGtCQUFrQixFQUFFOUksdUJBQXVCLEdBQUd6Ryw4Q0FBOEMsR0FBRzhDLFNBQVU7TUFBQUosUUFBQSxHQUV4R2lFLHNCQUFzQixnQkFDckJuRixLQUFBLENBQUMvQixvQ0FBb0M7UUFBQWlELFFBQUEsZ0JBQ25DcEIsSUFBQSxDQUFDNUIsbUNBQW1DO1VBQUFnRCxRQUFBLEVBQ2pDMEIsQ0FBQyxDQUNBd0Msd0JBQXdCLEdBQ3BCLHlEQUF5RCxHQUN6RCwrQ0FDTjtRQUFDLENBQ2tDLENBQUMsZUFDdEN0RixJQUFBLENBQUMzQixzQ0FBc0M7VUFBQStDLFFBQUEsRUFDcEMwQixDQUFDLENBQ0F3Qyx3QkFBd0IsR0FDcEIsNERBQTRELEdBQzVELGtEQUNOO1FBQUMsQ0FDcUMsQ0FBQztNQUFBLENBQ0wsQ0FBQyxHQUNyQyxJQUFJLGVBQ1JwRixLQUFBLENBQUNoQywyQkFBMkI7UUFBQ2dRLFdBQVcsRUFBRS9JLHVCQUF3QjtRQUFBL0QsUUFBQSxHQUMvRGlILHFCQUFxQixJQUNwQkkseUJBQXlCLENBQUMwRixHQUFHLENBQUMsVUFBQUMsR0FBRztVQUFBLG9CQUFJcE8sSUFBQSxDQUFDdkIsa0NBQWtDLE1BQU0yUCxHQUFNLENBQUM7UUFBQSxFQUFDLEVBQ3ZGLENBQUMvRixxQkFBcUIsSUFDckJDLGNBQWMsQ0FBQzZGLEdBQUcsQ0FBQyxVQUFDek4sT0FBTyxFQUFFbUksS0FBSztVQUFBLG9CQUNoQzdJLElBQUEsQ0FBQ1EsaUJBQWlCO1lBRWhCRSxPQUFPLEVBQUVBLE9BQVE7WUFDakJDLEtBQUssRUFBRUQsT0FBTyxDQUFDdUYsSUFBSSxDQUFDb0ksSUFBSSxDQUFDLENBQUU7WUFDM0J6TixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtjQUFBLE9BQVF1TCx5QkFBeUIsQ0FBQ3pMLE9BQU8sRUFBRW1JLEtBQUssR0FBRyxDQUFDLENBQUM7WUFBQSxDQUFDO1lBQzdEL0gsU0FBUyxFQUFFcUU7VUFBd0IsTUFBQTJELE1BQUEsQ0FKM0JwSSxPQUFPLENBQUNRLElBQUksT0FBQTRILE1BQUEsQ0FBSXBJLE9BQU8sQ0FBQ3NFLEVBQUUsQ0FLbkMsQ0FBQztRQUFBLENBQ0gsQ0FBQztNQUFBLENBQ3VCLENBQUM7SUFBQSxDQUNQLENBQUM7RUFFOUIsQ0FBQztFQUVELElBQU1zSixXQUFXLEdBQUd2UyxXQUFXLENBQUMsWUFBTTtJQUNwQyxJQUFNd1MsU0FBUyxHQUFHekQsbUJBQW1CLENBQUNwQixPQUFPO0lBQzdDLElBQUksQ0FBQzZFLFNBQVMsSUFBSSxDQUFDM0Qsb0JBQW9CLEVBQUU7SUFFekMsSUFBUTRELFNBQVMsR0FBaUNELFNBQVMsQ0FBbkRDLFNBQVM7TUFBRUMsWUFBWSxHQUFtQkYsU0FBUyxDQUF4Q0UsWUFBWTtNQUFFQyxZQUFZLEdBQUtILFNBQVMsQ0FBMUJHLFlBQVk7SUFDN0MsSUFBTUMsWUFBWSxHQUFHRixZQUFZLEdBQUdDLFlBQVk7SUFDaEQsSUFBTUUsT0FBTyxHQUFHSixTQUFTLEtBQUssQ0FBQztJQUMvQixJQUFNSyxVQUFVLEdBQUdMLFNBQVMsR0FBR0UsWUFBWSxJQUFJRCxZQUFZLEdBQUcsQ0FBQztJQUUvRHZELGtCQUFrQixDQUFDeUQsWUFBWSxJQUFJLENBQUNDLE9BQU8sQ0FBQztJQUM1Q3RELHFCQUFxQixDQUFDcUQsWUFBWSxJQUFJLENBQUNFLFVBQVUsQ0FBQztFQUNwRCxDQUFDLEVBQUUsQ0FBQ2pFLG9CQUFvQixDQUFDLENBQUM7RUFFMUIsSUFBTWtFLFlBQVksR0FBRy9TLFdBQVcsQ0FBQyxZQUFNO0lBQ3JDdVMsV0FBVyxDQUFDLENBQUM7SUFDYjVDLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFFcEIsSUFBSUMsZ0JBQWdCLENBQUNqQyxPQUFPLEVBQUU7TUFDNUJxRixZQUFZLENBQUNwRCxnQkFBZ0IsQ0FBQ2pDLE9BQU8sQ0FBQztJQUN4QztJQUVBaUMsZ0JBQWdCLENBQUNqQyxPQUFPLEdBQUdzRixVQUFVLENBQUMsWUFBTTtNQUMxQ3RELGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDdkIsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUNULENBQUMsRUFBRSxDQUFDNEMsV0FBVyxDQUFDLENBQUM7RUFFakIzUyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQ2lQLG9CQUFvQixFQUFFO01BQ3pCTSxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7TUFDekJJLHFCQUFxQixDQUFDLEtBQUssQ0FBQztNQUM1QixPQUFPOUosU0FBUztJQUNsQjtJQUVBLElBQU0rTSxTQUFTLEdBQUd6RCxtQkFBbUIsQ0FBQ3BCLE9BQU87SUFDN0MsSUFBSSxDQUFDNkUsU0FBUyxFQUFFO01BQ2QsT0FBTy9NLFNBQVM7SUFDbEI7SUFFQSxJQUFNeU4sbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBQSxFQUFTO01BQ2hDOUIscUJBQXFCLENBQUMsWUFBTTtRQUMxQm1CLFdBQVcsQ0FBQyxDQUFDO01BQ2YsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEVyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JCVixTQUFTLENBQUNXLGdCQUFnQixDQUFDLFFBQVEsRUFBRUosWUFBWSxDQUFDO0lBRWxELElBQU1LLGNBQWMsR0FBRyxJQUFJQyxjQUFjLENBQUNILG1CQUFtQixDQUFDO0lBQzlERSxjQUFjLENBQUNFLE9BQU8sQ0FBQ2QsU0FBUyxDQUFDO0lBQ2pDLElBQU1lLGFBQWEsR0FBR2YsU0FBUyxDQUFDZ0IsaUJBQWlCO0lBQ2pELElBQUlELGFBQWEsWUFBWUUsT0FBTyxFQUFFO01BQ3BDTCxjQUFjLENBQUNFLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDO0lBQ3ZDO0lBRUEsSUFBTUcsU0FBUyxHQUFHdkwsTUFBTSxDQUFDOEssVUFBVSxDQUFDQyxtQkFBbUIsRUFBRSxHQUFHLENBQUM7SUFDN0QsSUFBTVMsYUFBYSxHQUFHeEwsTUFBTSxDQUFDOEssVUFBVSxDQUFDQyxtQkFBbUIsRUFBRSxHQUFHLENBQUM7SUFFakUsT0FBTyxZQUFNO01BQ1hWLFNBQVMsQ0FBQ29CLG1CQUFtQixDQUFDLFFBQVEsRUFBRWIsWUFBWSxDQUFDO01BQ3JESyxjQUFjLENBQUNTLFVBQVUsQ0FBQyxDQUFDO01BQzNCYixZQUFZLENBQUNVLFNBQVMsQ0FBQztNQUN2QlYsWUFBWSxDQUFDVyxhQUFhLENBQUM7TUFDM0IsSUFBSS9ELGdCQUFnQixDQUFDakMsT0FBTyxFQUFFO1FBQzVCcUYsWUFBWSxDQUFDcEQsZ0JBQWdCLENBQUNqQyxPQUFPLENBQUM7TUFDeEM7SUFDRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNrQixvQkFBb0IsRUFBRTBELFdBQVcsRUFBRVEsWUFBWSxDQUFDLENBQUM7RUFFckRsVCxlQUFlLENBQUMsWUFBTTtJQUNwQixJQUFJLENBQUNnUCxvQkFBb0IsRUFBRTtJQUMzQjBELFdBQVcsQ0FBQyxDQUFDO0VBQ2YsQ0FBQyxFQUFFLENBQ0QxRCxvQkFBb0IsRUFDcEIwRCxXQUFXLEVBQ1hqRyxxQkFBcUIsRUFDckJDLGNBQWMsQ0FBQ1AsTUFBTSxFQUNyQkgsc0JBQXNCLEVBQ3RCRCxlQUFlLENBQUNJLE1BQU0sRUFDdEJqQixXQUFXLEVBQ1grQyxJQUFJLENBQUM5QixNQUFNLEVBQ1grQixjQUFjLEVBQ2RYLElBQUksQ0FBQ3BCLE1BQU0sRUFDWHNDLHFCQUFxQixFQUNyQjVGLFNBQVMsQ0FDVixDQUFDO0VBRUYsSUFBTW9MLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUEsRUFBUztJQUNoQyxJQUFJLENBQUNoTSxNQUFNLEVBQUU7TUFBQSxJQUFBaU0saUJBQUEsRUFBQUMsa0JBQUE7TUFDWCxvQkFDRTdQLEtBQUEsQ0FBQ25ELDJCQUEyQjtRQUFBcUUsUUFBQSxnQkFDMUJsQixLQUFBLENBQUNsRCxrQkFBa0I7VUFBQW9FLFFBQUEsR0FDaEIrQixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTZNLEtBQUssRUFBQyxHQUFDLEVBQUM3TSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRThDLElBQUk7UUFBQSxDQUNULENBQUMsRUFDcEIsQ0FBQTlDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFOE0sVUFBVSxLQUFJLENBQUNwTSxNQUFNLGlCQUMzQjdELElBQUEsQ0FBQ3pDLDJCQUEyQjtVQUFBNkQsUUFBQSxlQUMxQnBCLElBQUEsQ0FBQzlELE9BQU87WUFDTndGLEtBQUssRUFDSHlCLEtBQUssYUFBTEEsS0FBSyxnQkFBQTJNLGlCQUFBLEdBQUwzTSxLQUFLLENBQUU4TSxVQUFVLGNBQUFILGlCQUFBLGVBQWpCQSxpQkFBQSxDQUFtQkksVUFBVSxHQUFHcE4sQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLEdBQUdBLENBQUMsQ0FBQywyQkFBMkIsQ0FDdEc7WUFBQTFCLFFBQUEsZUFFRGxCLEtBQUEsQ0FBQzFDLHNCQUFzQjtjQUFBNEQsUUFBQSxHQUNwQjBCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsZUFDN0I5QyxJQUFBLENBQUN2QywwQkFBMEI7Z0JBQUEyRCxRQUFBLEVBQUUrQixLQUFLLGFBQUxBLEtBQUssZ0JBQUE0TSxrQkFBQSxHQUFMNU0sS0FBSyxDQUFFOE0sVUFBVSxjQUFBRixrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1COUo7Y0FBSSxDQUE2QixDQUFDO1lBQUEsQ0FDNUQ7VUFBQyxDQUNsQjtRQUFDLENBQ2lCLENBQzlCO01BQUEsQ0FDMEIsQ0FBQztJQUVsQztJQUVBLElBQU1rSyxpQkFBaUIsR0FBR3ZMLGFBQWEsSUFBSU8sdUJBQXVCLElBQUlNLDZCQUE2QjtJQUVuRyxJQUFNMkssdUJBQXVCLEdBQzFCbEwsb0JBQW9CLElBQUksQ0FBQ0MsdUJBQXVCLElBQUksQ0FBQ1AsYUFBYSxJQUNsRSxDQUFDTSxvQkFBb0IsSUFDcEIsQ0FBQyxDQUFDMEcsUUFBUSxJQUNWLENBQUNoSCxhQUFhLElBQ2QsQ0FBQ08sdUJBQXVCLElBQ3hCLENBQUNNLDZCQUE4QjtJQUVuQyxvQkFDRXZGLEtBQUEsQ0FBQ3RDLHdCQUF3QjtNQUFDeVMsTUFBTSxFQUFFLENBQUNELHVCQUF3QjtNQUFDRSxNQUFNLEVBQUVILGlCQUFpQixHQUFHLE9BQU8sR0FBRyxRQUFTO01BQUEvTyxRQUFBLEdBQ3hHLENBQUN3RCxhQUFhLElBQUksQ0FBQ08sdUJBQXVCLElBQUksQ0FBQ00sNkJBQTZCLGlCQUMzRXpGLElBQUEsQ0FBQ3RDLHNCQUFzQjtRQUFBMEQsUUFBQSxlQUNyQnBCLElBQUEsQ0FBQ3JDLG9CQUFvQjtVQUFBeUQsUUFBQSxlQUNuQnBCLElBQUEsQ0FBQ0osV0FBVyxJQUFFO1FBQUMsQ0FDSztNQUFDLENBQ0QsQ0FDekIsRUFDQWdGLGFBQWEsaUJBQ1oxRSxLQUFBLENBQUNwQyxtQkFBbUI7UUFBQ3dTLE1BQU0sRUFBQyxPQUFPO1FBQUFsUCxRQUFBLGdCQUNqQ3BCLElBQUEsQ0FBQ25DLGNBQWM7VUFBQzBTLEtBQUssRUFBQyxJQUFJO1VBQUNELE1BQU0sRUFBQyxPQUFPO1VBQUFsUCxRQUFBLEVBQ3RDMEIsQ0FBQyxDQUFDLDRCQUE0QjtRQUFDLENBQ2xCLENBQUMsZUFDakI5QyxJQUFBLENBQUNqQyxpQkFBaUI7VUFBQ3VTLE1BQU0sRUFBQyxPQUFPO1VBQUFsUCxRQUFBLEVBQUUwQixDQUFDLENBQUMsK0JBQStCO1FBQUMsQ0FBb0IsQ0FBQztNQUFBLENBQ3ZFLENBQ3RCLEVBQ0EsQ0FBQzhCLGFBQWEsSUFBSU0sb0JBQW9CLElBQUlDLHVCQUF1QixpQkFDaEVqRixLQUFBLENBQUNwQyxtQkFBbUI7UUFBQ3dTLE1BQU0sRUFBQyxPQUFPO1FBQUNuUCxVQUFVO1FBQUFDLFFBQUEsZ0JBQzVDcEIsSUFBQSxDQUFDbkMsY0FBYztVQUFDMFMsS0FBSyxFQUFDLFNBQVM7VUFBQ0QsTUFBTSxFQUFDLE9BQU87VUFBQ25QLFVBQVU7VUFBQUMsUUFBQSxFQUN0RDBCLENBQUMsQ0FBQywrQkFBK0IsRUFBRTtZQUFFbUQsSUFBSSxFQUFFaEQsSUFBSSxDQUFDdU47VUFBVSxDQUFDO1FBQUMsQ0FDL0MsQ0FBQyxlQUNqQnhRLElBQUEsQ0FBQ2pDLGlCQUFpQjtVQUFDdVMsTUFBTSxFQUFDLE9BQU87VUFBQ0csaUJBQWlCO1VBQUFyUCxRQUFBLEVBQ2hEMEIsQ0FBQyxDQUFDeUMsNEJBQTRCO1FBQUMsQ0FDZixDQUFDO01BQUEsQ0FDRCxDQUN0QixFQUNBLENBQUNYLGFBQWEsSUFBSU0sb0JBQW9CLElBQUksQ0FBQ0MsdUJBQXVCLGlCQUNqRWpGLEtBQUEsQ0FBQUUsU0FBQTtRQUFBZ0IsUUFBQSxnQkFDRXBCLElBQUEsQ0FBQ25DLGNBQWM7VUFBQ3lTLE1BQU0sRUFBRTdLLDZCQUE2QixHQUFHLE9BQU8sR0FBR2pFLFNBQVU7VUFBQUosUUFBQSxFQUN6RTBCLENBQUMsQ0FBQywrQkFBK0IsRUFBRTtZQUFFbUQsSUFBSSxFQUFFaEQsSUFBSSxDQUFDdU47VUFBVSxDQUFDO1FBQUMsQ0FDL0MsQ0FBQyxlQUNqQnhRLElBQUEsQ0FBQ2pDLGlCQUFpQjtVQUFDdVMsTUFBTSxFQUFFN0ssNkJBQTZCLEdBQUcsT0FBTyxHQUFHakUsU0FBVTtVQUFBSixRQUFBLEVBQzVFMEIsQ0FBQyxDQUNBaEUsa0JBQWtCLENBQUNtRSxJQUFJLENBQUNtQyxPQUFPLENBQUMsR0FDNUIsMkNBQTJDLEdBQzNDLCtCQUNOO1FBQUMsQ0FDZ0IsQ0FBQztNQUFBLENBQ3BCLENBQ0gsRUFDQSxDQUFDUixhQUFhLElBQUksQ0FBQ00sb0JBQW9CLElBQUkwRyxRQUFRLGlCQUNsRDVMLElBQUEsQ0FBQ2xELGlCQUFpQjtRQUNoQndULE1BQU0sRUFBRTdLLDZCQUE2QixHQUFHLE9BQU8sR0FBR2pFLFNBQVU7UUFDNUQrTyxLQUFLLEVBQUU5Syw2QkFBNkIsR0FBRyxJQUFJLEdBQUcsSUFBSztRQUFBckUsUUFBQSxFQUVsRHdLO01BQVEsQ0FDUSxDQUNwQjtJQUFBLENBQ3VCLENBQUM7RUFFL0IsQ0FBQztFQUVELElBQU04RSxxQkFBcUIsR0FDekJ2TCx1QkFBdUIsSUFBSU0sNkJBQTZCLEdBQ3BEL0csOENBQThDLEdBQzlDOEMsU0FBUztFQUNmLElBQU0yTyxpQkFBaUIsR0FBR3ZMLGFBQWEsSUFBSU8sdUJBQXVCLElBQUlNLDZCQUE2QjtFQUNuRyxJQUFNa0wscUJBQXFCLEdBQUd2TixPQUFPLEtBQUssU0FBUyxJQUFJLENBQUNTLE1BQU0sSUFBSSxDQUFDLEVBQUNWLEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUUySSxZQUFZO0VBRXZGLElBQU04RSxRQUFRLGdCQUNaNVEsSUFBQSxDQUFDdkQsZ0JBQWdCO0lBQ2ZrTyxRQUFRLEVBQUVDLG9CQUFxQjtJQUMvQmlHLFlBQVksRUFBRSxDQUFDaE4sTUFBTztJQUN0QmlOLHFCQUFxQixFQUFFaE4sb0JBQXFCO0lBQzVDaU4saUJBQWlCLEVBQUVuTSxhQUFjO0lBQ2pDb00sV0FBVyxFQUFFdkwsNkJBQThCO0lBQzNDd0ksa0JBQWtCLEVBQUV5QyxxQkFBc0I7SUFBQXRQLFFBQUEsZUFFMUNsQixLQUFBLENBQUN4RCxxQkFBcUI7TUFDcEJpTyxRQUFRLEVBQUVDLG9CQUFxQjtNQUMvQmlHLFlBQVksRUFBRSxDQUFDaE4sTUFBTztNQUN0QmlOLHFCQUFxQixFQUFFaE4sb0JBQXFCO01BQzVDaU4saUJBQWlCLEVBQUVuTSxhQUFjO01BQ2pDb00sV0FBVyxFQUFFN0wsdUJBQXVCLElBQUlNLDZCQUE4QjtNQUN0RXdMLHVCQUF1QixFQUFFOUwsdUJBQXdCO01BQ2pEK0wsd0JBQXdCLEVBQUV6TCw2QkFBOEI7TUFBQXJFLFFBQUEsZ0JBRXhEbEIsS0FBQSxDQUFDckQsZUFBZTtRQUNkc1UsSUFBSSxFQUFFUixxQkFBcUIsR0FBRyxNQUFNLEdBQUcsR0FBSTtRQUMzQ1MsU0FBUyxFQUFFdk4sTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFRO1FBQ3JDZ04sWUFBWSxFQUFFLENBQUNoTixNQUFPO1FBQ3RCeU0sTUFBTSxFQUFFSCxpQkFBaUIsR0FBRyxPQUFPLEdBQUcsUUFBUztRQUFBL08sUUFBQSxHQUU5Q3lPLG1CQUFtQixDQUFDLENBQUMsRUFFckJjLHFCQUFxQixnQkFDcEIzUSxJQUFBLENBQUMxQyxxQkFBcUI7VUFBQ3FGLFFBQVEsRUFBRUEsUUFBUztVQUFBdkIsUUFBQSxFQUFFK0IsS0FBSyxDQUFDMkk7UUFBWSxDQUF3QixDQUFDLEdBQ3JGLElBQUk7TUFBQSxDQUNPLENBQUMsRUFDakJyQixzQkFBc0IsaUJBQ3JCdkssS0FBQSxDQUFDN0MsMEJBQTBCO1FBQUN1RCxPQUFPLEVBQUU2QixRQUFRLENBQUM0TyxjQUFlO1FBQUFqUSxRQUFBLGdCQUMzRHBCLElBQUEsQ0FBQy9DLHVCQUF1QjtVQUFBbUUsUUFBQSxlQUN0QnBCLElBQUEsQ0FBQ0gsb0JBQW9CO1lBQUMwQixNQUFNLEVBQUUsRUFBRztZQUFDRCxLQUFLLEVBQUU7VUFBRyxDQUFFO1FBQUMsQ0FDeEIsQ0FBQyxlQUMxQnBCLEtBQUEsQ0FBQ2hELDhCQUE4QjtVQUFBa0UsUUFBQSxnQkFDN0JwQixJQUFBLENBQUM3Qyw0QkFBNEI7WUFBQWlFLFFBQUEsRUFBRTBCLENBQUMsQ0FBQywrQkFBK0I7VUFBQyxDQUErQixDQUFDLGVBQ2pHOUMsSUFBQSxDQUFDNUMsa0NBQWtDO1lBQUFnRSxRQUFBLEVBQ2hDMEIsQ0FBQyxDQUFDLHFDQUFxQztVQUFDLENBQ1AsQ0FBQztRQUFBLENBQ1AsQ0FBQztNQUFBLENBQ1AsQ0FDN0IsRUFDQStILGtCQUFrQixpQkFDakIzSyxLQUFBLENBQUNsQyx1QkFBdUI7UUFDdEJzVCxLQUFLLEVBQUU3TSxTQUFVO1FBQ2pCdU0sV0FBVyxFQUFFN0wsdUJBQXVCLElBQUlNLDZCQUE4QjtRQUFBckUsUUFBQSxHQUVyRW9KLG9DQUFvQyxnQkFDbkN4SyxJQUFBLENBQUNWLHFCQUFxQjtVQUNwQm9ELFdBQVcsRUFBRTZLLG1CQUFvQjtVQUNqQzVELE9BQU8sRUFBRXhHLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkIsRUFBRztVQUNuQnlHLFdBQVcsRUFBRUEsV0FBWTtVQUN6QjVFLE9BQU8sRUFBRVksMEJBQTJCO1VBQ3BDVixPQUFPLEVBQUVXO1FBQWtDLENBQzVDLENBQUMsR0FDQSxJQUFJLEVBQ1AyQyxxQkFBcUIsZ0JBQ3BCckssSUFBQSxDQUFDVixxQkFBcUI7VUFDcEJpUyxPQUFPLEVBQUMsU0FBUztVQUNqQjdPLFdBQVcsRUFBRTZLLG1CQUFvQjtVQUNqQzVELE9BQU8sRUFBRXhHLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNkIsRUFBRztVQUNuQnlHLFdBQVcsRUFBRUEsV0FBWTtVQUN6QjVFLE9BQU8sRUFBRWMsZUFBZ0I7VUFDekJaLE9BQU8sRUFBRWE7UUFBdUIsQ0FDakMsQ0FBQyxHQUNBLElBQUksRUFDUG9HLG9CQUFvQixDQUFDLENBQUMsRUFDdEIvRCxjQUFjLGlCQUNiakssSUFBQSxDQUFDWCx3QkFBd0I7VUFDdkJxRCxXQUFXLEVBQUVBLFdBQVk7VUFDekJpSSxRQUFRLEVBQUVBLFFBQVM7VUFDbkJuRyxrQkFBa0IsRUFBRUEsa0JBQW1CO1VBQ3ZDbUYsT0FBTyxFQUFFeEcsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU2QixFQUFHO1VBQ25CakIsSUFBSSxFQUFFQSxJQUFLO1VBQ1gwSCxXQUFXLEVBQUVBLFdBQVk7VUFDekJ0QyxJQUFJLEVBQUVBLElBQUs7VUFDWHBDLE9BQU8sRUFBRStDO1FBQWUsQ0FDekIsQ0FDRixFQUNBSSxjQUFjLGlCQUNibEssSUFBQSxDQUFDVixxQkFBcUI7VUFDcEJvRCxXQUFXLEVBQUVBLFdBQVk7VUFDekJpSCxPQUFPLEVBQUV4RyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTZCLEVBQUc7VUFDbkJ5RyxXQUFXLEVBQUVBLFdBQVk7VUFDekI1RSxPQUFPLEVBQUVnRCxJQUFLO1VBQ2Q5QyxPQUFPLEVBQUVnRDtRQUFlLENBQ3pCLENBQ0YsRUFDQXRGLFNBQVMsZ0JBQUd6RSxJQUFBLENBQUNGLGlCQUFpQjtVQUFDNEMsV0FBVyxFQUFFQTtRQUFZLENBQUUsQ0FBQyxHQUFHLElBQUk7TUFBQSxDQUM1QyxDQUMxQjtJQUFBLENBQ29CO0VBQUMsQ0FDUixDQUNuQjtFQUVELG9CQUNFeEMsS0FBQSxDQUFDM0Qsa0JBQWtCO0lBQUNvTyxRQUFRLEVBQUVBLFFBQVM7SUFBQ3FHLFdBQVcsRUFBRXZMLDZCQUE4QjtJQUFBckUsUUFBQSxHQUNoRndKLG9CQUFvQixpQkFBSTVLLElBQUEsQ0FBQ3JELG9CQUFvQjtNQUFDNlUsS0FBSyxFQUFFdkc7SUFBZ0IsQ0FBRSxDQUFDLEVBQ3hFTCxvQkFBb0IsZ0JBQ25CNUssSUFBQSxDQUFDeEQsZUFBZTtNQUFDaUYsR0FBRyxFQUFFcUosbUJBQW9CO01BQUMyRyxXQUFXO01BQUFyUSxRQUFBLEVBQ25Ed1A7SUFBUSxDQUNNLENBQUMsR0FFbEJBLFFBQ0QsRUFDQWhHLG9CQUFvQixpQkFBSTVLLElBQUEsQ0FBQ3BELHVCQUF1QjtNQUFDNFUsS0FBSyxFQUFFbkc7SUFBbUIsQ0FBRSxDQUFDO0VBQUEsQ0FDN0QsQ0FBQztBQUV6QixDQUFDIiwiaWdub3JlTGlzdCI6W119
632
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImZsdXNoU3luYyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lVGl0bGVCbG9jayIsIlNDQ0FJSG9tZVN1YnRpdGxlIiwiU0NDQUlIb21lRHluYW1pY1NlY3Rpb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cyIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlciIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24iLCJNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJpc0NvbGxhYm9yYXRvclJvbGUiLCJpc01hbmFnZXJSb2xlIiwidXNlUmVzaXplTGlzdGVuZXIiLCJnZXRDb250ZXh0TWVudGlvbkljb24iLCJvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50IiwidmFsaWRhdGVJc01haWEiLCJpc01haWFrZXJBZ2VudCIsIkZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsIkZyZXF1ZW50bHlVc2VkQWN0aW9ucyIsInVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyIsInNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyIsInJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCIsInVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsInVzZVJlY2VudENvbnRleHRzIiwiTUFJQUlzb2xvZ28iLCJUZW1wbGF0ZUdyYWRpZW50SWNvbiIsIkNoYXRBSUhvbWVNYWlha2VyIiwicmVzb2x2ZUFjdGl2ZUNvbnRleHRGcm9tR2xvYmFsIiwicmVzb2x2ZUFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMiLCJyZXNvbHZlRmFxc0NvbnRleHRFbnRpdHlUeXBlIiwicmVzb2x2ZUZ1YXNTZWN0aW9uIiwicmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQiLCJyZXNvbHZlSGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsInJlc29sdmVIb21lR3JlZXRpbmciLCJyZXNvbHZlSG9tZVNjcm9sbEdyYWRpZW50cyIsInJlc29sdmVNYWlhSG9tZUxhbmciLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZUxheW91dCIsInJlc29sdmVQaW5uZWRFbnRpdHlUeXBlIiwicmVzb2x2ZVByb2plY3RTdW1tYXJ5RmVhdHVyZUFjY2VzcyIsInJlc29sdmVSZWFsTGlzdHNBZ2VudElkIiwicmVzb2x2ZVJlYWxMaXN0c0VudGl0eVR5cGUiLCJyZXNvbHZlUmVjZW50Q29udGV4dFBpbk91dGNvbWUiLCJyZXNvbHZlU2hvdWxkU2hvd0ZhcXMiLCJyZXNvbHZlU2hvdWxkU2hvd0Z1YXMiLCJyZXNvbHZlRmxvYXRpbmdDdXN0b21DZW50ZXIiLCJmaWx0ZXJSZWNlbnRDb250ZXh0c0J5VHlwZXMiLCJidWlsZFJlY2VudENvbnRleHRTa2VsZXRvbktleXMiLCJyZXNvbHZlU2hvd1JlY2VudENvbnRleHRzQmxvY2siLCJyZXNvbHZlUGxhbm5lckZ1YXNWaXNpYmlsaXR5IiwicmVzb2x2ZUhvbWVEeW5hbWljUGFuZWxWaXNpYmlsaXR5IiwicmVzb2x2ZU1haWFIZWFkZXJTdGFja0xheW91dCIsInJlc29sdmVTaG93QWdlbnRJbnRyb2R1Y3Rpb24iLCJidWlsZEZhcXNGZXRjaEtleSIsInNob3VsZFJlZmV0Y2hGYXFzIiwic2hvdWxkQ2xlYXJQaW5uZWRDb250ZXh0T25Ib21lU3RhcnQiLCJyZXNvbHZlUmVjZW50Q29udGV4dHNTZWN0aW9uQ29weUtleXMiLCJyZXNvbHZlT3JjaGVzdHJhdG9yUmVjZW50Q29udGV4dHNTdWJ0aXRsZUtleSIsImJ1aWxkUGluR2xvYmFsQ29udGV4dFBhdGNoIiwicmVzb2x2ZUhvbWVDb250ZXh0R3JlZXRpbmdLZXkiLCJzaG91bGRDaGVja0hvbWVTY3JvbGwiLCJzaG91bGRPYnNlcnZlSG9tZVNjcm9sbENvbnRlbnQiLCJzaG91bGRSZW5kZXJSZWNlbnRDb250ZXh0c1BhbmVsIiwic2hvdWxkUmVzZXRIb21lU2Nyb2xsR3JhZGllbnRzIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiRnJlcXVlbnRRdWVzdGlvbnMiLCJSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SIiwiUkVDRU5UX0NPTlRFWFRfSUNPTl9TSVpFX1BYIiwiUmVjZW50Q29udGV4dFBpbGwiLCJfcmVmIiwiY29udGV4dCIsImxhYmVsIiwib25DbGljayIsIl9yZWYkZnVsbFdpZHRoIiwiZnVsbFdpZHRoIiwidGV4dFJlZiIsIl91c2VSZXNpemVMaXN0ZW5lciIsInNob3dUb29sdGlwIiwidHlwZSIsIiRmdWxsV2lkdGgiLCJjaGlsZHJlbiIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJ1bmRlZmluZWQiLCJyZWYiLCJ0aXRsZSIsIkNoYXRBSUhvbWUiLCJfcmVmMiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsImV2ZW50IiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiY2xpZW50IiwicHJvamVjdCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0Iiwic2V0VGFzayIsInNldENoaXBzUHJvamVjdCIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJmYXFzQWNjZXNzIiwic2hvd1Byb2plY3RTdW1tYXJ5IiwiaXNNYWlha2VyIiwiaGFzSG91cnNTdWJhZ2VudCIsImhhc1Bpbm5lZENvbnRleHQiLCJ0YXNrSWQiLCJpZCIsImNoaXBzUHJvamVjdElkIiwicHJvamVjdElkIiwiY2xpZW50SWQiLCJfcmVzb2x2ZU9yY2hlc3RyYXRvckgiLCJhZ2VudFR5cGUiLCJpc01haWEiLCJyb2xlSWQiLCJyb2xlX2lkIiwiaXNIZWFkZXJIb21lIiwiaXNPcmNoZXN0cmF0b3IiLCJpc1BsYW5uZXJIb21lIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0hlYWRlclRhc2tDb250ZXh0SG9tZSIsImlzSGVhZGVySG91cnNBZ2VudEhvbWUiLCJpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUiLCJpc0NvbnRleHRIb21lU3RlcCIsImlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lIiwiaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsImlzTWFuYWdlciIsImFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZENvbnRleHQiLCJzZXRTZWxlY3RlZENvbnRleHQiLCJhY3RpdmVDb250ZXh0IiwibmFtZSIsInByb2plY3ROYW1lIiwicGlubmVkRW50aXR5VHlwZSIsImZhcXNDb250ZXh0RW50aXR5VHlwZSIsImFjdGl2ZUNvbnRleHRUeXBlIiwiaXNDbGllbnRDb250ZXh0Rm9yRmFxcyIsImZ1YXNTZWN0aW9uIiwicmVhbExpc3RzQWdlbnRJZCIsImFnZW50SWQiLCJyZWFsTGlzdHNFbnRpdHlUeXBlIiwiX3VzZUZyZXF1ZW50bHlVc2VkQWN0IiwiYWdlbnRGdWFzIiwiYWN0aW9ucyIsImZ1YXNMb2FkaW5nIiwibG9hZGluZyIsIl91c2VGcmVxdWVudGx5VXNlZEFjdDIiLCJjb2xsYWJvcmF0b3JQbGFubmVyRnVhcyIsImNvbGxhYm9yYXRvclBsYW5uZXJGdWFzTG9hZGluZyIsIl91c2VGcmVxdWVudGx5VXNlZEFjdDMiLCJtYW5hZ2VySG9tZUZ1YXMiLCJtYW5hZ2VySG9tZUZ1YXNMb2FkaW5nIiwiaGVhZGVySG91cnNGdWFzIiwiaGVhZGVySG91cnNGdWFzTG9hZGluZyIsInJlY2VudENvbnRleHRzTGltaXQiLCJmdWFzQ291bnQiLCJsZW5ndGgiLCJfdXNlUmVjZW50Q29udGV4dHMiLCJlbmFibGVkIiwibGltaXQiLCJmZXRjaGVkUmVjZW50Q29udGV4dHMiLCJjb250ZXh0cyIsInJlY2VudENvbnRleHRzTG9hZGluZyIsInJlY2VudENvbnRleHRzIiwicmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyIsImZhcXNMaXN0QWdlbnRJZCIsImZhcXNMaXN0RW50aXR5VHlwZSIsIl91c2VGcmVxdWVudGx5QXNrZWRRdSIsImFnZW50RmFxcyIsImZhcXMiLCJmYXFzTG9hZGluZyIsImhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsImZhcXNGZXRjaFJlZiIsImN1cnJlbnRLZXkiLCJsYXN0S2V5IiwiY3VycmVudCIsImVudGl0eVR5cGUiLCJmdWFzIiwiZmFxc0FyZUxvYWRpbmciLCJmdWFzQXJlTG9hZGluZyIsInNob3VsZFNob3dGYXFzIiwiZmFxc0NvdW50Iiwic2hvdWxkU2hvd0Z1YXMiLCJfcmVzb2x2ZVBsYW5uZXJGdWFzVmkiLCJoZWFkZXJIb3Vyc0Z1YXNDb3VudCIsInNob3VsZFNob3dQbGFubmVyRnVhcyIsInNob3dQcm9qZWN0U3VtbWFyeUNhcmQiLCJlbnRpdHkiLCJzaG93UmVjZW50Q29udGV4dHNCbG9jayIsIl9yZXNvbHZlSG9tZUR5bmFtaWNQYSIsInNob3dGQVFzIiwic2hvd0R5bmFtaWNTZWN0aW9uIiwiaG9tZVNjcm9sbGFibGVMYXlvdXQiLCJjb250ZW50Q29udGFpbmVyUmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNTY3JvbGxpbmciLCJzZXRJc1Njcm9sbGluZyIsInNjcm9sbFRpbWVvdXRSZWYiLCJncmVldGluZyIsIl9hZ2VudCRpbnRyb2R1Y3Rpb24iLCJjb250ZXh0R3JlZXRpbmciLCJncmVldGluZ0tleSIsImFnZW50SW50cm9kdWN0aW9uIiwiaW50cm9kdWN0aW9uIiwiaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCIsIm9yZGVyIiwiYWlDaGF0Q29udGV4dFNlbGVjdGVkIiwicGluT3V0Y29tZSIsImNvbnRleHRQYXRjaCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlSG9tZVN0YXJ0Q2hhdCIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwicmVuZGVyUmVjZW50Q29udGV4dHMiLCIkZml4ZWRDb250ZW50V2lkdGgiLCJfcmVzb2x2ZVJlY2VudENvbnRleHQiLCJ0aXRsZUtleSIsInN1YnRpdGxlS2V5IiwiJGZsdXNoUGlsbHMiLCJtYXAiLCJrZXkiLCJpbmRleCIsInRyaW0iLCJjb25jYXQiLCJjaGVja1Njcm9sbCIsImNvbnRhaW5lciIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImdyYWRpZW50cyIsInNob3dUb3AiLCJzaG93Qm90dG9tIiwiaGFuZGxlU2Nyb2xsIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInNjaGVkdWxlQ2hlY2tTY3JvbGwiLCJhZGRFdmVudExpc3RlbmVyIiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJzY3JvbGxDb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ0aW1lb3V0SWQiLCJsYXRlVGltZW91dElkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJIZWFkZXJDb250ZW50IiwiX2FnZW50JGNyZWF0ZWRfYnkiLCJfYWdlbnQkY3JlYXRlZF9ieTIiLCJlbW9qaSIsImNyZWF0ZWRfYnkiLCJpc19kZWxldGVkIiwiX3Jlc29sdmVNYWlhSGVhZGVyU3RhIiwiaGFzR3JlZXRpbmciLCJCb29sZWFuIiwiY29udGVudEFsaWduU3RhcnQiLCJtYWlhSGVhZGVyU3RhY2tOZWVkc0dhcCIsIiRub0dhcCIsIiRhbGlnbiIsIiRzaXplIiwiZmlyc3ROYW1lIiwiJGNvbGxhYm9yYXRvckhvbWUiLCJfcmVzb2x2ZU1haWFIZWFkZXJTdGEyIiwiZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yIiwiZml4ZWRIb21lQ29udGVudFdpZHRoIiwic2hvd0FnZW50SW50cm9kdWN0aW9uIiwiJGFsaWduU3RhcnQiLCIkc2hvdyIsIiRpc0FnZW50VmlldyIsIiRmbG9hdGluZ0N1c3RvbUNlbnRlciIsIiRjZW50ZXJWZXJ0aWNhbGx5IiwiJGhlYWRlckNvbGxhYm9yYXRvckhvbWUiLCIkc2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCIkZ2FwIiwiJG1heFdpZHRoIiwicHJvamVjdFN1bW1hcnkiLCIkZ3JvdyIsInZhcmlhbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJSG9tZS9DaGF0QUlIb21lLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSdcblxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgTGlzdENoZWNrbGlzdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0xpc3RDaGVja2xpc3QnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcblxuaW1wb3J0IHsgb3B0aW9ucyB9IGZyb20gJy4uL0NoYXRBSU1vZGFsL2NvbnN0YW50cydcblxuaW1wb3J0IHtcbiAgU0NDQUlIb21lQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVDb250ZW50LFxuICBTQ0NBSUhvbWVDb250ZW50SW5uZXIsXG4gIFNDQ0FJSG9tZUdyYWRpZW50VG9wLFxuICBTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSxcbiAgU0NDQUlIb21lSGVhZGVyLFxuICBTQ0NBSUhvbWVHcmVldGluZyxcbiAgU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVBZ2VudEluZm8sXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5LFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGUsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24sXG4gIFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0LFxuICBTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24sXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dCxcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWUsXG4gIFNDQ0FJSG9tZUljb25Db250YWluZXIsXG4gIFNDQ0FJSG9tZUxvZ29XcmFwcGVyLFxuICBTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2ssXG4gIFNDQ0FJSG9tZVRpdGxlLFxuICBTQ0NBSUhvbWVUaXRsZUJsb2NrLFxuICBTQ0NBSUhvbWVTdWJ0aXRsZSxcbiAgU0NDQUlIb21lRHluYW1pY1NlY3Rpb24sXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uVGl0bGUsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24sXG4gIE1BSUFfSEVBREVSX0NPTExBQk9SQVRPUl9IT01FX0NPTlRFTlRfV0lEVEhfUFgsXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCwgdHlwZSBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVzZXIsIGlzQ29sbGFib3JhdG9yUm9sZSwgaXNNYW5hZ2VyUm9sZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvb3JjaGVzdHJhdG9yU3ViYWdlbnRzJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvcnRNYW5hZ2VySG91cnNIb21lRnVhcydcbmltcG9ydCB7IHJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlY2VudENvbnRleHRzSG9tZUxpbWl0J1xuaW1wb3J0IHsgdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zJ1xuaW1wb3J0IHsgdXNlUmVjZW50Q29udGV4dHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWNlbnRDb250ZXh0cydcbmltcG9ydCB0eXBlIHsgUmVjZW50Q29udGV4dEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1JlY2VudENvbnRleHRzJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9NQUlBSXNvbG9nbydcbmltcG9ydCB7IFRlbXBsYXRlR3JhZGllbnRJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvVGVtcGxhdGVHcmFkaWVudEljb24nXG5pbXBvcnQgeyBDaGF0QUlIb21lTWFpYWtlciB9IGZyb20gJy4vQ2hhdEFJSG9tZU1haWFrZXInXG5pbXBvcnQge1xuICByZXNvbHZlQWN0aXZlQ29udGV4dEZyb21HbG9iYWwsXG4gIHJlc29sdmVBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzLFxuICByZXNvbHZlRmFxc0NvbnRleHRFbnRpdHlUeXBlLFxuICByZXNvbHZlRnVhc1NlY3Rpb24sXG4gIHJlc29sdmVIYXNQaW5uZWRDb250ZXh0LFxuICByZXNvbHZlSGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSxcbiAgcmVzb2x2ZUhvbWVHcmVldGluZyxcbiAgcmVzb2x2ZUhvbWVTY3JvbGxHcmFkaWVudHMsXG4gIHJlc29sdmVNYWlhSG9tZUxhbmcsXG4gIHJlc29sdmVPcmNoZXN0cmF0b3JIb21lTGF5b3V0LFxuICByZXNvbHZlUGlubmVkRW50aXR5VHlwZSxcbiAgcmVzb2x2ZVByb2plY3RTdW1tYXJ5RmVhdHVyZUFjY2VzcyxcbiAgcmVzb2x2ZVJlYWxMaXN0c0FnZW50SWQsXG4gIHJlc29sdmVSZWFsTGlzdHNFbnRpdHlUeXBlLFxuICByZXNvbHZlUmVjZW50Q29udGV4dFBpbk91dGNvbWUsXG4gIHJlc29sdmVTaG91bGRTaG93RmFxcyxcbiAgcmVzb2x2ZVNob3VsZFNob3dGdWFzLFxuICByZXNvbHZlRmxvYXRpbmdDdXN0b21DZW50ZXIsXG4gIGZpbHRlclJlY2VudENvbnRleHRzQnlUeXBlcyxcbiAgYnVpbGRSZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzLFxuICByZXNvbHZlU2hvd1JlY2VudENvbnRleHRzQmxvY2ssXG4gIHJlc29sdmVQbGFubmVyRnVhc1Zpc2liaWxpdHksXG4gIHJlc29sdmVIb21lRHluYW1pY1BhbmVsVmlzaWJpbGl0eSxcbiAgcmVzb2x2ZU1haWFIZWFkZXJTdGFja0xheW91dCxcbiAgcmVzb2x2ZVNob3dBZ2VudEludHJvZHVjdGlvbixcbiAgYnVpbGRGYXFzRmV0Y2hLZXksXG4gIHNob3VsZFJlZmV0Y2hGYXFzLFxuICBzaG91bGRDbGVhclBpbm5lZENvbnRleHRPbkhvbWVTdGFydCxcbiAgcmVzb2x2ZVJlY2VudENvbnRleHRzU2VjdGlvbkNvcHlLZXlzLFxuICByZXNvbHZlT3JjaGVzdHJhdG9yUmVjZW50Q29udGV4dHNTdWJ0aXRsZUtleSxcbiAgYnVpbGRQaW5HbG9iYWxDb250ZXh0UGF0Y2gsXG4gIHJlc29sdmVIb21lQ29udGV4dEdyZWV0aW5nS2V5LFxuICBzaG91bGRDaGVja0hvbWVTY3JvbGwsXG4gIHNob3VsZE9ic2VydmVIb21lU2Nyb2xsQ29udGVudCxcbiAgc2hvdWxkUmVuZGVyUmVjZW50Q29udGV4dHNQYW5lbCxcbiAgc2hvdWxkUmVzZXRIb21lU2Nyb2xsR3JhZGllbnRzLFxufSBmcm9tICcuL0NoYXRBSUhvbWUuaGVscGVycydcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBoYW5kbGVyczogUmVjb3JkPG9wdGlvbnMsICgpID0+IHZvaWQ+XG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBmbG9hdGluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGVudW0gRnJlcXVlbnRRdWVzdGlvbnMge1xuICByZW50YWJpbGlkYWRfcHJveWVjdG8gPSAncmVudGFiaWxpZGFkX3Byb3llY3RvJyxcbiAgYXZhbmNlX3Byb3llY3RvID0gJ2F2YW5jZV9wcm95ZWN0bycsXG59XG5cbmNvbnN0IFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IgPSAnIzRENEQ0RCdcbmNvbnN0IFJFQ0VOVF9DT05URVhUX0lDT05fU0laRV9QWCA9IDE1XG5cbmNvbnN0IFJlY2VudENvbnRleHRQaWxsID0gKHtcbiAgY29udGV4dCxcbiAgbGFiZWwsXG4gIG9uQ2xpY2ssXG4gIGZ1bGxXaWR0aCA9IGZhbHNlLFxufToge1xuICBjb250ZXh0OiBSZWNlbnRDb250ZXh0SXRlbVxuICBsYWJlbDogc3RyaW5nXG4gIG9uQ2xpY2s6ICgpID0+IHZvaWRcbiAgZnVsbFdpZHRoPzogYm9vbGVhblxufSkgPT4ge1xuICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbClcbiAgY29uc3QgeyBzaG93VG9vbHRpcCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZiwgW2xhYmVsXSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DbGlja30gJGZ1bGxXaWR0aD17ZnVsbFdpZHRofT5cbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24+XG4gICAgICAgIHtjb250ZXh0LnR5cGUgPT09ICd0YXNrJyA/IChcbiAgICAgICAgICA8TGlzdENoZWNrbGlzdCBjb2xvcj17UkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUn0gd2lkdGg9XCIxNXB4XCIgaGVpZ2h0PVwiMTVweFwiIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKGNvbnRleHQudHlwZSwgUkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUiwgdW5kZWZpbmVkLCBSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFgpXG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbj5cbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQgcmVmPXt0ZXh0UmVmfT5cbiAgICAgICAge3Nob3dUb29sdGlwID8gKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtsYWJlbH0+XG4gICAgICAgICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBsYWJlbFxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQ+XG4gICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJSG9tZSA9ICh7IGhhbmRsZXJzLCBvblN0YXJ0Q2hhdCwgZXhwYW5kZWQsIGZsb2F0aW5nIH06IENoYXRBSUhvbWVQcm9wcykgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGFnZW50LCBzZWN0aW9uLCBjbGllbnQsIHByb2plY3QsIHRhc2ssIGNoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QgfSA9XG4gICAgdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG4gIGNvbnN0IGZsb2F0aW5nQ3VzdG9tQ2VudGVyID0gcmVzb2x2ZUZsb2F0aW5nQ3VzdG9tQ2VudGVyKGZsb2F0aW5nLCBhZ2VudD8udHlwZSlcbiAgY29uc3QgbGFuZyA9IHJlc29sdmVNYWlhSG9tZUxhbmcoaTE4bi5sYW5ndWFnZSlcblxuICBjb25zdCBzdW1tYXJ5UHJvamVjdEFjY2VzcyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHJlc29sdmVQcm9qZWN0U3VtbWFyeUZlYXR1cmVBY2Nlc3Mod2luZG93KVxuICBjb25zdCBmYXFzQWNjZXNzID0gdHJ1ZVxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnkgPSAhIShpc01BSUEgJiYgc3VtbWFyeVByb2plY3RBY2Nlc3MpXG4gIC8vIEVsIG9yY2hlc3RyYXRvciAodHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIG11ZXN0cmEgRkFRcy9GVUFzIGFncmVnYWRhcyBkZSBzdXMgc3ViYWdlbnRlcyxcbiAgLy8gYXPDrSBxdWUgTk8gc2UgdHJhdGEgY29tbyBtYWlha2VyIGFjw6EuXG4gIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICBjb25zdCBoYXNIb3Vyc1N1YmFnZW50ID0gb3JjaGVzdHJhdG9ySGFzSG91cnNTdWJhZ2VudChhZ2VudClcbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICB9KVxuICBjb25zdCB7XG4gICAgaXNIZWFkZXJIb21lLFxuICAgIGlzT3JjaGVzdHJhdG9yLFxuICAgIGlzUGxhbm5lckhvbWUsXG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUsXG4gICAgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSxcbiAgICBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsXG4gICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUsXG4gIH0gPSByZXNvbHZlT3JjaGVzdHJhdG9ySG9tZUxheW91dCh7XG4gICAgc2VjdGlvbixcbiAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgIGlzTWFpYTogaXNNQUlBLFxuICAgIGhhc0hvdXJzU3ViYWdlbnQsXG4gICAgcm9sZUlkOiB1c2VyLnJvbGVfaWQsXG4gICAgaGFzUGlubmVkQ29udGV4dCxcbiAgfSlcbiAgY29uc3QgaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSA9IHJlc29sdmVIZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KHtcbiAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lLFxuICAgIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSxcbiAgICBpc01hbmFnZXI6IGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKSxcbiAgfSlcbiAgY29uc3QgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHtcbiAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLFxuICAgICAgICBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSxcbiAgICAgICAgcm9sZUlkOiB1c2VyLnJvbGVfaWQsXG4gICAgICB9KSxcbiAgICBbdXNlci5yb2xlX2lkLCBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIGlzSGVhZGVyVGFza0NvbnRleHRIb21lXVxuICApXG5cbiAgLy8gQ29udGV4dG8gYWN0aXZvIHBhcmEgZGVyaXZhciBGQVFzL2FjY2lvbmVzIChwYXNvIDIpLiBQcmVmZXJpbW9zIGVsIHBpbGwgY2xpY2tlYWRvO1xuICAvLyBzaSBubywgbG8gcmVjb25zdHJ1aW1vcyBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwuXG4gIGNvbnN0IFtzZWxlY3RlZENvbnRleHQsIHNldFNlbGVjdGVkQ29udGV4dF0gPSB1c2VTdGF0ZTxSZWNlbnRDb250ZXh0SXRlbSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFoYXNQaW5uZWRDb250ZXh0KSBzZXRTZWxlY3RlZENvbnRleHQobnVsbClcbiAgfSwgW2hhc1Bpbm5lZENvbnRleHRdKVxuXG4gIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB1c2VNZW1vPFJlY2VudENvbnRleHRJdGVtIHwgbnVsbD4oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVBY3RpdmVDb250ZXh0RnJvbUdsb2JhbCh7XG4gICAgICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgICAgICBzZWxlY3RlZENvbnRleHQsXG4gICAgICAgIHRhc2s6IHRhc2s/LmlkID8geyBpZDogdGFzay5pZCwgbmFtZTogdGFzay5uYW1lIH0gOiBudWxsLFxuICAgICAgICBjaGlwc1Byb2plY3Q6IGNoaXBzUHJvamVjdD8ucHJvamVjdElkXG4gICAgICAgICAgPyB7IHByb2plY3RJZDogY2hpcHNQcm9qZWN0LnByb2plY3RJZCwgcHJvamVjdE5hbWU6IGNoaXBzUHJvamVjdC5wcm9qZWN0TmFtZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBjbGllbnQ6IGNsaWVudD8uaWQgPyB7IGlkOiBjbGllbnQuaWQsIG5hbWU6IGNsaWVudC5uYW1lIH0gOiBudWxsLFxuICAgICAgfSksXG4gICAgW1xuICAgICAgc2VsZWN0ZWRDb250ZXh0LFxuICAgICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgICB0YXNrPy5pZCxcbiAgICAgIHRhc2s/Lm5hbWUsXG4gICAgICBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICAgIGNoaXBzUHJvamVjdD8ucHJvamVjdE5hbWUsXG4gICAgICBjbGllbnQ/LmlkLFxuICAgICAgY2xpZW50Py5uYW1lLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IHBpbm5lZEVudGl0eVR5cGUgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICByZXNvbHZlUGlubmVkRW50aXR5VHlwZSh7XG4gICAgICAgIHRhc2tJZDogdGFzaz8uaWQsXG4gICAgICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQsXG4gICAgICB9KSxcbiAgICBbdGFzaz8uaWQsIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLCBwcm9qZWN0Py5pZCwgY2xpZW50Py5pZF1cbiAgKVxuXG4gIGNvbnN0IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVGYXFzQ29udGV4dEVudGl0eVR5cGUoe1xuICAgICAgICBpc1BsYW5uZXJIb21lLFxuICAgICAgICBpc1JlY2VudENvbnRleHRzU3RlcCxcbiAgICAgICAgaXNIZWFkZXJIb21lLFxuICAgICAgICBpc0NvbnRleHRIb21lU3RlcCxcbiAgICAgICAgYWN0aXZlQ29udGV4dFR5cGU6IGFjdGl2ZUNvbnRleHQ/LnR5cGUsXG4gICAgICAgIHBpbm5lZEVudGl0eVR5cGUsXG4gICAgICB9KSxcbiAgICBbaXNQbGFubmVySG9tZSwgaXNSZWNlbnRDb250ZXh0c1N0ZXAsIGlzSGVhZGVySG9tZSwgaXNDb250ZXh0SG9tZVN0ZXAsIGFjdGl2ZUNvbnRleHQ/LnR5cGUsIHBpbm5lZEVudGl0eVR5cGVdXG4gIClcbiAgY29uc3QgaXNDbGllbnRDb250ZXh0Rm9yRmFxcyA9IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9PT0gJ2NsaWVudCdcbiAgLy8gYHNlY3Rpb25gIHF1ZSBzZSBjb25zdWx0YSBwYXJhIGxhcyBGVUFzOiBlbiBuby1oZWFkZXIgc2lndWUgZWwgdGlwbyBkZSBjb250ZXh0byBwaW5lYWRvLlxuICAvLyBFbiBwbGFubmVyIHNlIGZ1ZXJ6YSBsYSBzZWN0aW9uIEFQSSBgcGxhbm5lcmAuXG4gIGNvbnN0IGZ1YXNTZWN0aW9uOiBTZWN0aW9uID0gcmVzb2x2ZUZ1YXNTZWN0aW9uKHtcbiAgICBpc1BsYW5uZXJIb21lLFxuICAgIGlzSGVhZGVySG9tZSxcbiAgICBwaW5uZWRFbnRpdHlUeXBlLFxuICAgIHNlY3Rpb24sXG4gIH0pXG5cbiAgY29uc3QgcmVhbExpc3RzQWdlbnRJZCA9IHJlc29sdmVSZWFsTGlzdHNBZ2VudElkKHtcbiAgICBpc01haWE6IGlzTUFJQSxcbiAgICBpc01haWFrZXIsXG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNIZWFkZXJIb21lLFxuICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgfSlcbiAgY29uc3QgcmVhbExpc3RzRW50aXR5VHlwZSA9IHJlc29sdmVSZWFsTGlzdHNFbnRpdHlUeXBlKHtcbiAgICBpc1BsYW5uZXJIb21lLFxuICAgIGlzSGVhZGVySG9tZSxcbiAgICBpc0NvbnRleHRIb21lU3RlcCxcbiAgICBhY3RpdmVDb250ZXh0VHlwZTogYWN0aXZlQ29udGV4dD8udHlwZSxcbiAgICBwaW5uZWRFbnRpdHlUeXBlLFxuICB9KVxuICBjb25zdCB7IGFjdGlvbnM6IGFnZW50RnVhcywgbG9hZGluZzogZnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICByZWFsTGlzdHNBZ2VudElkLFxuICAgIGZ1YXNTZWN0aW9uLFxuICAgIHJlYWxMaXN0c0VudGl0eVR5cGVcbiAgKVxuICBjb25zdCB7IGFjdGlvbnM6IGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzLCBsb2FkaW5nOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmICFpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ3BsYW5uZXInXG4gIClcbiAgY29uc3QgeyBhY3Rpb25zOiBtYW5hZ2VySG9tZUZ1YXMsIGxvYWRpbmc6IG1hbmFnZXJIb21lRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ2hvbWVfd2l0aF9ob3VycydcbiAgKVxuICBjb25zdCBoZWFkZXJIb3Vyc0Z1YXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lKSByZXR1cm4gc29ydE1hbmFnZXJIb3Vyc0hvbWVGdWFzKG1hbmFnZXJIb21lRnVhcylcbiAgICByZXR1cm4gY29sbGFib3JhdG9yUGxhbm5lckZ1YXNcbiAgfSwgW2lzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSwgbWFuYWdlckhvbWVGdWFzLCBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc10pXG4gIGNvbnN0IGhlYWRlckhvdXJzRnVhc0xvYWRpbmcgPSBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBtYW5hZ2VySG9tZUZ1YXNMb2FkaW5nIDogY29sbGFib3JhdG9yUGxhbm5lckZ1YXNMb2FkaW5nXG4gIGNvbnN0IHJlY2VudENvbnRleHRzTGltaXQgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICByZXNvbHZlUmVjZW50Q29udGV4dHNIb21lTGltaXQoe1xuICAgICAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lLFxuICAgICAgICBmdWFzTG9hZGluZzogaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICAgICAgZnVhc0NvdW50OiBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoLFxuICAgICAgfSksXG4gICAgW2lzSGVhZGVySG91cnNBZ2VudEhvbWUsIGhlYWRlckhvdXJzRnVhc0xvYWRpbmcsIGhlYWRlckhvdXJzRnVhcy5sZW5ndGhdXG4gIClcbiAgY29uc3QgeyBjb250ZXh0czogZmV0Y2hlZFJlY2VudENvbnRleHRzLCBsb2FkaW5nOiByZWNlbnRDb250ZXh0c0xvYWRpbmcgfSA9IHVzZVJlY2VudENvbnRleHRzKHtcbiAgICBlbmFibGVkOiBpc09yY2hlc3RyYXRvciAmJiAhaXNQbGFubmVySG9tZSxcbiAgICBsaW1pdDogcmVjZW50Q29udGV4dHNMaW1pdCxcbiAgfSlcbiAgY29uc3QgcmVjZW50Q29udGV4dHMgPSB1c2VNZW1vKFxuICAgICgpID0+IGZpbHRlclJlY2VudENvbnRleHRzQnlUeXBlcyhmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMpLFxuICAgIFtmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXNdXG4gIClcbiAgY29uc3QgcmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gYnVpbGRSZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzKHJlY2VudENvbnRleHRzTGltaXQpLFxuICAgIFtyZWNlbnRDb250ZXh0c0xpbWl0XVxuICApXG4gIGNvbnN0IGZhcXNMaXN0QWdlbnRJZCA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNBZ2VudElkIDogdW5kZWZpbmVkXG4gIGNvbnN0IGZhcXNMaXN0RW50aXR5VHlwZSA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNFbnRpdHlUeXBlIDogdW5kZWZpbmVkXG4gIGNvbnN0IHtcbiAgICBmYXFzOiBhZ2VudEZhcXMsXG4gICAgbG9hZGluZzogZmFxc0xvYWRpbmcsXG4gICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zLFxuICB9ID0gdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKGZhcXNMaXN0QWdlbnRJZCwgbGFuZywgZmFxc0xpc3RFbnRpdHlUeXBlKVxuICBjb25zdCBmYXFzRmV0Y2hSZWYgPSB1c2VSZWY8eyBhZ2VudElkOiBzdHJpbmc7IGxhbmc6IHN0cmluZzsgZW50aXR5VHlwZT86IHN0cmluZyB9IHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBGQVFzIHNvbG8gcGFyYSBjb250ZXh0byBjbGllbnRlOyBlbCByZXN0byBtdWVzdHJhIHNvbG8gRlVBcy5cbiAgICBpZiAoIXJlYWxMaXN0c0FnZW50SWQgfHwgIWlzQ2xpZW50Q29udGV4dEZvckZhcXMpIHJldHVyblxuICAgIGNvbnN0IGN1cnJlbnRLZXkgPSBidWlsZEZhcXNGZXRjaEtleShyZWFsTGlzdHNBZ2VudElkLCBsYW5nLCByZWFsTGlzdHNFbnRpdHlUeXBlKVxuICAgIGNvbnN0IGxhc3RLZXkgPSBmYXFzRmV0Y2hSZWYuY3VycmVudFxuICAgICAgPyBidWlsZEZhcXNGZXRjaEtleShmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkLCBmYXFzRmV0Y2hSZWYuY3VycmVudC5sYW5nLCBmYXFzRmV0Y2hSZWYuY3VycmVudC5lbnRpdHlUeXBlKVxuICAgICAgOiBudWxsXG4gICAgaWYgKHNob3VsZFJlZmV0Y2hGYXFzKGN1cnJlbnRLZXksIGxhc3RLZXkpKSB7XG4gICAgICBmYXFzRmV0Y2hSZWYuY3VycmVudCA9IHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9XG4gICAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoeyBhZ2VudElkOiByZWFsTGlzdHNBZ2VudElkLCBsYW5nLCBlbnRpdHlUeXBlOiByZWFsTGlzdHNFbnRpdHlUeXBlIH0pXG4gICAgfVxuICB9LCBbcmVhbExpc3RzQWdlbnRJZCwgcmVhbExpc3RzRW50aXR5VHlwZSwgaXNDbGllbnRDb250ZXh0Rm9yRmFxcywgbGFuZywgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXSlcblxuICBjb25zdCBmYXFzID0gYWdlbnRGYXFzXG4gIGNvbnN0IGZ1YXMgPSBhZ2VudEZ1YXNcbiAgY29uc3QgZmFxc0FyZUxvYWRpbmcgPSBmYXFzTG9hZGluZ1xuICBjb25zdCBmdWFzQXJlTG9hZGluZyA9IGZ1YXNMb2FkaW5nXG5cbiAgY29uc3Qgc2hvdWxkU2hvd0ZhcXMgPSByZXNvbHZlU2hvdWxkU2hvd0ZhcXMoe1xuICAgIGlzTWFpYTogaXNNQUlBLFxuICAgIGlzQ2xpZW50Q29udGV4dEZvckZhcXMsXG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgaXNIZWFkZXJIb21lLFxuICAgIGZhcXNBY2Nlc3MsXG4gICAgaXNNYWlha2VyLFxuICAgIGZhcXNDb3VudDogZmFxcy5sZW5ndGgsXG4gICAgZmFxc0xvYWRpbmc6IGZhcXNBcmVMb2FkaW5nLFxuICB9KVxuICBjb25zdCBzaG91bGRTaG93RnVhcyA9IHJlc29sdmVTaG91bGRTaG93RnVhcyh7XG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNNYWlha2VyLFxuICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgIGlzSGVhZGVySG9tZSxcbiAgICBmdWFzQ291bnQ6IGZ1YXMubGVuZ3RoLFxuICAgIGZ1YXNMb2FkaW5nOiBmdWFzQXJlTG9hZGluZyxcbiAgfSlcbiAgY29uc3QgeyBzaG91bGRTaG93UGxhbm5lckZ1YXMgfSA9IHJlc29sdmVQbGFubmVyRnVhc1Zpc2liaWxpdHkoe1xuICAgIGlzSGVhZGVySG91cnNBZ2VudEhvbWUsXG4gICAgaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICBoZWFkZXJIb3Vyc0Z1YXNDb3VudDogaGVhZGVySG91cnNGdWFzLmxlbmd0aCxcbiAgfSlcblxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnlDYXJkID0gc2hvd1Byb2plY3RTdW1tYXJ5ICYmIGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93UmVjZW50Q29udGV4dHNCbG9jayA9IHJlc29sdmVTaG93UmVjZW50Q29udGV4dHNCbG9jayhcbiAgICBpc1JlY2VudENvbnRleHRzU3RlcCxcbiAgICByZWNlbnRDb250ZXh0c0xvYWRpbmcsXG4gICAgcmVjZW50Q29udGV4dHMubGVuZ3RoXG4gIClcbiAgY29uc3QgeyBzaG93RkFRcywgc2hvd0R5bmFtaWNTZWN0aW9uLCBob21lU2Nyb2xsYWJsZUxheW91dCB9ID0gcmVzb2x2ZUhvbWVEeW5hbWljUGFuZWxWaXNpYmlsaXR5KHtcbiAgICBzaG93UmVjZW50Q29udGV4dHNCbG9jayxcbiAgICBzaG91bGRTaG93RmFxcyxcbiAgICBzaG91bGRTaG93RnVhcyxcbiAgICBzaG91bGRTaG93UGxhbm5lckZ1YXMsXG4gICAgaXNNYWlha2VyLFxuICAgIHNob3dQcm9qZWN0U3VtbWFyeUNhcmQsXG4gIH0pXG5cbiAgLy8gTMOzZ2ljYSBkZWwgc2Nyb2xsIGNvbiBncmFkaWVudGVzXG4gIGNvbnN0IGNvbnRlbnRDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTY3JvbGxpbmcsIHNldElzU2Nyb2xsaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcblxuICAvLyBTYWx1ZG8gZmlqbyBwb3IgdGlwbyBkZSBjb250ZXh0byAoaTE4bikuIEN1c3RvbSBhZ2VudHMgc2lndWVuIHVzYW5kbyBhZ2VudC5pbnRyb2R1Y3Rpb24uXG4gIC8vIFBsYW5uZXIgdXNhIHTDrXR1bG8gKyBiYWphZGEgcHJvcGlvcyAoYHBsYW5uZXJIb21lYCksIG5vIGVzdGUgZ3JlZXRpbmcuXG4gIGNvbnN0IGdyZWV0aW5nID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUhvbWVHcmVldGluZyh7XG4gICAgICAgIGlzTWFpYWtlcixcbiAgICAgICAgaXNQbGFubmVySG9tZSxcbiAgICAgICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgICAgIGlzTWFpYTogaXNNQUlBLFxuICAgICAgICBwaW5uZWRFbnRpdHlUeXBlLFxuICAgICAgICBjb250ZXh0R3JlZXRpbmc6ICgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JlZXRpbmdLZXkgPSByZXNvbHZlSG9tZUNvbnRleHRHcmVldGluZ0tleShpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUpXG4gICAgICAgICAgcmV0dXJuIGdyZWV0aW5nS2V5ID8gdChncmVldGluZ0tleSkgOiB1bmRlZmluZWRcbiAgICAgICAgfSkoKSxcbiAgICAgICAgYWdlbnRJbnRyb2R1Y3Rpb246IGFnZW50Py5pbnRyb2R1Y3Rpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgW2FnZW50Py5pZCwgYWdlbnQ/LmludHJvZHVjdGlvbiwgaXNNYWlha2VyLCBpc1BsYW5uZXJIb21lLCBpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCA9IHVzZUNhbGxiYWNrKFxuICAgIChjb250ZXh0OiBSZWNlbnRDb250ZXh0SXRlbSwgb3JkZXI6IG51bWJlcikgPT4ge1xuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdENvbnRleHRTZWxlY3RlZCwgeyBvcmRlciwgdHlwZTogY29udGV4dC50eXBlIH0pXG5cbiAgICAgIGNvbnN0IHBpbk91dGNvbWUgPSByZXNvbHZlUmVjZW50Q29udGV4dFBpbk91dGNvbWUoY29udGV4dCwgdCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpKVxuXG4gICAgICBzZXRTZWxlY3RlZENvbnRleHQoY29udGV4dClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgY29uc3QgY29udGV4dFBhdGNoID0gYnVpbGRQaW5HbG9iYWxDb250ZXh0UGF0Y2gocGluT3V0Y29tZSlcbiAgICAgIGlmICghY29udGV4dFBhdGNoKSByZXR1cm5cblxuICAgICAgc2V0Q2xpZW50Py4oY29udGV4dFBhdGNoLmNsaWVudClcbiAgICAgIHNldFByb2plY3QoY29udGV4dFBhdGNoLnByb2plY3QpXG4gICAgICBzZXRUYXNrKGNvbnRleHRQYXRjaC50YXNrKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNvbnRleHRQYXRjaC5jaGlwc1Byb2plY3QpXG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZXZlbnQsIHNldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlSG9tZVN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBudWxsLFxuICAgICAgZnVhSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChzaG91bGRDbGVhclBpbm5lZENvbnRleHRPbkhvbWVTdGFydChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIGZ1YUlkKSkge1xuICAgICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGVkQ29udGV4dChudWxsKVxuICAgICAgICAgIHNldFRhc2sobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIG9uU3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZClcbiAgICB9LFxuICAgIFtpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIG9uU3RhcnRDaGF0LCBzZXRDaGlwc1Byb2plY3QsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIGNvbnN0IHJlbmRlclJlY2VudENvbnRleHRzID0gKCkgPT4ge1xuICAgIGlmICghc2hvdWxkUmVuZGVyUmVjZW50Q29udGV4dHNQYW5lbChpc1JlY2VudENvbnRleHRzU3RlcCkpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzXG4gICAgICAgICRmaXhlZENvbnRlbnRXaWR0aD17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgPyBNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIDogdW5kZWZpbmVkfVxuICAgICAgPlxuICAgICAgICB7aXNIZWFkZXJIb3Vyc0FnZW50SG9tZSA/IChcbiAgICAgICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uSGVhZGVyPlxuICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgdGl0bGVLZXksIHN1YnRpdGxlS2V5IH0gPSByZXNvbHZlUmVjZW50Q29udGV4dHNTZWN0aW9uQ29weUtleXMoeyBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlPnt0KHRpdGxlS2V5KX08L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlPlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlPnt0KHN1YnRpdGxlS2V5KX08L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSgpfVxuICAgICAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uSGVhZGVyPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCAkZmx1c2hQaWxscz17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWV9PlxuICAgICAgICAgIHtyZWNlbnRDb250ZXh0c0xvYWRpbmcgJiZcbiAgICAgICAgICAgIHJlY2VudENvbnRleHRTa2VsZXRvbktleXMubWFwKGtleSA9PiA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxTa2VsZXRvbiBrZXk9e2tleX0gLz4pfVxuICAgICAgICAgIHshcmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICByZWNlbnRDb250ZXh0cy5tYXAoKGNvbnRleHQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxSZWNlbnRDb250ZXh0UGlsbFxuICAgICAgICAgICAgICAgIGtleT17YCR7Y29udGV4dC50eXBlfS0ke2NvbnRleHQuaWR9YH1cbiAgICAgICAgICAgICAgICBjb250ZXh0PXtjb250ZXh0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXtjb250ZXh0Lm5hbWUudHJpbSgpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQoY29udGV4dCwgaW5kZXggKyAxKX1cbiAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHNMaXN0PlxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0cz5cbiAgICApXG4gIH1cblxuICBjb25zdCBjaGVja1Njcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50Q29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhc2hvdWxkQ2hlY2tIb21lU2Nyb2xsKGNvbnRhaW5lciwgaG9tZVNjcm9sbGFibGVMYXlvdXQpKSByZXR1cm5cblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgY29uc3QgZ3JhZGllbnRzID0gcmVzb2x2ZUhvbWVTY3JvbGxHcmFkaWVudHMoc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodClcbiAgICBzZXRTaG93VG9wR3JhZGllbnQoZ3JhZGllbnRzLnNob3dUb3ApXG4gICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGdyYWRpZW50cy5zaG93Qm90dG9tKVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXRdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjaGVja1Njcm9sbCgpXG4gICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSlcblxuICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfVxuXG4gICAgc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc1Njcm9sbGluZyhmYWxzZSlcbiAgICB9LCAxNTApXG4gIH0sIFtjaGVja1Njcm9sbF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvdWxkUmVzZXRIb21lU2Nyb2xsR3JhZGllbnRzKGhvbWVTY3JvbGxhYmxlTGF5b3V0KSkge1xuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KGZhbHNlKVxuICAgICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGZhbHNlKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZWR1bGVDaGVja1Njcm9sbCA9ICgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGNoZWNrU2Nyb2xsKClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgc2NoZWR1bGVDaGVja1Njcm9sbCgpXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcblxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHNjaGVkdWxlQ2hlY2tTY3JvbGwpXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpXG4gICAgY29uc3Qgc2Nyb2xsQ29udGVudCA9IGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZFxuICAgIGlmIChzaG91bGRPYnNlcnZlSG9tZVNjcm9sbENvbnRlbnQoc2Nyb2xsQ29udGVudCkpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoc2Nyb2xsQ29udGVudClcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChzY2hlZHVsZUNoZWNrU2Nyb2xsLCAxMDApXG4gICAgY29uc3QgbGF0ZVRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KHNjaGVkdWxlQ2hlY2tTY3JvbGwsIDQwMClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgY2xlYXJUaW1lb3V0KGxhdGVUaW1lb3V0SWQpXG4gICAgICBpZiAoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXQsIGNoZWNrU2Nyb2xsLCBoYW5kbGVTY3JvbGxdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFob21lU2Nyb2xsYWJsZUxheW91dCkgcmV0dXJuXG4gICAgY2hlY2tTY3JvbGwoKVxuICB9LCBbXG4gICAgaG9tZVNjcm9sbGFibGVMYXlvdXQsXG4gICAgY2hlY2tTY3JvbGwsXG4gICAgcmVjZW50Q29udGV4dHNMb2FkaW5nLFxuICAgIHJlY2VudENvbnRleHRzLmxlbmd0aCxcbiAgICBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nLFxuICAgIGhlYWRlckhvdXJzRnVhcy5sZW5ndGgsXG4gICAgZnVhc0xvYWRpbmcsXG4gICAgZnVhcy5sZW5ndGgsXG4gICAgZmFxc0FyZUxvYWRpbmcsXG4gICAgZmFxcy5sZW5ndGgsXG4gICAgc2hvdWxkU2hvd1BsYW5uZXJGdWFzLFxuICAgIGlzTWFpYWtlcixcbiAgXSlcblxuICBjb25zdCByZW5kZXJIZWFkZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIGlmICghaXNNQUlBKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyPlxuICAgICAgICAgIDxTQ0NBSUhvbWVBZ2VudEluZm8+XG4gICAgICAgICAgICB7YWdlbnQ/LmVtb2ppfSB7YWdlbnQ/Lm5hbWV9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVBZ2VudEluZm8+XG4gICAgICAgICAge2FnZW50Py5jcmVhdGVkX2J5ICYmICFpc01BSUEgJiYgKFxuICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICBhZ2VudD8uY3JlYXRlZF9ieT8uaXNfZGVsZXRlZCA/IHQoJ2hvbWVNZW51LmNyZWF0ZWRCeVRvb2x0aXBEZWxldGVkJykgOiB0KCdob21lTWVudS5jcmVhdGVkQnlUb29sdGlwJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5VGV4dD5cbiAgICAgICAgICAgICAgICAgIHt0KCdob21lTWVudS5jcmVhdGVkQnknKX17JyAnfVxuICAgICAgICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHROYW1lPnthZ2VudD8uY3JlYXRlZF9ieT8ubmFtZX08L1NDQ0FJSG9tZUNyZWF0ZWRCeVRleHROYW1lPlxuICAgICAgICAgICAgICAgIDwvU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dD5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXI+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXI+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgeyBjb250ZW50QWxpZ25TdGFydCwgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAgfSA9IHJlc29sdmVNYWlhSGVhZGVyU3RhY2tMYXlvdXQoe1xuICAgICAgaXNQbGFubmVySG9tZSxcbiAgICAgIGlzSGVhZGVyVGFza0NvbnRleHRIb21lLFxuICAgICAgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUsXG4gICAgICBpc1JlY2VudENvbnRleHRzU3RlcCxcbiAgICAgIGhhc0dyZWV0aW5nOiBCb29sZWFuKGdyZWV0aW5nKSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2sgJG5vR2FwPXshbWFpYUhlYWRlclN0YWNrTmVlZHNHYXB9ICRhbGlnbj17Y29udGVudEFsaWduU3RhcnQgPyAnc3RhcnQnIDogJ2NlbnRlcid9PlxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmICFpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1BsYW5uZXJIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRzaXplPVwibWRcIiAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucGxhbm5lckhvbWUudGl0bGUnKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPVwic3RhcnRcIj57dCgnaG9tZU1lbnUucGxhbm5lckhvbWUuc3VidGl0bGUnKX08L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGVCbG9jaz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiICRmdWxsV2lkdGg+XG4gICAgICAgICAgICA8U0NDQUlIb21lVGl0bGUgJHNpemU9XCJjb250ZXh0XCIgJGFsaWduPVwic3RhcnRcIiAkZnVsbFdpZHRoPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY29udGV4dEhvbWUuZ3JlZXRpbmcnLCB7IG5hbWU6IHVzZXIuZmlyc3ROYW1lIH0pfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZSAkYWxpZ249XCJzdGFydFwiICRjb2xsYWJvcmF0b3JIb21lPlxuICAgICAgICAgICAgICB7dChoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZUJsb2NrPlxuICAgICAgICApfVxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRhbGlnbj17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnc3RhcnQnIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNvbnRleHRIb21lLmdyZWV0aW5nJywgeyBuYW1lOiB1c2VyLmZpcnN0TmFtZSB9KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICB7dChyZXNvbHZlT3JjaGVzdHJhdG9yUmVjZW50Q29udGV4dHNTdWJ0aXRsZUtleShpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKSkpfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVTdWJ0aXRsZT5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmICFpc1JlY2VudENvbnRleHRzU3RlcCAmJiBncmVldGluZyAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUdyZWV0aW5nXG4gICAgICAgICAgICAkYWxpZ249e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lID8gJ3N0YXJ0JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICRzaXplPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdtZCcgOiAnbGcnfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtncmVldGluZ31cbiAgICAgICAgICA8L1NDQ0FJSG9tZUdyZWV0aW5nPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2s+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBjb250ZW50QWxpZ25TdGFydCwgZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yIH0gPSByZXNvbHZlTWFpYUhlYWRlclN0YWNrTGF5b3V0KHtcbiAgICBpc1BsYW5uZXJIb21lLFxuICAgIGlzSGVhZGVyVGFza0NvbnRleHRIb21lLFxuICAgIGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lLFxuICAgIGlzUmVjZW50Q29udGV4dHNTdGVwLFxuICAgIGhhc0dyZWV0aW5nOiBCb29sZWFuKGdyZWV0aW5nKSxcbiAgfSlcbiAgY29uc3QgZml4ZWRIb21lQ29udGVudFdpZHRoID0gZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yXG4gICAgPyBNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3Qgc2hvd0FnZW50SW50cm9kdWN0aW9uID0gcmVzb2x2ZVNob3dBZ2VudEludHJvZHVjdGlvbihzZWN0aW9uLCBpc01BSUEsIEJvb2xlYW4oYWdlbnQ/LmludHJvZHVjdGlvbikpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlIb21lQ29udGFpbmVyIHNob3dGQVFzPXtzaG93RkFRc30gJGFsaWduU3RhcnQ9e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfT5cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRUb3AgJHNob3c9e3Nob3dUb3BHcmFkaWVudH0gLz59XG4gICAgICA8U0NDQUlIb21lQ29udGVudFxuICAgICAgICByZWY9e2NvbnRlbnRDb250YWluZXJSZWZ9XG4gICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgICAkY2VudGVyVmVydGljYWxseT17aXNQbGFubmVySG9tZX1cbiAgICAgICAgJGFsaWduU3RhcnQ9e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2ZpeGVkSG9tZUNvbnRlbnRXaWR0aH1cbiAgICAgID5cbiAgICAgICAgPFNDQ0FJSG9tZUNvbnRlbnRJbm5lclxuICAgICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICAgJGZsb2F0aW5nQ3VzdG9tQ2VudGVyPXtmbG9hdGluZ0N1c3RvbUNlbnRlcn1cbiAgICAgICAgICAkY2VudGVyVmVydGljYWxseT17aXNQbGFubmVySG9tZX1cbiAgICAgICAgICAkYWxpZ25TdGFydD17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAgICAgJGhlYWRlckNvbGxhYm9yYXRvckhvbWU9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfVxuICAgICAgICAgICRzZWN0aW9uT3JjaGVzdHJhdG9ySG9tZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAgID5cbiAgICAgICAgICA8U0NDQUlIb21lSGVhZGVyXG4gICAgICAgICAgICAkZ2FwPXtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gPyAnMjBweCcgOiAnMCd9XG4gICAgICAgICAgICAkbWF4V2lkdGg9e2lzTUFJQSA/ICcxMDAlJyA6ICczODBweCd9XG4gICAgICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICAgICAkYWxpZ249e2NvbnRlbnRBbGlnblN0YXJ0ID8gJ3N0YXJ0JyA6ICdjZW50ZXInfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtyZW5kZXJIZWFkZXJDb250ZW50KCl9XG5cbiAgICAgICAgICAgIHtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gJiYgYWdlbnQgPyAoXG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24gZXhwYW5kZWQ9e2V4cGFuZGVkfT57YWdlbnQuaW50cm9kdWN0aW9ufTwvU0NDQUlIb21lSW50cm9kdWN0aW9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVIZWFkZXI+XG4gICAgICAgICAge3Nob3dQcm9qZWN0U3VtbWFyeUNhcmQgJiYgKFxuICAgICAgICAgICAgPFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0IG9uQ2xpY2s9e2hhbmRsZXJzLnByb2plY3RTdW1tYXJ5fT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICAgIDxUZW1wbGF0ZUdyYWRpZW50SWNvbiBoZWlnaHQ9ezI0fSB3aWR0aD17MjR9IC8+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+e3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LnRpdGxlJyl9PC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LmRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgIDwvU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Q+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd0R5bmFtaWNTZWN0aW9uICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVEeW5hbWljU2VjdGlvblxuICAgICAgICAgICAgICAkZ3Jvdz17aXNNYWlha2VyfVxuICAgICAgICAgICAgICAkYWxpZ25TdGFydD17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93UGxhbm5lckZ1YXMgPyAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlVc2VkQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInBsYW5uZXJcIlxuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e2hhbmRsZUhvbWVTdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zPXtoZWFkZXJIb3Vyc0Z1YXN9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7cmVuZGVyUmVjZW50Q29udGV4dHMoKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGYXFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBzaG93RkFRcz17c2hvd0ZBUXN9XG4gICAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBmYXFzPXtmYXFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZmFxc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGdWFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zPXtmdWFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZnVhc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzTWFpYWtlciA/IDxDaGF0QUlIb21lTWFpYWtlciBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9IC8+IDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lRHluYW1pY1NlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVDb250ZW50SW5uZXI+XG4gICAgICA8L1NDQ0FJSG9tZUNvbnRlbnQ+XG4gICAgICB7aG9tZVNjcm9sbGFibGVMYXlvdXQgJiYgPFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tICRzaG93PXtzaG93Qm90dG9tR3JhZGllbnR9IC8+fVxuICAgIDwvU0NDQUlIb21l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