@projectcor/maia-components 2.44.4 → 2.44.5-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.
- package/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.spec.js +31 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +4 -10
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +430 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +21 -16
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +7 -5
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +72 -52
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +132 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +162 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +4 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +60 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +5 -29
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +371 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +19 -47
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +410 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -3
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +355 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +198 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +385 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +56 -171
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1125 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +267 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +261 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +194 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +105 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +73 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +68 -37
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
- package/lib/hooks/useChatManager/useChatManager.js +76 -351
- package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.js +152 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
- package/lib/hooks/useContextMentions.js +2 -163
- package/lib/hooks/useContextMentions.spec.js +239 -0
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.js +359 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
- package/lib/hooks/useEntitySearch.js +38 -391
- package/lib/hooks/useEntitySearch.spec.js +443 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +60 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
- package/lib/hooks/useIsMaiaPageRoute.js +26 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMentionPopover.spec.js +215 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +26 -1
- package/lib/lang/en/index.js +26 -1
- package/lib/lang/es/index.js +26 -1
- package/lib/lang/fr/index.js +26 -1
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.spec.js +359 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
- package/lib/services/maia/Agents/getAgents.js +78 -242
- package/lib/services/maia/Agents/getAgents.spec.js +697 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.js +40 -52
- package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.spec.js +619 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +44 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +38 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +100 -0
- package/lib/utils/hoursPlannerQuickActionType.js +74 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.js +24 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +107 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.spec.js +158 -0
- package/lib/utils/retryCompletion.spec.js +99 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.js +32 -19
- package/lib/utils/streamActivityMessages.spec.js +227 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -9,31 +9,9 @@ import { buildChipElement } from '../ContextMentionChip';
|
|
|
9
9
|
import { ContextMentionChipGlobalStyles } from '../ContextMentionChip/ContextMentionChip.styles';
|
|
10
10
|
import { buildSlashChipElement } from '../SlashCommandChip';
|
|
11
11
|
import { filesFromDataTransfer } from '../../../utils/chatInputFiles';
|
|
12
|
+
import { isPlaceholderTruncatedInEditor, resolveTriggerInsertPrefix } from './ContextMentionEditor.helpers';
|
|
12
13
|
import { SCMEEditable } from './ContextMentionEditor.styles';
|
|
13
14
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
-
var isPlaceholderTruncatedInEditor = function isPlaceholderTruncatedInEditor(editor, placeholder) {
|
|
15
|
-
var trimmed = placeholder.trim();
|
|
16
|
-
if (!trimmed) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
var clientWidth = editor.clientWidth;
|
|
20
|
-
if (clientWidth <= 4) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
var styles = window.getComputedStyle(editor);
|
|
24
|
-
var ctx = document.createElement('canvas').getContext('2d');
|
|
25
|
-
if (!ctx) {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
ctx.font = "".concat(styles.fontWeight, " ").concat(styles.fontSize, " ").concat(styles.fontFamily);
|
|
29
|
-
var measured = ctx.measureText(trimmed).width;
|
|
30
|
-
var paddingLeft = parseFloat(styles.paddingLeft) || 0;
|
|
31
|
-
var paddingRight = parseFloat(styles.paddingRight) || 0;
|
|
32
|
-
var borderLeft = parseFloat(styles.borderLeftWidth) || 0;
|
|
33
|
-
var borderRight = parseFloat(styles.borderRightWidth) || 0;
|
|
34
|
-
var available = Math.max(0, clientWidth - paddingLeft - paddingRight - borderLeft - borderRight);
|
|
35
|
-
return measured > available + 1;
|
|
36
|
-
};
|
|
37
15
|
export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
38
16
|
var _placeholder$trim2;
|
|
39
17
|
var placeholder = _ref.placeholder,
|
|
@@ -218,10 +196,7 @@ export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
218
196
|
startOffset = range.startOffset;
|
|
219
197
|
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
220
198
|
var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
|
|
221
|
-
|
|
222
|
-
if (prevChar && !/[\s([{@]/.test(prevChar)) {
|
|
223
|
-
prefix = ' ';
|
|
224
|
-
}
|
|
199
|
+
prefix = resolveTriggerInsertPrefix(prevChar);
|
|
225
200
|
}
|
|
226
201
|
var inserted = "".concat(prefix, "@");
|
|
227
202
|
var textNode = document.createTextNode(inserted);
|
|
@@ -268,9 +243,7 @@ export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
268
243
|
startOffset = range.startOffset;
|
|
269
244
|
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
270
245
|
var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
|
|
271
|
-
|
|
272
|
-
prefix = ' ';
|
|
273
|
-
}
|
|
246
|
+
prefix = resolveTriggerInsertPrefix(prevChar);
|
|
274
247
|
}
|
|
275
248
|
var inserted = "".concat(prefix, "/");
|
|
276
249
|
var textNode = document.createTextNode(inserted);
|
|
@@ -303,9 +276,7 @@ export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
303
276
|
startOffset = range.startOffset;
|
|
304
277
|
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
305
278
|
var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
|
|
306
|
-
|
|
307
|
-
prefix = ' ';
|
|
308
|
-
}
|
|
279
|
+
prefix = resolveTriggerInsertPrefix(prevChar);
|
|
309
280
|
}
|
|
310
281
|
var inserted = "".concat(prefix, "#");
|
|
311
282
|
var textNode = document.createTextNode(inserted);
|
|
@@ -530,4 +501,4 @@ export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
530
501
|
});
|
|
531
502
|
});
|
|
532
503
|
ContextMentionEditor.displayName = 'ContextMentionEditor';
|
|
533
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3J3YXJkUmVmIiwidXNlQ2FsbGJhY2siLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJUb29sdGlwIiwidXNlQ29udGV4dE1lbnRpb25zIiwiYnVpbGRDaGlwRWxlbWVudCIsIkNvbnRleHRNZW50aW9uQ2hpcEdsb2JhbFN0eWxlcyIsImJ1aWxkU2xhc2hDaGlwRWxlbWVudCIsImZpbGVzRnJvbURhdGFUcmFuc2ZlciIsIlNDTUVFZGl0YWJsZSIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsImlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciIsImVkaXRvciIsInBsYWNlaG9sZGVyIiwidHJpbW1lZCIsInRyaW0iLCJjbGllbnRXaWR0aCIsInN0eWxlcyIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJjdHgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJnZXRDb250ZXh0IiwiZm9udCIsImNvbmNhdCIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJtZWFzdXJlZCIsIm1lYXN1cmVUZXh0Iiwid2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhcnNlRmxvYXQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwiYXZhaWxhYmxlIiwiTWF0aCIsIm1heCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwiX3JlZiIsInJlZiIsIl9wbGFjZWhvbGRlciR0cmltMiIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwibWF4SGVpZ2h0Iiwib25JbnB1dCIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvblBhc3RlRmlsZXMiLCJfdXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwidXBkYXRlVHJpZ2dlciIsInJlcGxhY2VUcmlnZ2VyV2l0aENoaXAiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwicmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwIiwidXBkYXRlSGFzaFRyaWdnZXIiLCJyZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAiLCJzZXJpYWxpemUiLCJjbGVhckVkaXRvckRvbSIsImNsZWFyIiwiZm9jdXMiLCJza2lwTmV4dElucHV0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwicGxhY2Vob2xkZXJUcnVuY2F0ZWQiLCJzZXRQbGFjZWhvbGRlclRydW5jYXRlZCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9naWNhbEVtcHR5Iiwic2V0TG9naWNhbEVtcHR5Iiwic3luY0VkaXRvckVtcHR5QXR0cmlidXRlIiwiaXNFbXB0eSIsImN1cnJlbnQiLCJzZXRBdHRyaWJ1dGUiLCJTdHJpbmciLCJub3JtYWxpemVFbXB0eUVkaXRvckRvbSIsIl9lZGl0b3IkdGV4dENvbnRlbnQiLCJ0ZXh0Q29udGVudCIsImlubmVySFRNTCIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJjb2xsYXBzZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwicmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uIiwiX3BsYWNlaG9sZGVyJHRyaW0iLCJlbCIsInBoIiwiaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSIsInRleHQiLCJ1bmRlZmluZWQiLCJybyIsIlJlc2l6ZU9ic2VydmVyIiwicXVldWVNaWNyb3Rhc2siLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsImVtaXRJbnB1dFN0YXRlIiwidHJpZyIsInNsYXNoVHJpZyIsImhhc2hUcmlnIiwic3RhdGUiLCJtZW50aW9ucyIsInNsYXNoQ29tbWFuZHMiLCJfb2JqZWN0U3ByZWFkIiwidHJpZ2dlciIsImFjdGl2ZSIsInF1ZXJ5IiwiYXRSdW5MZW5ndGgiLCJzbGFzaFRyaWdnZXIiLCJoYXNoVHJpZ2dlciIsInNldFBsYWluVGV4dCIsInBsYWluIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImluc2VydE1lbnRpb25UcmlnZ2VyIiwiYW5jaG9yTm9kZSIsImNvbnRhaW5zIiwiZW5kUmFuZ2UiLCJnZXRSYW5nZUF0IiwicHJlZml4Iiwic3RhcnRDb250YWluZXIiLCJzdGFydE9mZnNldCIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInByZXZDaGFyIiwiZGF0YSIsImNoYXJBdCIsInRlc3QiLCJpbnNlcnRlZCIsInRleHROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJpbnNlcnROb2RlIiwicHJldlNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJjYXJldE5vZGUiLCJjYXJldE9mZnNldCIsImVuZHNXaXRoIiwicHJldlRleHQiLCJyZW1vdmUiLCJzZXRTdGFydCIsImluc2VydFNsYXNoVHJpZ2dlciIsImluc2VydFNraWxsVHJpZ2dlciIsImhhc1Zpc3VhbE11bHRpbGluZSIsIl9lZGl0b3IkdGV4dENvbnRlbnQkdCIsIl9lZGl0b3IkdGV4dENvbnRlbnQyIiwibGluZUhlaWdodCIsImVkaXRvckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImlzTXVsdGlsaW5lIiwiZ2V0RWRpdG9yQ2xpZW50UmVjdCIsIl9lZGl0b3JSZWYkY3VycmVudCRnZSIsIl9lZGl0b3JSZWYkY3VycmVudCIsImluc2VydE1lbnRpb24iLCJtZW50aW9uIiwiY2hpcCIsImFwcGVuZE1lbnRpb25BdEVuZCIsImlkIiwidHlwZSIsImxhYmVsIiwidHJhaWxpbmdTcGFjZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0U2tpbGxNZW50aW9uIiwiaW5zZXJ0U2xhc2hDb21tYW5kIiwiY29tbWFuZCIsImhhbmRsZUlucHV0IiwiaGFuZGxlUGFzdGUiLCJlIiwiZmlsZXMiLCJjbGlwYm9hcmREYXRhIiwicHJldmVudERlZmF1bHQiLCJnZXREYXRhIiwicmFuZ2VDb3VudCIsImRlbGV0ZUZyb21Eb2N1bWVudCIsImNvbGxhcHNlVG9FbmQiLCJ0cmltbWVkUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSIsImNoaWxkcmVuIiwidGl0bGUiLCJzdHlsZSIsImRpc3BsYXkiLCJtaW5XaWR0aCIsIiRtYXhIZWlnaHQiLCJjb250ZW50RWRpdGFibGUiLCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciLCJyb2xlIiwib25QYXN0ZSIsImRpc3BsYXlOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3IvQ29udGV4dE1lbnRpb25FZGl0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENsaXBib2FyZEV2ZW50LFxuICBmb3J3YXJkUmVmLFxuICBLZXlib2FyZEV2ZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHVzZUNvbnRleHRNZW50aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBidWlsZENoaXBFbGVtZW50IH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25DaGlwR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBidWlsZFNsYXNoQ2hpcEVsZW1lbnQsIFNsYXNoQ29tbWFuZENoaXBEYXRhIH0gZnJvbSAnLi4vU2xhc2hDb21tYW5kQ2hpcCdcbmltcG9ydCB7IGZpbGVzRnJvbURhdGFUcmFuc2ZlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NoYXRJbnB1dEZpbGVzJ1xuaW1wb3J0IHsgU0NNRUVkaXRhYmxlIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkVkaXRvci5zdHlsZXMnXG5cbmNvbnN0IGlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciA9IChlZGl0b3I6IEhUTUxFbGVtZW50LCBwbGFjZWhvbGRlcjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBwbGFjZWhvbGRlci50cmltKClcbiAgaWYgKCF0cmltbWVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgeyBjbGllbnRXaWR0aCB9ID0gZWRpdG9yXG4gIGlmIChjbGllbnRXaWR0aCA8PSA0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlZGl0b3IpXG4gIGNvbnN0IGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJylcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjdHguZm9udCA9IGAke3N0eWxlcy5mb250V2VpZ2h0fSAke3N0eWxlcy5mb250U2l6ZX0gJHtzdHlsZXMuZm9udEZhbWlseX1gXG4gIGNvbnN0IG1lYXN1cmVkID0gY3R4Lm1lYXN1cmVUZXh0KHRyaW1tZWQpLndpZHRoXG5cbiAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nTGVmdCkgfHwgMFxuICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nUmlnaHQpIHx8IDBcbiAgY29uc3QgYm9yZGVyTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCkgfHwgMFxuICBjb25zdCBib3JkZXJSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlclJpZ2h0V2lkdGgpIHx8IDBcbiAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoMCwgY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodCAtIGJvcmRlckxlZnQgLSBib3JkZXJSaWdodClcblxuICByZXR1cm4gbWVhc3VyZWQgPiBhdmFpbGFibGUgKyAxXG59XG5cbmV4cG9ydCB0eXBlIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlID0ge1xuICBmb2N1czogKCkgPT4gdm9pZFxuICBjbGVhcjogKCkgPT4gdm9pZFxuICBzZXRQbGFpblRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWRcbiAgLyoqIEluc2VydGEgYEBgIGVuIGVsIGNhcmV0IChjb24gZXNwYWNpbyBwcmV2aW8gc2kgaGFjZSBmYWx0YSkgeSBhYnJlIGVsIHRyaWdnZXIgZGUgbWVudGlvbnMuICovXG4gIGluc2VydE1lbnRpb25UcmlnZ2VyOiAoKSA9PiB2b2lkXG4gIC8qKiBJbnNlcnRhIGAvYCBlbiBlbCBjYXJldCAoY29uIGVzcGFjaW8gcHJldmlvIHNpIGhhY2UgZmFsdGEpIHkgYWJyZSBlbCB0cmlnZ2VyIGRlIHNsYXNoIGNvbW1hbmRzLiAqL1xuICBpbnNlcnRTbGFzaFRyaWdnZXI6ICgpID0+IHZvaWRcbiAgLyoqIEluc2VydGEgYCNgIGVuIGVsIGNhcmV0IChjb24gZXNwYWNpbyBwcmV2aW8gc2kgaGFjZSBmYWx0YSkgeSBhYnJlIGVsIHRyaWdnZXIgZGUgc2tpbGxzLiAqL1xuICBpbnNlcnRTa2lsbFRyaWdnZXI6ICgpID0+IHZvaWRcbiAgaW5zZXJ0TWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIGFwcGVuZE1lbnRpb25BdEVuZDogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIGluc2VydFNsYXNoQ29tbWFuZDogKGNvbW1hbmQ6IFNsYXNoQ29tbWFuZENoaXBEYXRhKSA9PiB2b2lkXG4gIC8qKiBSZWVtcGxhemEgZWwgYCNxdWVyeWAgcGVuZGllbnRlIHBvciBlbCBjaGlwIGRlIGxhIHNraWxsIGVsZWdpZGEuICovXG4gIGluc2VydFNraWxsTWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGg6IChhdFJ1bkxlbmd0aDogbnVtYmVyKSA9PiB2b2lkXG4gIHNlcmlhbGl6ZTogKCkgPT4ge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9XG4gIGhhc1Zpc3VhbE11bHRpbGluZTogKCkgPT4gYm9vbGVhblxuICAvKiogUmVjdCBkZWwgw6FyZWEgZWRpdGFibGUgKHZpZXdwb3J0KTsgbG8gdXNhIGVsIHBvcG92ZXIgZGUgQCBwYXJhIGFsaW5lYXIgYW5jaG8geSBmYWxsYmFjayB2ZXJ0aWNhbC4gKi9cbiAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gRE9NUmVjdCB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnRpb25FZGl0b3JQcm9wcyA9IHtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKiogQWx0byBtw6F4aW1vIGRlbCDDoXJlYSBlZGl0YWJsZSAocHgpLiBTZSBhanVzdGEgY3VhbmRvIGhheSBjaGlwcyBkZSBjb250ZXh0by9hZGp1bnRvcy4gKi9cbiAgbWF4SGVpZ2h0PzogbnVtYmVyXG4gIG9uSW5wdXQ/OiAoc3RhdGU6IHtcbiAgICB0ZXh0OiBzdHJpbmdcbiAgICBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXVxuICAgIHNsYXNoQ29tbWFuZHM6IFNsYXNoQ29tbWFuZENoaXBEYXRhW11cbiAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9XG4gICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZyB9XG4gICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgfSkgPT4gdm9pZFxuICBvbktleURvd24/OiAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25Gb2N1cz86ICgpID0+IHZvaWRcbiAgb25CbHVyPzogKCkgPT4gdm9pZFxuICAvKiogQ2xpcGJvYXJkIGZpbGVzIChzY3JlZW5zaG90cywgY29waWVkIGltYWdlcykuIFRleHQgaXMgc3RpbGwgaW5zZXJ0ZWQgd2hlbiBwcmVzZW50LiAqL1xuICBvblBhc3RlRmlsZXM/OiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgQ29udGV4dE1lbnRpb25FZGl0b3IgPSBmb3J3YXJkUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlLCBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzPihcbiAgKHsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCBjbGFzc05hbWUsIG1heEhlaWdodCwgb25JbnB1dCwgb25LZXlEb3duLCBvbkZvY3VzLCBvbkJsdXIsIG9uUGFzdGVGaWxlcyB9LCByZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlZGl0b3JSZWYsXG4gICAgICB1cGRhdGVUcmlnZ2VyLFxuICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCxcbiAgICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgICB1cGRhdGVTbGFzaFRyaWdnZXIsXG4gICAgICByZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAsXG4gICAgICB1cGRhdGVIYXNoVHJpZ2dlcixcbiAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNraWxsQ2hpcCxcbiAgICAgIHNlcmlhbGl6ZSxcbiAgICAgIGNsZWFyOiBjbGVhckVkaXRvckRvbSxcbiAgICAgIGZvY3VzLFxuICAgIH0gPSB1c2VDb250ZXh0TWVudGlvbnMoKVxuICAgIGNvbnN0IHNraXBOZXh0SW5wdXQgPSB1c2VSZWYoZmFsc2UpXG4gICAgY29uc3QgW3BsYWNlaG9sZGVyVHJ1bmNhdGVkLCBzZXRQbGFjZWhvbGRlclRydW5jYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgICBjb25zdCBbbG9naWNhbEVtcHR5LCBzZXRMb2dpY2FsRW1wdHldID0gdXNlU3RhdGUodHJ1ZSlcblxuICAgIGNvbnN0IHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSA9IHVzZUNhbGxiYWNrKChpc0VtcHR5OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCdkYXRhLWVtcHR5JywgU3RyaW5nKGlzRW1wdHkpKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgY29uc3Qgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlZGl0b3IpIHJldHVyblxuXG4gICAgICAvLyBMaW1waWFyIGN1YWxxdWllciByZXNpZHVvIChiciwgZXNwYWNpb3MpIHF1ZSBkZWplIGVsIGJyb3dzZXIgYWwgdmFjaWFyIGVsIGNvbnRlbnRlZGl0YWJsZS5cbiAgICAgIC8vIFNpbiBlc3RvLCB1biBlc3BhY2lvIHN1ZWx0byBhY3RpdmEgZGF0YS1lbXB0eT1cInRydWVcIiArIDo6YmVmb3JlIHBsYWNlaG9sZGVyIGVuIGzDrW5lYSAxXG4gICAgICAvLyB5IGRlc3BsYXphIGVsIGN1cnNvciBhIGxhIGzDrW5lYSAyLlxuICAgICAgaWYgKGVkaXRvci50ZXh0Q29udGVudD8udHJpbSgpID09PSAnJykge1xuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJydcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgfSwgW2VkaXRvclJlZl0pXG5cbiAgICBjb25zdCByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgICBjb25zdCBwaCA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICAgIGNvbnN0IGlzRWRpdG9yTG9naWNhbGx5RW1wdHkgPSBzZXJpYWxpemUoKS50ZXh0LnRyaW0oKSA9PT0gJydcblxuICAgICAgaWYgKCFlbCB8fCAhcGggfHwgIWlzRWRpdG9yTG9naWNhbGx5RW1wdHkpIHtcbiAgICAgICAgc2V0UGxhY2Vob2xkZXJUcnVuY2F0ZWQoZmFsc2UpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzZXRQbGFjZWhvbGRlclRydW5jYXRlZChpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IoZWwsIHBoKSlcbiAgICB9LCBbcGxhY2Vob2xkZXIsIHNlcmlhbGl6ZV0pXG5cbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uKClcbiAgICAgIGNvbnN0IGVsID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhyZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24pXG4gICAgICB9KVxuICAgICAgcm8ub2JzZXJ2ZShlbClcbiAgICAgIHJldHVybiAoKSA9PiByby5kaXNjb25uZWN0KClcbiAgICB9LCBbcGxhY2Vob2xkZXIsIGRpc2FibGVkLCByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb25dKVxuXG4gICAgY29uc3QgZW1pdElucHV0U3RhdGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCB0cmlnID0gdXBkYXRlVHJpZ2dlcigpXG4gICAgICBjb25zdCBzbGFzaFRyaWcgPSB1cGRhdGVTbGFzaFRyaWdnZXIoKVxuICAgICAgY29uc3QgaGFzaFRyaWcgPSB1cGRhdGVIYXNoVHJpZ2dlcigpXG4gICAgICBsZXQgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20oKVxuICAgICAgICBzdGF0ZSA9IHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgICAgfVxuICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogdHJpZy5hY3RpdmUsIHF1ZXJ5OiB0cmlnLnF1ZXJ5LCBhdFJ1bkxlbmd0aDogdHJpZy5hdFJ1bkxlbmd0aCB9LFxuICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBzbGFzaFRyaWcuYWN0aXZlLCBxdWVyeTogc2xhc2hUcmlnLnF1ZXJ5IH0sXG4gICAgICAgIGhhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogaGFzaFRyaWcuYWN0aXZlLCBxdWVyeTogaGFzaFRyaWcucXVlcnkgfSxcbiAgICAgIH0pXG4gICAgICBxdWV1ZU1pY3JvdGFzayhyZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24pXG4gICAgfSwgW1xuICAgICAgdXBkYXRlVHJpZ2dlcixcbiAgICAgIHVwZGF0ZVNsYXNoVHJpZ2dlcixcbiAgICAgIHVwZGF0ZUhhc2hUcmlnZ2VyLFxuICAgICAgc2VyaWFsaXplLFxuICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20sXG4gICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUsXG4gICAgICBvbklucHV0LFxuICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uLFxuICAgIF0pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKFxuICAgICAgcmVmLFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJFZGl0b3JEb20oKVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSh0cnVlKVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eSh0cnVlKVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgICAgfSxcbiAgICAgICAgc2V0UGxhaW5UZXh0OiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvcikgcmV0dXJuXG4gICAgICAgICAgY29uc3QgcGxhaW4gPSB0ZXh0ID8/ICcnXG4gICAgICAgICAgZWRpdG9yLnRleHRDb250ZW50ID0gcGxhaW5cbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSBzdGF0ZS50ZXh0LnRyaW0oKSA9PT0gJydcbiAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgfVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIGVkaXRvci5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKVxuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydE1lbnRpb25UcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvciB8fCBkaXNhYmxlZCkgcmV0dXJuXG5cbiAgICAgICAgICBmb2N1cygpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFlZGl0b3IuY29udGFpbnMoc2VsZWN0aW9uLmFuY2hvck5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgICAgIGVuZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICAgICAgICBlbmRSYW5nZS5jb2xsYXBzZShmYWxzZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKGVuZFJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgICAgICAgbGV0IHByZWZpeCA9ICcnXG4gICAgICAgICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgfSA9IHJhbmdlXG4gICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgY29uc3QgcHJldkNoYXIgPSBzdGFydE9mZnNldCA+IDAgPyAoc3RhcnRDb250YWluZXIgYXMgVGV4dCkuZGF0YS5jaGFyQXQoc3RhcnRPZmZzZXQgLSAxKSA6ICcnXG4gICAgICAgICAgICAvLyBFc3BhY2lvIHNvbG8gc2kgaGF5IHRleHRvIHByZXZpbyBxdWUgbm8gc2VhIGzDrW1pdGUgbmkgYEBgIChAQCBkZWJlbiBxdWVkYXIgc2VndWlkb3MpLlxuICAgICAgICAgICAgaWYgKHByZXZDaGFyICYmICEvW1xccyhbe0BdLy50ZXN0KHByZXZDaGFyKSkge1xuICAgICAgICAgICAgICBwcmVmaXggPSAnICdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbnNlcnRlZCA9IGAke3ByZWZpeH1AYFxuICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaW5zZXJ0ZWQpXG4gICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSlcblxuICAgICAgICAgIC8vIFNpIGVsIGBAYCBxdWVkw7MgZW4gdW4gbm9kbyBudWV2bywgdW5pciBjb24gZWwgdGV4dCBub2RlIHByZXZpbyBxdWUgdGVybWluYSBlbiBgQGBcbiAgICAgICAgICAvLyBwYXJhIHF1ZSBkZXRlY3RNZW50aW9uVHJpZ2dlciB2ZWEgZWwgcnVuIGNvbXBsZXRvIChAQCwgQEBALCDigKYpLlxuICAgICAgICAgIGNvbnN0IHByZXZTaWJsaW5nID0gdGV4dE5vZGUucHJldmlvdXNTaWJsaW5nXG4gICAgICAgICAgbGV0IGNhcmV0Tm9kZSA9IHRleHROb2RlXG4gICAgICAgICAgbGV0IGNhcmV0T2Zmc2V0ID0gaW5zZXJ0ZWQubGVuZ3RoXG4gICAgICAgICAgaWYgKHByZWZpeCA9PT0gJycgJiYgcHJldlNpYmxpbmc/Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiAocHJldlNpYmxpbmcgYXMgVGV4dCkuZGF0YS5lbmRzV2l0aCgnQCcpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2VGV4dCA9IHByZXZTaWJsaW5nIGFzIFRleHRcbiAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gcHJldlRleHQuZGF0YS5sZW5ndGggKyBpbnNlcnRlZC5sZW5ndGhcbiAgICAgICAgICAgIHByZXZUZXh0LmRhdGEgKz0gaW5zZXJ0ZWRcbiAgICAgICAgICAgIHRleHROb2RlLnJlbW92ZSgpXG4gICAgICAgICAgICBjYXJldE5vZGUgPSBwcmV2VGV4dFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVsIGNhcmV0IGRlYmUgcXVlZGFyIERFTlRSTyBkZWwgdGV4dCBub2RlIChkZXNwdcOpcyBkZSBgQGApLlxuICAgICAgICAgIC8vIGBzZXRTdGFydEFmdGVyYCBsbyBkZWphIGVuIGVsIHBhZHJlIHkgZGV0ZWN0TWVudGlvblRyaWdnZXIgbm8gYWN0aXZhIGVsIHBvcG92ZXIuXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY2FyZXROb2RlLCBjYXJldE9mZnNldClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAgICAgICAgIGVtaXRJbnB1dFN0YXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0U2xhc2hUcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvciB8fCBkaXNhYmxlZCkgcmV0dXJuXG5cbiAgICAgICAgICBmb2N1cygpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFlZGl0b3IuY29udGFpbnMoc2VsZWN0aW9uLmFuY2hvck5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgICAgIGVuZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICAgICAgICBlbmRSYW5nZS5jb2xsYXBzZShmYWxzZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKGVuZFJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgICAgICAgbGV0IHByZWZpeCA9ICcnXG4gICAgICAgICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgfSA9IHJhbmdlXG4gICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgY29uc3QgcHJldkNoYXIgPSBzdGFydE9mZnNldCA+IDAgPyAoc3RhcnRDb250YWluZXIgYXMgVGV4dCkuZGF0YS5jaGFyQXQoc3RhcnRPZmZzZXQgLSAxKSA6ICcnXG4gICAgICAgICAgICBpZiAocHJldkNoYXIgJiYgIS9bXFxzKFt7XS8udGVzdChwcmV2Q2hhcikpIHtcbiAgICAgICAgICAgICAgcHJlZml4ID0gJyAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaW5zZXJ0ZWQgPSBgJHtwcmVmaXh9L2BcbiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGluc2VydGVkKVxuICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUodGV4dE5vZGUpXG5cbiAgICAgICAgICAvLyBDYXJldCBkZW50cm8gZGVsIHRleHQgbm9kZSBwYXJhIHF1ZSBkZXRlY3RTbGFzaFRyaWdnZXIgYWN0aXZlIGVsIGRyb3Bkb3duLlxuICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHROb2RlLCBpbnNlcnRlZC5sZW5ndGgpXG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG5cbiAgICAgICAgICBlbWl0SW5wdXRTdGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNraWxsVHJpZ2dlcjogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlZGl0b3IgfHwgZGlzYWJsZWQpIHJldHVyblxuXG4gICAgICAgICAgZm9jdXMoKVxuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHJldHVyblxuXG4gICAgICAgICAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhZWRpdG9yLmNvbnRhaW5zKHNlbGVjdGlvbi5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICBlbmRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKVxuICAgICAgICAgICAgZW5kUmFuZ2UuY29sbGFwc2UoZmFsc2UpXG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShlbmRSYW5nZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcblxuICAgICAgICAgIGxldCBwcmVmaXggPSAnJ1xuICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0IH0gPSByYW5nZVxuICAgICAgICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDaGFyID0gc3RhcnRPZmZzZXQgPiAwID8gKHN0YXJ0Q29udGFpbmVyIGFzIFRleHQpLmRhdGEuY2hhckF0KHN0YXJ0T2Zmc2V0IC0gMSkgOiAnJ1xuICAgICAgICAgICAgaWYgKHByZXZDaGFyICYmICEvW1xccyhbe10vLnRlc3QocHJldkNoYXIpKSB7XG4gICAgICAgICAgICAgIHByZWZpeCA9ICcgJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluc2VydGVkID0gYCR7cHJlZml4fSNgXG4gICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpbnNlcnRlZClcbiAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKVxuXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIGluc2VydGVkLmxlbmd0aClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAgICAgICAgIGVtaXRJbnB1dFN0YXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICBoYXNWaXN1YWxNdWx0aWxpbmU6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLnRleHRDb250ZW50Py50cmltKCkgPz8gJydcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMubGluZUhlaWdodCkgfHwgMjJcbiAgICAgICAgICBjb25zdCBlZGl0b3JIZWlnaHQgPSBlZGl0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gICAgICAgICAgY29uc3QgaXNNdWx0aWxpbmUgPSBlZGl0b3JIZWlnaHQgPiBsaW5lSGVpZ2h0ICogMS41XG5cbiAgICAgICAgICByZXR1cm4gaXNNdWx0aWxpbmVcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IG51bGwsXG4gICAgICAgIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcChjaGlwLCBtZW50aW9uKVxuICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IHRydWVcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICAgICAgb25JbnB1dD8uKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwIH0sXG4gICAgICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgICBoYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSBzdGF0ZS50ZXh0LnRyaW0oKSA9PT0gJydcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoaXNFbXB0eSlcbiAgICAgICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyBTaSBlbCBuYXZlZ2Fkb3Igbm8gZGlzcGFyYSBgaW5wdXRgIHRyYXMgZWwgY2hpcCwgZWwgZmxhZyBxdWVkYWJhIGVuIHRydWUgeSBlbCBwcsOzeGltbyBAIGRlbCB1c3VhcmlvIHNlIGlnbm9yYWJhLlxuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgYXBwZW5kTWVudGlvbkF0RW5kOiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSByZXR1cm5cblxuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbicsICd0cnVlJylcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWlkJywgU3RyaW5nKG1lbnRpb24uaWQpKVxuICAgICAgICAgIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWxhYmVsJywgbWVudGlvbi5sYWJlbClcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcblxuICAgICAgICAgIGNvbnN0IHRyYWlsaW5nU3BhY2UgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MDBhMCcpXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGNoaXApXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRyYWlsaW5nU3BhY2UpXG5cbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoZmFsc2UpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGZhbHNlKVxuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0cmFpbGluZ1NwYWNlLCAxKVxuICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNraWxsTWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hpcCA9IGJ1aWxkQ2hpcEVsZW1lbnQobWVudGlvbilcbiAgICAgICAgICByZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAoY2hpcCwgbWVudGlvbilcbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gc3RhdGUudGV4dC50cmltKCkgPT09ICcnXG4gICAgICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGlzRW1wdHkpXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0U2xhc2hDb21tYW5kOiAoY29tbWFuZDogU2xhc2hDb21tYW5kQ2hpcERhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlwID0gYnVpbGRTbGFzaENoaXBFbGVtZW50KGNvbW1hbmQpXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwKGNoaXAsIGNvbW1hbmQpXG4gICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2VyaWFsaXplKClcbiAgICAgICAgICBvbklucHV0Py4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAgfSxcbiAgICAgICAgICAgIHNsYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICAgIGhhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIFtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyRWRpdG9yRG9tLFxuICAgICAgICBzZXJpYWxpemUsXG4gICAgICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwLFxuICAgICAgICBvbklucHV0LFxuICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24sXG4gICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSxcbiAgICAgICAgZW1pdElucHV0U3RhdGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBlZGl0b3JSZWYsXG4gICAgICBdXG4gICAgKVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgICBpZiAoc2tpcE5leHRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZW1pdElucHV0U3RhdGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVBhc3RlID0gKGU6IENsaXBib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZmlsZXMgPSBmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKGZpbGVzLmxlbmd0aCAmJiBvblBhc3RlRmlsZXMpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9uUGFzdGVGaWxlcyhmaWxlcylcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJylcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggJiYgb25QYXN0ZUZpbGVzICYmICF0ZXh0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVyblxuICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKVxuICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlVG9FbmQoKVxuICAgICAgaGFuZGxlSW5wdXQoKVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICBjb25zdCBwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSA9IGxvZ2ljYWxFbXB0eSAmJiBwbGFjZWhvbGRlclRydW5jYXRlZCAmJiB0cmltbWVkUGxhY2Vob2xkZXIgPyB0cmltbWVkUGxhY2Vob2xkZXIgOiAnJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkNoaXBHbG9iYWxTdHlsZXMgLz5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3BsYWNlaG9sZGVyVG9vbHRpcFRpdGxlfT5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxTQ01FRWRpdGFibGVcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAkbWF4SGVpZ2h0PXttYXhIZWlnaHR9XG4gICAgICAgICAgICAgIHN0eWxlPXttYXhIZWlnaHQgIT0gbnVsbCA/IHsgbWF4SGVpZ2h0IH0gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBkYXRhLWVtcHR5PXtTdHJpbmcobG9naWNhbEVtcHR5KX1cbiAgICAgICAgICAgICAgY29udGVudEVkaXRhYmxlPXshZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGRhdGEtZGlzYWJsZWQ9e1N0cmluZyghIWRpc2FibGVkKX1cbiAgICAgICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXG4gICAgICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICAgICAgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgb25JbnB1dD17aGFuZGxlSW5wdXR9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICBvblBhc3RlPXtoYW5kbGVQYXN0ZX1cbiAgICAgICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbkNvbnRleHRNZW50aW9uRWRpdG9yLmRpc3BsYXlOYW1lID0gJ0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsU0FFRUEsVUFBVSxFQUVWQyxXQUFXLEVBQ1hDLG1CQUFtQixFQUNuQkMsZUFBZSxFQUNmQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxrQkFBa0IsUUFBUSxtQ0FBbUM7QUFFdEUsU0FBU0MsZ0JBQWdCLFFBQVEsdUJBQXVCO0FBQ3hELFNBQVNDLDhCQUE4QixRQUFRLGlEQUFpRDtBQUNoRyxTQUFTQyxxQkFBcUIsUUFBOEIscUJBQXFCO0FBQ2pGLFNBQVNDLHFCQUFxQixRQUFRLCtCQUErQjtBQUNyRSxTQUFTQyxZQUFZLFFBQVEsK0JBQStCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFF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
|
|
504
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3J3YXJkUmVmIiwidXNlQ2FsbGJhY2siLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJUb29sdGlwIiwidXNlQ29udGV4dE1lbnRpb25zIiwiYnVpbGRDaGlwRWxlbWVudCIsIkNvbnRleHRNZW50aW9uQ2hpcEdsb2JhbFN0eWxlcyIsImJ1aWxkU2xhc2hDaGlwRWxlbWVudCIsImZpbGVzRnJvbURhdGFUcmFuc2ZlciIsImlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciIsInJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4IiwiU0NNRUVkaXRhYmxlIiwianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwiQ29udGV4dE1lbnRpb25FZGl0b3IiLCJfcmVmIiwicmVmIiwiX3BsYWNlaG9sZGVyJHRyaW0yIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsImNsYXNzTmFtZSIsIm1heEhlaWdodCIsIm9uSW5wdXQiLCJvbktleURvd24iLCJvbkZvY3VzIiwib25CbHVyIiwib25QYXN0ZUZpbGVzIiwiX3VzZUNvbnRleHRNZW50aW9ucyIsImVkaXRvclJlZiIsInVwZGF0ZVRyaWdnZXIiLCJyZXBsYWNlVHJpZ2dlcldpdGhDaGlwIiwic3luY1RyaWdnZXJBdFJ1bkxlbmd0aCIsInVwZGF0ZVNsYXNoVHJpZ2dlciIsInJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCIsInVwZGF0ZUhhc2hUcmlnZ2VyIiwicmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwIiwic2VyaWFsaXplIiwiY2xlYXJFZGl0b3JEb20iLCJjbGVhciIsImZvY3VzIiwic2tpcE5leHRJbnB1dCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInBsYWNlaG9sZGVyVHJ1bmNhdGVkIiwic2V0UGxhY2Vob2xkZXJUcnVuY2F0ZWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxvZ2ljYWxFbXB0eSIsInNldExvZ2ljYWxFbXB0eSIsInN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSIsImlzRW1wdHkiLCJjdXJyZW50Iiwic2V0QXR0cmlidXRlIiwiU3RyaW5nIiwibm9ybWFsaXplRW1wdHlFZGl0b3JEb20iLCJfZWRpdG9yJHRleHRDb250ZW50IiwiZWRpdG9yIiwidGV4dENvbnRlbnQiLCJ0cmltIiwiaW5uZXJIVE1MIiwic2VsZWN0aW9uIiwid2luZG93IiwiZ2V0U2VsZWN0aW9uIiwicmFuZ2UiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZUNvbnRlbnRzIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbiIsIl9wbGFjZWhvbGRlciR0cmltIiwiZWwiLCJwaCIsImlzRWRpdG9yTG9naWNhbGx5RW1wdHkiLCJ0ZXh0IiwidW5kZWZpbmVkIiwicm8iLCJSZXNpemVPYnNlcnZlciIsInF1ZXVlTWljcm90YXNrIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJlbWl0SW5wdXRTdGF0ZSIsInRyaWciLCJzbGFzaFRyaWciLCJoYXNoVHJpZyIsInN0YXRlIiwibWVudGlvbnMiLCJzbGFzaENvbW1hbmRzIiwiX29iamVjdFNwcmVhZCIsInRyaWdnZXIiLCJhY3RpdmUiLCJxdWVyeSIsImF0UnVuTGVuZ3RoIiwic2xhc2hUcmlnZ2VyIiwiaGFzaFRyaWdnZXIiLCJzZXRQbGFpblRleHQiLCJwbGFpbiIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJpbnNlcnRNZW50aW9uVHJpZ2dlciIsImFuY2hvck5vZGUiLCJjb250YWlucyIsImVuZFJhbmdlIiwiZ2V0UmFuZ2VBdCIsInByZWZpeCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJwcmV2Q2hhciIsImRhdGEiLCJjaGFyQXQiLCJpbnNlcnRlZCIsImNvbmNhdCIsInRleHROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJpbnNlcnROb2RlIiwicHJldlNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJjYXJldE5vZGUiLCJjYXJldE9mZnNldCIsImVuZHNXaXRoIiwicHJldlRleHQiLCJyZW1vdmUiLCJzZXRTdGFydCIsImluc2VydFNsYXNoVHJpZ2dlciIsImluc2VydFNraWxsVHJpZ2dlciIsImhhc1Zpc3VhbE11bHRpbGluZSIsIl9lZGl0b3IkdGV4dENvbnRlbnQkdCIsIl9lZGl0b3IkdGV4dENvbnRlbnQyIiwic3R5bGVzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImxpbmVIZWlnaHQiLCJwYXJzZUZsb2F0IiwiZWRpdG9ySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGVpZ2h0IiwiaXNNdWx0aWxpbmUiLCJnZXRFZGl0b3JDbGllbnRSZWN0IiwiX2VkaXRvclJlZiRjdXJyZW50JGdlIiwiX2VkaXRvclJlZiRjdXJyZW50IiwiaW5zZXJ0TWVudGlvbiIsIm1lbnRpb24iLCJjaGlwIiwiYXBwZW5kTWVudGlvbkF0RW5kIiwiaWQiLCJ0eXBlIiwibGFiZWwiLCJ0cmFpbGluZ1NwYWNlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRTa2lsbE1lbnRpb24iLCJpbnNlcnRTbGFzaENvbW1hbmQiLCJjb21tYW5kIiwiaGFuZGxlSW5wdXQiLCJoYW5kbGVQYXN0ZSIsImUiLCJmaWxlcyIsImNsaXBib2FyZERhdGEiLCJwcmV2ZW50RGVmYXVsdCIsImdldERhdGEiLCJyYW5nZUNvdW50IiwiZGVsZXRlRnJvbURvY3VtZW50IiwiY29sbGFwc2VUb0VuZCIsInRyaW1tZWRQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyVG9vbHRpcFRpdGxlIiwiY2hpbGRyZW4iLCJ0aXRsZSIsInN0eWxlIiwiZGlzcGxheSIsIndpZHRoIiwibWluV2lkdGgiLCIkbWF4SGVpZ2h0IiwiY29udGVudEVkaXRhYmxlIiwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiwicm9sZSIsIm9uUGFzdGUiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yL0NvbnRleHRNZW50aW9uRWRpdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDbGlwYm9hcmRFdmVudCxcbiAgZm9yd2FyZFJlZixcbiAgS2V5Ym9hcmRFdmVudCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VDb250ZXh0TWVudGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDb250ZXh0TWVudGlvbnMnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgYnVpbGRDaGlwRWxlbWVudCB9IGZyb20gJy4uL0NvbnRleHRNZW50aW9uQ2hpcCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uQ2hpcEdsb2JhbFN0eWxlcyB9IGZyb20gJy4uL0NvbnRleHRNZW50aW9uQ2hpcC9Db250ZXh0TWVudGlvbkNoaXAuc3R5bGVzJ1xuaW1wb3J0IHsgYnVpbGRTbGFzaENoaXBFbGVtZW50LCBTbGFzaENvbW1hbmRDaGlwRGF0YSB9IGZyb20gJy4uL1NsYXNoQ29tbWFuZENoaXAnXG5pbXBvcnQgeyBmaWxlc0Zyb21EYXRhVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jaGF0SW5wdXRGaWxlcydcbmltcG9ydCB7IGlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciwgcmVzb2x2ZVRyaWdnZXJJbnNlcnRQcmVmaXggfSBmcm9tICcuL0NvbnRleHRNZW50aW9uRWRpdG9yLmhlbHBlcnMnXG5pbXBvcnQgeyBTQ01FRWRpdGFibGUgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uRWRpdG9yLnN0eWxlcydcblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgPSB7XG4gIGZvY3VzOiAoKSA9PiB2b2lkXG4gIGNsZWFyOiAoKSA9PiB2b2lkXG4gIHNldFBsYWluVGV4dDogKHRleHQ6IHN0cmluZykgPT4gdm9pZFxuICAvKiogSW5zZXJ0YSBgQGAgZW4gZWwgY2FyZXQgKGNvbiBlc3BhY2lvIHByZXZpbyBzaSBoYWNlIGZhbHRhKSB5IGFicmUgZWwgdHJpZ2dlciBkZSBtZW50aW9ucy4gKi9cbiAgaW5zZXJ0TWVudGlvblRyaWdnZXI6ICgpID0+IHZvaWRcbiAgLyoqIEluc2VydGEgYC9gIGVuIGVsIGNhcmV0IChjb24gZXNwYWNpbyBwcmV2aW8gc2kgaGFjZSBmYWx0YSkgeSBhYnJlIGVsIHRyaWdnZXIgZGUgc2xhc2ggY29tbWFuZHMuICovXG4gIGluc2VydFNsYXNoVHJpZ2dlcjogKCkgPT4gdm9pZFxuICAvKiogSW5zZXJ0YSBgI2AgZW4gZWwgY2FyZXQgKGNvbiBlc3BhY2lvIHByZXZpbyBzaSBoYWNlIGZhbHRhKSB5IGFicmUgZWwgdHJpZ2dlciBkZSBza2lsbHMuICovXG4gIGluc2VydFNraWxsVHJpZ2dlcjogKCkgPT4gdm9pZFxuICBpbnNlcnRNZW50aW9uOiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHZvaWRcbiAgYXBwZW5kTWVudGlvbkF0RW5kOiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHZvaWRcbiAgaW5zZXJ0U2xhc2hDb21tYW5kOiAoY29tbWFuZDogU2xhc2hDb21tYW5kQ2hpcERhdGEpID0+IHZvaWRcbiAgLyoqIFJlZW1wbGF6YSBlbCBgI3F1ZXJ5YCBwZW5kaWVudGUgcG9yIGVsIGNoaXAgZGUgbGEgc2tpbGwgZWxlZ2lkYS4gKi9cbiAgaW5zZXJ0U2tpbGxNZW50aW9uOiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHZvaWRcbiAgc3luY1RyaWdnZXJBdFJ1bkxlbmd0aDogKGF0UnVuTGVuZ3RoOiBudW1iZXIpID0+IHZvaWRcbiAgc2VyaWFsaXplOiAoKSA9PiB7XG4gICAgdGV4dDogc3RyaW5nXG4gICAgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW11cbiAgICBzbGFzaENvbW1hbmRzOiBTbGFzaENvbW1hbmRDaGlwRGF0YVtdXG4gIH1cbiAgaGFzVmlzdWFsTXVsdGlsaW5lOiAoKSA9PiBib29sZWFuXG4gIC8qKiBSZWN0IGRlbCDDoXJlYSBlZGl0YWJsZSAodmlld3BvcnQpOyBsbyB1c2EgZWwgcG9wb3ZlciBkZSBAIHBhcmEgYWxpbmVhciBhbmNobyB5IGZhbGxiYWNrIHZlcnRpY2FsLiAqL1xuICBnZXRFZGl0b3JDbGllbnRSZWN0OiAoKSA9PiBET01SZWN0IHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzID0ge1xuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKiBBbHRvIG3DoXhpbW8gZGVsIMOhcmVhIGVkaXRhYmxlIChweCkuIFNlIGFqdXN0YSBjdWFuZG8gaGF5IGNoaXBzIGRlIGNvbnRleHRvL2FkanVudG9zLiAqL1xuICBtYXhIZWlnaHQ/OiBudW1iZXJcbiAgb25JbnB1dD86IChzdGF0ZToge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgICBoYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmcgfVxuICB9KSA9PiB2b2lkXG4gIG9uS2V5RG93bj86IChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gdm9pZFxuICBvbkZvY3VzPzogKCkgPT4gdm9pZFxuICBvbkJsdXI/OiAoKSA9PiB2b2lkXG4gIC8qKiBDbGlwYm9hcmQgZmlsZXMgKHNjcmVlbnNob3RzLCBjb3BpZWQgaW1hZ2VzKS4gVGV4dCBpcyBzdGlsbCBpbnNlcnRlZCB3aGVuIHByZXNlbnQuICovXG4gIG9uUGFzdGVGaWxlcz86IChmaWxlczogRmlsZVtdKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBDb250ZXh0TWVudGlvbkVkaXRvciA9IGZvcndhcmRSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUsIENvbnRleHRNZW50aW9uRWRpdG9yUHJvcHM+KFxuICAoeyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIGNsYXNzTmFtZSwgbWF4SGVpZ2h0LCBvbklucHV0LCBvbktleURvd24sIG9uRm9jdXMsIG9uQmx1ciwgb25QYXN0ZUZpbGVzIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVkaXRvclJlZixcbiAgICAgIHVwZGF0ZVRyaWdnZXIsXG4gICAgICByZXBsYWNlVHJpZ2dlcldpdGhDaGlwLFxuICAgICAgc3luY1RyaWdnZXJBdFJ1bkxlbmd0aCxcbiAgICAgIHVwZGF0ZVNsYXNoVHJpZ2dlcixcbiAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICAgIHVwZGF0ZUhhc2hUcmlnZ2VyLFxuICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwLFxuICAgICAgc2VyaWFsaXplLFxuICAgICAgY2xlYXI6IGNsZWFyRWRpdG9yRG9tLFxuICAgICAgZm9jdXMsXG4gICAgfSA9IHVzZUNvbnRleHRNZW50aW9ucygpXG4gICAgY29uc3Qgc2tpcE5leHRJbnB1dCA9IHVzZVJlZihmYWxzZSlcbiAgICBjb25zdCBbcGxhY2Vob2xkZXJUcnVuY2F0ZWQsIHNldFBsYWNlaG9sZGVyVHJ1bmNhdGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICAgIGNvbnN0IFtsb2dpY2FsRW1wdHksIHNldExvZ2ljYWxFbXB0eV0gPSB1c2VTdGF0ZSh0cnVlKVxuXG4gICAgY29uc3Qgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlID0gdXNlQ2FsbGJhY2soKGlzRW1wdHk6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChlZGl0b3JSZWYuY3VycmVudCkge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1wdHknLCBTdHJpbmcoaXNFbXB0eSkpXG4gICAgICB9XG4gICAgfSwgW10pXG5cbiAgICBjb25zdCBub3JtYWxpemVFbXB0eUVkaXRvckRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWVkaXRvcikgcmV0dXJuXG5cbiAgICAgIC8vIExpbXBpYXIgY3VhbHF1aWVyIHJlc2lkdW8gKGJyLCBlc3BhY2lvcykgcXVlIGRlamUgZWwgYnJvd3NlciBhbCB2YWNpYXIgZWwgY29udGVudGVkaXRhYmxlLlxuICAgICAgLy8gU2luIGVzdG8sIHVuIGVzcGFjaW8gc3VlbHRvIGFjdGl2YSBkYXRhLWVtcHR5PVwidHJ1ZVwiICsgOjpiZWZvcmUgcGxhY2Vob2xkZXIgZW4gbMOtbmVhIDFcbiAgICAgIC8vIHkgZGVzcGxhemEgZWwgY3Vyc29yIGEgbGEgbMOtbmVhIDIuXG4gICAgICBpZiAoZWRpdG9yLnRleHRDb250ZW50Py50cmltKCkgPT09ICcnKSB7XG4gICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnJ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm5cbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICB9LCBbZWRpdG9yUmVmXSlcblxuICAgIGNvbnN0IHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHBoID0gcGxhY2Vob2xkZXI/LnRyaW0oKSA/PyAnJ1xuICAgICAgY29uc3QgaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSA9IHNlcmlhbGl6ZSgpLnRleHQudHJpbSgpID09PSAnJ1xuXG4gICAgICBpZiAoIWVsIHx8ICFwaCB8fCAhaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSkge1xuICAgICAgICBzZXRQbGFjZWhvbGRlclRydW5jYXRlZChmYWxzZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldFBsYWNlaG9sZGVyVHJ1bmNhdGVkKGlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvcihlbCwgcGgpKVxuICAgIH0sIFtwbGFjZWhvbGRlciwgc2VyaWFsaXplXSlcblxuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgY29uc3QgZWwgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBjb25zdCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgIH0pXG4gICAgICByby5vYnNlcnZlKGVsKVxuICAgICAgcmV0dXJuICgpID0+IHJvLmRpc2Nvbm5lY3QoKVxuICAgIH0sIFtwbGFjZWhvbGRlciwgZGlzYWJsZWQsIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbl0pXG5cbiAgICBjb25zdCBlbWl0SW5wdXRTdGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IHRyaWcgPSB1cGRhdGVUcmlnZ2VyKClcbiAgICAgIGNvbnN0IHNsYXNoVHJpZyA9IHVwZGF0ZVNsYXNoVHJpZ2dlcigpXG4gICAgICBjb25zdCBoYXNoVHJpZyA9IHVwZGF0ZUhhc2hUcmlnZ2VyKClcbiAgICAgIGxldCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICBjb25zdCBpc0VtcHR5ID0gc3RhdGUudGV4dC50cmltKCkgPT09ICcnXG4gICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICBub3JtYWxpemVFbXB0eUVkaXRvckRvbSgpXG4gICAgICAgIHN0YXRlID0geyB0ZXh0OiAnJywgbWVudGlvbnM6IFtdLCBzbGFzaENvbW1hbmRzOiBbXSB9XG4gICAgICB9XG4gICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoaXNFbXB0eSlcbiAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgb25JbnB1dD8uKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiB0cmlnLmFjdGl2ZSwgcXVlcnk6IHRyaWcucXVlcnksIGF0UnVuTGVuZ3RoOiB0cmlnLmF0UnVuTGVuZ3RoIH0sXG4gICAgICAgIHNsYXNoVHJpZ2dlcjogeyBhY3RpdmU6IHNsYXNoVHJpZy5hY3RpdmUsIHF1ZXJ5OiBzbGFzaFRyaWcucXVlcnkgfSxcbiAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBoYXNoVHJpZy5hY3RpdmUsIHF1ZXJ5OiBoYXNoVHJpZy5xdWVyeSB9LFxuICAgICAgfSlcbiAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICB9LCBbXG4gICAgICB1cGRhdGVUcmlnZ2VyLFxuICAgICAgdXBkYXRlU2xhc2hUcmlnZ2VyLFxuICAgICAgdXBkYXRlSGFzaFRyaWdnZXIsXG4gICAgICBzZXJpYWxpemUsXG4gICAgICBub3JtYWxpemVFbXB0eUVkaXRvckRvbSxcbiAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSxcbiAgICAgIG9uSW5wdXQsXG4gICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24sXG4gICAgXSlcblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUoXG4gICAgICByZWYsXG4gICAgICAoKSA9PiAoe1xuICAgICAgICBmb2N1cyxcbiAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICBjbGVhckVkaXRvckRvbSgpXG4gICAgICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKHRydWUpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KHRydWUpXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2socmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uKVxuICAgICAgICB9LFxuICAgICAgICBzZXRQbGFpblRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSByZXR1cm5cbiAgICAgICAgICBjb25zdCBwbGFpbiA9IHRleHQgPz8gJydcbiAgICAgICAgICBlZGl0b3IudGV4dENvbnRlbnQgPSBwbGFpblxuICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IHRydWVcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJydcbiAgICAgICAgICB9XG4gICAgICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGlzRW1wdHkpXG4gICAgICAgICAgb25JbnB1dD8uKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwIH0sXG4gICAgICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgICBoYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgZWRpdG9yLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKVxuICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpXG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0TWVudGlvblRyaWdnZXI6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yIHx8IGRpc2FibGVkKSByZXR1cm5cblxuICAgICAgICAgIGZvY3VzKClcblxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm5cblxuICAgICAgICAgIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIWVkaXRvci5jb250YWlucyhzZWxlY3Rpb24uYW5jaG9yTm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICAgICAgZW5kUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgICAgICAgIGVuZFJhbmdlLmNvbGxhcHNlKGZhbHNlKVxuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UoZW5kUmFuZ2UpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG5cbiAgICAgICAgICBsZXQgcHJlZml4ID0gJydcbiAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCB9ID0gcmFuZ2VcbiAgICAgICAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q2hhciA9IHN0YXJ0T2Zmc2V0ID4gMCA/IChzdGFydENvbnRhaW5lciBhcyBUZXh0KS5kYXRhLmNoYXJBdChzdGFydE9mZnNldCAtIDEpIDogJydcbiAgICAgICAgICAgIHByZWZpeCA9IHJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4KHByZXZDaGFyKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluc2VydGVkID0gYCR7cHJlZml4fUBgXG4gICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpbnNlcnRlZClcbiAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKVxuXG4gICAgICAgICAgLy8gU2kgZWwgYEBgIHF1ZWTDsyBlbiB1biBub2RvIG51ZXZvLCB1bmlyIGNvbiBlbCB0ZXh0IG5vZGUgcHJldmlvIHF1ZSB0ZXJtaW5hIGVuIGBAYFxuICAgICAgICAgIC8vIHBhcmEgcXVlIGRldGVjdE1lbnRpb25UcmlnZ2VyIHZlYSBlbCBydW4gY29tcGxldG8gKEBALCBAQEAsIOKApikuXG4gICAgICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSB0ZXh0Tm9kZS5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgICBsZXQgY2FyZXROb2RlID0gdGV4dE5vZGVcbiAgICAgICAgICBsZXQgY2FyZXRPZmZzZXQgPSBpbnNlcnRlZC5sZW5ndGhcbiAgICAgICAgICBpZiAocHJlZml4ID09PSAnJyAmJiBwcmV2U2libGluZz8ubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIChwcmV2U2libGluZyBhcyBUZXh0KS5kYXRhLmVuZHNXaXRoKCdAJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZUZXh0ID0gcHJldlNpYmxpbmcgYXMgVGV4dFxuICAgICAgICAgICAgY2FyZXRPZmZzZXQgPSBwcmV2VGV4dC5kYXRhLmxlbmd0aCArIGluc2VydGVkLmxlbmd0aFxuICAgICAgICAgICAgcHJldlRleHQuZGF0YSArPSBpbnNlcnRlZFxuICAgICAgICAgICAgdGV4dE5vZGUucmVtb3ZlKClcbiAgICAgICAgICAgIGNhcmV0Tm9kZSA9IHByZXZUZXh0XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRWwgY2FyZXQgZGViZSBxdWVkYXIgREVOVFJPIGRlbCB0ZXh0IG5vZGUgKGRlc3B1w6lzIGRlIGBAYCkuXG4gICAgICAgICAgLy8gYHNldFN0YXJ0QWZ0ZXJgIGxvIGRlamEgZW4gZWwgcGFkcmUgeSBkZXRlY3RNZW50aW9uVHJpZ2dlciBubyBhY3RpdmEgZWwgcG9wb3Zlci5cbiAgICAgICAgICByYW5nZS5zZXRTdGFydChjYXJldE5vZGUsIGNhcmV0T2Zmc2V0KVxuICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuXG4gICAgICAgICAgZW1pdElucHV0U3RhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBpbnNlcnRTbGFzaFRyaWdnZXI6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yIHx8IGRpc2FibGVkKSByZXR1cm5cblxuICAgICAgICAgIGZvY3VzKClcblxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm5cblxuICAgICAgICAgIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIWVkaXRvci5jb250YWlucyhzZWxlY3Rpb24uYW5jaG9yTm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICAgICAgZW5kUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgICAgICAgIGVuZFJhbmdlLmNvbGxhcHNlKGZhbHNlKVxuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UoZW5kUmFuZ2UpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG5cbiAgICAgICAgICBsZXQgcHJlZml4ID0gJydcbiAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCB9ID0gcmFuZ2VcbiAgICAgICAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q2hhciA9IHN0YXJ0T2Zmc2V0ID4gMCA/IChzdGFydENvbnRhaW5lciBhcyBUZXh0KS5kYXRhLmNoYXJBdChzdGFydE9mZnNldCAtIDEpIDogJydcbiAgICAgICAgICAgIHByZWZpeCA9IHJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4KHByZXZDaGFyKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluc2VydGVkID0gYCR7cHJlZml4fS9gXG4gICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpbnNlcnRlZClcbiAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKVxuXG4gICAgICAgICAgLy8gQ2FyZXQgZGVudHJvIGRlbCB0ZXh0IG5vZGUgcGFyYSBxdWUgZGV0ZWN0U2xhc2hUcmlnZ2VyIGFjdGl2ZSBlbCBkcm9wZG93bi5cbiAgICAgICAgICByYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZSwgaW5zZXJ0ZWQubGVuZ3RoKVxuICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuXG4gICAgICAgICAgZW1pdElucHV0U3RhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBpbnNlcnRTa2lsbFRyaWdnZXI6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yIHx8IGRpc2FibGVkKSByZXR1cm5cblxuICAgICAgICAgIGZvY3VzKClcblxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm5cblxuICAgICAgICAgIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIWVkaXRvci5jb250YWlucyhzZWxlY3Rpb24uYW5jaG9yTm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICAgICAgZW5kUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgICAgICAgIGVuZFJhbmdlLmNvbGxhcHNlKGZhbHNlKVxuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UoZW5kUmFuZ2UpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG5cbiAgICAgICAgICBsZXQgcHJlZml4ID0gJydcbiAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCB9ID0gcmFuZ2VcbiAgICAgICAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2Q2hhciA9IHN0YXJ0T2Zmc2V0ID4gMCA/IChzdGFydENvbnRhaW5lciBhcyBUZXh0KS5kYXRhLmNoYXJBdChzdGFydE9mZnNldCAtIDEpIDogJydcbiAgICAgICAgICAgIHByZWZpeCA9IHJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4KHByZXZDaGFyKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluc2VydGVkID0gYCR7cHJlZml4fSNgXG4gICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpbnNlcnRlZClcbiAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKVxuXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIGluc2VydGVkLmxlbmd0aClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAgICAgICAgIGVtaXRJbnB1dFN0YXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICBoYXNWaXN1YWxNdWx0aWxpbmU6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLnRleHRDb250ZW50Py50cmltKCkgPz8gJydcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMubGluZUhlaWdodCkgfHwgMjJcbiAgICAgICAgICBjb25zdCBlZGl0b3JIZWlnaHQgPSBlZGl0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gICAgICAgICAgY29uc3QgaXNNdWx0aWxpbmUgPSBlZGl0b3JIZWlnaHQgPiBsaW5lSGVpZ2h0ICogMS41XG5cbiAgICAgICAgICByZXR1cm4gaXNNdWx0aWxpbmVcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IG51bGwsXG4gICAgICAgIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcChjaGlwLCBtZW50aW9uKVxuICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IHRydWVcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICAgICAgb25JbnB1dD8uKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwIH0sXG4gICAgICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgICBoYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSBzdGF0ZS50ZXh0LnRyaW0oKSA9PT0gJydcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoaXNFbXB0eSlcbiAgICAgICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyBTaSBlbCBuYXZlZ2Fkb3Igbm8gZGlzcGFyYSBgaW5wdXRgIHRyYXMgZWwgY2hpcCwgZWwgZmxhZyBxdWVkYWJhIGVuIHRydWUgeSBlbCBwcsOzeGltbyBAIGRlbCB1c3VhcmlvIHNlIGlnbm9yYWJhLlxuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgYXBwZW5kTWVudGlvbkF0RW5kOiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSByZXR1cm5cblxuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbicsICd0cnVlJylcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWlkJywgU3RyaW5nKG1lbnRpb24uaWQpKVxuICAgICAgICAgIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWxhYmVsJywgbWVudGlvbi5sYWJlbClcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcblxuICAgICAgICAgIGNvbnN0IHRyYWlsaW5nU3BhY2UgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MDBhMCcpXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGNoaXApXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRyYWlsaW5nU3BhY2UpXG5cbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoZmFsc2UpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGZhbHNlKVxuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0cmFpbGluZ1NwYWNlLCAxKVxuICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNraWxsTWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hpcCA9IGJ1aWxkQ2hpcEVsZW1lbnQobWVudGlvbilcbiAgICAgICAgICByZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAoY2hpcCwgbWVudGlvbilcbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gc3RhdGUudGV4dC50cmltKCkgPT09ICcnXG4gICAgICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGlzRW1wdHkpXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0U2xhc2hDb21tYW5kOiAoY29tbWFuZDogU2xhc2hDb21tYW5kQ2hpcERhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlwID0gYnVpbGRTbGFzaENoaXBFbGVtZW50KGNvbW1hbmQpXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwKGNoaXAsIGNvbW1hbmQpXG4gICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2VyaWFsaXplKClcbiAgICAgICAgICBvbklucHV0Py4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAgfSxcbiAgICAgICAgICAgIHNsYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICAgIGhhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIFtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyRWRpdG9yRG9tLFxuICAgICAgICBzZXJpYWxpemUsXG4gICAgICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwLFxuICAgICAgICBvbklucHV0LFxuICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24sXG4gICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSxcbiAgICAgICAgZW1pdElucHV0U3RhdGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBlZGl0b3JSZWYsXG4gICAgICBdXG4gICAgKVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgICBpZiAoc2tpcE5leHRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZW1pdElucHV0U3RhdGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVBhc3RlID0gKGU6IENsaXBib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZmlsZXMgPSBmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKGZpbGVzLmxlbmd0aCAmJiBvblBhc3RlRmlsZXMpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9uUGFzdGVGaWxlcyhmaWxlcylcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJylcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggJiYgb25QYXN0ZUZpbGVzICYmICF0ZXh0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVyblxuICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKVxuICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlVG9FbmQoKVxuICAgICAgaGFuZGxlSW5wdXQoKVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICBjb25zdCBwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSA9IGxvZ2ljYWxFbXB0eSAmJiBwbGFjZWhvbGRlclRydW5jYXRlZCAmJiB0cmltbWVkUGxhY2Vob2xkZXIgPyB0cmltbWVkUGxhY2Vob2xkZXIgOiAnJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkNoaXBHbG9iYWxTdHlsZXMgLz5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3BsYWNlaG9sZGVyVG9vbHRpcFRpdGxlfT5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxTQ01FRWRpdGFibGVcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAkbWF4SGVpZ2h0PXttYXhIZWlnaHR9XG4gICAgICAgICAgICAgIHN0eWxlPXttYXhIZWlnaHQgIT0gbnVsbCA/IHsgbWF4SGVpZ2h0IH0gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBkYXRhLWVtcHR5PXtTdHJpbmcobG9naWNhbEVtcHR5KX1cbiAgICAgICAgICAgICAgY29udGVudEVkaXRhYmxlPXshZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGRhdGEtZGlzYWJsZWQ9e1N0cmluZyghIWRpc2FibGVkKX1cbiAgICAgICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXG4gICAgICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICAgICAgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgb25JbnB1dD17aGFuZGxlSW5wdXR9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICBvblBhc3RlPXtoYW5kbGVQYXN0ZX1cbiAgICAgICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbkNvbnRleHRNZW50aW9uRWRpdG9yLmRpc3BsYXlOYW1lID0gJ0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsU0FFRUEsVUFBVSxFQUVWQyxXQUFXLEVBQ1hDLG1CQUFtQixFQUNuQkMsZUFBZSxFQUNmQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxrQkFBa0IsUUFBUSxtQ0FBbUM7QUFFdEUsU0FBU0MsZ0JBQWdCLFFBQVEsdUJBQXVCO0FBQ3hELFNBQVNDLDhCQUE4QixRQUFRLGlEQUFpRDtBQUNoRyxTQUFTQyxxQkFBcUIsUUFBOEIscUJBQXFCO0FBQ2pGLFNBQVNDLHFCQUFxQixRQUFRLCtCQUErQjtBQUNyRSxTQUFTQyw4QkFBOEIsRUFBRUMsMEJBQTBCLFFBQVEsZ0NBQWdDO0FBQzNHLFNBQVNDLFlBQVksUUFBUSwrQkFBK0I7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQWlENUQsT0FBTyxJQUFNQyxvQkFBb0IsZ0JBQUdyQixVQUFVLENBQzVDLFVBQUFzQixJQUFBLEVBQXFHQyxHQUFHLEVBQUs7RUFBQSxJQUFBQyxrQkFBQTtFQUFBLElBQTFHQyxXQUFXLEdBQUFILElBQUEsQ0FBWEcsV0FBVztJQUFFQyxRQUFRLEdBQUFKLElBQUEsQ0FBUkksUUFBUTtJQUFFQyxTQUFTLEdBQUFMLElBQUEsQ0FBVEssU0FBUztJQUFFQyxTQUFTLEdBQUFOLElBQUEsQ0FBVE0sU0FBUztJQUFFQyxPQUFPLEdBQUFQLElBQUEsQ0FBUE8sT0FBTztJQUFFQyxTQUFTLEdBQUFSLElBQUEsQ0FBVFEsU0FBUztJQUFFQyxPQUFPLEdBQUFULElBQUEsQ0FBUFMsT0FBTztJQUFFQyxNQUFNLEdBQUFWLElBQUEsQ0FBTlUsTUFBTTtJQUFFQyxZQUFZLEdBQUFYLElBQUEsQ0FBWlcsWUFBWTtFQUMvRixJQUFBQyxtQkFBQSxHQVlJM0Isa0JBQWtCLENBQUMsQ0FBQztJQVh0QjRCLFNBQVMsR0FBQUQsbUJBQUEsQ0FBVEMsU0FBUztJQUNUQyxhQUFhLEdBQUFGLG1CQUFBLENBQWJFLGFBQWE7SUFDYkMsc0JBQXNCLEdBQUFILG1CQUFBLENBQXRCRyxzQkFBc0I7SUFDdEJDLHNCQUFzQixHQUFBSixtQkFBQSxDQUF0Qkksc0JBQXNCO0lBQ3RCQyxrQkFBa0IsR0FBQUwsbUJBQUEsQ0FBbEJLLGtCQUFrQjtJQUNsQkMsMkJBQTJCLEdBQUFOLG1CQUFBLENBQTNCTSwyQkFBMkI7SUFDM0JDLGlCQUFpQixHQUFBUCxtQkFBQSxDQUFqQk8saUJBQWlCO0lBQ2pCQywyQkFBMkIsR0FBQVIsbUJBQUEsQ0FBM0JRLDJCQUEyQjtJQUMzQkMsU0FBUyxHQUFBVCxtQkFBQSxDQUFUUyxTQUFTO0lBQ0ZDLGNBQWMsR0FBQVYsbUJBQUEsQ0FBckJXLEtBQUs7SUFDTEMsS0FBSyxHQUFBWixtQkFBQSxDQUFMWSxLQUFLO0VBRVAsSUFBTUMsYUFBYSxHQUFHM0MsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNuQyxJQUFBNEMsU0FBQSxHQUF3RDNDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQTRDLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQWhFRyxvQkFBb0IsR0FBQUYsVUFBQTtJQUFFRyx1QkFBdUIsR0FBQUgsVUFBQTtFQUNwRCxJQUFBSSxVQUFBLEdBQXdDaEQsUUFBUSxDQUFDLElBQUksQ0FBQztJQUFBaUQsVUFBQSxHQUFBSixjQUFBLENBQUFHLFVBQUE7SUFBL0NFLFlBQVksR0FBQUQsVUFBQTtJQUFFRSxlQUFlLEdBQUFGLFVBQUE7RUFFcEMsSUFBTUcsd0JBQXdCLEdBQUd4RCxXQUFXLENBQUMsVUFBQ3lELE9BQWdCLEVBQUs7SUFDakUsSUFBSXZCLFNBQVMsQ0FBQ3dCLE9BQU8sRUFBRTtNQUNyQnhCLFNBQVMsQ0FBQ3dCLE9BQU8sQ0FBQ0MsWUFBWSxDQUFDLFlBQVksRUFBRUMsTUFBTSxDQUFDSCxPQUFPLENBQUMsQ0FBQztJQUMvRDtFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNSSx1QkFBdUIsR0FBRzdELFdBQVcsQ0FBQyxZQUFNO0lBQUEsSUFBQThELG1CQUFBO0lBQ2hELElBQU1DLE1BQU0sR0FBRzdCLFNBQVMsQ0FBQ3dCLE9BQU87SUFDaEMsSUFBSSxDQUFDSyxNQUFNLEVBQUU7O0lBRWI7SUFDQTtJQUNBO0lBQ0EsSUFBSSxFQUFBRCxtQkFBQSxHQUFBQyxNQUFNLENBQUNDLFdBQVcsY0FBQUYsbUJBQUEsdUJBQWxCQSxtQkFBQSxDQUFvQkcsSUFBSSxDQUFDLENBQUMsTUFBSyxFQUFFLEVBQUU7TUFDckNGLE1BQU0sQ0FBQ0csU0FBUyxHQUFHLEVBQUU7SUFDdkI7SUFFQSxJQUFNQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDRixTQUFTLEVBQUU7SUFDaEIsSUFBTUcsS0FBSyxHQUFHQyxRQUFRLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDRixLQUFLLENBQUNHLGtCQUFrQixDQUFDVixNQUFNLENBQUM7SUFDaENPLEtBQUssQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQztJQUNwQlAsU0FBUyxDQUFDUSxlQUFlLENBQUMsQ0FBQztJQUMzQlIsU0FBUyxDQUFDUyxRQUFRLENBQUNOLEtBQUssQ0FBQztFQUMzQixDQUFDLEVBQUUsQ0FBQ3BDLFNBQVMsQ0FBQyxDQUFDO0VBRWYsSUFBTTJDLDhCQUE4QixHQUFHN0UsV0FBVyxDQUFDLFlBQU07SUFBQSxJQUFBOEUsaUJBQUE7SUFDdkQsSUFBTUMsRUFBRSxHQUFHN0MsU0FBUyxDQUFDd0IsT0FBTztJQUM1QixJQUFNc0IsRUFBRSxJQUFBRixpQkFBQSxHQUFHdEQsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUV5QyxJQUFJLENBQUMsQ0FBQyxjQUFBYSxpQkFBQSxjQUFBQSxpQkFBQSxHQUFJLEVBQUU7SUFDcEMsSUFBTUcsc0JBQXNCLEdBQUd2QyxTQUFTLENBQUMsQ0FBQyxDQUFDd0MsSUFBSSxDQUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO0lBRTdELElBQUksQ0FBQ2MsRUFBRSxJQUFJLENBQUNDLEVBQUUsSUFBSSxDQUFDQyxzQkFBc0IsRUFBRTtNQUN6QzlCLHVCQUF1QixDQUFDLEtBQUssQ0FBQztNQUM5QjtJQUNGO0lBRUFBLHVCQUF1QixDQUFDeEMsOEJBQThCLENBQUNvRSxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pFLENBQUMsRUFBRSxDQUFDeEQsV0FBVyxFQUFFa0IsU0FBUyxDQUFDLENBQUM7RUFFNUJ4QyxlQUFlLENBQUMsWUFBTTtJQUNwQjJFLDhCQUE4QixDQUFDLENBQUM7SUFDaEMsSUFBTUUsRUFBRSxHQUFHN0MsU0FBUyxDQUFDd0IsT0FBTztJQUM1QixJQUFJLENBQUNxQixFQUFFLEVBQUU7TUFDUCxPQUFPSSxTQUFTO0lBQ2xCO0lBQ0EsSUFBTUMsRUFBRSxHQUFHLElBQUlDLGNBQWMsQ0FBQyxZQUFNO01BQ2xDQyxjQUFjLENBQUNULDhCQUE4QixDQUFDO0lBQ2hELENBQUMsQ0FBQztJQUNGTyxFQUFFLENBQUNHLE9BQU8sQ0FBQ1IsRUFBRSxDQUFDO0lBQ2QsT0FBTztNQUFBLE9BQU1LLEVBQUUsQ0FBQ0ksVUFBVSxDQUFDLENBQUM7SUFBQTtFQUM5QixDQUFDLEVBQUUsQ0FBQ2hFLFdBQVcsRUFBRUMsUUFBUSxFQUFFb0QsOEJBQThCLENBQUMsQ0FBQztFQUUzRCxJQUFNWSxjQUFjLEdBQUd6RixXQUFXLENBQUMsWUFBTTtJQUN2QyxJQUFNMEYsSUFBSSxHQUFHdkQsYUFBYSxDQUFDLENBQUM7SUFDNUIsSUFBTXdELFNBQVMsR0FBR3JELGtCQUFrQixDQUFDLENBQUM7SUFDdEMsSUFBTXNELFFBQVEsR0FBR3BELGlCQUFpQixDQUFDLENBQUM7SUFDcEMsSUFBSXFELEtBQUssR0FBR25ELFNBQVMsQ0FBQyxDQUFDO0lBQ3ZCLElBQU1lLE9BQU8sR0FBR29DLEtBQUssQ0FBQ1gsSUFBSSxDQUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO0lBQ3hDLElBQUlSLE9BQU8sRUFBRTtNQUNYSSx1QkFBdUIsQ0FBQyxDQUFDO01BQ3pCZ0MsS0FBSyxHQUFHO1FBQUVYLElBQUksRUFBRSxFQUFFO1FBQUVZLFFBQVEsRUFBRSxFQUFFO1FBQUVDLGFBQWEsRUFBRTtNQUFHLENBQUM7SUFDdkQ7SUFDQXZDLHdCQUF3QixDQUFDQyxPQUFPLENBQUM7SUFDakNGLGVBQWUsQ0FBQ0UsT0FBTyxDQUFDO0lBQ3hCN0IsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBQW9FLGFBQUEsQ0FBQUEsYUFBQSxLQUNGSCxLQUFLO01BQ1JJLE9BQU8sRUFBRTtRQUFFQyxNQUFNLEVBQUVSLElBQUksQ0FBQ1EsTUFBTTtRQUFFQyxLQUFLLEVBQUVULElBQUksQ0FBQ1MsS0FBSztRQUFFQyxXQUFXLEVBQUVWLElBQUksQ0FBQ1U7TUFBWSxDQUFDO01BQ2xGQyxZQUFZLEVBQUU7UUFBRUgsTUFBTSxFQUFFUCxTQUFTLENBQUNPLE1BQU07UUFBRUMsS0FBSyxFQUFFUixTQUFTLENBQUNRO01BQU0sQ0FBQztNQUNsRUcsV0FBVyxFQUFFO1FBQUVKLE1BQU0sRUFBRU4sUUFBUSxDQUFDTSxNQUFNO1FBQUVDLEtBQUssRUFBRVAsUUFBUSxDQUFDTztNQUFNO0lBQUMsRUFDaEUsQ0FBQztJQUNGYixjQUFjLENBQUNULDhCQUE4QixDQUFDO0VBQ2hELENBQUMsRUFBRSxDQUNEMUMsYUFBYSxFQUNiRyxrQkFBa0IsRUFDbEJFLGlCQUFpQixFQUNqQkUsU0FBUyxFQUNUbUIsdUJBQXVCLEVBQ3ZCTCx3QkFBd0IsRUFDeEI1QixPQUFPLEVBQ1BpRCw4QkFBOEIsQ0FDL0IsQ0FBQztFQUVGNUUsbUJBQW1CLENBQ2pCcUIsR0FBRyxFQUNIO0lBQUEsT0FBTztNQUNMdUIsS0FBSyxFQUFMQSxLQUFLO01BQ0xELEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFBLEVBQVE7UUFDWEQsY0FBYyxDQUFDLENBQUM7UUFDaEJhLHdCQUF3QixDQUFDLElBQUksQ0FBQztRQUM5QkQsZUFBZSxDQUFDLElBQUksQ0FBQztRQUNyQitCLGNBQWMsQ0FBQ1QsOEJBQThCLENBQUM7TUFDaEQsQ0FBQztNQUNEMEIsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUdyQixJQUFZLEVBQUs7UUFDOUIsSUFBTW5CLE1BQU0sR0FBRzdCLFNBQVMsQ0FBQ3dCLE9BQU87UUFDaEMsSUFBSSxDQUFDSyxNQUFNLEVBQUU7UUFDYixJQUFNeUMsS0FBSyxHQUFHdEIsSUFBSSxhQUFKQSxJQUFJLGNBQUpBLElBQUksR0FBSSxFQUFFO1FBQ3hCbkIsTUFBTSxDQUFDQyxXQUFXLEdBQUd3QyxLQUFLO1FBQzFCMUQsYUFBYSxDQUFDWSxPQUFPLEdBQUcsSUFBSTtRQUM1QixJQUFNbUMsS0FBSyxHQUFHbkQsU0FBUyxDQUFDLENBQUM7UUFDekIsSUFBTWUsT0FBTyxHQUFHb0MsS0FBSyxDQUFDWCxJQUFJLENBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDeEMsSUFBSVIsT0FBTyxFQUFFO1VBQ1hNLE1BQU0sQ0FBQ0csU0FBUyxHQUFHLEVBQUU7UUFDdkI7UUFDQVYsd0JBQXdCLENBQUNDLE9BQU8sQ0FBQztRQUNqQ0YsZUFBZSxDQUFDRSxPQUFPLENBQUM7UUFDeEI3QixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFBb0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZILEtBQUs7VUFDUkksT0FBTyxFQUFFO1lBQUVDLE1BQU0sRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRSxFQUFFO1lBQUVDLFdBQVcsRUFBRTtVQUFFLENBQUM7VUFDckRDLFlBQVksRUFBRTtZQUFFSCxNQUFNLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUU7VUFBRyxDQUFDO1VBQzFDRyxXQUFXLEVBQUU7WUFBRUosTUFBTSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFO1VBQUc7UUFBQyxFQUMxQyxDQUFDO1FBQ0YsSUFBTWhDLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxJQUFJRixTQUFTLElBQUlKLE1BQU0sQ0FBQzBDLFVBQVUsQ0FBQ0MsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUM3QyxJQUFNcEMsS0FBSyxHQUFHQyxRQUFRLENBQUNDLFdBQVcsQ0FBQyxDQUFDO1VBQ3BDRixLQUFLLENBQUNHLGtCQUFrQixDQUFDVixNQUFNLENBQUM7VUFDaENPLEtBQUssQ0FBQ0ksUUFBUSxDQUFDLEtBQUssQ0FBQztVQUNyQlAsU0FBUyxDQUFDUSxlQUFlLENBQUMsQ0FBQztVQUMzQlIsU0FBUyxDQUFDUyxRQUFRLENBQUNOLEtBQUssQ0FBQztRQUMzQjtRQUNBZ0IsY0FBYyxDQUFDLFlBQU07VUFDbkJ4QyxhQUFhLENBQUNZLE9BQU8sR0FBRyxLQUFLO1VBQzdCbUIsOEJBQThCLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7TUFDSixDQUFDO01BQ0Q4QixvQkFBb0IsRUFBRSxTQUF0QkEsb0JBQW9CQSxDQUFBLEVBQVE7UUFDMUIsSUFBTTVDLE1BQU0sR0FBRzdCLFNBQVMsQ0FBQ3dCLE9BQU87UUFDaEMsSUFBSSxDQUFDSyxNQUFNLElBQUl0QyxRQUFRLEVBQUU7UUFFekJvQixLQUFLLENBQUMsQ0FBQztRQUVQLElBQU1zQixTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDRixTQUFTLEVBQUU7UUFFaEIsSUFBSSxDQUFDQSxTQUFTLENBQUN5QyxVQUFVLElBQUksQ0FBQzdDLE1BQU0sQ0FBQzhDLFFBQVEsQ0FBQzFDLFNBQVMsQ0FBQ3lDLFVBQVUsQ0FBQyxFQUFFO1VBQ25FLElBQU1FLFFBQVEsR0FBR3ZDLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7VUFDdkNzQyxRQUFRLENBQUNyQyxrQkFBa0IsQ0FBQ1YsTUFBTSxDQUFDO1VBQ25DK0MsUUFBUSxDQUFDcEMsUUFBUSxDQUFDLEtBQUssQ0FBQztVQUN4QlAsU0FBUyxDQUFDUSxlQUFlLENBQUMsQ0FBQztVQUMzQlIsU0FBUyxDQUFDUyxRQUFRLENBQUNrQyxRQUFRLENBQUM7UUFDOUI7UUFFQSxJQUFNeEMsS0FBSyxHQUFHSCxTQUFTLENBQUM0QyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3JDekMsS0FBSyxDQUFDSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBRXBCLElBQUlzQyxNQUFNLEdBQUcsRUFBRTtRQUNmLElBQVFDLGNBQWMsR0FBa0IzQyxLQUFLLENBQXJDMkMsY0FBYztVQUFFQyxXQUFXLEdBQUs1QyxLQUFLLENBQXJCNEMsV0FBVztRQUNuQyxJQUFJRCxjQUFjLENBQUNFLFFBQVEsS0FBS0MsSUFBSSxDQUFDQyxTQUFTLEVBQUU7VUFDOUMsSUFBTUMsUUFBUSxHQUFHSixXQUFXLEdBQUcsQ0FBQyxHQUFJRCxjQUFjLENBQVVNLElBQUksQ0FBQ0MsTUFBTSxDQUFDTixXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtVQUM3RkYsTUFBTSxHQUFHcEcsMEJBQTBCLENBQUMwRyxRQUFRLENBQUM7UUFDL0M7UUFFQSxJQUFNRyxRQUFRLE1BQUFDLE1BQUEsQ0FBTVYsTUFBTSxNQUFHO1FBQzdCLElBQU1XLFFBQVEsR0FBR3BELFFBQVEsQ0FBQ3FELGNBQWMsQ0FBQ0gsUUFBUSxDQUFDO1FBQ2xEbkQsS0FBSyxDQUFDdUQsVUFBVSxDQUFDRixRQUFRLENBQUM7O1FBRTFCO1FBQ0E7UUFDQSxJQUFNRyxXQUFXLEdBQUdILFFBQVEsQ0FBQ0ksZUFBZTtRQUM1QyxJQUFJQyxTQUFTLEdBQUdMLFFBQVE7UUFDeEIsSUFBSU0sV0FBVyxHQUFHUixRQUFRLENBQUNmLE1BQU07UUFDakMsSUFBSU0sTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFBYyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRVgsUUFBUSxNQUFLQyxJQUFJLENBQUNDLFNBQVMsSUFBS1MsV0FBVyxDQUFVUCxJQUFJLENBQUNXLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUN6RyxJQUFNQyxRQUFRLEdBQUdMLFdBQW1CO1VBQ3BDRyxXQUFXLEdBQUdFLFFBQVEsQ0FBQ1osSUFBSSxDQUFDYixNQUFNLEdBQUdlLFFBQVEsQ0FBQ2YsTUFBTTtVQUNwRHlCLFFBQVEsQ0FBQ1osSUFBSSxJQUFJRSxRQUFRO1VBQ3pCRSxRQUFRLENBQUNTLE1BQU0sQ0FBQyxDQUFDO1VBQ2pCSixTQUFTLEdBQUdHLFFBQVE7UUFDdEI7O1FBRUE7UUFDQTtRQUNBN0QsS0FBSyxDQUFDK0QsUUFBUSxDQUFDTCxTQUFTLEVBQUVDLFdBQVcsQ0FBQztRQUN0QzNELEtBQUssQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQztRQUNwQlAsU0FBUyxDQUFDUSxlQUFlLENBQUMsQ0FBQztRQUMzQlIsU0FBUyxDQUFDUyxRQUFRLENBQUNOLEtBQUssQ0FBQztRQUV6Qm1CLGNBQWMsQ0FBQyxDQUFDO01BQ2xCLENBQUM7TUFDRDZDLGtCQUFrQixFQUFFLFNBQXBCQSxrQkFBa0JBLENBQUEsRUFBUTtRQUN4QixJQUFNdkUsTUFBTSxHQUFHN0IsU0FBUyxDQUFDd0IsT0FBTztRQUNoQyxJQUFJLENBQUNLLE1BQU0sSUFBSXRDLFFBQVEsRUFBRTtRQUV6Qm9CLEtBQUssQ0FBQyxDQUFDO1FBRVAsSUFBTXNCLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUNGLFNBQVMsRUFBRTtRQUVoQixJQUFJLENBQUNBLFNBQVMsQ0FBQ3lDLFVBQVUsSUFBSSxDQUFDN0MsTUFBTSxDQUFDOEMsUUFBUSxDQUFDMUMsU0FBUyxDQUFDeUMsVUFBVSxDQUFDLEVBQUU7VUFDbkUsSUFBTUUsUUFBUSxHQUFHdkMsUUFBUSxDQUFDQyxXQUFXLENBQUMsQ0FBQztVQUN2Q3NDLFFBQVEsQ0FBQ3JDLGtCQUFrQixDQUFDVixNQUFNLENBQUM7VUFDbkMrQyxRQUFRLENBQUNwQyxRQUFRLENBQUMsS0FBSyxDQUFDO1VBQ3hCUCxTQUFTLENBQUNRLGVBQWUsQ0FBQyxDQUFDO1VBQzNCUixTQUFTLENBQUNTLFFBQVEsQ0FBQ2tDLFFBQVEsQ0FBQztRQUM5QjtRQUVBLElBQU14QyxLQUFLLEdBQUdILFNBQVMsQ0FBQzRDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDckN6QyxLQUFLLENBQUNJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFcEIsSUFBSXNDLE1BQU0sR0FBRyxFQUFFO1FBQ2YsSUFBUUMsY0FBYyxHQUFrQjNDLEtBQUssQ0FBckMyQyxjQUFjO1VBQUVDLFdBQVcsR0FBSzVDLEtBQUssQ0FBckI0QyxXQUFXO1FBQ25DLElBQUlELGNBQWMsQ0FBQ0UsUUFBUSxLQUFLQyxJQUFJLENBQUNDLFNBQVMsRUFBRTtVQUM5QyxJQUFNQyxRQUFRLEdBQUdKLFdBQVcsR0FBRyxDQUFDLEdBQUlELGNBQWMsQ0FBVU0sSUFBSSxDQUFDQyxNQUFNLENBQUNOLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFO1VBQzdGRixNQUFNLEdBQUdwRywwQkFBMEIsQ0FBQzBHLFFBQVEsQ0FBQztRQUMvQztRQUVBLElBQU1HLFFBQVEsTUFBQUMsTUFBQSxDQUFNVixNQUFNLE1BQUc7UUFDN0IsSUFBTVcsUUFBUSxHQUFHcEQsUUFBUSxDQUFDcUQsY0FBYyxDQUFDSCxRQUFRLENBQUM7UUFDbERuRCxLQUFLLENBQUN1RCxVQUFVLENBQUNGLFFBQVEsQ0FBQzs7UUFFMUI7UUFDQXJELEtBQUssQ0FBQytELFFBQVEsQ0FBQ1YsUUFBUSxFQUFFRixRQUFRLENBQUNmLE1BQU0sQ0FBQztRQUN6Q3BDLEtBQUssQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQztRQUNwQlAsU0FBUyxDQUFDUSxlQUFlLENBQUMsQ0FBQztRQUMzQlIsU0FBUyxDQUFDUyxRQUFRLENBQUNOLEtBQUssQ0FBQztRQUV6Qm1CLGNBQWMsQ0FBQyxDQUFDO01BQ2xCLENBQUM7TUFDRDhDLGtCQUFrQixFQUFFLFNBQXBCQSxrQkFBa0JBLENBQUEsRUFBUTtRQUN4QixJQUFNeEUsTUFBTSxHQUFHN0IsU0FBUyxDQUFDd0IsT0FBTztRQUNoQyxJQUFJLENBQUNLLE1BQU0sSUFBSXRDLFFBQVEsRUFBRTtRQUV6Qm9CLEtBQUssQ0FBQyxDQUFDO1FBRVAsSUFBTXNCLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUNGLFNBQVMsRUFBRTtRQUVoQixJQUFJLENBQUNBLFNBQVMsQ0FBQ3lDLFVBQVUsSUFBSSxDQUFDN0MsTUFBTSxDQUFDOEMsUUFBUSxDQUFDMUMsU0FBUyxDQUFDeUMsVUFBVSxDQUFDLEVBQUU7VUFDbkUsSUFBTUUsUUFBUSxHQUFHdkMsUUFBUSxDQUFDQyxXQUFXLENBQUMsQ0FBQztVQUN2Q3NDLFFBQVEsQ0FBQ3JDLGtCQUFrQixDQUFDVixNQUFNLENBQUM7VUFDbkMrQyxRQUFRLENBQUNwQyxRQUFRLENBQUMsS0FBSyxDQUFDO1VBQ3hCUCxTQUFTLENBQUNRLGVBQWUsQ0FBQyxDQUFDO1VBQzNCUixTQUFTLENBQUNTLFFBQVEsQ0FBQ2tDLFFBQVEsQ0FBQztRQUM5QjtRQUVBLElBQU14QyxLQUFLLEdBQUdILFNBQVMsQ0FBQzRDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDckN6QyxLQUFLLENBQUNJLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFcEIsSUFBSXNDLE1BQU0sR0FBRyxFQUFFO1FBQ2YsSUFBUUMsY0FBYyxHQUFrQjNDLEtBQUssQ0FBckMyQyxjQUFjO1VBQUVDLFdBQVcsR0FBSzVDLEtBQUssQ0FBckI0QyxXQUFXO1FBQ25DLElBQUlELGNBQWMsQ0FBQ0UsUUFBUSxLQUFLQyxJQUFJLENBQUNDLFNBQVMsRUFBRTtVQUM5QyxJQUFNQyxRQUFRLEdBQUdKLFdBQVcsR0FBRyxDQUFDLEdBQUlELGNBQWMsQ0FBVU0sSUFBSSxDQUFDQyxNQUFNLENBQUNOLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFO1VBQzdGRixNQUFNLEdBQUdwRywwQkFBMEIsQ0FBQzBHLFFBQVEsQ0FBQztRQUMvQztRQUVBLElBQU1HLFFBQVEsTUFBQUMsTUFBQSxDQUFNVixNQUFNLE1BQUc7UUFDN0IsSUFBTVcsUUFBUSxHQUFHcEQsUUFBUSxDQUFDcUQsY0FBYyxDQUFDSCxRQUFRLENBQUM7UUFDbERuRCxLQUFLLENBQUN1RCxVQUFVLENBQUNGLFFBQVEsQ0FBQztRQUUxQnJELEtBQUssQ0FBQytELFFBQVEsQ0FBQ1YsUUFBUSxFQUFFRixRQUFRLENBQUNmLE1BQU0sQ0FBQztRQUN6Q3BDLEtBQUssQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQztRQUNwQlAsU0FBUyxDQUFDUSxlQUFlLENBQUMsQ0FBQztRQUMzQlIsU0FBUyxDQUFDUyxRQUFRLENBQUNOLEtBQUssQ0FBQztRQUV6Qm1CLGNBQWMsQ0FBQyxDQUFDO01BQ2xCLENBQUM7TUFDRC9DLFNBQVMsRUFBVEEsU0FBUztNQUNUTCxzQkFBc0IsRUFBdEJBLHNCQUFzQjtNQUN0Qm1HLGtCQUFrQixFQUFFLFNBQXBCQSxrQkFBa0JBLENBQUEsRUFBUTtRQUFBLElBQUFDLHFCQUFBLEVBQUFDLG9CQUFBO1FBQ3hCLElBQU0zRSxNQUFNLEdBQUc3QixTQUFTLENBQUN3QixPQUFPO1FBQ2hDLElBQUksQ0FBQ0ssTUFBTSxFQUFFO1VBQ1gsT0FBTyxLQUFLO1FBQ2Q7UUFFQSxJQUFNbUIsSUFBSSxJQUFBdUQscUJBQUEsSUFBQUMsb0JBQUEsR0FBRzNFLE1BQU0sQ0FBQ0MsV0FBVyxjQUFBMEUsb0JBQUEsdUJBQWxCQSxvQkFBQSxDQUFvQnpFLElBQUksQ0FBQyxDQUFDLGNBQUF3RSxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEVBQUU7UUFDN0MsSUFBSSxDQUFDdkQsSUFBSSxFQUFFO1VBQ1QsT0FBTyxLQUFLO1FBQ2Q7UUFFQSxJQUFNeUQsTUFBTSxHQUFHdkUsTUFBTSxDQUFDd0UsZ0JBQWdCLENBQUM3RSxNQUFNLENBQUM7UUFDOUMsSUFBTThFLFVBQVUsR0FBR0MsVUFBVSxDQUFDSCxNQUFNLENBQUNFLFVBQVUsQ0FBQyxJQUFJLEVBQUU7UUFDdEQsSUFBTUUsWUFBWSxHQUFHaEYsTUFBTSxDQUFDaUYscUJBQXFCLENBQUMsQ0FBQyxDQUFDQyxNQUFNO1FBQzFELElBQU1DLFdBQVcsR0FBR0gsWUFBWSxHQUFHRixVQUFVLEdBQUcsR0FBRztRQUVuRCxPQUFPSyxXQUFXO01BQ3BCLENBQUM7TUFDREMsbUJBQW1CLEVBQUUsU0FBckJBLG1CQUFtQkEsQ0FBQTtRQUFBLElBQUFDLHFCQUFBLEVBQUFDLGtCQUFBO1FBQUEsUUFBQUQscUJBQUEsSUFBQUMsa0JBQUEsR0FBUW5ILFNBQVMsQ0FBQ3dCLE9BQU8sY0FBQTJGLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUJMLHFCQUFxQixDQUFDLENBQUMsY0FBQUkscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxJQUFJO01BQUE7TUFDN0VFLGFBQWEsRUFBRSxTQUFmQSxhQUFhQSxDQUFHQyxPQUF1QixFQUFLO1FBQzFDLElBQU1DLElBQUksR0FBR2pKLGdCQUFnQixDQUFDZ0osT0FBTyxDQUFDO1FBQ3RDbkgsc0JBQXNCLENBQUNvSCxJQUFJLEVBQUVELE9BQU8sQ0FBQztRQUNyQ3pHLGFBQWEsQ0FBQ1ksT0FBTyxHQUFHLElBQUk7UUFDNUIsSUFBTW1DLEtBQUssR0FBR25ELFNBQVMsQ0FBQyxDQUFDO1FBQ3pCZCxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFBb0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZILEtBQUs7VUFDUkksT0FBTyxFQUFFO1lBQUVDLE1BQU0sRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRSxFQUFFO1lBQUVDLFdBQVcsRUFBRTtVQUFFLENBQUM7VUFDckRDLFlBQVksRUFBRTtZQUFFSCxNQUFNLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUU7VUFBRyxDQUFDO1VBQzFDRyxXQUFXLEVBQUU7WUFBRUosTUFBTSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFO1VBQUc7UUFBQyxFQUMxQyxDQUFDO1FBQ0YsSUFBTTFDLE9BQU8sR0FBR29DLEtBQUssQ0FBQ1gsSUFBSSxDQUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3hDVCx3QkFBd0IsQ0FBQ0MsT0FBTyxDQUFDO1FBQ2pDRixlQUFlLENBQUNFLE9BQU8sQ0FBQztRQUN4QjZCLGNBQWMsQ0FBQyxZQUFNO1VBQ25CO1VBQ0F4QyxhQUFhLENBQUNZLE9BQU8sR0FBRyxLQUFLO1VBQzdCbUIsOEJBQThCLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7TUFDSixDQUFDO01BQ0Q0RSxrQkFBa0IsRUFBRSxTQUFwQkEsa0JBQWtCQSxDQUFHRixPQUF1QixFQUFLO1FBQy9DLElBQU14RixNQUFNLEdBQUc3QixTQUFTLENBQUN3QixPQUFPO1FBQ2hDLElBQUksQ0FBQ0ssTUFBTSxFQUFFO1FBRWIsSUFBTXlGLElBQUksR0FBR2pKLGdCQUFnQixDQUFDZ0osT0FBTyxDQUFDO1FBQ3RDQyxJQUFJLENBQUM3RixZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQztRQUN6QzZGLElBQUksQ0FBQzdGLFlBQVksQ0FBQyxpQkFBaUIsRUFBRUMsTUFBTSxDQUFDMkYsT0FBTyxDQUFDRyxFQUFFLENBQUMsQ0FBQztRQUN4REYsSUFBSSxDQUFDN0YsWUFBWSxDQUFDLG1CQUFtQixFQUFFNEYsT0FBTyxDQUFDSSxJQUFJLENBQUM7UUFDcERILElBQUksQ0FBQzdGLFlBQVksQ0FBQyxvQkFBb0IsRUFBRTRGLE9BQU8sQ0FBQ0ssS0FBSyxDQUFDO1FBQ3RESixJQUFJLENBQUM3RixZQUFZLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1FBRTdDLElBQU1rRyxhQUFhLEdBQUd0RixRQUFRLENBQUNxRCxjQUFjLENBQUMsTUFBUSxDQUFDO1FBQ3ZEN0QsTUFBTSxDQUFDK0YsV0FBVyxDQUFDTixJQUFJLENBQUM7UUFDeEJ6RixNQUFNLENBQUMrRixXQUFXLENBQUNELGFBQWEsQ0FBQztRQUVqQy9HLGFBQWEsQ0FBQ1ksT0FBTyxHQUFHLElBQUk7UUFDNUIsSUFBTW1DLEtBQUssR0FBR25ELFNBQVMsQ0FBQyxDQUFDO1FBQ3pCZCxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFBb0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZILEtBQUs7VUFDUkksT0FBTyxFQUFFO1lBQUVDLE1BQU0sRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRSxFQUFFO1lBQUVDLFdBQVcsRUFBRTtVQUFFLENBQUM7VUFDckRDLFlBQVksRUFBRTtZQUFFSCxNQUFNLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUU7VUFBRyxDQUFDO1VBQzFDRyxXQUFXLEVBQUU7WUFBRUosTUFBTSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFO1VBQUc7UUFBQyxFQUMxQyxDQUFDO1FBQ0YzQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7UUFDL0JELGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFFdEIsSUFBTVksU0FBUyxHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLElBQUlGLFNBQVMsRUFBRTtVQUNiLElBQU1HLEtBQUssR0FBR0MsUUFBUSxDQUFDQyxXQUFXLENBQUMsQ0FBQztVQUNwQ0YsS0FBSyxDQUFDK0QsUUFBUSxDQUFDd0IsYUFBYSxFQUFFLENBQUMsQ0FBQztVQUNoQ3ZGLEtBQUssQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQztVQUNwQlAsU0FBUyxDQUFDUSxlQUFlLENBQUMsQ0FBQztVQUMzQlIsU0FBUyxDQUFDUyxRQUFRLENBQUNOLEtBQUssQ0FBQztRQUMzQjtRQUVBZ0IsY0FBYyxDQUFDLFlBQU07VUFDbkJ4QyxhQUFhLENBQUNZLE9BQU8sR0FBRyxLQUFLO1VBQzdCbUIsOEJBQThCLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7TUFDSixDQUFDO01BQ0RrRixrQkFBa0IsRUFBRSxTQUFwQkEsa0JBQWtCQSxDQUFHUixPQUF1QixFQUFLO1FBQy9DLElBQU1DLElBQUksR0FBR2pKLGdCQUFnQixDQUFDZ0osT0FBTyxDQUFDO1FBQ3RDOUcsMkJBQTJCLENBQUMrRyxJQUFJLEVBQUVELE9BQU8sQ0FBQztRQUMxQ3pHLGFBQWEsQ0FBQ1ksT0FBTyxHQUFHLElBQUk7UUFDNUIsSUFBTW1DLEtBQUssR0FBR25ELFNBQVMsQ0FBQyxDQUFDO1FBQ3pCZCxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFBb0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZILEtBQUs7VUFDUkksT0FBTyxFQUFFO1lBQUVDLE1BQU0sRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRSxFQUFFO1lBQUVDLFdBQVcsRUFBRTtVQUFFLENBQUM7VUFDckRDLFlBQVksRUFBRTtZQUFFSCxNQUFNLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUU7VUFBRyxDQUFDO1VBQzFDRyxXQUFXLEVBQUU7WUFBRUosTUFBTSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFO1VBQUc7UUFBQyxFQUMxQyxDQUFDO1FBQ0YsSUFBTTFDLE9BQU8sR0FBR29DLEtBQUssQ0FBQ1gsSUFBSSxDQUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3hDVCx3QkFBd0IsQ0FBQ0MsT0FBTyxDQUFDO1FBQ2pDRixlQUFlLENBQUNFLE9BQU8sQ0FBQztRQUN4QjZCLGNBQWMsQ0FBQyxZQUFNO1VBQ25CeEMsYUFBYSxDQUFDWSxPQUFPLEdBQUcsS0FBSztVQUM3Qm1CLDhCQUE4QixDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO01BQ0osQ0FBQztNQUNEbUYsa0JBQWtCLEVBQUUsU0FBcEJBLGtCQUFrQkEsQ0FBR0MsT0FBNkIsRUFBSztRQUNyRCxJQUFNVCxJQUFJLEdBQUcvSSxxQkFBcUIsQ0FBQ3dKLE9BQU8sQ0FBQztRQUMzQzFILDJCQUEyQixDQUFDaUgsSUFBSSxFQUFFUyxPQUFPLENBQUM7UUFDMUNuSCxhQUFhLENBQUNZLE9BQU8sR0FBRyxJQUFJO1FBQzVCLElBQU1tQyxLQUFLLEdBQUduRCxTQUFTLENBQUMsQ0FBQztRQUN6QmQsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBQW9FLGFBQUEsQ0FBQUEsYUFBQSxLQUNGSCxLQUFLO1VBQ1JJLE9BQU8sRUFBRTtZQUFFQyxNQUFNLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUUsRUFBRTtZQUFFQyxXQUFXLEVBQUU7VUFBRSxDQUFDO1VBQ3JEQyxZQUFZLEVBQUU7WUFBRUgsTUFBTSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFO1VBQUcsQ0FBQztVQUMxQ0csV0FBVyxFQUFFO1lBQUVKLE1BQU0sRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRTtVQUFHO1FBQUMsRUFDMUMsQ0FBQztRQUNGLElBQU0xQyxPQUFPLEdBQUdvQyxLQUFLLENBQUNYLElBQUksQ0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtRQUN4Q1Qsd0JBQXdCLENBQUNDLE9BQU8sQ0FBQztRQUNqQ0YsZUFBZSxDQUFDRSxPQUFPLENBQUM7UUFDeEI2QixjQUFjLENBQUMsWUFBTTtVQUNuQnhDLGFBQWEsQ0FBQ1ksT0FBTyxHQUFHLEtBQUs7VUFDN0JtQiw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztNQUNKO0lBQ0YsQ0FBQztFQUFBLENBQUMsRUFDRixDQUNFaEMsS0FBSyxFQUNMRixjQUFjLEVBQ2RELFNBQVMsRUFDVEwsc0JBQXNCLEVBQ3RCRCxzQkFBc0IsRUFDdEJHLDJCQUEyQixFQUMzQkUsMkJBQTJCLEVBQzNCYixPQUFPLEVBQ1BpRCw4QkFBOEIsRUFDOUJyQix3QkFBd0IsRUFDeEJpQyxjQUFjLEVBQ2RoRSxRQUFRLEVBQ1JTLFNBQVMsQ0FFYixDQUFDO0VBRUQsSUFBTWdJLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQVM7SUFDeEIsSUFBSXBILGFBQWEsQ0FBQ1ksT0FBTyxFQUFFO01BQ3pCWixhQUFhLENBQUNZLE9BQU8sR0FBRyxLQUFLO01BQzdCO0lBQ0Y7SUFDQStCLGNBQWMsQ0FBQyxDQUFDO0VBQ2xCLENBQUM7RUFFRCxJQUFNMEUsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlDLENBQWlDLEVBQUs7SUFDekQsSUFBTUMsS0FBSyxHQUFHM0oscUJBQXFCLENBQUMwSixDQUFDLENBQUNFLGFBQWEsQ0FBQztJQUNwRCxJQUFJRCxLQUFLLENBQUMzRCxNQUFNLElBQUkxRSxZQUFZLEVBQUU7TUFDaENvSSxDQUFDLENBQUNHLGNBQWMsQ0FBQyxDQUFDO01BQ2xCdkksWUFBWSxDQUFDcUksS0FBSyxDQUFDO0lBQ3JCO0lBRUEsSUFBTW5GLElBQUksR0FBR2tGLENBQUMsQ0FBQ0UsYUFBYSxDQUFDRSxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ2xELElBQUlILEtBQUssQ0FBQzNELE1BQU0sSUFBSTFFLFlBQVksSUFBSSxDQUFDa0QsSUFBSSxFQUFFO01BQ3pDO0lBQ0Y7SUFFQWtGLENBQUMsQ0FBQ0csY0FBYyxDQUFDLENBQUM7SUFDbEIsSUFBTXBHLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUNGLFNBQVMsSUFBSUEsU0FBUyxDQUFDc0csVUFBVSxLQUFLLENBQUMsRUFBRTtJQUM5Q3RHLFNBQVMsQ0FBQ3VHLGtCQUFrQixDQUFDLENBQUM7SUFDOUJ2RyxTQUFTLENBQUM0QyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNjLFVBQVUsQ0FBQ3RELFFBQVEsQ0FBQ3FELGNBQWMsQ0FBQzFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFZixTQUFTLENBQUN3RyxhQUFhLENBQUMsQ0FBQztJQUN6QlQsV0FBVyxDQUFDLENBQUM7RUFDZixDQUFDO0VBRUQsSUFBTVUsa0JBQWtCLElBQUFySixrQkFBQSxHQUFHQyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXlDLElBQUksQ0FBQyxDQUFDLGNBQUExQyxrQkFBQSxjQUFBQSxrQkFBQSxHQUFJLEVBQUU7RUFDcEQsSUFBTXNKLHVCQUF1QixHQUFHdkgsWUFBWSxJQUFJSixvQkFBb0IsSUFBSTBILGtCQUFrQixHQUFHQSxrQkFBa0IsR0FBRyxFQUFFO0VBRXBILG9CQUNFekosS0FBQSxDQUFBRixTQUFBO0lBQUE2SixRQUFBLGdCQUNFL0osSUFBQSxDQUFDUCw4QkFBOEIsSUFBRSxDQUFDLGVBQ2xDTyxJQUFBLENBQUNWLE9BQU87TUFBQzBLLEtBQUssRUFBRUYsdUJBQXdCO01BQUFDLFFBQUEsZUFDdEMvSixJQUFBO1FBQU1pSyxLQUFLLEVBQUU7VUFBRUMsT0FBTyxFQUFFLE9BQU87VUFBRUMsS0FBSyxFQUFFLE1BQU07VUFBRUMsUUFBUSxFQUFFO1FBQUUsQ0FBRTtRQUFBTCxRQUFBLGVBQzVEL0osSUFBQSxDQUFDRixZQUFZO1VBQ1hTLEdBQUcsRUFBRVksU0FBVTtVQUNmUixTQUFTLEVBQUVBLFNBQVU7VUFDckIwSixVQUFVLEVBQUV6SixTQUFVO1VBQ3RCcUosS0FBSyxFQUFFckosU0FBUyxJQUFJLElBQUksR0FBRztZQUFFQSxTQUFTLEVBQVRBO1VBQVUsQ0FBQyxHQUFHd0QsU0FBVTtVQUNyRCxvQkFBa0IzRCxXQUFZO1VBQzlCLGNBQVlvQyxNQUFNLENBQUNOLFlBQVksQ0FBRTtVQUNqQytILGVBQWUsRUFBRSxDQUFDNUosUUFBUztVQUMzQixpQkFBZW1DLE1BQU0sQ0FBQyxDQUFDLENBQUNuQyxRQUFRLENBQUU7VUFDbEM2Siw4QkFBOEI7VUFDOUJDLElBQUksRUFBQyxTQUFTO1VBQ2Qsa0JBQWUsTUFBTTtVQUNyQjNKLE9BQU8sRUFBRXNJLFdBQVk7VUFDckJySSxTQUFTLEVBQUVBLFNBQVU7VUFDckIySixPQUFPLEVBQUVyQixXQUFZO1VBQ3JCckksT0FBTyxFQUFFQSxPQUFRO1VBQ2pCQyxNQUFNLEVBQUVBO1FBQU8sQ0FDaEI7TUFBQyxDQUNFO0lBQUMsQ0FDQSxDQUFDO0VBQUEsQ0FDVixDQUFDO0FBRVAsQ0FDRixDQUFDO0FBRURYLG9CQUFvQixDQUFDcUssV0FBVyxHQUFHLHNCQUFzQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { createRef } from 'react';
|
|
2
|
+
import { act, fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
|
|
3
|
+
import { ContextMentionEditor } from './ContextMentionEditor';
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
jest.mock('../ContextMentionChip', function () {
|
|
6
|
+
return {
|
|
7
|
+
buildChipElement: function buildChipElement(mention) {
|
|
8
|
+
var chip = document.createElement('span');
|
|
9
|
+
chip.dataset.mention = 'true';
|
|
10
|
+
chip.dataset.mentionId = String(mention.id);
|
|
11
|
+
chip.dataset.mentionType = mention.type;
|
|
12
|
+
chip.dataset.mentionLabel = mention.label;
|
|
13
|
+
return chip;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
jest.mock('../SlashCommandChip', function () {
|
|
18
|
+
return {
|
|
19
|
+
buildSlashChipElement: function buildSlashChipElement(command) {
|
|
20
|
+
var chip = document.createElement('span');
|
|
21
|
+
chip.dataset.slashCommand = 'true';
|
|
22
|
+
chip.dataset.slashId = command.id;
|
|
23
|
+
chip.dataset.slashLabel = command.label;
|
|
24
|
+
return chip;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
describe('ContextMentionEditor', function () {
|
|
29
|
+
it('renders an editable textbox with placeholder', function () {
|
|
30
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
31
|
+
placeholder: "Escrib\xED algo"
|
|
32
|
+
}));
|
|
33
|
+
var editor = screen.getByRole('textbox');
|
|
34
|
+
expect(editor).toHaveAttribute('data-placeholder', 'Escribí algo');
|
|
35
|
+
expect(editor).toHaveAttribute('contenteditable', 'true');
|
|
36
|
+
expect(editor).toHaveAttribute('data-empty', 'true');
|
|
37
|
+
});
|
|
38
|
+
it('disables editing when disabled', function () {
|
|
39
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
40
|
+
disabled: true,
|
|
41
|
+
placeholder: "Off"
|
|
42
|
+
}));
|
|
43
|
+
expect(screen.getByRole('textbox')).toHaveAttribute('contenteditable', 'false');
|
|
44
|
+
});
|
|
45
|
+
it('clears content through the ref', function () {
|
|
46
|
+
var _ref$current2, _ref$current4;
|
|
47
|
+
var ref = /*#__PURE__*/createRef();
|
|
48
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
49
|
+
ref: ref
|
|
50
|
+
}));
|
|
51
|
+
act(function () {
|
|
52
|
+
var _ref$current;
|
|
53
|
+
(_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.setPlainText('hola');
|
|
54
|
+
});
|
|
55
|
+
expect((_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.serialize().text).toBe('hola');
|
|
56
|
+
act(function () {
|
|
57
|
+
var _ref$current3;
|
|
58
|
+
(_ref$current3 = ref.current) === null || _ref$current3 === void 0 || _ref$current3.clear();
|
|
59
|
+
});
|
|
60
|
+
expect((_ref$current4 = ref.current) === null || _ref$current4 === void 0 ? void 0 : _ref$current4.serialize().text).toBe('');
|
|
61
|
+
});
|
|
62
|
+
it('calls onPasteFiles for clipboard files', function () {
|
|
63
|
+
var onPasteFiles = jest.fn();
|
|
64
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
65
|
+
onPasteFiles: onPasteFiles
|
|
66
|
+
}));
|
|
67
|
+
var file = new File(['x'], 'img.png', {
|
|
68
|
+
type: 'image/png'
|
|
69
|
+
});
|
|
70
|
+
fireEvent.paste(screen.getByRole('textbox'), {
|
|
71
|
+
clipboardData: {
|
|
72
|
+
getData: function getData() {
|
|
73
|
+
return '';
|
|
74
|
+
},
|
|
75
|
+
files: [file]
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
expect(onPasteFiles).toHaveBeenCalledWith([file]);
|
|
79
|
+
});
|
|
80
|
+
it('notifies onInput after typing plain text', function () {
|
|
81
|
+
var onInput = jest.fn();
|
|
82
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
83
|
+
onInput: onInput
|
|
84
|
+
}));
|
|
85
|
+
var editor = screen.getByRole('textbox');
|
|
86
|
+
act(function () {
|
|
87
|
+
editor.textContent = 'hola';
|
|
88
|
+
fireEvent.input(editor);
|
|
89
|
+
});
|
|
90
|
+
expect(onInput).toHaveBeenCalledWith(expect.objectContaining({
|
|
91
|
+
text: 'hola',
|
|
92
|
+
trigger: expect.objectContaining({
|
|
93
|
+
active: false
|
|
94
|
+
})
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
it('inserts mention triggers through the ref', function () {
|
|
98
|
+
var ref = /*#__PURE__*/createRef();
|
|
99
|
+
var onInput = jest.fn();
|
|
100
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
101
|
+
ref: ref,
|
|
102
|
+
onInput: onInput
|
|
103
|
+
}));
|
|
104
|
+
act(function () {
|
|
105
|
+
var _ref$current5;
|
|
106
|
+
(_ref$current5 = ref.current) === null || _ref$current5 === void 0 || _ref$current5.insertMentionTrigger();
|
|
107
|
+
});
|
|
108
|
+
expect(onInput).toHaveBeenCalledWith(expect.objectContaining({
|
|
109
|
+
trigger: expect.objectContaining({
|
|
110
|
+
active: true,
|
|
111
|
+
query: ''
|
|
112
|
+
})
|
|
113
|
+
}));
|
|
114
|
+
});
|
|
115
|
+
it('inserts slash and skill triggers through the ref', function () {
|
|
116
|
+
var ref = /*#__PURE__*/createRef();
|
|
117
|
+
var onInput = jest.fn();
|
|
118
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
119
|
+
ref: ref,
|
|
120
|
+
onInput: onInput
|
|
121
|
+
}));
|
|
122
|
+
act(function () {
|
|
123
|
+
var _ref$current6;
|
|
124
|
+
(_ref$current6 = ref.current) === null || _ref$current6 === void 0 || _ref$current6.insertSlashTrigger();
|
|
125
|
+
});
|
|
126
|
+
expect(onInput).toHaveBeenCalledWith(expect.objectContaining({
|
|
127
|
+
slashTrigger: expect.objectContaining({
|
|
128
|
+
active: true,
|
|
129
|
+
query: ''
|
|
130
|
+
})
|
|
131
|
+
}));
|
|
132
|
+
onInput.mockClear();
|
|
133
|
+
act(function () {
|
|
134
|
+
var _ref$current7;
|
|
135
|
+
(_ref$current7 = ref.current) === null || _ref$current7 === void 0 || _ref$current7.insertSkillTrigger();
|
|
136
|
+
});
|
|
137
|
+
expect(onInput).toHaveBeenCalledWith(expect.objectContaining({
|
|
138
|
+
hashTrigger: expect.objectContaining({
|
|
139
|
+
active: true,
|
|
140
|
+
query: ''
|
|
141
|
+
})
|
|
142
|
+
}));
|
|
143
|
+
});
|
|
144
|
+
it('replaces an active @ query with a mention chip', function () {
|
|
145
|
+
var _ref$current1;
|
|
146
|
+
var ref = /*#__PURE__*/createRef();
|
|
147
|
+
var onInput = jest.fn();
|
|
148
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
149
|
+
ref: ref,
|
|
150
|
+
onInput: onInput
|
|
151
|
+
}));
|
|
152
|
+
act(function () {
|
|
153
|
+
var _ref$current8, _ref$current9;
|
|
154
|
+
(_ref$current8 = ref.current) === null || _ref$current8 === void 0 || _ref$current8.setPlainText('Hola @ana');
|
|
155
|
+
var editor = (_ref$current9 = ref.current) === null || _ref$current9 === void 0 ? void 0 : _ref$current9.serialize();
|
|
156
|
+
expect(editor === null || editor === void 0 ? void 0 : editor.text).toContain('@ana');
|
|
157
|
+
});
|
|
158
|
+
act(function () {
|
|
159
|
+
var editor = screen.getByRole('textbox');
|
|
160
|
+
var textNode = editor.firstChild;
|
|
161
|
+
var range = document.createRange();
|
|
162
|
+
range.setStart(textNode, textNode.data.length);
|
|
163
|
+
range.collapse(true);
|
|
164
|
+
var selection = window.getSelection();
|
|
165
|
+
selection === null || selection === void 0 || selection.removeAllRanges();
|
|
166
|
+
selection === null || selection === void 0 || selection.addRange(range);
|
|
167
|
+
});
|
|
168
|
+
act(function () {
|
|
169
|
+
var _ref$current0;
|
|
170
|
+
(_ref$current0 = ref.current) === null || _ref$current0 === void 0 || _ref$current0.insertMention({
|
|
171
|
+
id: 'u1',
|
|
172
|
+
type: 'user',
|
|
173
|
+
label: 'Ana'
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
expect((_ref$current1 = ref.current) === null || _ref$current1 === void 0 ? void 0 : _ref$current1.serialize()).toMatchObject({
|
|
177
|
+
text: expect.stringContaining('[[mention:user:u1|Ana]]'),
|
|
178
|
+
mentions: [{
|
|
179
|
+
id: 'u1',
|
|
180
|
+
type: 'user',
|
|
181
|
+
label: 'Ana'
|
|
182
|
+
}]
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
it('appends a mention chip at the end of the editor', function () {
|
|
186
|
+
var _ref$current11;
|
|
187
|
+
var ref = /*#__PURE__*/createRef();
|
|
188
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
189
|
+
ref: ref
|
|
190
|
+
}));
|
|
191
|
+
act(function () {
|
|
192
|
+
var _ref$current10;
|
|
193
|
+
(_ref$current10 = ref.current) === null || _ref$current10 === void 0 || _ref$current10.appendMentionAtEnd({
|
|
194
|
+
id: 'p1',
|
|
195
|
+
type: 'project',
|
|
196
|
+
label: 'Alpha'
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
expect((_ref$current11 = ref.current) === null || _ref$current11 === void 0 ? void 0 : _ref$current11.serialize()).toMatchObject({
|
|
200
|
+
mentions: [{
|
|
201
|
+
id: 'p1',
|
|
202
|
+
type: 'project',
|
|
203
|
+
label: 'Alpha'
|
|
204
|
+
}]
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
it('forwards focus and blur callbacks', function () {
|
|
208
|
+
var onFocus = jest.fn();
|
|
209
|
+
var onBlur = jest.fn();
|
|
210
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
211
|
+
onFocus: onFocus,
|
|
212
|
+
onBlur: onBlur
|
|
213
|
+
}));
|
|
214
|
+
var editor = screen.getByRole('textbox');
|
|
215
|
+
fireEvent.focus(editor);
|
|
216
|
+
fireEvent.blur(editor);
|
|
217
|
+
expect(onFocus).toHaveBeenCalled();
|
|
218
|
+
expect(onBlur).toHaveBeenCalled();
|
|
219
|
+
});
|
|
220
|
+
it('forwards keydown to the consumer', function () {
|
|
221
|
+
var onKeyDown = jest.fn();
|
|
222
|
+
renderWithProviders(/*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
223
|
+
onKeyDown: onKeyDown
|
|
224
|
+
}));
|
|
225
|
+
fireEvent.keyDown(screen.getByRole('textbox'), {
|
|
226
|
+
key: 'Enter'
|
|
227
|
+
});
|
|
228
|
+
expect(onKeyDown).toHaveBeenCalled();
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZWYiLCJhY3QiLCJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiQ29udGV4dE1lbnRpb25FZGl0b3IiLCJqc3giLCJfanN4IiwiamVzdCIsIm1vY2siLCJidWlsZENoaXBFbGVtZW50IiwibWVudGlvbiIsImNoaXAiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJkYXRhc2V0IiwibWVudGlvbklkIiwiU3RyaW5nIiwiaWQiLCJtZW50aW9uVHlwZSIsInR5cGUiLCJtZW50aW9uTGFiZWwiLCJsYWJlbCIsImJ1aWxkU2xhc2hDaGlwRWxlbWVudCIsImNvbW1hbmQiLCJzbGFzaENvbW1hbmQiLCJzbGFzaElkIiwic2xhc2hMYWJlbCIsImRlc2NyaWJlIiwiaXQiLCJwbGFjZWhvbGRlciIsImVkaXRvciIsImdldEJ5Um9sZSIsImV4cGVjdCIsInRvSGF2ZUF0dHJpYnV0ZSIsImRpc2FibGVkIiwiX3JlZiRjdXJyZW50MiIsIl9yZWYkY3VycmVudDQiLCJyZWYiLCJfcmVmJGN1cnJlbnQiLCJjdXJyZW50Iiwic2V0UGxhaW5UZXh0Iiwic2VyaWFsaXplIiwidGV4dCIsInRvQmUiLCJfcmVmJGN1cnJlbnQzIiwiY2xlYXIiLCJvblBhc3RlRmlsZXMiLCJmbiIsImZpbGUiLCJGaWxlIiwicGFzdGUiLCJjbGlwYm9hcmREYXRhIiwiZ2V0RGF0YSIsImZpbGVzIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJvbklucHV0IiwidGV4dENvbnRlbnQiLCJpbnB1dCIsIm9iamVjdENvbnRhaW5pbmciLCJ0cmlnZ2VyIiwiYWN0aXZlIiwiX3JlZiRjdXJyZW50NSIsImluc2VydE1lbnRpb25UcmlnZ2VyIiwicXVlcnkiLCJfcmVmJGN1cnJlbnQ2IiwiaW5zZXJ0U2xhc2hUcmlnZ2VyIiwic2xhc2hUcmlnZ2VyIiwibW9ja0NsZWFyIiwiX3JlZiRjdXJyZW50NyIsImluc2VydFNraWxsVHJpZ2dlciIsImhhc2hUcmlnZ2VyIiwiX3JlZiRjdXJyZW50MSIsIl9yZWYkY3VycmVudDgiLCJfcmVmJGN1cnJlbnQ5IiwidG9Db250YWluIiwidGV4dE5vZGUiLCJmaXJzdENoaWxkIiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNldFN0YXJ0IiwiZGF0YSIsImxlbmd0aCIsImNvbGxhcHNlIiwic2VsZWN0aW9uIiwid2luZG93IiwiZ2V0U2VsZWN0aW9uIiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJfcmVmJGN1cnJlbnQwIiwiaW5zZXJ0TWVudGlvbiIsInRvTWF0Y2hPYmplY3QiLCJzdHJpbmdDb250YWluaW5nIiwibWVudGlvbnMiLCJfcmVmJGN1cnJlbnQxMSIsIl9yZWYkY3VycmVudDEwIiwiYXBwZW5kTWVudGlvbkF0RW5kIiwib25Gb2N1cyIsIm9uQmx1ciIsImZvY3VzIiwiYmx1ciIsInRvSGF2ZUJlZW5DYWxsZWQiLCJvbktleURvd24iLCJrZXlEb3duIiwia2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3IvQ29udGV4dE1lbnRpb25FZGl0b3Iuc3BlYy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBhY3QsIGZpcmVFdmVudCwgcmVuZGVyV2l0aFByb3ZpZGVycywgc2NyZWVuIH0gZnJvbSAnLi4vLi4vLi4vdGVzdC90ZXN0LXV0aWxzJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25FZGl0b3IsIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkVkaXRvcidcblxuamVzdC5tb2NrKCcuLi9Db250ZXh0TWVudGlvbkNoaXAnLCAoKSA9PiAoe1xuICBidWlsZENoaXBFbGVtZW50OiAobWVudGlvbjogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyB0eXBlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IGNoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBjaGlwLmRhdGFzZXQubWVudGlvbiA9ICd0cnVlJ1xuICAgIGNoaXAuZGF0YXNldC5tZW50aW9uSWQgPSBTdHJpbmcobWVudGlvbi5pZClcbiAgICBjaGlwLmRhdGFzZXQubWVudGlvblR5cGUgPSBtZW50aW9uLnR5cGVcbiAgICBjaGlwLmRhdGFzZXQubWVudGlvbkxhYmVsID0gbWVudGlvbi5sYWJlbFxuICAgIHJldHVybiBjaGlwXG4gIH0sXG59KSlcblxuamVzdC5tb2NrKCcuLi9TbGFzaENvbW1hbmRDaGlwJywgKCkgPT4gKHtcbiAgYnVpbGRTbGFzaENoaXBFbGVtZW50OiAoY29tbWFuZDogeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+IHtcbiAgICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gICAgY2hpcC5kYXRhc2V0LnNsYXNoQ29tbWFuZCA9ICd0cnVlJ1xuICAgIGNoaXAuZGF0YXNldC5zbGFzaElkID0gY29tbWFuZC5pZFxuICAgIGNoaXAuZGF0YXNldC5zbGFzaExhYmVsID0gY29tbWFuZC5sYWJlbFxuICAgIHJldHVybiBjaGlwXG4gIH0sXG59KSlcblxuZGVzY3JpYmUoJ0NvbnRleHRNZW50aW9uRWRpdG9yJywgKCkgPT4ge1xuICBpdCgncmVuZGVycyBhbiBlZGl0YWJsZSB0ZXh0Ym94IHdpdGggcGxhY2Vob2xkZXInLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q29udGV4dE1lbnRpb25FZGl0b3IgcGxhY2Vob2xkZXI9XCJFc2NyaWLDrSBhbGdvXCIgLz4pXG5cbiAgICBjb25zdCBlZGl0b3IgPSBzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94JylcbiAgICBleHBlY3QoZWRpdG9yKS50b0hhdmVBdHRyaWJ1dGUoJ2RhdGEtcGxhY2Vob2xkZXInLCAnRXNjcmliw60gYWxnbycpXG4gICAgZXhwZWN0KGVkaXRvcikudG9IYXZlQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpXG4gICAgZXhwZWN0KGVkaXRvcikudG9IYXZlQXR0cmlidXRlKCdkYXRhLWVtcHR5JywgJ3RydWUnKVxuICB9KVxuXG4gIGl0KCdkaXNhYmxlcyBlZGl0aW5nIHdoZW4gZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q29udGV4dE1lbnRpb25FZGl0b3IgZGlzYWJsZWQgcGxhY2Vob2xkZXI9XCJPZmZcIiAvPilcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94JykpLnRvSGF2ZUF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcbiAgfSlcblxuICBpdCgnY2xlYXJzIGNvbnRlbnQgdGhyb3VnaCB0aGUgcmVmJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlZiA9IGNyZWF0ZVJlZjxDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZT4oKVxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoPENvbnRleHRNZW50aW9uRWRpdG9yIHJlZj17cmVmfSAvPilcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICByZWYuY3VycmVudD8uc2V0UGxhaW5UZXh0KCdob2xhJylcbiAgICB9KVxuICAgIGV4cGVjdChyZWYuY3VycmVudD8uc2VyaWFsaXplKCkudGV4dCkudG9CZSgnaG9sYScpXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgcmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICB9KVxuICAgIGV4cGVjdChyZWYuY3VycmVudD8uc2VyaWFsaXplKCkudGV4dCkudG9CZSgnJylcbiAgfSlcblxuICBpdCgnY2FsbHMgb25QYXN0ZUZpbGVzIGZvciBjbGlwYm9hcmQgZmlsZXMnLCAoKSA9PiB7XG4gICAgY29uc3Qgb25QYXN0ZUZpbGVzID0gamVzdC5mbigpXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q29udGV4dE1lbnRpb25FZGl0b3Igb25QYXN0ZUZpbGVzPXtvblBhc3RlRmlsZXN9IC8+KVxuXG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFsneCddLCAnaW1nLnBuZycsIHsgdHlwZTogJ2ltYWdlL3BuZycgfSlcbiAgICBmaXJlRXZlbnQucGFzdGUoc2NyZWVuLmdldEJ5Um9sZSgndGV4dGJveCcpLCB7XG4gICAgICBjbGlwYm9hcmREYXRhOiB7XG4gICAgICAgIGdldERhdGE6ICgpID0+ICcnLFxuICAgICAgICBmaWxlczogW2ZpbGVdLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgZXhwZWN0KG9uUGFzdGVGaWxlcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoW2ZpbGVdKVxuICB9KVxuXG4gIGl0KCdub3RpZmllcyBvbklucHV0IGFmdGVyIHR5cGluZyBwbGFpbiB0ZXh0JywgKCkgPT4ge1xuICAgIGNvbnN0IG9uSW5wdXQgPSBqZXN0LmZuKClcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxDb250ZXh0TWVudGlvbkVkaXRvciBvbklucHV0PXtvbklucHV0fSAvPilcblxuICAgIGNvbnN0IGVkaXRvciA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKVxuICAgIGFjdCgoKSA9PiB7XG4gICAgICBlZGl0b3IudGV4dENvbnRlbnQgPSAnaG9sYSdcbiAgICAgIGZpcmVFdmVudC5pbnB1dChlZGl0b3IpXG4gICAgfSlcblxuICAgIGV4cGVjdChvbklucHV0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgdGV4dDogJ2hvbGEnLFxuICAgICAgICB0cmlnZ2VyOiBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGFjdGl2ZTogZmFsc2UgfSksXG4gICAgICB9KVxuICAgIClcbiAgfSlcblxuICBpdCgnaW5zZXJ0cyBtZW50aW9uIHRyaWdnZXJzIHRocm91Z2ggdGhlIHJlZicsICgpID0+IHtcbiAgICBjb25zdCByZWYgPSBjcmVhdGVSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KClcbiAgICBjb25zdCBvbklucHV0ID0gamVzdC5mbigpXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q29udGV4dE1lbnRpb25FZGl0b3IgcmVmPXtyZWZ9IG9uSW5wdXQ9e29uSW5wdXR9IC8+KVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHJlZi5jdXJyZW50Py5pbnNlcnRNZW50aW9uVHJpZ2dlcigpXG4gICAgfSlcblxuICAgIGV4cGVjdChvbklucHV0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgdHJpZ2dlcjogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBhY3RpdmU6IHRydWUsIHF1ZXJ5OiAnJyB9KSxcbiAgICAgIH0pXG4gICAgKVxuICB9KVxuXG4gIGl0KCdpbnNlcnRzIHNsYXNoIGFuZCBza2lsbCB0cmlnZ2VycyB0aHJvdWdoIHRoZSByZWYnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVmID0gY3JlYXRlUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlPigpXG4gICAgY29uc3Qgb25JbnB1dCA9IGplc3QuZm4oKVxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoPENvbnRleHRNZW50aW9uRWRpdG9yIHJlZj17cmVmfSBvbklucHV0PXtvbklucHV0fSAvPilcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICByZWYuY3VycmVudD8uaW5zZXJ0U2xhc2hUcmlnZ2VyKClcbiAgICB9KVxuXG4gICAgZXhwZWN0KG9uSW5wdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBzbGFzaFRyaWdnZXI6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHsgYWN0aXZlOiB0cnVlLCBxdWVyeTogJycgfSksXG4gICAgICB9KVxuICAgIClcblxuICAgIG9uSW5wdXQubW9ja0NsZWFyKClcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICByZWYuY3VycmVudD8uaW5zZXJ0U2tpbGxUcmlnZ2VyKClcbiAgICB9KVxuXG4gICAgZXhwZWN0KG9uSW5wdXQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBoYXNoVHJpZ2dlcjogZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBhY3RpdmU6IHRydWUsIHF1ZXJ5OiAnJyB9KSxcbiAgICAgIH0pXG4gICAgKVxuICB9KVxuXG4gIGl0KCdyZXBsYWNlcyBhbiBhY3RpdmUgQCBxdWVyeSB3aXRoIGEgbWVudGlvbiBjaGlwJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlZiA9IGNyZWF0ZVJlZjxDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZT4oKVxuICAgIGNvbnN0IG9uSW5wdXQgPSBqZXN0LmZuKClcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxDb250ZXh0TWVudGlvbkVkaXRvciByZWY9e3JlZn0gb25JbnB1dD17b25JbnB1dH0gLz4pXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgcmVmLmN1cnJlbnQ/LnNldFBsYWluVGV4dCgnSG9sYSBAYW5hJylcbiAgICAgIGNvbnN0IGVkaXRvciA9IHJlZi5jdXJyZW50Py5zZXJpYWxpemUoKVxuICAgICAgZXhwZWN0KGVkaXRvcj8udGV4dCkudG9Db250YWluKCdAYW5hJylcbiAgICB9KVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKVxuICAgICAgY29uc3QgdGV4dE5vZGUgPSBlZGl0b3IuZmlyc3RDaGlsZCBhcyBUZXh0XG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHROb2RlLCB0ZXh0Tm9kZS5kYXRhLmxlbmd0aClcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpXG4gICAgfSlcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICByZWYuY3VycmVudD8uaW5zZXJ0TWVudGlvbih7IGlkOiAndTEnLCB0eXBlOiAndXNlcicsIGxhYmVsOiAnQW5hJyB9KVxuICAgIH0pXG5cbiAgICBleHBlY3QocmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHRleHQ6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdbW21lbnRpb246dXNlcjp1MXxBbmFdXScpLFxuICAgICAgbWVudGlvbnM6IFt7IGlkOiAndTEnLCB0eXBlOiAndXNlcicsIGxhYmVsOiAnQW5hJyB9XSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KCdhcHBlbmRzIGEgbWVudGlvbiBjaGlwIGF0IHRoZSBlbmQgb2YgdGhlIGVkaXRvcicsICgpID0+IHtcbiAgICBjb25zdCByZWYgPSBjcmVhdGVSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KClcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxDb250ZXh0TWVudGlvbkVkaXRvciByZWY9e3JlZn0gLz4pXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgcmVmLmN1cnJlbnQ/LmFwcGVuZE1lbnRpb25BdEVuZCh7IGlkOiAncDEnLCB0eXBlOiAncHJvamVjdCcsIGxhYmVsOiAnQWxwaGEnIH0pXG4gICAgfSlcblxuICAgIGV4cGVjdChyZWYuY3VycmVudD8uc2VyaWFsaXplKCkpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbWVudGlvbnM6IFt7IGlkOiAncDEnLCB0eXBlOiAncHJvamVjdCcsIGxhYmVsOiAnQWxwaGEnIH1dLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoJ2ZvcndhcmRzIGZvY3VzIGFuZCBibHVyIGNhbGxiYWNrcycsICgpID0+IHtcbiAgICBjb25zdCBvbkZvY3VzID0gamVzdC5mbigpXG4gICAgY29uc3Qgb25CbHVyID0gamVzdC5mbigpXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q29udGV4dE1lbnRpb25FZGl0b3Igb25Gb2N1cz17b25Gb2N1c30gb25CbHVyPXtvbkJsdXJ9IC8+KVxuXG4gICAgY29uc3QgZWRpdG9yID0gc2NyZWVuLmdldEJ5Um9sZSgndGV4dGJveCcpXG4gICAgZmlyZUV2ZW50LmZvY3VzKGVkaXRvcilcbiAgICBmaXJlRXZlbnQuYmx1cihlZGl0b3IpXG5cbiAgICBleHBlY3Qob25Gb2N1cykudG9IYXZlQmVlbkNhbGxlZCgpXG4gICAgZXhwZWN0KG9uQmx1cikudG9IYXZlQmVlbkNhbGxlZCgpXG4gIH0pXG5cbiAgaXQoJ2ZvcndhcmRzIGtleWRvd24gdG8gdGhlIGNvbnN1bWVyJywgKCkgPT4ge1xuICAgIGNvbnN0IG9uS2V5RG93biA9IGplc3QuZm4oKVxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoPENvbnRleHRNZW50aW9uRWRpdG9yIG9uS2V5RG93bj17b25LZXlEb3dufSAvPilcblxuICAgIGZpcmVFdmVudC5rZXlEb3duKHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKSwgeyBrZXk6ICdFbnRlcicgfSlcblxuICAgIGV4cGVjdChvbktleURvd24pLnRvSGF2ZUJlZW5DYWxsZWQoKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBUyxRQUFRLE9BQU87QUFDakMsU0FBU0MsR0FBRyxFQUFFQyxTQUFTLEVBQUVDLG1CQUFtQixFQUFFQyxNQUFNLFFBQVEsMEJBQTBCO0FBQ3RGLFNBQVNDLG9CQUFvQixRQUFvQyx3QkFBd0I7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUE7QUFFekZDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLHVCQUF1QixFQUFFO0VBQUEsT0FBTztJQUN4Q0MsZ0JBQWdCLEVBQUUsU0FBbEJBLGdCQUFnQkEsQ0FBR0MsT0FBNkQsRUFBSztNQUNuRixJQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLE1BQU0sQ0FBQztNQUMzQ0YsSUFBSSxDQUFDRyxPQUFP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
|