@projectcor/maia-components 2.44.5-0 → 2.45.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/README.md +2 -0
- package/lib/App.js +19 -44
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +51 -5
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +76 -18
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +31 -3
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -2
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +255 -15
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +34 -5
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
- package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -4
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +60 -8
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +15 -3
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +16 -21
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +5 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +52 -72
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +1 -6
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -36
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +29 -5
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +40 -6
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +90 -18
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +15 -5
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -21
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +47 -19
- package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -29
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +4 -147
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +108 -64
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +2 -3
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +86 -76
- package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -5
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +44 -9
- package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +171 -56
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +1 -4
- package/lib/dev/DevReasoningTimeline.js +37 -68
- package/lib/dev/Providers.js +3 -5
- package/lib/hooks/useChatManager/useChatManager.js +351 -76
- package/lib/hooks/useChatMessages/useChatMessages.js +82 -12
- package/lib/hooks/useClientSearch.js +32 -4
- package/lib/hooks/useContextMentions.js +163 -2
- package/lib/hooks/useContextPinPopover.js +75 -16
- package/lib/hooks/useEntitySearch.js +391 -38
- package/lib/hooks/useFrequentlyUsedActions.js +22 -60
- package/lib/hooks/useMentionPopover.js +35 -9
- package/lib/hooks/useMinimizedPillBottomOffset.js +45 -15
- package/lib/hooks/useProjectSearch.js +58 -4
- package/lib/hooks/useProjectSummaryConfig.js +52 -14
- package/lib/hooks/useRecentClientsSearch.js +32 -4
- package/lib/index.js +2 -5
- package/lib/lang/approvalBoxToolActions.js +492 -0
- package/lib/lang/br/index.js +23 -59
- package/lib/lang/en/index.js +23 -59
- package/lib/lang/es/index.js +23 -59
- package/lib/lang/fr/index.js +23 -59
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Agents/getAgents.js +242 -78
- package/lib/services/maia/Orchestrator/orchestrator.js +121 -38
- package/lib/store/sessions/sessionNotifications.js +41 -35
- package/lib/store/sessions/sessionStreamManager.js +52 -40
- package/lib/styles/cascade.js +3 -29
- package/lib/styles/transitions.js +1 -3
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/hoursPlannerQuickActionType.js +1 -74
- package/lib/utils/imagePreprocessor.js +37 -12
- package/lib/utils/streamActivityMessages.js +60 -32
- package/package.json +1 -1
- package/lib/components/atoms/ActionableButton.spec.js +0 -111
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +0 -65
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +0 -55
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +0 -31
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +0 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
- package/lib/components/atoms/Chip/Chip.spec.js +0 -82
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +0 -227
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +0 -31
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
- package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
- package/lib/components/atoms/Expand/Expand.spec.js +0 -57
- package/lib/components/atoms/Fade/Fade.spec.js +0 -31
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
- package/lib/components/atoms/HelpButton.spec.js +0 -87
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +0 -12
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -430
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +0 -50
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
- package/lib/components/atoms/NextPageLoader.spec.js +0 -37
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +0 -17
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
- package/lib/components/atoms/PrimaryButton.spec.js +0 -42
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -132
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -162
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -4
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +0 -10
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
- package/lib/components/atoms/Switch/Switch.spec.js +0 -41
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
- package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
- package/lib/components/atoms/ThirdButton.spec.js +0 -29
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
- package/lib/components/atoms/WithAppCfg.spec.js +0 -60
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +0 -37
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -371
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +0 -39
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +0 -86
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +0 -17
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
- package/lib/components/molecules/AgentInputBlock/index.js +0 -5
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +0 -54
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -410
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +0 -5
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +0 -30
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
- package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
- package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -355
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +0 -48
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +0 -198
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -385
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1125
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -231
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -267
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -261
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -194
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -105
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -73
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
- package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
- package/lib/components/organisms/ChatAIPage/index.js +0 -3
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
- package/lib/constants/permissions/utils.spec.js +0 -128
- package/lib/dev/DevMaiaPage.js +0 -30
- package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
- package/lib/hooks/useAgentSuggestions.spec.js +0 -89
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useChatManager/useChatManager.helpers.js +0 -353
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
- package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +0 -109
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
- package/lib/hooks/useChats/useChats.spec.js +0 -208
- package/lib/hooks/useClientSearch.helpers.js +0 -36
- package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
- package/lib/hooks/useClientSearch.spec.js +0 -86
- package/lib/hooks/useContextMentions.helpers.js +0 -152
- package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
- package/lib/hooks/useContextMentions.spec.js +0 -239
- package/lib/hooks/useContextMentions.types.js +0 -2
- package/lib/hooks/useContextPinPopover.helpers.js +0 -95
- package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
- package/lib/hooks/useContextPinPopover.spec.js +0 -159
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEntitySearch.helpers.js +0 -359
- package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
- package/lib/hooks/useEntitySearch.spec.js +0 -443
- package/lib/hooks/useEvent.spec.js +0 -45
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
- package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
- package/lib/hooks/useIsMaiaPageRoute.js +0 -26
- package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
- package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
- package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
- package/lib/hooks/useMentionPopover.helpers.js +0 -41
- package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
- package/lib/hooks/useMentionPopover.spec.js +0 -215
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +0 -47
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
- package/lib/hooks/useModal/useModal.spec.js +0 -73
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
- package/lib/hooks/useProjectSearch.helpers.js +0 -61
- package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
- package/lib/hooks/useProjectSearch.spec.js +0 -91
- package/lib/hooks/useProjectSummary.spec.js +0 -193
- package/lib/hooks/useProjectSummaryConfig.helpers.js +0 -62
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
- package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
- package/lib/hooks/useRecentClientsSearch.helpers.js +0 -33
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
- package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
- package/lib/hooks/useRecentContexts.spec.js +0 -139
- package/lib/hooks/useResize.spec.js +0 -37
- package/lib/hooks/useSkillsCatalog.spec.js +0 -88
- package/lib/hooks/useSlashCommands.spec.js +0 -139
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
- package/lib/hooks/useStreamResponse.spec.js +0 -199
- package/lib/hooks/useT.spec.js +0 -20
- package/lib/hooks/useToggle.spec.js +0 -33
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
- package/lib/services/maia/Access/updateAccess.spec.js +0 -137
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
- package/lib/services/maia/Agents/connectors.spec.js +0 -359
- package/lib/services/maia/Agents/createAgent.spec.js +0 -55
- package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
- package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
- package/lib/services/maia/Agents/getAgents.helpers.js +0 -181
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
- package/lib/services/maia/Agents/getAgents.spec.js +0 -697
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
- package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
- package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
- package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
- package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
- package/lib/services/maia/Chats/patchChat.spec.js +0 -41
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
- package/lib/services/maia/Knowledge/delete.spec.js +0 -45
- package/lib/services/maia/Knowledge/download.spec.js +0 -78
- package/lib/services/maia/Knowledge/save.spec.js +0 -58
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +0 -130
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
- package/lib/services/maia/Skills/createSkill.spec.js +0 -68
- package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
- package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
- package/lib/services/maia/Skills/getSkills.spec.js +0 -152
- package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
- package/lib/services/maia/client.spec.js +0 -56
- package/lib/services/utils/fetchCOR.spec.js +0 -211
- package/lib/services/utils/getCookie.spec.js +0 -20
- package/lib/services/utils/mapChatMessages.spec.js +0 -254
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
- package/lib/store/maiaLastChatPersistence.spec.js +0 -22
- package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
- package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
- package/lib/store/sessions/sessionNotifications.helpers.js +0 -45
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
- package/lib/store/sessions/sessionNotifications.spec.js +0 -106
- package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
- package/lib/store/sessions/sessions.types.spec.js +0 -16
- package/lib/store/sessions/useSessionsStore.spec.js +0 -135
- package/lib/store/useChatsStore.spec.js +0 -619
- package/lib/store/useFaqsStore.spec.js +0 -57
- package/lib/test/mockSseStream.js +0 -121
- package/lib/test/streamdownCodeMock.js +0 -6
- package/lib/test/streamdownMock.js +0 -12
- package/lib/utils/actionCategoryMap.spec.js +0 -18
- package/lib/utils/agentDisplayName.spec.js +0 -44
- package/lib/utils/autoApproveStorage.spec.js +0 -25
- package/lib/utils/chatInputFiles.spec.js +0 -39
- package/lib/utils/contextMentionIcons.spec.js +0 -41
- package/lib/utils/contextMentionLabel.spec.js +0 -13
- package/lib/utils/contextMentionTriggers.spec.js +0 -38
- package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
- package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
- package/lib/utils/entityLinkRender.spec.js +0 -72
- package/lib/utils/fileDownloadHelper.spec.js +0 -67
- package/lib/utils/formatQuickActionMessage.spec.js +0 -27
- package/lib/utils/formatUnreadCount.spec.js +0 -12
- package/lib/utils/getUnitFileSize.spec.js +0 -18
- package/lib/utils/hitlAnalytics.spec.js +0 -100
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
- package/lib/utils/imagePreprocessor.helpers.js +0 -28
- package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
- package/lib/utils/imagePreprocessor.spec.js +0 -112
- package/lib/utils/maiaPageRoute.js +0 -24
- package/lib/utils/maiaPageRoute.spec.js +0 -23
- package/lib/utils/mapBackendLang.spec.js +0 -19
- package/lib/utils/navigateContextEntity.spec.js +0 -50
- package/lib/utils/normalizeAgentConnectors.spec.js +0 -107
- package/lib/utils/orchestratorSubagents.spec.js +0 -32
- package/lib/utils/reasoningMappers.spec.js +0 -103
- package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
- package/lib/utils/renderContextMentions.spec.js +0 -158
- package/lib/utils/retryCompletion.spec.js +0 -99
- package/lib/utils/skillContentSize.spec.js +0 -13
- package/lib/utils/slashCommandMarker.spec.js +0 -43
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
- package/lib/utils/sseStreamContent.spec.js +0 -31
- package/lib/utils/streamActivityMessages.spec.js +0 -227
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -2,7 +2,168 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
2
2
|
import { useCallback, useRef, useState } from 'react';
|
|
3
3
|
import { serializeMention } from '../utils/renderContextMentions';
|
|
4
4
|
import { serializeSlashCommand } from '../utils/slashCommandMarker';
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
/** Trigger `#` que abre el listado de skills. Misma forma que el de slash. */
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Inspecciona la selección actual. Formato: [límite de palabra] @+ query hasta el caret.
|
|
10
|
+
* Permite espacios simples dentro del query (p. ej. "@Juan Perez") y cierra
|
|
11
|
+
* el trigger cuando detecta dos espacios consecutivos.
|
|
12
|
+
* La tab objetivo es la que corresponde al número de `@` (1 = primera tab visible, etc.).
|
|
13
|
+
*/
|
|
14
|
+
var detectMentionTrigger = function detectMentionTrigger(editorEl, range) {
|
|
15
|
+
if (!editorEl || !editorEl.contains(range.startContainer)) {
|
|
16
|
+
return {
|
|
17
|
+
active: false,
|
|
18
|
+
query: '',
|
|
19
|
+
atRunLength: 0,
|
|
20
|
+
anchor: null
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
var node = range.startContainer;
|
|
24
|
+
if (node.nodeType !== Node.TEXT_NODE) {
|
|
25
|
+
return {
|
|
26
|
+
active: false,
|
|
27
|
+
query: '',
|
|
28
|
+
atRunLength: 0,
|
|
29
|
+
anchor: null
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
var text = node.data;
|
|
33
|
+
var caret = range.startOffset;
|
|
34
|
+
var i = caret - 1;
|
|
35
|
+
if (i < 0) {
|
|
36
|
+
return {
|
|
37
|
+
active: false,
|
|
38
|
+
query: '',
|
|
39
|
+
atRunLength: 0,
|
|
40
|
+
anchor: null
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
while (i >= 0 && text[i] !== '@') i -= 1;
|
|
44
|
+
if (i < 0 || text[i] !== '@') {
|
|
45
|
+
return {
|
|
46
|
+
active: false,
|
|
47
|
+
query: '',
|
|
48
|
+
atRunLength: 0,
|
|
49
|
+
anchor: null
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
var runEnd = i;
|
|
53
|
+
while (i >= 0 && text[i] === '@') {
|
|
54
|
+
i -= 1;
|
|
55
|
+
}
|
|
56
|
+
var runStart = i + 1;
|
|
57
|
+
var atRunLength = runEnd - runStart + 1;
|
|
58
|
+
var prev = runStart > 0 ? text.charAt(runStart - 1) : '';
|
|
59
|
+
var isBoundary = !prev || /[\s([{]/.test(prev);
|
|
60
|
+
if (!isBoundary) {
|
|
61
|
+
return {
|
|
62
|
+
active: false,
|
|
63
|
+
query: '',
|
|
64
|
+
atRunLength: 0,
|
|
65
|
+
anchor: null
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
var hasSlashSuffix = text[runEnd + 1] === '/';
|
|
69
|
+
var queryStart = hasSlashSuffix ? runEnd + 2 : runEnd + 1;
|
|
70
|
+
var query = text.slice(queryStart, caret);
|
|
71
|
+
if (/\n|\r/.test(query)) {
|
|
72
|
+
return {
|
|
73
|
+
active: false,
|
|
74
|
+
query: '',
|
|
75
|
+
atRunLength: 0,
|
|
76
|
+
anchor: null
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (query.includes(' ')) {
|
|
80
|
+
return {
|
|
81
|
+
active: false,
|
|
82
|
+
query: '',
|
|
83
|
+
atRunLength: 0,
|
|
84
|
+
anchor: null
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
active: true,
|
|
89
|
+
query: query,
|
|
90
|
+
atRunLength: hasSlashSuffix ? -atRunLength : atRunLength,
|
|
91
|
+
anchor: {
|
|
92
|
+
node: node,
|
|
93
|
+
offset: runStart
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/** Detecta un trigger de un solo caracter (`/` o `#`) en límite de palabra, con query hasta el caret. */
|
|
99
|
+
var detectCharTrigger = function detectCharTrigger(editorEl, range, _char) {
|
|
100
|
+
if (!editorEl || !editorEl.contains(range.startContainer)) {
|
|
101
|
+
return {
|
|
102
|
+
active: false,
|
|
103
|
+
query: '',
|
|
104
|
+
anchor: null
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
var node = range.startContainer;
|
|
108
|
+
if (node.nodeType !== Node.TEXT_NODE) {
|
|
109
|
+
return {
|
|
110
|
+
active: false,
|
|
111
|
+
query: '',
|
|
112
|
+
anchor: null
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
var text = node.data;
|
|
116
|
+
var caret = range.startOffset;
|
|
117
|
+
var i = caret - 1;
|
|
118
|
+
if (i < 0) {
|
|
119
|
+
return {
|
|
120
|
+
active: false,
|
|
121
|
+
query: '',
|
|
122
|
+
anchor: null
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
while (i >= 0 && text[i] !== _char) i -= 1;
|
|
126
|
+
if (i < 0 || text[i] !== _char) {
|
|
127
|
+
return {
|
|
128
|
+
active: false,
|
|
129
|
+
query: '',
|
|
130
|
+
anchor: null
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
var triggerIndex = i;
|
|
134
|
+
var prev = triggerIndex > 0 ? text.charAt(triggerIndex - 1) : '';
|
|
135
|
+
var isBoundary = !prev || /[\s([{]/.test(prev);
|
|
136
|
+
if (!isBoundary) {
|
|
137
|
+
return {
|
|
138
|
+
active: false,
|
|
139
|
+
query: '',
|
|
140
|
+
anchor: null
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
var query = text.slice(triggerIndex + 1, caret);
|
|
144
|
+
if (/\n|\r/.test(query)) {
|
|
145
|
+
return {
|
|
146
|
+
active: false,
|
|
147
|
+
query: '',
|
|
148
|
+
anchor: null
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
if (query.includes(' ')) {
|
|
152
|
+
return {
|
|
153
|
+
active: false,
|
|
154
|
+
query: '',
|
|
155
|
+
anchor: null
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
active: true,
|
|
160
|
+
query: query,
|
|
161
|
+
anchor: {
|
|
162
|
+
node: node,
|
|
163
|
+
offset: triggerIndex
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
};
|
|
6
167
|
export var useContextMentions = function useContextMentions() {
|
|
7
168
|
var editorRef = useRef(null);
|
|
8
169
|
var _useState = useState({
|
|
@@ -339,4 +500,4 @@ export var useContextMentions = function useContextMentions() {
|
|
|
339
500
|
focus: focus
|
|
340
501
|
};
|
|
341
502
|
};
|
|
342
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZVN0YXRlIiwic2VyaWFsaXplTWVudGlvbiIsInNlcmlhbGl6ZVNsYXNoQ29tbWFuZCIsImRldGVjdENoYXJUcmlnZ2VyIiwiZGV0ZWN0TWVudGlvblRyaWdnZXIiLCJ1c2VDb250ZXh0TWVudGlvbnMiLCJlZGl0b3JSZWYiLCJfdXNlU3RhdGUiLCJhY3RpdmUiLCJxdWVyeSIsImF0UnVuTGVuZ3RoIiwiYW5jaG9yIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidHJpZ2dlciIsInNldFRyaWdnZXIiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNsYXNoVHJpZ2dlciIsInNldFNsYXNoVHJpZ2dlciIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaGFzaFRyaWdnZXIiLCJzZXRIYXNoVHJpZ2dlciIsImRldGVjdFRyaWdnZXIiLCJzZWxlY3Rpb24iLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwiY3VycmVudCIsImdldFJhbmdlQXQiLCJkZXRlY3RTbGFzaCIsImRldGVjdEhhc2giLCJ1cGRhdGVUcmlnZ2VyIiwibmV4dCIsImNsb3NlVHJpZ2dlciIsInVwZGF0ZVNsYXNoVHJpZ2dlciIsImNsb3NlU2xhc2hUcmlnZ2VyIiwidXBkYXRlSGFzaFRyaWdnZXIiLCJjbG9zZUhhc2hUcmlnZ2VyIiwic3luY1RyaWdnZXJBdFJ1bkxlbmd0aCIsIm5leHRBdFJ1bkxlbmd0aCIsIm5leHRIYXNTbGFzaCIsInNhZmVOZXh0IiwiTWF0aCIsIm1heCIsImZsb29yIiwiYWJzIiwiX2N1cnJlbnQkYW5jaG9yIiwibm9kZSIsIm9mZnNldCIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHROb2RlIiwiZnVsbCIsImRhdGEiLCJjdXJyZW50UnVuTGVuIiwiY3VycmVudEhhc1NsYXNoIiwicXVlcnlMZW4iLCJsZW5ndGgiLCJiZWZvcmUiLCJzbGljZSIsImFmdGVyIiwibmV4dFJ1biIsImNvbmNhdCIsInJlcGVhdCIsImNsZWFuUXVlcnkiLCJzdGFydHNXaXRoIiwibmV4dFZhbHVlIiwicmFuZ2UiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwiY2FyZXRPZmZzZXQiLCJzZXRTdGFydCIsIm1pbiIsImNvbGxhcHNlIiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJ1cGRhdGVkIiwicmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCIsImNoaXBOb2RlIiwibWVudGlvbiIsIl9jdXJyZW50JGFuY2hvcjIiLCJzZXRBdHRyaWJ1dGUiLCJTdHJpbmciLCJpZCIsInR5cGUiLCJsYWJlbCIsInBhcmVudCIsInBhcmVudE5vZGUiLCJzcGFjZU5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwicmVtb3ZlIiwicmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwIiwic2xhc2hDb21tYW5kIiwiX2N1cnJlbnQkYW5jaG9yMyIsInRyaWdnZXJMZW4iLCJyZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAiLCJfY3VycmVudCRhbmNob3I0Iiwic2VyaWFsaXplIiwiZWwiLCJ0ZXh0IiwibWVudGlvbnMiLCJzbGFzaENvbW1hbmRzIiwid2FsayIsIkVMRU1FTlRfTk9ERSIsIl9lbE5vZGUkZGF0YXNldCIsIl9lbE5vZGUkZGF0YXNldDIiLCJlbE5vZGUiLCJkYXRhc2V0IiwiX2VsTm9kZSRkYXRhc2V0JG1lbnRpIiwiX3JlZiIsIl9yZWYyIiwiX2VsTm9kZSRkYXRhc2V0JG1lbnRpMiIsIm1lbnRpb25JZCIsIm1lbnRpb25UeXBlIiwibWVudGlvbkxhYmVsIiwidGV4dENvbnRlbnQiLCJwdXNoIiwiX2VsTm9kZSRkYXRhc2V0JHNsYXNoIiwiX3JlZjMiLCJfZWxOb2RlJGRhdGFzZXQkc2xhc2gyIiwiX2VsTm9kZSR0ZXh0Q29udGVudCIsInNsYXNoIiwic2xhc2hJZCIsInNsYXNoTGFiZWwiLCJyZXBsYWNlIiwidGFnTmFtZSIsImNoaWxkTm9kZXMiLCJmb3JFYWNoIiwiY2xlYXIiLCJpbm5lckhUTUwiLCJmb2N1cyIsIl9lZGl0b3JSZWYkY3VycmVudCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDb250ZXh0TWVudGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBzZXJpYWxpemVNZW50aW9uIH0gZnJvbSAnLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuaW1wb3J0IHsgc2VyaWFsaXplU2xhc2hDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvc2xhc2hDb21tYW5kTWFya2VyJ1xuaW1wb3J0IHR5cGUgeyBTbGFzaENvbW1hbmRDaGlwRGF0YSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvU2xhc2hDb21tYW5kQ2hpcC9idWlsZFNsYXNoQ2hpcEVsZW1lbnQnXG5pbXBvcnQgeyBkZXRlY3RDaGFyVHJpZ2dlciwgZGV0ZWN0TWVudGlvblRyaWdnZXIgfSBmcm9tICcuL3VzZUNvbnRleHRNZW50aW9ucy5oZWxwZXJzJ1xuaW1wb3J0IHR5cGUgeyBIYXNoVHJpZ2dlclN0YXRlLCBNZW50aW9uVHJpZ2dlclN0YXRlLCBTbGFzaFRyaWdnZXJTdGF0ZSB9IGZyb20gJy4vdXNlQ29udGV4dE1lbnRpb25zLnR5cGVzJ1xuXG5leHBvcnQgdHlwZSB7IEhhc2hUcmlnZ2VyU3RhdGUsIE1lbnRpb25UcmlnZ2VyU3RhdGUsIFNsYXNoVHJpZ2dlclN0YXRlIH0gZnJvbSAnLi91c2VDb250ZXh0TWVudGlvbnMudHlwZXMnXG5cbmV4cG9ydCBjb25zdCB1c2VDb250ZXh0TWVudGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IGVkaXRvclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFt0cmlnZ2VyLCBzZXRUcmlnZ2VyXSA9IHVzZVN0YXRlPE1lbnRpb25UcmlnZ2VyU3RhdGU+KHtcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIHF1ZXJ5OiAnJyxcbiAgICBhdFJ1bkxlbmd0aDogMCxcbiAgICBhbmNob3I6IG51bGwsXG4gIH0pXG4gIGNvbnN0IFtzbGFzaFRyaWdnZXIsIHNldFNsYXNoVHJpZ2dlcl0gPSB1c2VTdGF0ZTxTbGFzaFRyaWdnZXJTdGF0ZT4oe1xuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgcXVlcnk6ICcnLFxuICAgIGFuY2hvcjogbnVsbCxcbiAgfSlcbiAgY29uc3QgW2hhc2hUcmlnZ2VyLCBzZXRIYXNoVHJpZ2dlcl0gPSB1c2VTdGF0ZTxIYXNoVHJpZ2dlclN0YXRlPih7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBxdWVyeTogJycsXG4gICAgYW5jaG9yOiBudWxsLFxuICB9KVxuXG4gIGNvbnN0IGRldGVjdFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKTogTWVudGlvblRyaWdnZXJTdGF0ZSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgfHwgIWVkaXRvclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICAgIH1cbiAgICByZXR1cm4gZGV0ZWN0TWVudGlvblRyaWdnZXIoZWRpdG9yUmVmLmN1cnJlbnQsIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApKVxuICB9LCBbXSlcblxuICBjb25zdCBkZXRlY3RTbGFzaCA9IHVzZUNhbGxiYWNrKCgpOiBTbGFzaFRyaWdnZXJTdGF0ZSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgfHwgIWVkaXRvclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gICAgfVxuICAgIHJldHVybiBkZXRlY3RDaGFyVHJpZ2dlcihlZGl0b3JSZWYuY3VycmVudCwgc2VsZWN0aW9uLmdldFJhbmdlQXQoMCksICcvJylcbiAgfSwgW10pXG5cbiAgY29uc3QgZGV0ZWN0SGFzaCA9IHVzZUNhbGxiYWNrKCgpOiBIYXNoVHJpZ2dlclN0YXRlID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCB8fCAhZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgICB9XG4gICAgcmV0dXJuIGRldGVjdENoYXJUcmlnZ2VyKGVkaXRvclJlZi5jdXJyZW50LCBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKSwgJyMnKVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICBzZXRUcmlnZ2VyKG5leHQpXG4gICAgcmV0dXJuIG5leHRcbiAgfSwgW2RldGVjdFRyaWdnZXJdKVxuXG4gIGNvbnN0IGNsb3NlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUcmlnZ2VyKHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZVNsYXNoVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gZGV0ZWN0U2xhc2goKVxuICAgIHNldFNsYXNoVHJpZ2dlcihuZXh0KVxuICAgIHJldHVybiBuZXh0XG4gIH0sIFtkZXRlY3RTbGFzaF0pXG5cbiAgY29uc3QgY2xvc2VTbGFzaFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2xhc2hUcmlnZ2VyKHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlSGFzaFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IGRldGVjdEhhc2goKVxuICAgIHNldEhhc2hUcmlnZ2VyKG5leHQpXG4gICAgcmV0dXJuIG5leHRcbiAgfSwgW2RldGVjdEhhc2hdKVxuXG4gIGNvbnN0IGNsb3NlSGFzaFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SGFzaFRyaWdnZXIoeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9KVxuICB9LCBbXSlcblxuICAvKipcbiAgICogQWp1c3RhIGxhIGNhbnRpZGFkIGRlIGBAYCBkZWwgdHJpZ2dlciBhY3Rpdm8gc2luIHBlcmRlciBlbCBxdWVyeSBhY3R1YWwuXG4gICAqIEVqLjogYEBAYWJjYCAtPiBgQGFiY2AgYWwgY2FtYmlhciBkZSB0YWIuXG4gICAqL1xuICBjb25zdCBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoID0gdXNlQ2FsbGJhY2soXG4gICAgKG5leHRBdFJ1bkxlbmd0aDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXh0SGFzU2xhc2ggPSBuZXh0QXRSdW5MZW5ndGggPCAwXG4gICAgICBjb25zdCBzYWZlTmV4dCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoTWF0aC5hYnMobmV4dEF0UnVuTGVuZ3RoKSkpXG4gICAgICBjb25zdCBjdXJyZW50ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm5cbiAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgICBjb25zdCBmdWxsID0gdGV4dE5vZGUuZGF0YVxuICAgICAgY29uc3QgY3VycmVudFJ1bkxlbiA9IE1hdGguYWJzKGN1cnJlbnQuYXRSdW5MZW5ndGgpXG4gICAgICBjb25zdCBjdXJyZW50SGFzU2xhc2ggPSBjdXJyZW50LmF0UnVuTGVuZ3RoIDwgMFxuICAgICAgY29uc3QgcXVlcnlMZW4gPSBjdXJyZW50UnVuTGVuICsgKGN1cnJlbnRIYXNTbGFzaCA/IDEgOiAwKSArIGN1cnJlbnQucXVlcnkubGVuZ3RoXG4gICAgICBjb25zdCBiZWZvcmUgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyBxdWVyeUxlbilcbiAgICAgIGNvbnN0IG5leHRSdW4gPSBuZXh0SGFzU2xhc2ggPyBgJHsnQCcucmVwZWF0KHNhZmVOZXh0KX0vYCA6ICdAJy5yZXBlYXQoc2FmZU5leHQpXG4gICAgICAvLyBTaSB2ZW5pbW9zIGRlbCB0YWIgc2tpbGwsIGVsIHF1ZXJ5IHRpZW5lICcvJyBjb21vIHByZWZpam8g4oCUIGxpbXBpYXJsbyBhbCBjYW1iaWFyIGRlIHRhYi5cbiAgICAgIGNvbnN0IGNsZWFuUXVlcnkgPSBjdXJyZW50LnF1ZXJ5LnN0YXJ0c1dpdGgoJy8nKSA/IGN1cnJlbnQucXVlcnkuc2xpY2UoMSkgOiBjdXJyZW50LnF1ZXJ5XG4gICAgICBjb25zdCBuZXh0VmFsdWUgPSBgJHtiZWZvcmV9JHtuZXh0UnVufSR7Y2xlYW5RdWVyeX0ke2FmdGVyfWBcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gbmV4dFZhbHVlXG5cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgY29uc3QgY2FyZXRPZmZzZXQgPSBiZWZvcmUubGVuZ3RoICsgbmV4dFJ1bi5sZW5ndGggKyBjbGVhblF1ZXJ5Lmxlbmd0aFxuICAgICAgICByYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZSwgTWF0aC5taW4oY2FyZXRPZmZzZXQsIHRleHROb2RlLmRhdGEubGVuZ3RoKSlcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZCA9IGRldGVjdFRyaWdnZXIoKVxuICAgICAgc2V0VHJpZ2dlcih1cGRhdGVkKVxuICAgIH0sXG4gICAgW2RldGVjdFRyaWdnZXJdXG4gIClcblxuICAvKipcbiAgICogUmVlbXBsYXphIGVsIGBAcXVlcnlgIHBlbmRpZW50ZSBwb3IgdW4gY2hpcCBhdMOzbWljbyBjb24gbGEgbWVudGlvbi5cbiAgICogUmVxdWllcmUgcXVlIGVsIGNhbGxlciBwcm92ZWEgZWwgRE9NIGRlbCBjaGlwIChzZSBpbnNlcnRhIHRhbCBjdWFsKS5cbiAgICovXG4gIGNvbnN0IHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAgPSB1c2VDYWxsYmFjayhcbiAgICAoY2hpcE5vZGU6IEhUTUxFbGVtZW50LCBtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFRyaWdnZXIoKVxuICAgICAgaWYgKCFjdXJyZW50LmFjdGl2ZSB8fCAhY3VycmVudC5hbmNob3IpIHJldHVyblxuXG4gICAgICBjb25zdCB7IG5vZGUsIG9mZnNldCB9ID0gY3VycmVudC5hbmNob3JcbiAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgICBjb25zdCBmdWxsID0gdGV4dE5vZGUuZGF0YVxuICAgICAgY29uc3QgY3VycmVudFJ1bkxlbiA9IE1hdGguYWJzKGN1cnJlbnQuYXRSdW5MZW5ndGgpXG4gICAgICBjb25zdCBjdXJyZW50SGFzU2xhc2ggPSBjdXJyZW50LmF0UnVuTGVuZ3RoIDwgMFxuICAgICAgY29uc3QgcXVlcnlMZW4gPSBjdXJyZW50UnVuTGVuICsgKGN1cnJlbnRIYXNTbGFzaCA/IDEgOiAwKSArIGN1cnJlbnQucXVlcnkubGVuZ3RoXG4gICAgICBjb25zdCBhZnRlciA9IGZ1bGwuc2xpY2Uob2Zmc2V0ICsgcXVlcnlMZW4pXG5cbiAgICAgIC8vIFRydW5jYXIgZWwgdGV4dG8gaGFzdGEgYW50ZXMgZGVsIHJ1biBkZSBgQOKApmBcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdGV4dE5vZGUuZGF0YSA9IGZ1bGwuc2xpY2UoMCwgb2Zmc2V0KVxuXG4gICAgICAvLyBJbnNlcnRhciBlbCBjaGlwIGp1c3RvIGRlc3B1w6lzIGRlbCBub2RvIGRlIHRleHRvXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbicsICd0cnVlJylcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWlkJywgU3RyaW5nKG1lbnRpb24uaWQpKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWxhYmVsJywgbWVudGlvbi5sYWJlbClcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcblxuICAgICAgY29uc3QgcGFyZW50ID0gdGV4dE5vZGUucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuXG4gICAgICBjb25zdCBzcGFjZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgXFx1MDBhMCR7YWZ0ZXJ9YClcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoY2hpcE5vZGUsIHRleHROb2RlLm5leHRTaWJsaW5nKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShzcGFjZU5vZGUsIGNoaXBOb2RlLm5leHRTaWJsaW5nKVxuXG4gICAgICAvLyBSZXBvc2ljaW9uYXIgY2FyZXQgZGVzcHXDqXMgZGVsIGNoaXAgKGFudGVzIGRlbCBlc3BhY2lvIG5vbi1icmVha2luZylcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3BhY2VOb2RlLCAxKVxuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4dE5vZGUuZGF0YSA9PT0gJycpIHRleHROb2RlLnJlbW92ZSgpXG5cbiAgICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgfSxcbiAgICBbZGV0ZWN0VHJpZ2dlciwgY2xvc2VUcmlnZ2VyXVxuICApXG5cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgc2xhc2hDb21tYW5kOiBTbGFzaENvbW1hbmRDaGlwRGF0YSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFNsYXNoKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IHRyaWdnZXJMZW4gPSAxICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyB0cmlnZ2VyTGVuKVxuXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zbGFzaC1jb21tYW5kJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXNoLWlkJywgU3RyaW5nKHNsYXNoQ29tbWFuZC5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhc2gtbGFiZWwnLCBzbGFzaENvbW1hbmQubGFiZWwpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpXG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGVcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3Qgc3BhY2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCAke2FmdGVyfWApXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaXBOb2RlLCB0ZXh0Tm9kZS5uZXh0U2libGluZylcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3BhY2VOb2RlLCBjaGlwTm9kZS5uZXh0U2libGluZylcblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0Tm9kZS5kYXRhID09PSAnJykgdGV4dE5vZGUucmVtb3ZlKClcblxuICAgICAgY2xvc2VTbGFzaFRyaWdnZXIoKVxuICAgIH0sXG4gICAgW2RldGVjdFNsYXNoLCBjbG9zZVNsYXNoVHJpZ2dlcl1cbiAgKVxuXG4gIC8qKlxuICAgKiBSZWVtcGxhemEgZWwgYCNxdWVyeWAgcGVuZGllbnRlIHBvciB1biBjaGlwIGRlIHNraWxsLiBMYSBza2lsbCBzaWd1ZSB2aWFqYW5kb1xuICAgKiBjb21vIG1lbnRpb24gKGBkYXRhLW1lbnRpb24qYCkgcGFyYSBxdWUgZWwgYmFja2VuZCBsYSByZXN1ZWx2YSBwb3IgaWQuXG4gICAqL1xuICBjb25zdCByZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAgPSB1c2VDYWxsYmFjayhcbiAgICAoY2hpcE5vZGU6IEhUTUxFbGVtZW50LCBtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdEhhc2goKVxuICAgICAgaWYgKCFjdXJyZW50LmFjdGl2ZSB8fCAhY3VycmVudC5hbmNob3IpIHJldHVyblxuXG4gICAgICBjb25zdCB7IG5vZGUsIG9mZnNldCB9ID0gY3VycmVudC5hbmNob3JcbiAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgICBjb25zdCBmdWxsID0gdGV4dE5vZGUuZGF0YVxuICAgICAgY29uc3QgdHJpZ2dlckxlbiA9IDEgKyBjdXJyZW50LnF1ZXJ5Lmxlbmd0aFxuICAgICAgY29uc3QgYWZ0ZXIgPSBmdWxsLnNsaWNlKG9mZnNldCArIHRyaWdnZXJMZW4pXG5cbiAgICAgIHRleHROb2RlLmRhdGEgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcblxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24nLCAndHJ1ZScpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1pZCcsIFN0cmluZyhtZW50aW9uLmlkKSlcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLXR5cGUnLCBtZW50aW9uLnR5cGUpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1sYWJlbCcsIG1lbnRpb24ubGFiZWwpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpXG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGVcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3Qgc3BhY2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYFxcdTAwYTAke2FmdGVyfWApXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaXBOb2RlLCB0ZXh0Tm9kZS5uZXh0U2libGluZylcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3BhY2VOb2RlLCBjaGlwTm9kZS5uZXh0U2libGluZylcblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0Tm9kZS5kYXRhID09PSAnJykgdGV4dE5vZGUucmVtb3ZlKClcblxuICAgICAgY2xvc2VIYXNoVHJpZ2dlcigpXG4gICAgfSxcbiAgICBbZGV0ZWN0SGFzaCwgY2xvc2VIYXNoVHJpZ2dlcl1cbiAgKVxuXG4gIGNvbnN0IHNlcmlhbGl6ZSA9IHVzZUNhbGxiYWNrKCgpOiB7XG4gICAgdGV4dDogc3RyaW5nXG4gICAgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW11cbiAgICBzbGFzaENvbW1hbmRzOiBTbGFzaENvbW1hbmRDaGlwRGF0YVtdXG4gIH0gPT4ge1xuICAgIGNvbnN0IGVsID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm4geyB0ZXh0OiAnJywgbWVudGlvbnM6IFtdLCBzbGFzaENvbW1hbmRzOiBbXSB9XG4gICAgY29uc3QgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW10gPSBbXVxuICAgIGNvbnN0IHNsYXNoQ29tbWFuZHM6IFNsYXNoQ29tbWFuZENoaXBEYXRhW10gPSBbXVxuICAgIGxldCB0ZXh0ID0gJydcblxuICAgIGNvbnN0IHdhbGsgPSAobm9kZTogTm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIHRleHQgKz0gKG5vZGUgYXMgVGV4dCkuZGF0YVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBjb25zdCBlbE5vZGUgPSBub2RlIGFzIEhUTUxFbGVtZW50XG4gICAgICAgIGlmIChlbE5vZGUuZGF0YXNldD8ubWVudGlvbiA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgY29uc3QgbWVudGlvbjogQ29udGV4dE1lbnRpb24gPSB7XG4gICAgICAgICAgICBpZDogZWxOb2RlLmRhdGFzZXQubWVudGlvbklkID8/ICcnLFxuICAgICAgICAgICAgdHlwZTogKGVsTm9kZS5kYXRhc2V0Lm1lbnRpb25UeXBlIGFzIENvbnRleHRNZW50aW9uWyd0eXBlJ10pID8/ICd1c2VyJyxcbiAgICAgICAgICAgIGxhYmVsOiBlbE5vZGUuZGF0YXNldC5tZW50aW9uTGFiZWwgPz8gZWxOb2RlLnRleHRDb250ZW50ID8/ICcnLFxuICAgICAgICAgIH1cbiAgICAgICAgICBtZW50aW9ucy5wdXNoKG1lbnRpb24pXG4gICAgICAgICAgdGV4dCArPSBzZXJpYWxpemVNZW50aW9uKG1lbnRpb24pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsTm9kZS5kYXRhc2V0Py5zbGFzaENvbW1hbmQgPT09ICd0cnVlJykge1xuICAgICAgICAgIGNvbnN0IHNsYXNoOiBTbGFzaENvbW1hbmRDaGlwRGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiBlbE5vZGUuZGF0YXNldC5zbGFzaElkID8/ICcnLFxuICAgICAgICAgICAgbGFiZWw6IGVsTm9kZS5kYXRhc2V0LnNsYXNoTGFiZWwgPz8gZWxOb2RlLnRleHRDb250ZW50Py5yZXBsYWNlKC9eXFwvLywgJycpID8/ICcnLFxuICAgICAgICAgIH1cbiAgICAgICAgICBzbGFzaENvbW1hbmRzLnB1c2goc2xhc2gpXG4gICAgICAgICAgdGV4dCArPSBzZXJpYWxpemVTbGFzaENvbW1hbmQoc2xhc2gpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsTm9kZS50YWdOYW1lID09PSAnQlInKSB7XG4gICAgICAgICAgdGV4dCArPSAnXFxuJ1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGVsTm9kZS5jaGlsZE5vZGVzLmZvckVhY2god2FsaylcbiAgICAgICAgaWYgKGVsTm9kZS50YWdOYW1lID09PSAnRElWJyB8fCBlbE5vZGUudGFnTmFtZSA9PT0gJ1AnKSB0ZXh0ICs9ICdcXG4nXG4gICAgICB9XG4gICAgfVxuXG4gICAgZWwuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspXG4gICAgcmV0dXJuIHsgdGV4dDogdGV4dC5yZXBsYWNlKC9cXG4rJC8sICcnKSwgbWVudGlvbnMsIHNsYXNoQ29tbWFuZHMgfVxuICB9LCBbXSlcblxuICBjb25zdCBjbGVhciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoZWRpdG9yUmVmLmN1cnJlbnQpIGVkaXRvclJlZi5jdXJyZW50LmlubmVySFRNTCA9ICcnXG4gICAgY2xvc2VUcmlnZ2VyKClcbiAgICBjbG9zZVNsYXNoVHJpZ2dlcigpXG4gICAgY2xvc2VIYXNoVHJpZ2dlcigpXG4gIH0sIFtjbG9zZVRyaWdnZXIsIGNsb3NlU2xhc2hUcmlnZ2VyLCBjbG9zZUhhc2hUcmlnZ2VyXSlcblxuICBjb25zdCBmb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICB9LCBbXSlcblxuICByZXR1cm4ge1xuICAgIGVkaXRvclJlZixcbiAgICB0cmlnZ2VyLFxuICAgIHVwZGF0ZVRyaWdnZXIsXG4gICAgY2xvc2VUcmlnZ2VyLFxuICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCxcbiAgICBzbGFzaFRyaWdnZXIsXG4gICAgdXBkYXRlU2xhc2hUcmlnZ2VyLFxuICAgIGNsb3NlU2xhc2hUcmlnZ2VyLFxuICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICBoYXNoVHJpZ2dlcixcbiAgICB1cGRhdGVIYXNoVHJpZ2dlcixcbiAgICBjbG9zZUhhc2hUcmlnZ2VyLFxuICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNraWxsQ2hpcCxcbiAgICBzZXJpYWxpemUsXG4gICAgY2xlYXIsXG4gICAgZm9jdXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUVyRCxTQUFTQyxnQkFBZ0IsUUFBUSxnQ0FBZ0M7QUFDakUsU0FBU0MscUJBQXFCLFFBQVEsNkJBQTZCO0FBRW5FLFNBQVNDLGlCQUFp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
|
|
503
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZVN0YXRlIiwic2VyaWFsaXplTWVudGlvbiIsInNlcmlhbGl6ZVNsYXNoQ29tbWFuZCIsImRldGVjdE1lbnRpb25UcmlnZ2VyIiwiZWRpdG9yRWwiLCJyYW5nZSIsImNvbnRhaW5zIiwic3RhcnRDb250YWluZXIiLCJhY3RpdmUiLCJxdWVyeSIsImF0UnVuTGVuZ3RoIiwiYW5jaG9yIiwibm9kZSIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHQiLCJkYXRhIiwiY2FyZXQiLCJzdGFydE9mZnNldCIsImkiLCJydW5FbmQiLCJydW5TdGFydCIsInByZXYiLCJjaGFyQXQiLCJpc0JvdW5kYXJ5IiwidGVzdCIsImhhc1NsYXNoU3VmZml4IiwicXVlcnlTdGFydCIsInNsaWNlIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJkZXRlY3RDaGFyVHJpZ2dlciIsImNoYXIiLCJ0cmlnZ2VySW5kZXgiLCJ1c2VDb250ZXh0TWVudGlvbnMiLCJlZGl0b3JSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ0cmlnZ2VyIiwic2V0VHJpZ2dlciIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2xhc2hUcmlnZ2VyIiwic2V0U2xhc2hUcmlnZ2VyIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJoYXNoVHJpZ2dlciIsInNldEhhc2hUcmlnZ2VyIiwiZGV0ZWN0VHJpZ2dlciIsInNlbGVjdGlvbiIsIndpbmRvdyIsImdldFNlbGVjdGlvbiIsInJhbmdlQ291bnQiLCJjdXJyZW50IiwiZ2V0UmFuZ2VBdCIsImRldGVjdFNsYXNoIiwiZGV0ZWN0SGFzaCIsInVwZGF0ZVRyaWdnZXIiLCJuZXh0IiwiY2xvc2VUcmlnZ2VyIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwiY2xvc2VTbGFzaFRyaWdnZXIiLCJ1cGRhdGVIYXNoVHJpZ2dlciIsImNsb3NlSGFzaFRyaWdnZXIiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwibmV4dEF0UnVuTGVuZ3RoIiwibmV4dEhhc1NsYXNoIiwic2FmZU5leHQiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJhYnMiLCJfY3VycmVudCRhbmNob3IiLCJ0ZXh0Tm9kZSIsImZ1bGwiLCJjdXJyZW50UnVuTGVuIiwiY3VycmVudEhhc1NsYXNoIiwicXVlcnlMZW4iLCJsZW5ndGgiLCJiZWZvcmUiLCJhZnRlciIsIm5leHRSdW4iLCJjb25jYXQiLCJyZXBlYXQiLCJjbGVhblF1ZXJ5Iiwic3RhcnRzV2l0aCIsIm5leHRWYWx1ZSIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJjYXJldE9mZnNldCIsInNldFN0YXJ0IiwibWluIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInVwZGF0ZWQiLCJyZXBsYWNlVHJpZ2dlcldpdGhDaGlwIiwiY2hpcE5vZGUiLCJtZW50aW9uIiwiX2N1cnJlbnQkYW5jaG9yMiIsInNldEF0dHJpYnV0ZSIsIlN0cmluZyIsImlkIiwidHlwZSIsImxhYmVsIiwicGFyZW50IiwicGFyZW50Tm9kZSIsInNwYWNlTm9kZSIsImNyZWF0ZVRleHROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJyZW1vdmUiLCJyZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAiLCJzbGFzaENvbW1hbmQiLCJfY3VycmVudCRhbmNob3IzIiwidHJpZ2dlckxlbiIsInJlcGxhY2VUcmlnZ2VyV2l0aFNraWxsQ2hpcCIsIl9jdXJyZW50JGFuY2hvcjQiLCJzZXJpYWxpemUiLCJlbCIsIm1lbnRpb25zIiwic2xhc2hDb21tYW5kcyIsIndhbGsiLCJFTEVNRU5UX05PREUiLCJfZWxOb2RlJGRhdGFzZXQiLCJfZWxOb2RlJGRhdGFzZXQyIiwiZWxOb2RlIiwiZGF0YXNldCIsIl9lbE5vZGUkZGF0YXNldCRtZW50aSIsIl9yZWYiLCJfcmVmMiIsIl9lbE5vZGUkZGF0YXNldCRtZW50aTIiLCJtZW50aW9uSWQiLCJtZW50aW9uVHlwZSIsIm1lbnRpb25MYWJlbCIsInRleHRDb250ZW50IiwicHVzaCIsIl9lbE5vZGUkZGF0YXNldCRzbGFzaCIsIl9yZWYzIiwiX2VsTm9kZSRkYXRhc2V0JHNsYXNoMiIsIl9lbE5vZGUkdGV4dENvbnRlbnQiLCJzbGFzaCIsInNsYXNoSWQiLCJzbGFzaExhYmVsIiwicmVwbGFjZSIsInRhZ05hbWUiLCJjaGlsZE5vZGVzIiwiZm9yRWFjaCIsImNsZWFyIiwiaW5uZXJIVE1MIiwiZm9jdXMiLCJfZWRpdG9yUmVmJGN1cnJlbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQ29udGV4dE1lbnRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgc2VyaWFsaXplTWVudGlvbiB9IGZyb20gJy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IHNlcmlhbGl6ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL3NsYXNoQ29tbWFuZE1hcmtlcidcbmltcG9ydCB0eXBlIHsgU2xhc2hDb21tYW5kQ2hpcERhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL1NsYXNoQ29tbWFuZENoaXAvYnVpbGRTbGFzaENoaXBFbGVtZW50J1xuXG5leHBvcnQgdHlwZSBNZW50aW9uVHJpZ2dlclN0YXRlID0ge1xuICBhY3RpdmU6IGJvb2xlYW5cbiAgcXVlcnk6IHN0cmluZ1xuICAvKiogQ2FudGlkYWQgZGUgYEBgIGNvbnNlY3V0aXZvcyBkZWwgdHJpZ2dlciAoYEBgIOKGkiAxLCBgQEBgIOKGkiAyKS4gTWFwZWEgYSBsYSB0YWIgZW4gb3JkZW4uICovXG4gIGF0UnVuTGVuZ3RoOiBudW1iZXJcbiAgLyoqIFBvc2ljacOzbiBkZWwgcHJpbWVyIGBAYCBkZWwgcnVuIChyZWVtcGxhem8gZGVsIGNoaXApLiAqL1xuICBhbmNob3I6IHsgbm9kZTogTm9kZTsgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgU2xhc2hUcmlnZ2VyU3RhdGUgPSB7XG4gIGFjdGl2ZTogYm9vbGVhblxuICBxdWVyeTogc3RyaW5nXG4gIGFuY2hvcjogeyBub2RlOiBOb2RlOyBvZmZzZXQ6IG51bWJlciB9IHwgbnVsbFxufVxuXG4vKiogVHJpZ2dlciBgI2AgcXVlIGFicmUgZWwgbGlzdGFkbyBkZSBza2lsbHMuIE1pc21hIGZvcm1hIHF1ZSBlbCBkZSBzbGFzaC4gKi9cbmV4cG9ydCB0eXBlIEhhc2hUcmlnZ2VyU3RhdGUgPSBTbGFzaFRyaWdnZXJTdGF0ZVxuXG4vKipcbiAqIEluc3BlY2Npb25hIGxhIHNlbGVjY2nDs24gYWN0dWFsLiBGb3JtYXRvOiBbbMOtbWl0ZSBkZSBwYWxhYnJhXSBAKyBxdWVyeSBoYXN0YSBlbCBjYXJldC5cbiAqIFBlcm1pdGUgZXNwYWNpb3Mgc2ltcGxlcyBkZW50cm8gZGVsIHF1ZXJ5IChwLiBlai4gXCJASnVhbiBQZXJlelwiKSB5IGNpZXJyYVxuICogZWwgdHJpZ2dlciBjdWFuZG8gZGV0ZWN0YSBkb3MgZXNwYWNpb3MgY29uc2VjdXRpdm9zLlxuICogTGEgdGFiIG9iamV0aXZvIGVzIGxhIHF1ZSBjb3JyZXNwb25kZSBhbCBuw7ptZXJvIGRlIGBAYCAoMSA9IHByaW1lcmEgdGFiIHZpc2libGUsIGV0Yy4pLlxuICovXG5jb25zdCBkZXRlY3RNZW50aW9uVHJpZ2dlciA9IChlZGl0b3JFbDogSFRNTEVsZW1lbnQgfCBudWxsLCByYW5nZTogUmFuZ2UpOiBNZW50aW9uVHJpZ2dlclN0YXRlID0+IHtcbiAgaWYgKCFlZGl0b3JFbCB8fCAhZWRpdG9yRWwuY29udGFpbnMocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCBub2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkuZGF0YVxuICBjb25zdCBjYXJldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0XG4gIGxldCBpID0gY2FyZXQgLSAxXG4gIGlmIChpIDwgMCkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICB3aGlsZSAoaSA+PSAwICYmIHRleHRbaV0gIT09ICdAJykgaSAtPSAxXG4gIGlmIChpIDwgMCB8fCB0ZXh0W2ldICE9PSAnQCcpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgcnVuRW5kID0gaVxuICB3aGlsZSAoaSA+PSAwICYmIHRleHRbaV0gPT09ICdAJykge1xuICAgIGkgLT0gMVxuICB9XG4gIGNvbnN0IHJ1blN0YXJ0ID0gaSArIDFcbiAgY29uc3QgYXRSdW5MZW5ndGggPSBydW5FbmQgLSBydW5TdGFydCArIDFcbiAgY29uc3QgcHJldiA9IHJ1blN0YXJ0ID4gMCA/IHRleHQuY2hhckF0KHJ1blN0YXJ0IC0gMSkgOiAnJ1xuICBjb25zdCBpc0JvdW5kYXJ5ID0gIXByZXYgfHwgL1tcXHMoW3tdLy50ZXN0KHByZXYpXG4gIGlmICghaXNCb3VuZGFyeSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICBjb25zdCBoYXNTbGFzaFN1ZmZpeCA9IHRleHRbcnVuRW5kICsgMV0gPT09ICcvJ1xuICBjb25zdCBxdWVyeVN0YXJ0ID0gaGFzU2xhc2hTdWZmaXggPyBydW5FbmQgKyAyIDogcnVuRW5kICsgMVxuICBjb25zdCBxdWVyeSA9IHRleHQuc2xpY2UocXVlcnlTdGFydCwgY2FyZXQpXG4gIGlmICgvXFxufFxcci8udGVzdChxdWVyeSkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG4gIGlmIChxdWVyeS5pbmNsdWRlcygnICAnKSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICBxdWVyeSxcbiAgICBhdFJ1bkxlbmd0aDogaGFzU2xhc2hTdWZmaXggPyAtYXRSdW5MZW5ndGggOiBhdFJ1bkxlbmd0aCxcbiAgICBhbmNob3I6IHsgbm9kZSwgb2Zmc2V0OiBydW5TdGFydCB9LFxuICB9XG59XG5cbi8qKiBEZXRlY3RhIHVuIHRyaWdnZXIgZGUgdW4gc29sbyBjYXJhY3RlciAoYC9gIG8gYCNgKSBlbiBsw61taXRlIGRlIHBhbGFicmEsIGNvbiBxdWVyeSBoYXN0YSBlbCBjYXJldC4gKi9cbmNvbnN0IGRldGVjdENoYXJUcmlnZ2VyID0gKGVkaXRvckVsOiBIVE1MRWxlbWVudCB8IG51bGwsIHJhbmdlOiBSYW5nZSwgY2hhcjogc3RyaW5nKTogU2xhc2hUcmlnZ2VyU3RhdGUgPT4ge1xuICBpZiAoIWVkaXRvckVsIHx8ICFlZGl0b3JFbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3Qgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkuZGF0YVxuICBjb25zdCBjYXJldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0XG4gIGxldCBpID0gY2FyZXQgLSAxXG4gIGlmIChpIDwgMCkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIHdoaWxlIChpID49IDAgJiYgdGV4dFtpXSAhPT0gY2hhcikgaSAtPSAxXG4gIGlmIChpIDwgMCB8fCB0ZXh0W2ldICE9PSBjaGFyKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgdHJpZ2dlckluZGV4ID0gaVxuICBjb25zdCBwcmV2ID0gdHJpZ2dlckluZGV4ID4gMCA/IHRleHQuY2hhckF0KHRyaWdnZXJJbmRleCAtIDEpIDogJydcbiAgY29uc3QgaXNCb3VuZGFyeSA9ICFwcmV2IHx8IC9bXFxzKFt7XS8udGVzdChwcmV2KVxuICBpZiAoIWlzQm91bmRhcnkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICBjb25zdCBxdWVyeSA9IHRleHQuc2xpY2UodHJpZ2dlckluZGV4ICsgMSwgY2FyZXQpXG4gIGlmICgvXFxufFxcci8udGVzdChxdWVyeSkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgaWYgKHF1ZXJ5LmluY2x1ZGVzKCcgICcpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWN0aXZlOiB0cnVlLCBxdWVyeSwgYW5jaG9yOiB7IG5vZGUsIG9mZnNldDogdHJpZ2dlckluZGV4IH0gfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGV4dE1lbnRpb25zID0gKCkgPT4ge1xuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbdHJpZ2dlciwgc2V0VHJpZ2dlcl0gPSB1c2VTdGF0ZTxNZW50aW9uVHJpZ2dlclN0YXRlPih7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBxdWVyeTogJycsXG4gICAgYXRSdW5MZW5ndGg6IDAsXG4gICAgYW5jaG9yOiBudWxsLFxuICB9KVxuICBjb25zdCBbc2xhc2hUcmlnZ2VyLCBzZXRTbGFzaFRyaWdnZXJdID0gdXNlU3RhdGU8U2xhc2hUcmlnZ2VyU3RhdGU+KHtcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIHF1ZXJ5OiAnJyxcbiAgICBhbmNob3I6IG51bGwsXG4gIH0pXG4gIGNvbnN0IFtoYXNoVHJpZ2dlciwgc2V0SGFzaFRyaWdnZXJdID0gdXNlU3RhdGU8SGFzaFRyaWdnZXJTdGF0ZT4oe1xuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgcXVlcnk6ICcnLFxuICAgIGFuY2hvcjogbnVsbCxcbiAgfSlcblxuICBjb25zdCBkZXRlY3RUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCk6IE1lbnRpb25UcmlnZ2VyU3RhdGUgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwIHx8ICFlZGl0b3JSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgICB9XG4gICAgcmV0dXJuIGRldGVjdE1lbnRpb25UcmlnZ2VyKGVkaXRvclJlZi5jdXJyZW50LCBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKSlcbiAgfSwgW10pXG5cbiAgY29uc3QgZGV0ZWN0U2xhc2ggPSB1c2VDYWxsYmFjaygoKTogU2xhc2hUcmlnZ2VyU3RhdGUgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwIHx8ICFlZGl0b3JSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICAgIH1cbiAgICByZXR1cm4gZGV0ZWN0Q2hhclRyaWdnZXIoZWRpdG9yUmVmLmN1cnJlbnQsIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLCAnLycpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGRldGVjdEhhc2ggPSB1c2VDYWxsYmFjaygoKTogSGFzaFRyaWdnZXJTdGF0ZSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgfHwgIWVkaXRvclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gICAgfVxuICAgIHJldHVybiBkZXRlY3RDaGFyVHJpZ2dlcihlZGl0b3JSZWYuY3VycmVudCwgc2VsZWN0aW9uLmdldFJhbmdlQXQoMCksICcjJylcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgc2V0VHJpZ2dlcihuZXh0KVxuICAgIHJldHVybiBuZXh0XG4gIH0sIFtkZXRlY3RUcmlnZ2VyXSlcblxuICBjb25zdCBjbG9zZVRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VHJpZ2dlcih7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9KVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVTbGFzaFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IGRldGVjdFNsYXNoKClcbiAgICBzZXRTbGFzaFRyaWdnZXIobmV4dClcbiAgICByZXR1cm4gbmV4dFxuICB9LCBbZGV0ZWN0U2xhc2hdKVxuXG4gIGNvbnN0IGNsb3NlU2xhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNsYXNoVHJpZ2dlcih7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZUhhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkZXRlY3RIYXNoKClcbiAgICBzZXRIYXNoVHJpZ2dlcihuZXh0KVxuICAgIHJldHVybiBuZXh0XG4gIH0sIFtkZXRlY3RIYXNoXSlcblxuICBjb25zdCBjbG9zZUhhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEhhc2hUcmlnZ2VyKHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfSlcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEFqdXN0YSBsYSBjYW50aWRhZCBkZSBgQGAgZGVsIHRyaWdnZXIgYWN0aXZvIHNpbiBwZXJkZXIgZWwgcXVlcnkgYWN0dWFsLlxuICAgKiBFai46IGBAQGFiY2AgLT4gYEBhYmNgIGFsIGNhbWJpYXIgZGUgdGFiLlxuICAgKi9cbiAgY29uc3Qgc3luY1RyaWdnZXJBdFJ1bkxlbmd0aCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0QXRSdW5MZW5ndGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgbmV4dEhhc1NsYXNoID0gbmV4dEF0UnVuTGVuZ3RoIDwgMFxuICAgICAgY29uc3Qgc2FmZU5leHQgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKE1hdGguYWJzKG5leHRBdFJ1bkxlbmd0aCkpKVxuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFRyaWdnZXIoKVxuICAgICAgaWYgKCFjdXJyZW50LmFjdGl2ZSB8fCAhY3VycmVudC5hbmNob3IpIHJldHVyblxuXG4gICAgICBjb25zdCB7IG5vZGUsIG9mZnNldCB9ID0gY3VycmVudC5hbmNob3JcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkgcmV0dXJuXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IGN1cnJlbnRSdW5MZW4gPSBNYXRoLmFicyhjdXJyZW50LmF0UnVuTGVuZ3RoKVxuICAgICAgY29uc3QgY3VycmVudEhhc1NsYXNoID0gY3VycmVudC5hdFJ1bkxlbmd0aCA8IDBcbiAgICAgIGNvbnN0IHF1ZXJ5TGVuID0gY3VycmVudFJ1bkxlbiArIChjdXJyZW50SGFzU2xhc2ggPyAxIDogMCkgKyBjdXJyZW50LnF1ZXJ5Lmxlbmd0aFxuICAgICAgY29uc3QgYmVmb3JlID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG4gICAgICBjb25zdCBhZnRlciA9IGZ1bGwuc2xpY2Uob2Zmc2V0ICsgcXVlcnlMZW4pXG4gICAgICBjb25zdCBuZXh0UnVuID0gbmV4dEhhc1NsYXNoID8gYCR7J0AnLnJlcGVhdChzYWZlTmV4dCl9L2AgOiAnQCcucmVwZWF0KHNhZmVOZXh0KVxuICAgICAgLy8gU2kgdmVuaW1vcyBkZWwgdGFiIHNraWxsLCBlbCBxdWVyeSB0aWVuZSAnLycgY29tbyBwcmVmaWpvIOKAlCBsaW1waWFybG8gYWwgY2FtYmlhciBkZSB0YWIuXG4gICAgICBjb25zdCBjbGVhblF1ZXJ5ID0gY3VycmVudC5xdWVyeS5zdGFydHNXaXRoKCcvJykgPyBjdXJyZW50LnF1ZXJ5LnNsaWNlKDEpIDogY3VycmVudC5xdWVyeVxuICAgICAgY29uc3QgbmV4dFZhbHVlID0gYCR7YmVmb3JlfSR7bmV4dFJ1bn0ke2NsZWFuUXVlcnl9JHthZnRlcn1gXG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdGV4dE5vZGUuZGF0YSA9IG5leHRWYWx1ZVxuXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID0gYmVmb3JlLmxlbmd0aCArIG5leHRSdW4ubGVuZ3RoICsgY2xlYW5RdWVyeS5sZW5ndGhcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIE1hdGgubWluKGNhcmV0T2Zmc2V0LCB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCkpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICAgIHNldFRyaWdnZXIodXBkYXRlZClcbiAgICB9LFxuICAgIFtkZXRlY3RUcmlnZ2VyXVxuICApXG5cbiAgLyoqXG4gICAqIFJlZW1wbGF6YSBlbCBgQHF1ZXJ5YCBwZW5kaWVudGUgcG9yIHVuIGNoaXAgYXTDs21pY28gY29uIGxhIG1lbnRpb24uXG4gICAqIFJlcXVpZXJlIHF1ZSBlbCBjYWxsZXIgcHJvdmVhIGVsIERPTSBkZWwgY2hpcCAoc2UgaW5zZXJ0YSB0YWwgY3VhbCkuXG4gICAqL1xuICBjb25zdCByZXBsYWNlVHJpZ2dlcldpdGhDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgbWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IGN1cnJlbnRSdW5MZW4gPSBNYXRoLmFicyhjdXJyZW50LmF0UnVuTGVuZ3RoKVxuICAgICAgY29uc3QgY3VycmVudEhhc1NsYXNoID0gY3VycmVudC5hdFJ1bkxlbmd0aCA8IDBcbiAgICAgIGNvbnN0IHF1ZXJ5TGVuID0gY3VycmVudFJ1bkxlbiArIChjdXJyZW50SGFzU2xhc2ggPyAxIDogMCkgKyBjdXJyZW50LnF1ZXJ5Lmxlbmd0aFxuICAgICAgY29uc3QgYWZ0ZXIgPSBmdWxsLnNsaWNlKG9mZnNldCArIHF1ZXJ5TGVuKVxuXG4gICAgICAvLyBUcnVuY2FyIGVsIHRleHRvIGhhc3RhIGFudGVzIGRlbCBydW4gZGUgYEDigKZgXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHRleHROb2RlLmRhdGEgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcblxuICAgICAgLy8gSW5zZXJ0YXIgZWwgY2hpcCBqdXN0byBkZXNwdcOpcyBkZWwgbm9kbyBkZSB0ZXh0b1xuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24nLCAndHJ1ZScpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1pZCcsIFN0cmluZyhtZW50aW9uLmlkKSlcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLXR5cGUnLCBtZW50aW9uLnR5cGUpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1sYWJlbCcsIG1lbnRpb24ubGFiZWwpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpXG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGVcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3Qgc3BhY2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYFxcdTAwYTAke2FmdGVyfWApXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaXBOb2RlLCB0ZXh0Tm9kZS5uZXh0U2libGluZylcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3BhY2VOb2RlLCBjaGlwTm9kZS5uZXh0U2libGluZylcblxuICAgICAgLy8gUmVwb3NpY2lvbmFyIGNhcmV0IGRlc3B1w6lzIGRlbCBjaGlwIChhbnRlcyBkZWwgZXNwYWNpbyBub24tYnJlYWtpbmcpXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHNwYWNlTm9kZSwgMSlcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRleHROb2RlLmRhdGEgPT09ICcnKSB0ZXh0Tm9kZS5yZW1vdmUoKVxuXG4gICAgICBjbG9zZVRyaWdnZXIoKVxuICAgIH0sXG4gICAgW2RldGVjdFRyaWdnZXIsIGNsb3NlVHJpZ2dlcl1cbiAgKVxuXG4gIGNvbnN0IHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGlwTm9kZTogSFRNTEVsZW1lbnQsIHNsYXNoQ29tbWFuZDogU2xhc2hDb21tYW5kQ2hpcERhdGEpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkZXRlY3RTbGFzaCgpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgY29uc3QgdGV4dE5vZGUgPSBub2RlIGFzIFRleHRcbiAgICAgIGNvbnN0IGZ1bGwgPSB0ZXh0Tm9kZS5kYXRhXG4gICAgICBjb25zdCB0cmlnZ2VyTGVuID0gMSArIGN1cnJlbnQucXVlcnkubGVuZ3RoXG4gICAgICBjb25zdCBhZnRlciA9IGZ1bGwuc2xpY2Uob2Zmc2V0ICsgdHJpZ2dlckxlbilcblxuICAgICAgdGV4dE5vZGUuZGF0YSA9IGZ1bGwuc2xpY2UoMCwgb2Zmc2V0KVxuXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhc2gtY29tbWFuZCcsICd0cnVlJylcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zbGFzaC1pZCcsIFN0cmluZyhzbGFzaENvbW1hbmQuaWQpKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXNoLWxhYmVsJywgc2xhc2hDb21tYW5kLmxhYmVsKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlXG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNwYWNlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGAgJHthZnRlcn1gKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlwTm9kZSwgdGV4dE5vZGUubmV4dFNpYmxpbmcpXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYWNlTm9kZSwgY2hpcE5vZGUubmV4dFNpYmxpbmcpXG5cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3BhY2VOb2RlLCAxKVxuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4dE5vZGUuZGF0YSA9PT0gJycpIHRleHROb2RlLnJlbW92ZSgpXG5cbiAgICAgIGNsb3NlU2xhc2hUcmlnZ2VyKClcbiAgICB9LFxuICAgIFtkZXRlY3RTbGFzaCwgY2xvc2VTbGFzaFRyaWdnZXJdXG4gIClcblxuICAvKipcbiAgICogUmVlbXBsYXphIGVsIGAjcXVlcnlgIHBlbmRpZW50ZSBwb3IgdW4gY2hpcCBkZSBza2lsbC4gTGEgc2tpbGwgc2lndWUgdmlhamFuZG9cbiAgICogY29tbyBtZW50aW9uIChgZGF0YS1tZW50aW9uKmApIHBhcmEgcXVlIGVsIGJhY2tlbmQgbGEgcmVzdWVsdmEgcG9yIGlkLlxuICAgKi9cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgbWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkZXRlY3RIYXNoKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IHRyaWdnZXJMZW4gPSAxICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyB0cmlnZ2VyTGVuKVxuXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24taWQnLCBTdHJpbmcobWVudGlvbi5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tbGFiZWwnLCBtZW50aW9uLmxhYmVsKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlXG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNwYWNlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGBcXHUwMGEwJHthZnRlcn1gKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlwTm9kZSwgdGV4dE5vZGUubmV4dFNpYmxpbmcpXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYWNlTm9kZSwgY2hpcE5vZGUubmV4dFNpYmxpbmcpXG5cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3BhY2VOb2RlLCAxKVxuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4dE5vZGUuZGF0YSA9PT0gJycpIHRleHROb2RlLnJlbW92ZSgpXG5cbiAgICAgIGNsb3NlSGFzaFRyaWdnZXIoKVxuICAgIH0sXG4gICAgW2RldGVjdEhhc2gsIGNsb3NlSGFzaFRyaWdnZXJdXG4gIClcblxuICBjb25zdCBzZXJpYWxpemUgPSB1c2VDYWxsYmFjaygoKToge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9ID0+IHtcbiAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuIHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgIGNvbnN0IG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdID0gW11cbiAgICBjb25zdCBzbGFzaENvbW1hbmRzOiBTbGFzaENvbW1hbmRDaGlwRGF0YVtdID0gW11cbiAgICBsZXQgdGV4dCA9ICcnXG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICB0ZXh0ICs9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgY29uc3QgZWxOb2RlID0gbm9kZSBhcyBIVE1MRWxlbWVudFxuICAgICAgICBpZiAoZWxOb2RlLmRhdGFzZXQ/Lm1lbnRpb24gPT09ICd0cnVlJykge1xuICAgICAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICAgICAgaWQ6IGVsTm9kZS5kYXRhc2V0Lm1lbnRpb25JZCA/PyAnJyxcbiAgICAgICAgICAgIHR5cGU6IChlbE5vZGUuZGF0YXNldC5tZW50aW9uVHlwZSBhcyBDb250ZXh0TWVudGlvblsndHlwZSddKSA/PyAndXNlcicsXG4gICAgICAgICAgICBsYWJlbDogZWxOb2RlLmRhdGFzZXQubWVudGlvbkxhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudCA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVudGlvbnMucHVzaChtZW50aW9uKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplTWVudGlvbihtZW50aW9uKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUuZGF0YXNldD8uc2xhc2hDb21tYW5kID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBjb25zdCBzbGFzaDogU2xhc2hDb21tYW5kQ2hpcERhdGEgPSB7XG4gICAgICAgICAgICBpZDogZWxOb2RlLmRhdGFzZXQuc2xhc2hJZCA/PyAnJyxcbiAgICAgICAgICAgIGxhYmVsOiBlbE5vZGUuZGF0YXNldC5zbGFzaExhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudD8ucmVwbGFjZSgvXlxcLy8sICcnKSA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgc2xhc2hDb21tYW5kcy5wdXNoKHNsYXNoKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplU2xhc2hDb21tYW5kKHNsYXNoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0JSJykge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbidcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBlbE5vZGUuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspXG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0RJVicgfHwgZWxOb2RlLnRhZ05hbWUgPT09ICdQJykgdGV4dCArPSAnXFxuJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKVxuICAgIHJldHVybiB7IHRleHQ6IHRleHQucmVwbGFjZSgvXFxuKyQvLCAnJyksIG1lbnRpb25zLCBzbGFzaENvbW1hbmRzIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgY2xlYXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGVkaXRvclJlZi5jdXJyZW50KSBlZGl0b3JSZWYuY3VycmVudC5pbm5lckhUTUwgPSAnJ1xuICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgY2xvc2VTbGFzaFRyaWdnZXIoKVxuICAgIGNsb3NlSGFzaFRyaWdnZXIoKVxuICB9LCBbY2xvc2VUcmlnZ2VyLCBjbG9zZVNsYXNoVHJpZ2dlciwgY2xvc2VIYXNoVHJpZ2dlcl0pXG5cbiAgY29uc3QgZm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICBlZGl0b3JSZWYsXG4gICAgdHJpZ2dlcixcbiAgICB1cGRhdGVUcmlnZ2VyLFxuICAgIGNsb3NlVHJpZ2dlcixcbiAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgIHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAsXG4gICAgc2xhc2hUcmlnZ2VyLFxuICAgIHVwZGF0ZVNsYXNoVHJpZ2dlcixcbiAgICBjbG9zZVNsYXNoVHJpZ2dlcixcbiAgICByZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAsXG4gICAgaGFzaFRyaWdnZXIsXG4gICAgdXBkYXRlSGFzaFRyaWdnZXIsXG4gICAgY2xvc2VIYXNoVHJpZ2dlcixcbiAgICByZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAsXG4gICAgc2VyaWFsaXplLFxuICAgIGNsZWFyLFxuICAgIGZvY3VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFFckQsU0FBU0MsZ0JBQWdCLFFBQVEsZ0NBQWdDO0FBQ2pFLFNBQVNDLHFCQUFxQixRQUFRLDZCQUE2Qjs7QUFrQm5FOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlDLFFBQTRCLEVBQUVDLEtBQVksRUFBMEI7RUFDaEcsSUFBSSxDQUFDRCxRQUFRLElBQUksQ0FBQ0EsUUFBUSxDQUFDRSxRQUFRLENBQUNELEtBQUssQ0FBQ0UsY0FBYyxDQUFDLEVBQUU7SUFDekQsT0FBTztNQUFFQyxNQUFNLEVBQUUsS0FBSztNQUFFQyxLQUFLLEVBQUUsRUFBRTtNQUFFQyxXQUFXLEVBQUUsQ0FBQztNQUFFQyxNQUFNLEVBQUU7SUFBSyxDQUFDO0VBQ25FO0VBQ0EsSUFBTUMsSUFBSSxHQUFHUCxLQUFLLENBQUNFLGNBQWM7RUFDakMsSUFBSUssSUFBSSxDQUFDQyxRQUFRLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxFQUFFO0lBQ3BDLE9BQU87TUFBRVAsTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFLENBQUM7TUFBRUMsTUFBTSxFQUFFO0lBQUssQ0FBQztFQUNuRTtFQUNBLElBQU1LLElBQUksR0FBSUosSUFBSSxDQUFVSyxJQUFJO0VBQ2hDLElBQU1DLEtBQUssR0FBR2IsS0FBSyxDQUFDYyxXQUFXO0VBQy9CLElBQUlDLENBQUMsR0FBR0YsS0FBSyxHQUFHLENBQUM7RUFDakIsSUFBSUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUNULE9BQU87TUFBRVosTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFLENBQUM7TUFBRUMsTUFBTSxFQUFFO0lBQUssQ0FBQztFQUNuRTtFQUVBLE9BQU9TLENBQUMsSUFBSSxDQUFDLElBQUlKLElBQUksQ0FBQ0ksQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFQSxDQUFDLElBQUksQ0FBQztFQUN4QyxJQUFJQSxDQUFDLEdBQUcsQ0FBQyxJQUFJSixJQUFJLENBQUNJLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtJQUM1QixPQUFPO01BQUVaLE1BQU0sRUFBRSxLQUFLO01BQUVDLEtBQUssRUFBRSxFQUFFO01BQUVDLFdBQVcsRUFBRSxDQUFDO01BQUVDLE1BQU0sRUFBRTtJQUFLLENBQUM7RUFDbkU7RUFFQSxJQUFNVSxNQUFNLEdBQUdELENBQUM7RUFDaEIsT0FBT0EsQ0FBQyxJQUFJLENBQUMsSUFBSUosSUFBSSxDQUFDSSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7SUFDaENBLENBQUMsSUFBSSxDQUFDO0VBQ1I7RUFDQSxJQUFNRSxRQUFRLEdBQUdGLENBQUMsR0FBRyxDQUFDO0VBQ3RCLElBQU1WLFdBQVcsR0FBR1csTUFBTSxHQUFHQyxRQUFRLEdBQUcsQ0FBQztFQUN6QyxJQUFNQyxJQUFJLEdBQUdELFFBQVEsR0FBRyxDQUFDLEdBQUdOLElBQUksQ0FBQ1EsTUFBTSxDQUFDRixRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtFQUMxRCxJQUFNRyxVQUFVLEdBQUcsQ0FBQ0YsSUFBSSxJQUFJLFNBQVMsQ0FBQ0csSUFBSSxDQUFDSCxJQUFJLENBQUM7RUFDaEQsSUFBSSxDQUFDRSxVQUFVLEVBQUU7SUFDZixPQUFPO01BQUVqQixNQUFNLEVBQUUsS0FBSztNQUFFQyxLQUFLLEVBQUUsRUFBRTtNQUFFQyxXQUFXLEVBQUUsQ0FBQztNQUFFQyxNQUFNLEVBQUU7SUFBSyxDQUFDO0VBQ25FO0VBRUEsSUFBTWdCLGNBQWMsR0FBR1gsSUFBSSxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRztFQUMvQyxJQUFNTyxVQUFVLEdBQUdELGNBQWMsR0FBR04sTUFBTSxHQUFHLENBQUMsR0FBR0EsTUFBTSxHQUFHLENBQUM7RUFDM0QsSUFBTVosS0FBSyxHQUFHTyxJQUFJLENBQUNhLEtBQUssQ0FBQ0QsVUFBVSxFQUFFVixLQUFLLENBQUM7RUFDM0MsSUFBSSxPQUFPLENBQUNRLElBQUksQ0FBQ2pCLEtBQUssQ0FBQyxFQUFFO0lBQ3ZCLE9BQU87TUFBRUQsTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFLENBQUM7TUFBRUMsTUFBTSxFQUFFO0lBQUssQ0FBQztFQUNuRTtFQUNBLElBQUlGLEtBQUssQ0FBQ3FCLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUN4QixPQUFPO01BQUV0QixNQUFNLEVBQUUsS0FBSztNQUFFQyxLQUFLLEVBQUUsRUFBRTtNQUFFQyxXQUFXLEVBQUUsQ0FBQztNQUFFQyxNQUFNLEVBQUU7SUFBSyxDQUFDO0VBQ25FO0VBRUEsT0FBTztJQUNMSCxNQUFNLEVBQUUsSUFBSTtJQUNaQyxLQUFLLEVBQUxBLEtBQUs7SUFDTEMsV0FBVyxFQUFFaUIsY0FBYyxHQUFHLENBQUNqQixXQUFXLEdBQUdBLFdBQVc7SUFDeERDLE1BQU0sRUFBRTtNQUFFQyxJQUFJLEVBQUpBLElBQUk7TUFBRW1CLE1BQU0sRUFBRVQ7SUFBUztFQUNuQyxDQUFDO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBLElBQU1VLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUk1QixRQUE0QixFQUFFQyxLQUFZLEVBQUU0QixLQUFZLEVBQXdCO0VBQ3pHLElBQUksQ0FBQzdCLFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUNFLFFBQVEsQ0FBQ0QsS0FBSyxDQUFDRSxjQUFjLENBQUMsRUFBRTtJQUN6RCxPQUFPO01BQUVDLE1BQU0sRUFBRSxLQUFLO01BQUVDLEtBQUssRUFBRSxFQUFFO01BQUVFLE1BQU0sRUFBRTtJQUFLLENBQUM7RUFDbkQ7RUFDQSxJQUFNQyxJQUFJLEdBQUdQLEtBQUssQ0FBQ0UsY0FBYztFQUNqQyxJQUFJSyxJQUFJLENBQUNDLFFBQVEsS0FBS0MsSUFBSSxDQUFDQyxTQUFTLEVBQUU7SUFDcEMsT0FBTztNQUFFUCxNQUFNLEVBQUUsS0FBSztNQUFFQyxLQUFLLEVBQUUsRUFBRTtNQUFFRSxNQUFNLEVBQUU7SUFBSyxDQUFDO0VBQ25EO0VBQ0EsSUFBTUssSUFBSSxHQUFJSixJQUFJLENBQVVLLElBQUk7RUFDaEMsSUFBTUMsS0FBSyxHQUFHYixLQUFLLENBQUNjLFdBQVc7RUFDL0IsSUFBSUMsQ0FBQyxHQUFHRixLQUFLLEdBQUcsQ0FBQztFQUNqQixJQUFJRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQ1QsT0FBTztNQUFFWixNQUFNLEVBQUUsS0FBSztNQUFFQyxLQUFLLEVBQUUsRUFBRTtNQUFFRSxNQUFNLEVBQUU7SUFBSyxDQUFDO0VBQ25EO0VBRUEsT0FBT1MsQ0FBQyxJQUFJLENBQUMsSUFBSUosSUFBSSxDQUFDSSxDQUFDLENBQUMsS0FBS2EsS0FBSSxFQUFFYixDQUFDLElBQUksQ0FBQztFQUN6QyxJQUFJQSxDQUFDLEdBQUcsQ0FBQyxJQUFJSixJQUFJLENBQUNJLENBQUMsQ0FBQyxLQUFLYSxLQUFJLEVBQUU7SUFDN0IsT0FBTztNQUFFekIsTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUUsTUFBTSxFQUFFO0lBQUssQ0FBQztFQUNuRDtFQUVBLElBQU11QixZQUFZLEdBQUdkLENBQUM7RUFDdEIsSUFBTUcsSUFBSSxHQUFHVyxZQUFZLEdBQUcsQ0FBQyxHQUFHbEIsSUFBSSxDQUFDUSxNQUFNLENBQUNVLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFO0VBQ2xFLElBQU1ULFVBQVUsR0FBRyxDQUFDRixJQUFJLElBQUksU0FBUyxDQUFDRyxJQUFJLENBQUNILElBQUksQ0FBQztFQUNoRCxJQUFJLENBQUNFLFVBQVUsRUFBRTtJQUNmLE9BQU87TUFBRWpCLE1BQU0sRUFBRSxLQUFLO01BQUVDLEtBQUssRUFBRSxFQUFFO01BQUVFLE1BQU0sRUFBRTtJQUFLLENBQUM7RUFDbkQ7RUFFQSxJQUFNRixLQUFLLEdBQUdPLElBQUksQ0FBQ2EsS0FBSyxDQUFDSyxZQUFZLEdBQUcsQ0FBQyxFQUFFaEIsS0FBSyxDQUFDO0VBQ2pELElBQUksT0FBTyxDQUFDUSxJQUFJLENBQUNqQixLQUFLLENBQUMsRUFBRTtJQUN2QixPQUFPO01BQUVELE1BQU0sRUFBRSxLQUFLO01BQUVDLEtBQUssRUFBRSxFQUFFO01BQUVFLE1BQU0sRUFBRTtJQUFLLENBQUM7RUFDbkQ7RUFDQSxJQUFJRixLQUFLLENBQUNxQixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDeEIsT0FBTztNQUFFdEIsTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUUsTUFBTSxFQUFFO0lBQUssQ0FBQztFQUNuRDtFQUVBLE9BQU87SUFBRUgsTUFBTSxFQUFFLElBQUk7SUFBRUMsS0FBSyxFQUFMQSxLQUFLO0lBQUVFLE1BQU0sRUFBRTtNQUFFQyxJQUFJLEVBQUpBLElBQUk7TUFBRW1CLE1BQU0sRUFBRUc7SUFBYTtFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVELE9BQU8sSUFBTUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQSxFQUFTO0VBQ3RDLElBQU1DLFNBQVMsR0FBR3JDLE1BQU0sQ0FBd0IsSUFBSSxDQUFDO0VBQ3JELElBQUFzQyxTQUFBLEdBQThCckMsUUFBUSxDQUFzQjtNQUMxRFEsTUFBTSxFQUFFLEtBQUs7TUFDYkMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsV0FBVyxFQUFFLENBQUM7TUFDZEMsTUFBTSxFQUFFO0lBQ1YsQ0FBQyxDQUFDO0lBQUEyQixVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUxLRyxPQUFPLEdBQUFGLFVBQUE7SUFBRUcsVUFBVSxHQUFBSCxVQUFBO0VBTTFCLElBQUFJLFVBQUEsR0FBd0MxQyxRQUFRLENBQW9CO01BQ2xFUSxNQUFNLEVBQUUsS0FBSztNQUNiQyxLQUFLLEVBQUUsRUFBRTtNQUNURSxNQUFNLEVBQUU7SUFDVixDQUFDLENBQUM7SUFBQWdDLFVBQUEsR0FBQUosY0FBQSxDQUFBRyxVQUFBO0lBSktFLFlBQVksR0FBQUQsVUFBQTtJQUFFRSxlQUFlLEdBQUFGLFVBQUE7RUFLcEMsSUFBQUcsVUFBQSxHQUFzQzlDLFFBQVEsQ0FBbUI7TUFDL0RRLE1BQU0sRUFBRSxLQUFLO01BQ2JDLEtBQUssRUFBRSxFQUFFO01BQ1RFLE1BQU0sRUFBRTtJQUNWLENBQUMsQ0FBQztJQUFBb0MsVUFBQSxHQUFBUixjQUFBLENBQUFPLFVBQUE7SUFKS0UsV0FBVyxHQUFBRCxVQUFBO0lBQUVFLGNBQWMsR0FBQUYsVUFBQTtFQU1sQyxJQUFNRyxhQUFhLEdBQUdwRCxXQUFXLENBQUMsWUFBMkI7SUFDM0QsSUFBTXFELFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUNGLFNBQVMsSUFBSUEsU0FBUyxDQUFDRyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUNsQixTQUFTLENBQUNtQixPQUFPLEVBQUU7TUFDbEUsT0FBTztRQUFFL0MsTUFBTSxFQUFFLEtBQUs7UUFBRUMsS0FBSyxFQUFFLEVBQUU7UUFBRUMsV0FBVyxFQUFFLENBQUM7UUFBRUMsTUFBTSxFQUFFO01BQUssQ0FBQztJQUNuRTtJQUNBLE9BQU9SLG9CQUFvQixDQUFDaUMsU0FBUyxDQUFDbUIsT0FBTyxFQUFFSixTQUFTLENBQUNLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6RSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTUMsV0FBVyxHQUFHM0QsV0FBVyxDQUFDLFlBQXlCO0lBQ3ZELElBQU1xRCxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDRixTQUFTLElBQUlBLFNBQVMsQ0FBQ0csVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDbEIsU0FBUyxDQUFDbUIsT0FBTyxFQUFFO01BQ2xFLE9BQU87UUFBRS9DLE1BQU0sRUFBRSxLQUFLO1FBQUVDLEtBQUssRUFBRSxFQUFFO1FBQUVFLE1BQU0sRUFBRTtNQUFLLENBQUM7SUFDbkQ7SUFDQSxPQUFPcUIsaUJBQWlCLENBQUNJLFNBQVMsQ0FBQ21CLE9BQU8sRUFBRUosU0FBUyxDQUFDSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQzNFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNRSxVQUFVLEdBQUc1RCxXQUFXLENBQUMsWUFBd0I7SUFDckQsSUFBTXFELFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUNGLFNBQVMsSUFBSUEsU0FBUyxDQUFDRyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUNsQixTQUFTLENBQUNtQixPQUFPLEVBQUU7TUFDbEUsT0FBTztRQUFFL0MsTUFBTSxFQUFFLEtBQUs7UUFBRUMsS0FBSyxFQUFFLEVBQUU7UUFBRUUsTUFBTSxFQUFFO01BQUssQ0FBQztJQUNuRDtJQUNBLE9BQU9xQixpQkFBaUIsQ0FBQ0ksU0FBUyxDQUFDbUIsT0FBTyxFQUFFSixTQUFTLENBQUNLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDM0UsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1HLGFBQWEsR0FBRzdELFdBQVcsQ0FBQyxZQUFNO0lBQ3RDLElBQU04RCxJQUFJLEdBQUdWLGFBQWEsQ0FBQyxDQUFDO0lBQzVCVCxVQUFVLENBQUNtQixJQUFJLENBQUM7SUFDaEIsT0FBT0EsSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDVixhQUFhLENBQUMsQ0FBQztFQUVuQixJQUFNVyxZQUFZLEdBQUcvRCxXQUFXLENBQUMsWUFBTTtJQUNyQzJDLFVBQVUsQ0FBQztNQUFFakMsTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFLENBQUM7TUFBRUMsTUFBTSxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQ3hFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNbUQsa0JBQWtCLEdBQUdoRSxXQUFXLENBQUMsWUFBTTtJQUMzQyxJQUFNOEQsSUFBSSxHQUFHSCxXQUFXLENBQUMsQ0FBQztJQUMxQlosZUFBZSxDQUFDZSxJQUFJLENBQUM7SUFDckIsT0FBT0EsSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDSCxXQUFXLENBQUMsQ0FBQztFQUVqQixJQUFNTSxpQkFBaUIsR0FBR2pFLFdBQVcsQ0FBQyxZQUFNO0lBQzFDK0MsZUFBZSxDQUFDO01BQUVyQyxNQUFNLEVBQUUsS0FBSztNQUFFQyxLQUFLLEVBQUUsRUFBRTtNQUFFRSxNQUFNLEVBQUU7SUFBSyxDQUFDLENBQUM7RUFDN0QsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1xRCxpQkFBaUIsR0FBR2xFLFdBQVcsQ0FBQyxZQUFNO0lBQzFDLElBQU04RCxJQUFJLEdBQUdGLFVBQVUsQ0FBQyxDQUFDO0lBQ3pCVCxjQUFjLENBQUNXLElBQUksQ0FBQztJQUNwQixPQUFPQSxJQUFJO0VBQ2IsQ0FBQyxFQUFFLENBQUNGLFVBQVUsQ0FBQyxDQUFDO0VBRWhCLElBQU1PLGdCQUFnQixHQUFHbkUsV0FBVyxDQUFDLFlBQU07SUFDekNtRCxjQUFjLENBQUM7TUFBRXpDLE1BQU0sRUFBRSxLQUFLO01BQUVDLEtBQUssRUFBRSxFQUFFO01BQUVFLE1BQU0sRUFBRTtJQUFLLENBQUMsQ0FBQztFQUM1RCxDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0FBQ0Y7QUFDQTtBQUNBO0VBQ0UsSUFBTXVELHNCQUFzQixHQUFHcEUsV0FBVyxDQUN4QyxVQUFDcUUsZUFBdUIsRUFBSztJQUMzQixJQUFNQyxZQUFZLEdBQUdELGVBQWUsR0FBRyxDQUFDO0lBQ3hDLElBQU1FLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFRCxJQUFJLENBQUNFLEtBQUssQ0FBQ0YsSUFBSSxDQUFDRyxHQUFHLENBQUNOLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsSUFBTVosT0FBTyxHQUFHTCxhQUFhLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUNLLE9BQU8sQ0FBQy9DLE1BQU0sSUFBSSxDQUFDK0MsT0FBTyxDQUFDNUMsTUFBTSxFQUFFO0lBRXhDLElBQUErRCxlQUFBLEdBQXlCbkIsT0FBTyxDQUFDNUMsTUFBTTtNQUEvQkMsSUFBSSxHQUFBOEQsZUFBQSxDQUFKOUQsSUFBSTtNQUFFbUIsTUFBTSxHQUFBMkMsZUFBQSxDQUFOM0MsTUFBTTtJQUNwQixJQUFJbkIsSUFBSSxDQUFDQyxRQUFRLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxFQUFFO0lBQ3RDLElBQU00RCxRQUFRLEdBQUcvRCxJQUFZO0lBQzdCLElBQU1nRSxJQUFJLEdBQUdELFFBQVEsQ0FBQzFELElBQUk7SUFDMUIsSUFBTTRELGFBQWEsR0FBR1AsSUFBSSxDQUFDRyxHQUFHLENBQUNsQixPQUFPLENBQUM3QyxXQUFXLENBQUM7SUFDbkQsSUFBTW9FLGVBQWUsR0FBR3ZCLE9BQU8sQ0FBQzdDLFdBQVcsR0FBRyxDQUFDO0lBQy9DLElBQU1xRSxRQUFRLEdBQUdGLGFBQWEsSUFBSUMsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR3ZCLE9BQU8sQ0FBQzlDLEtBQUssQ0FBQ3VFLE1BQU07SUFDakYsSUFBTUMsTUFBTSxHQUFHTCxJQUFJLENBQUMvQyxLQUFLLENBQUMsQ0FBQyxFQUFFRSxNQUFNLENBQUM7SUFDcEMsSUFBTW1ELEtBQUssR0FBR04sSUFBSSxDQUFDL0MsS0FBSyxDQUFDRSxNQUFNLEdBQUdnRCxRQUFRLENBQUM7SUFDM0MsSUFBTUksT0FBTyxHQUFHZixZQUFZLE1BQUFnQixNQUFBLENBQU0sR0FBRyxDQUFDQyxNQUFNLENBQUNoQixRQUFRLENBQUMsU0FBTSxHQUFHLENBQUNnQixNQUFNLENBQUNoQixRQUFRLENBQUM7SUFDaEY7SUFDQSxJQUFNaUIsVUFBVSxHQUFHL0IsT0FBTyxDQUFDOUMsS0FBSyxDQUFDOEUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHaEMsT0FBTyxDQUFDOUMsS0FBSyxDQUFDb0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHMEIsT0FBTyxDQUFDOUMsS0FBSztJQUN6RixJQUFNK0UsU0FBUyxNQUFBSixNQUFBLENBQU1ILE1BQU0sRUFBQUcsTUFBQSxDQUFHRCxPQUFPLEVBQUFDLE1BQUEsQ0FBR0UsVUFBVSxFQUFBRixNQUFBLENBQUdGLEtBQUssQ0FBRTs7SUFFNUQ7SUFDQVAsUUFBUSxDQUFDMUQsSUFBSSxHQUFHdUUsU0FBUztJQUV6QixJQUFNckMsU0FBUyxHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUlGLFNBQVMsRUFBRTtNQUNiLElBQU05QyxLQUFLLEdBQUdvRixRQUFRLENBQUNDLFdBQVcsQ0FBQyxDQUFDO01BQ3BDLElBQU1DLFdBQVcsR0FBR1YsTUFBTSxDQUFDRCxNQUFNLEdBQUdHLE9BQU8sQ0FBQ0gsTUFBTSxHQUFHTSxVQUFVLENBQUNOLE1BQU07TUFDdEUzRSxLQUFLLENBQUN1RixRQUFRLENBQUNqQixRQUFRLEVBQUVMLElBQUksQ0FBQ3VCLEdBQUcsQ0FBQ0YsV0FBVyxFQUFFaEIsUUFBUSxDQUFDMUQsSUFBSSxDQUFDK0QsTUFBTSxDQUFDLENBQUM7TUFDckUzRSxLQUFLLENBQUN5RixRQUFRLENBQUMsSUFBSSxDQUFDO01BQ3BCM0MsU0FBUyxDQUFDNEMsZUFBZSxDQUFDLENBQUM7TUFDM0I1QyxTQUFTLENBQUM2QyxRQUFRLENBQUMzRixLQUFLLENBQUM7SUFDM0I7SUFFQSxJQUFNNEYsT0FBTyxHQUFHL0MsYUFBYSxDQUFDLENBQUM7SUFDL0JULFVBQVUsQ0FBQ3dELE9BQU8sQ0FBQztFQUNyQixDQUFDLEVBQ0QsQ0FBQy9DLGFBQWEsQ0FDaEIsQ0FBQzs7RUFFRDtBQUNGO0FBQ0E7QUFDQTtFQUNFLElBQU1nRCxzQkFBc0IsR0FBR3BHLFdBQVcsQ0FDeEMsVUFBQ3FHLFFBQXFCLEVBQUVDLE9BQXVCLEVBQUs7SUFDbEQsSUFBTTdDLE9BQU8sR0FBR0wsYUFBYSxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDSyxPQUFPLENBQUMvQyxNQUFNLElBQUksQ0FBQytDLE9BQU8sQ0FBQzVDLE1BQU0sRUFBRTtJQUV4QyxJQUFBMEYsZ0JBQUEsR0FBeUI5QyxPQUFPLENBQUM1QyxNQUFNO01BQS9CQyxJQUFJLEdBQUF5RixnQkFBQSxDQUFKekYsSUFBSTtNQUFFbUIsTUFBTSxHQUFBc0UsZ0JBQUEsQ0FBTnRFLE1BQU07SUFDcEIsSUFBTTRDLFFBQVEsR0FBRy9ELElBQVk7SUFDN0IsSUFBTWdFLElBQUksR0FBR0QsUUFBUSxDQUFDMUQsSUFBSTtJQUMxQixJQUFNNEQsYUFBYSxHQUFHUCxJQUFJLENBQUNHLEdBQUcsQ0FBQ2xCLE9BQU8sQ0FBQzdDLFdBQVcsQ0FBQztJQUNuRCxJQUFNb0UsZUFBZSxHQUFHdkIsT0FBTyxDQUFDN0MsV0FBVyxHQUFHLENBQUM7SUFDL0MsSUFBTXFFLFFBQVEsR0FBR0YsYUFBYSxJQUFJQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHdkIsT0FBTyxDQUFDOUMsS0FBSyxDQUFDdUUsTUFBTTtJQUNqRixJQUFNRSxLQUFLLEdBQUdOLElBQUksQ0FBQy9DLEtBQUssQ0FBQ0UsTUFBTSxHQUFHZ0QsUUFBUSxDQUFDOztJQUUzQztJQUNBO0lBQ0FKLFFBQVEsQ0FBQzFELElBQUksR0FBRzJELElBQUksQ0FBQy9DLEtBQUssQ0FBQyxDQUFDLEVBQUVFLE1BQU0sQ0FBQzs7SUFFckM7SUFDQW9FLFFBQVEsQ0FBQ0csWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDN0NILFFBQVEsQ0FBQ0csWUFBWSxDQUFDLGlCQUFpQixFQUFFQyxNQUFNLENBQUNILE9BQU8sQ0FBQ0ksRUFBRSxDQUFDLENBQUM7SUFDNURMLFFBQVEsQ0FBQ0csWUFBWSxDQUFDLG1CQUFtQixFQUFFRixPQUFPLENBQUNLLElBQUksQ0FBQztJQUN4RE4sUUFBUSxDQUFDRyxZQUFZLENBQUMsb0JBQW9CLEVBQUVGLE9BQU8sQ0FBQ00sS0FBSyxDQUFDO0lBQzFEUCxRQUFRLENBQUNHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7SUFFakQsSUFBTUssTUFBTSxHQUFHaEMsUUFBUSxDQUFDaUMsVUFBVTtJQUNsQyxJQUFJLENBQUNELE1BQU0sRUFBRTtJQUViLElBQU1FLFNBQVMsR0FBR3BCLFFBQVEsQ0FBQ3FCLGNBQWMsUUFBQTFCLE1BQUEsQ0FBVUYsS0FBSyxDQUFFLENBQUM7SUFDM0R5QixNQUFNLENBQUNJLFlBQVksQ0FBQ1osUUFBUSxFQUFFeEIsUUFBUSxDQUFDcUMsV0FBVyxDQUFDO0lBQ25ETCxNQUFNLENBQUNJLFlBQVksQ0FBQ0YsU0FBUyxFQUFFVixRQUFRLENBQUNhLFdBQVcsQ0FBQzs7SUFFcEQ7SUFDQSxJQUFNN0QsU0FBUyxHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUlGLFNBQVMsRUFBRTtNQUNiLElBQU05QyxLQUFLLEdBQUdvRixRQUFRLENBQUNDLFdBQVcsQ0FBQyxDQUFDO01BQ3BDckYsS0FBSyxDQUFDdUYsUUFBUSxDQUFDaUIsU0FBUyxFQUFFLENBQUMsQ0FBQztNQUM1QnhHLEtBQUssQ0FBQ3lGLFFBQVEsQ0FBQyxJQUFJLENBQUM7TUFDcEIzQyxTQUFTLENBQUM0QyxlQUFlLENBQUMsQ0FBQztNQUMzQjVDLFNBQVMsQ0FBQzZDLFFBQVEsQ0FBQzNGLEtBQUssQ0FBQztJQUMzQjtJQUVBLElBQUlzRSxRQUFRLENBQUMxRCxJQUFJLEtBQUssRUFBRSxFQUFFMEQsUUFBUSxDQUFDc0MsTUFBTSxDQUFDLENBQUM7SUFFM0NwRCxZQUFZLENBQUMsQ0FBQztFQUNoQixDQUFDLEVBQ0QsQ0FBQ1gsYUFBYSxFQUFFVyxZQUFZLENBQzlCLENBQUM7RUFFRCxJQUFNcUQsMkJBQTJCLEdBQUdwSCxXQUFXLENBQzdDLFVBQUNxRyxRQUFxQixFQUFFZ0IsWUFBa0MsRUFBSztJQUM3RCxJQUFNNUQsT0FBTyxHQUFHRSxXQUFXLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUNGLE9BQU8sQ0FBQy9DLE1BQU0sSUFBSSxDQUFDK0MsT0FBTyxDQUFDNUMsTUFBTSxFQUFFO0lBRXhDLElBQUF5RyxnQkFBQSxHQUF5QjdELE9BQU8sQ0FBQzVDLE1BQU07TUFBL0JDLElBQUksR0FBQXdHLGdCQUFBLENBQUp4RyxJQUFJO01BQUVtQixNQUFNLEdBQUFxRixnQkFBQSxDQUFOckYsTUFBTTtJQUNwQixJQUFNNEMsUUFBUSxHQUFHL0QsSUFBWTtJQUM3QixJQUFNZ0UsSUFBSSxHQUFHRCxRQUFRLENBQUMxRCxJQUFJO0lBQzFCLElBQU1vRyxVQUFVLEdBQUcsQ0FBQyxHQUFHOUQsT0FBTyxDQUFDOUMsS0FBSyxDQUFDdUUsTUFBTTtJQUMzQyxJQUFNRSxLQUFLLEdBQUdOLElBQUksQ0FBQy9DLEtBQUssQ0FBQ0UsTUFBTSxHQUFHc0YsVUFBVSxDQUFDO0lBRTdDMUMsUUFBUSxDQUFDMUQsSUFBSSxHQUFHMkQsSUFBSSxDQUFDL0MsS0FBSyxDQUFDLENBQUMsRUFBRUUsTUFBTSxDQUFDO0lBRXJDb0UsUUFBUSxDQUFDRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBQ25ESCxRQUFRLENBQUNHLFlBQVksQ0FBQyxlQUFlLEVBQUVDLE1BQU0sQ0FBQ1ksWUFBWSxDQUFDWCxFQUFFLENBQUMsQ0FBQztJQUMvREwsUUFBUSxDQUFDRyxZQUFZLENBQUMsa0JBQWtCLEVBQUVhLFlBQVksQ0FBQ1QsS0FBSyxDQUFDO0lBQzdEUCxRQUFRLENBQUNHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7SUFFakQsSUFBTUssTUFBTSxHQUFHaEMsUUFBUSxDQUFDaUMsVUFBVTtJQUNsQyxJQUFJLENBQUNELE1BQU0sRUFBRTtJQUViLElBQU1FLFNBQVMsR0FBR3BCLFFBQVEsQ0FBQ3FCLGNBQWMsS0FBQTFCLE1BQUEsQ0FBS0YsS0FBSyxDQUFFLENBQUM7SUFDdER5QixNQUFNLENBQUNJLFlBQVksQ0FBQ1osUUFBUSxFQUFFeEIsUUFBUSxDQUFDcUMsV0FBVyxDQUFDO0lBQ25ETCxNQUFNLENBQUNJLFlBQVksQ0FBQ0YsU0FBUyxFQUFFVixRQUFRLENBQUNhLFdBQVcsQ0FBQztJQUVwRCxJQUFNN0QsU0FBUyxHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUlGLFNBQVMsRUFBRTtNQUNiLElBQU05QyxLQUFLLEdBQUdvRixRQUFRLENBQUNDLFdBQVcsQ0FBQyxDQUFDO01BQ3BDckYsS0FBSyxDQUFDdUYsUUFBUSxDQUFDaUIsU0FBUyxFQUFFLENBQUMsQ0FBQztNQUM1QnhHLEtBQUssQ0FBQ3lGLFFBQVEsQ0FBQyxJQUFJLENBQUM7TUFDcEIzQyxTQUFTLENBQUM0QyxlQUFlLENBQUMsQ0FBQztNQUMzQjVDLFNBQVMsQ0FBQzZDLFFBQVEsQ0FBQzNGLEtBQUssQ0FBQztJQUMzQjtJQUVBLElBQUlzRSxRQUFRLENBQUMxRCxJQUFJLEtBQUssRUFBRSxFQUFFMEQsUUFBUSxDQUFDc0MsTUFBTSxDQUFDLENBQUM7SUFFM0NsRCxpQkFBaUIsQ0FBQyxDQUFDO0VBQ3JCLENBQUMsRUFDRCxDQUFDTixXQUFXLEVBQUVNLGlCQUFpQixDQUNqQyxDQUFDOztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0VBQ0UsSUFBTXVELDJCQUEyQixHQUFHeEgsV0FBVyxDQUM3QyxVQUFDcUcsUUFBcUIsRUFBRUMsT0FBdUIsRUFBSztJQUNsRCxJQUFNN0MsT0FBTyxHQUFHRyxVQUFVLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUNILE9BQU8sQ0FBQy9DLE1BQU0sSUFBSSxDQUFDK0MsT0FBTyxDQUFDNUMsTUFBTSxFQUFFO0lBRXhDLElBQUE0RyxnQkFBQSxHQUF5QmhFLE9BQU8sQ0FBQzVDLE1BQU07TUFBL0JDLElBQUksR0FBQTJHLGdCQUFBLENBQUozRyxJQUFJO01BQUVtQixNQUFNLEdBQUF3RixnQkFBQSxDQUFOeEYsTUFBTTtJQUNwQixJQUFNNEMsUUFBUSxHQUFHL0QsSUFBWTtJQUM3QixJQUFNZ0UsSUFBSSxHQUFHRCxRQUFRLENBQUMxRCxJQUFJO0lBQzFCLElBQU1vRyxVQUFVLEdBQUcsQ0FBQyxHQUFHOUQsT0FBTyxDQUFDOUMsS0FBSyxDQUFDdUUsTUFBTTtJQUMzQyxJQUFNRSxLQUFLLEdBQUdOLElBQUksQ0FBQy9DLEtBQUssQ0FBQ0UsTUFBTSxHQUFHc0YsVUFBVSxDQUFDO0lBRTdDMUMsUUFBUSxDQUFDMUQsSUFBSSxHQUFHMkQsSUFBSSxDQUFDL0MsS0FBSyxDQUFDLENBQUMsRUFBRUUsTUFBTSxDQUFDO0lBRXJDb0UsUUFBUSxDQUFDRyxZQUFZLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUM3Q0gsUUFBUSxDQUFDRyxZQUFZLENBQUMsaUJBQWlCLEVBQUVDLE1BQU0sQ0FBQ0gsT0FBTyxDQUFDSSxFQUFFLENBQUMsQ0FBQztJQUM1REwsUUFBUSxDQUFDRyxZQUFZLENBQUMsbUJBQW1CLEVBQUVGLE9BQU8sQ0FBQ0ssSUFBSSxDQUFDO0lBQ3hETixRQUFRLENBQUNHLFlBQVksQ0FBQyxvQkFBb0IsRUFBRUYsT0FBTyxDQUFDTSxLQUFLLENBQUM7SUFDMURQLFFBQVEsQ0FBQ0csWUFBWSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztJQUVqRCxJQUFNSyxNQUFNLEdBQUdoQyxRQUFRLENBQUNpQyxVQUFVO0lBQ2xDLElBQUksQ0FBQ0QsTUFBTSxFQUFFO0lBRWIsSUFBTUUsU0FBUyxHQUFHcEIsUUFBUSxDQUFDcUIsY0FBYyxRQUFBMUIsTUFBQSxDQUFVRixLQUFLLENBQUUsQ0FBQztJQUMzRHlCLE1BQU0sQ0FBQ0ksWUFBWSxDQUFDWixRQUFRLEVBQUV4QixRQUFRLENBQUNxQyxXQUFXLENBQUM7SUFDbkRMLE1BQU0sQ0FBQ0ksWUFBWSxDQUFDRixTQUFTLEVBQUVWLFFBQVEsQ0FBQ2EsV0FBVyxDQUFDO0lBRXBELElBQU03RCxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSUYsU0FBUyxFQUFFO01BQ2IsSUFBTTlDLEtBQUssR0FBR29GLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7TUFDcENyRixLQUFLLENBQUN1RixRQUFRLENBQUNpQixTQUFTLEVBQUUsQ0FBQyxDQUFDO01BQzVCeEcsS0FBSyxDQUFDeUYsUUFBUSxDQUFDLElBQUksQ0FBQztNQUNwQjNDLFNBQVMsQ0FBQzRDLGVBQWUsQ0FBQyxDQUFDO01BQzNCNUMsU0FBUyxDQUFDNkMsUUFBUSxDQUFDM0YsS0FBSyxDQUFDO0lBQzNCO0lBRUEsSUFBSXNFLFFBQVEsQ0FBQzFELElBQUksS0FBSyxFQUFFLEVBQUUwRCxRQUFRLENBQUNzQyxNQUFNLENBQUMsQ0FBQztJQUUzQ2hELGdCQUFnQixDQUFDLENBQUM7RUFDcEIsQ0FBQyxFQUNELENBQUNQLFVBQVUsRUFBRU8sZ0JBQWdCLENBQy9CLENBQUM7RUFFRCxJQUFNdUQsU0FBUyxHQUFHMUgsV0FBVyxDQUFDLFlBSXpCO0lBQ0gsSUFBTTJILEVBQUUsR0FBR3JGLFNBQVMsQ0FBQ21CLE9BQU87SUFDNUIsSUFBSSxDQUFDa0UsRUFBRSxFQUFFLE9BQU87TUFBRXpHLElBQUksRUFBRSxFQUFFO01BQUUwRyxRQUFRLEVBQUUsRUFBRTtNQUFFQyxhQUFhLEVBQUU7SUFBRyxDQUFDO0lBQzdELElBQU1ELFFBQTBCLEdBQUcsRUFBRTtJQUNyQyxJQUFNQyxhQUFxQyxHQUFHLEVBQUU7SUFDaEQsSUFBSTNHLElBQUksR0FBRyxFQUFFO0lBRWIsSUFBTTRHLEtBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFJaEgsSUFBVSxFQUFLO01BQzNCLElBQUlBLElBQUksQ0FBQ0MsUUFBUSxLQUFLQyxJQUFJLENBQUNDLFNBQVMsRUFBRTtRQUNwQ0MsSUFBSSxJQUFLSixJQUFJLENBQVVLLElBQUk7UUFDM0I7TUFDRjtNQUNBLElBQUlMLElBQUksQ0FBQ0MsUUFBUSxLQUFLQyxJQUFJLENBQUMrRyxZQUFZLEVBQUU7UUFBQSxJQUFBQyxlQUFBLEVBQUFDLGdCQUFBO1FBQ3ZDLElBQU1DLE1BQU0sR0FBR3BILElBQW1CO1FBQ2xDLElBQUksRUFBQWtILGVBQUEsR0FBQUUsTUFBTSxDQUFDQyxPQUFPLGNBQUFILGVBQUEsdUJBQWRBLGVBQUEsQ0FBZ0IxQixPQUFPLE1BQUssTUFBTSxFQUFFO1VBQUEsSUFBQThCLHFCQUFBLEVBQUFDLElBQUEsRUFBQUMsS0FBQSxFQUFBQyxzQkFBQTtVQUN0QyxJQUFNakMsT0FBdUIsR0FBRztZQUM5QkksRUFBRSxHQUFBMEIscUJBQUEsR0FBRUYsTUFBTSxDQUFDQyxPQUFPLENBQUNLLFNBQVMsY0FBQUoscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxFQUFFO1lBQ2xDekIsSUFBSSxHQUFBMEIsSUFBQSxHQUFHSCxNQUFNLENBQUNDLE9BQU8sQ0FBQ00sV0FBVyxjQUFBSixJQUFBLGNBQUFBLElBQUEsR0FBK0IsTUFBTTtZQUN0RXpCLEtBQUssR0FBQTBCLEtBQUEsSUFBQUMsc0JBQUEsR0FBRUwsTUFBTSxDQUFDQyxPQUFPLENBQUNPLFlBQVksY0FBQUgsc0JBQUEsY0FBQUEsc0JBQUEsR0FBSUwsTUFBTSxDQUFDUyxXQUFXLGNBQUFMLEtBQUEsY0FBQUEsS0FBQSxHQUFJO1VBQzlELENBQUM7VUFDRFYsUUFBUSxDQUFDZ0IsSUFBSSxDQUFDdEMsT0FBTyxDQUFDO1VBQ3RCcEYsSUFBSSxJQUFJZixnQkFBZ0IsQ0FBQ21HLE9BQU8sQ0FBQztVQUNqQztRQUNGO1FBQ0EsSUFBSSxFQUFBMkIsZ0JBQUEsR0FBQUMsTUFBTSxDQUFDQyxPQUFPLGNBQUFGLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQlosWUFBWSxNQUFLLE1BQU0sRUFBRTtVQUFBLElBQUF3QixxQkFBQSxFQUFBQyxLQUFBLEVBQUFDLHNCQUFBLEVBQUFDLG1CQUFBO1VBQzNDLElBQU1DLEtBQTJCLEdBQUc7WUFDbEN2QyxFQUFFLEdBQUFtQyxxQkFBQSxHQUFFWCxNQUFNLENBQUNDLE9BQU8sQ0FBQ2UsT0FBTyxjQUFBTCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEVBQUU7WUFDaENqQyxLQUFLLEdBQUFrQyxLQUFBLElBQUFDLHNCQUFBLEdBQUViLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDZ0IsVUFBVSxjQUFBSixzQkFBQSxjQUFBQSxzQkFBQSxJQUFBQyxtQkFBQSxHQUFJZCxNQUFNLENBQUNTLFdBQVcsY0FBQUssbUJBQUEsdUJBQWxCQSxtQkFBQSxDQUFvQkksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsY0FBQU4sS0FBQSxjQUFBQSxLQUFBLEdBQUk7VUFDaEYsQ0FBQztVQUNEakIsYUFBYSxDQUFDZSxJQUFJLENBQUNLLEtBQUssQ0FBQztVQUN6Qi9ILElBQUksSUFBSWQscUJBQXFCLENBQUM2SSxLQUFLLENBQUM7VUFDcEM7UUFDRjtRQUNBLElBQUlmLE1BQU0sQ0FBQ21CLE9BQU8sS0FBSyxJQUFJLEVBQUU7VUFDM0JuSSxJQUFJLElBQUksSUFBSTtVQUNaO1FBQ0Y7UUFDQWdILE1BQU0sQ0FBQ29CLFVBQVUsQ0FBQ0MsT0FBTyxDQUFDekIsS0FBSSxDQUFDO1FBQy9CLElBQUlJLE1BQU0sQ0FBQ21CLE9BQU8sS0FBSyxLQUFLLElBQUluQixNQUFNLENBQUNtQixPQUFPLEtBQUssR0FBRyxFQUFFbkksSUFBSSxJQUFJLElBQUk7TUFDdEU7SUFDRixDQUFDO0lBRUR5RyxFQUFFLENBQUMyQixVQUFVLENBQUNDLE9BQU8sQ0FBQ3pCLEtBQUksQ0FBQztJQUMzQixPQUFPO01BQUU1RyxJQUFJLEVBQUVBLElBQUksQ0FBQ2tJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO01BQUV4QixRQUFRLEVBQVJBLFFBQVE7TUFBRUMsYUFBYSxFQUFiQTtJQUFjLENBQUM7RUFDcEUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU0yQixLQUFLLEdBQUd4SixXQUFXLENBQUMsWUFBTTtJQUM5QixJQUFJc0MsU0FBUyxDQUFDbUIsT0FBTyxFQUFFbkIsU0FBUyxDQUFDbUIsT0FBTyxDQUFDZ0csU0FBUyxHQUFHLEVBQUU7SUFDdkQxRixZQUFZLENBQUMsQ0FBQztJQUNkRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25CRSxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ3BCLENBQUMsRUFBRSxDQUFDSixZQUFZLEVBQUVFLGlCQUFpQixFQUFFRSxnQkFBZ0IsQ0FBQyxDQUFDO0VBRXZELElBQU11RixLQUFLLEdBQUcxSixXQUFXLENBQUMsWUFBTTtJQUFBLElBQUEySixrQkFBQTtJQUM5QixDQUFBQSxrQkFBQSxHQUFBckgsU0FBUyxDQUFDbUIsT0FBTyxjQUFBa0csa0JBQUEsZUFBakJBLGtCQUFBLENBQW1CRCxLQUFLLENBQUMsQ0FBQztFQUM1QixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sT0FBTztJQUNMcEgsU0FBUyxFQUFUQSxTQUFTO0lBQ1RJLE9BQU8sRUFBUEEsT0FBTztJQUNQbUIsYUFBYSxFQUFiQSxhQUFhO0lBQ2JFLFlBQVksRUFBWkEsWUFBWTtJQUNaSyxzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QmdDLHNCQUFzQixFQUF0QkEsc0JBQXNCO0lBQ3RCdEQsWUFBWSxFQUFaQSxZQUFZO0lBQ1prQixrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUNsQkMsaUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJtRCwyQkFBMkIsRUFBM0JBLDJCQUEyQjtJQUMzQmxFLFdBQVcsRUFBWEEsV0FBVztJQUNYZ0IsaUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJDLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCcUQsMkJBQTJCLEVBQTNCQSwyQkFBMkI7SUFDM0JFLFNBQVMsRUFBVEEsU0FBUztJQUNUOEIsS0FBSyxFQUFMQSxLQUFLO0lBQ0xFLEtBQUssRUFBTEE7RUFDRixDQUFDO0FBQ0gsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -9,8 +9,10 @@ import { useGlobalContext } from '../context/global-context';
|
|
|
9
9
|
import { useT } from './useT';
|
|
10
10
|
// eslint-disable-next-line import/no-cycle
|
|
11
11
|
import { useEntitySearch } from './useEntitySearch';
|
|
12
|
-
import { buildContextPinUpdates, computePopoverPosition, resolveInitialPinType, resolvePinAllowedTypes } from './useContextPinPopover.helpers';
|
|
13
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
/** Tipos pineables como contexto persistente (RFC §6: no incluye `user`, que es solo mención). */
|
|
14
|
+
var PIN_ALLOWED_TYPES = ['client', 'project', 'task'];
|
|
15
|
+
var PIN_DEFAULT_TYPE = 'project';
|
|
14
16
|
/**
|
|
15
17
|
* Segundo punto de entrada del buscador de contexto (RFC §6): el mismo motor
|
|
16
18
|
* (`useEntitySearch` + `ContextMentionPopover`) pero el commit fija un **pin**
|
|
@@ -33,10 +35,8 @@ export var useContextPinPopover = function useContextPinPopover(_ref) {
|
|
|
33
35
|
setTask = _useGlobalContext.setTask,
|
|
34
36
|
setChipsProject = _useGlobalContext.setChipsProject;
|
|
35
37
|
var zIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
36
|
-
var allowedTypes =
|
|
37
|
-
var _useState = useState(
|
|
38
|
-
return resolveInitialPinType(allowedTypes);
|
|
39
|
-
}),
|
|
38
|
+
var allowedTypes = enabledTypes && enabledTypes.length > 0 ? enabledTypes : PIN_ALLOWED_TYPES;
|
|
39
|
+
var _useState = useState(allowedTypes.includes(PIN_DEFAULT_TYPE) ? PIN_DEFAULT_TYPE : allowedTypes[0]),
|
|
40
40
|
_useState2 = _slicedToArray(_useState, 2),
|
|
41
41
|
activeType = _useState2[0],
|
|
42
42
|
setActiveType = _useState2[1];
|
|
@@ -65,14 +65,21 @@ export var useContextPinPopover = function useContextPinPopover(_ref) {
|
|
|
65
65
|
searchValue = _useEntitySearch.searchValue,
|
|
66
66
|
updateSearchValue = _useEntitySearch.updateSearchValue;
|
|
67
67
|
var positionPopover = useCallback(function () {
|
|
68
|
-
var _popoverAnchorRef$cur, _topAnchorRef$current;
|
|
68
|
+
var _popoverAnchorRef$cur, _topAnchorRef$current, _topRect$top;
|
|
69
69
|
var inputRect = (_popoverAnchorRef$cur = popoverAnchorRef.current) === null || _popoverAnchorRef$cur === void 0 ? void 0 : _popoverAnchorRef$cur.getBoundingClientRect();
|
|
70
70
|
if (!inputRect || inputRect.width <= 0) return;
|
|
71
71
|
var topRect = topAnchorRef === null || topAnchorRef === void 0 || (_topAnchorRef$current = topAnchorRef.current) === null || _topAnchorRef$current === void 0 ? void 0 : _topAnchorRef$current.getBoundingClientRect();
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
var anchorTop = (_topRect$top = topRect === null || topRect === void 0 ? void 0 : topRect.top) !== null && _topRect$top !== void 0 ? _topRect$top : inputRect.top;
|
|
73
|
+
var viewportW = window.innerWidth;
|
|
74
|
+
var viewportH = window.innerHeight;
|
|
75
|
+
var width = inputRect.width;
|
|
76
|
+
var left = Math.max(8, Math.min(viewportW - width - 8, inputRect.left));
|
|
77
|
+
/** ~4px sobre el borde superior de la barra de contexto (chip), no del input. */
|
|
78
|
+
setPos({
|
|
79
|
+
width: width,
|
|
80
|
+
left: left,
|
|
81
|
+
bottom: viewportH - anchorTop + 4
|
|
82
|
+
});
|
|
76
83
|
}, [popoverAnchorRef, topAnchorRef]);
|
|
77
84
|
var close = useCallback(function () {
|
|
78
85
|
setOpen(false);
|
|
@@ -89,11 +96,63 @@ export var useContextPinPopover = function useContextPinPopover(_ref) {
|
|
|
89
96
|
});
|
|
90
97
|
}, [positionPopover, updateSearchValue]);
|
|
91
98
|
var commitPin = useCallback(function (item) {
|
|
92
|
-
var
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
99
|
+
var _raw$clientName;
|
|
100
|
+
var raw = item.raw;
|
|
101
|
+
var clientId = raw.clientId != null ? Number(raw.clientId) : undefined;
|
|
102
|
+
var clientName = (_raw$clientName = raw.clientName) !== null && _raw$clientName !== void 0 ? _raw$clientName : undefined;
|
|
103
|
+
if (item.type === 'client') {
|
|
104
|
+
var _raw$totalProyectos;
|
|
105
|
+
setProject(null);
|
|
106
|
+
setTask(null);
|
|
107
|
+
setChipsProject(null);
|
|
108
|
+
setClient({
|
|
109
|
+
id: Number(raw.id),
|
|
110
|
+
name: raw.name,
|
|
111
|
+
totalProyectos: (_raw$totalProyectos = raw.totalProyectos) !== null && _raw$totalProyectos !== void 0 ? _raw$totalProyectos : undefined
|
|
112
|
+
});
|
|
113
|
+
} else if (item.type === 'project') {
|
|
114
|
+
setTask(null);
|
|
115
|
+
setProject(_objectSpread(_objectSpread(_objectSpread({
|
|
116
|
+
id: Number(raw.id),
|
|
117
|
+
name: raw.name
|
|
118
|
+
}, clientId != null ? {
|
|
119
|
+
clientId: clientId
|
|
120
|
+
} : {}), raw.feeId != null ? {
|
|
121
|
+
feeId: raw.feeId
|
|
122
|
+
} : {}), clientId != null ? {
|
|
123
|
+
client: {
|
|
124
|
+
id: clientId,
|
|
125
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
126
|
+
}
|
|
127
|
+
} : {}));
|
|
128
|
+
// chipsProject hace visible el pin en el chip del orquestador (RFC §7).
|
|
129
|
+
setChipsProject({
|
|
130
|
+
projectId: String(raw.id),
|
|
131
|
+
projectName: raw.name,
|
|
132
|
+
clientName: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
133
|
+
});
|
|
134
|
+
setClient(clientId != null ? {
|
|
135
|
+
id: clientId,
|
|
136
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
137
|
+
} : null);
|
|
138
|
+
} else if (item.type === 'task') {
|
|
139
|
+
// El item de tarea no trae projectId fiable; subimos lo disponible (proyecto por nombre, cliente por id).
|
|
140
|
+
setTask(_objectSpread({
|
|
141
|
+
id: raw.id,
|
|
142
|
+
name: raw.name
|
|
143
|
+
}, clientId != null ? {
|
|
144
|
+
clientId: clientId
|
|
145
|
+
} : {}));
|
|
146
|
+
setChipsProject(raw.projectName ? {
|
|
147
|
+
projectId: '',
|
|
148
|
+
projectName: raw.projectName,
|
|
149
|
+
clientName: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
150
|
+
} : null);
|
|
151
|
+
if (clientId != null) setClient({
|
|
152
|
+
id: clientId,
|
|
153
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
154
|
+
});
|
|
155
|
+
}
|
|
97
156
|
onPinned === null || onPinned === void 0 || onPinned(item);
|
|
98
157
|
close();
|
|
99
158
|
}, [setProject, setClient, setTask, setChipsProject, onPinned, close]);
|
|
@@ -166,4 +225,4 @@ export var useContextPinPopover = function useContextPinPopover(_ref) {
|
|
|
166
225
|
popoverNode: popoverNode
|
|
167
226
|
};
|
|
168
227
|
};
|
|
169
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwiYnVpbGRDb250ZXh0UGluVXBkYXRlcyIsImNvbXB1dGVQb3BvdmVyUG9zaXRpb24iLCJyZXNvbHZlSW5pdGlhbFBpblR5cGUiLCJyZXNvbHZlUGluQWxsb3dlZFR5cGVzIiwianN4IiwiX2pzeCIsInVzZUNvbnRleHRQaW5Qb3BvdmVyIiwiX3JlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJ0b3BBbmNob3JSZWYiLCJ0cmlnZ2VyUmVmIiwiZW5hYmxlZFR5cGVzIiwib25QaW5uZWQiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2V0Q2hpcHNQcm9qZWN0IiwiekluZGV4IiwiYWxsb3dlZFR5cGVzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aXZlVHlwZSIsInNldEFjdGl2ZVR5cGUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIm9wZW4iLCJzZXRPcGVuIiwiX3VzZVN0YXRlNSIsImJvdHRvbSIsImxlZnQiLCJ3aWR0aCIsIl91c2VTdGF0ZTYiLCJwb3MiLCJzZXRQb3MiLCJfdXNlRW50aXR5U2VhcmNoIiwiaXRlbXMiLCJsb2FkaW5nIiwiZXJyb3IiLCJoaWRlUmVjZW50c0xhYmVsIiwiaGFzTW9yZSIsImlzTG9hZGluZ01vcmUiLCJsb2FkTW9yZSIsInNlYXJjaFZhbHVlIiwidXBkYXRlU2VhcmNoVmFsdWUiLCJwb3NpdGlvblBvcG92ZXIiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIiLCJfdG9wQW5jaG9yUmVmJGN1cnJlbnQiLCJpbnB1dFJlY3QiLCJjdXJyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wUmVjdCIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJoZWlnaHQiLCJpbm5lckhlaWdodCIsImNsb3NlIiwidG9nZ2xlIiwicHJldiIsImNvbW1pdFBpbiIsIml0ZW0iLCJ1cGRhdGVzIiwiY2xpZW50IiwicHJvamVjdCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJ1bmRlZmluZWQiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJBbmNob3JSZWYkY3VyMiIsIl90cmlnZ2VyUmVmJGN1cnJlbnQiLCJfY2xvc2VzdCIsIl9yZWYyIiwidGFyZ2V0IiwiY29udGFpbnMiLCJvdmVybGF5IiwiY2xvc2VzdCIsImNhbGwiLCJjb25jYXQiLCJkb2N1bWVudCIsInBvcG92ZXJOb2RlIiwiX29iamVjdFNwcmVhZCIsIl9kZWZpbmVQcm9wZXJ0eSIsIiRib3R0b20iLCIkbGVmdCIsIiR3aWR0aCIsIiR6SW5kZXgiLCJvbk1vdXNlRG93biIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJjaGlsZHJlbiIsIm9uVHlwZUNoYW5nZSIsIm9uUmVhY2hMaXN0RW5kIiwib25JdGVtU2VsZWN0ZWQiLCJzaG93U2VhcmNoSW5wdXQiLCJoaWRlVGFiUHJlZml4Iiwic2VhcmNoUGxhY2Vob2xkZXIiLCJkZWZhdWx0VmFsdWUiLCJvblNlYXJjaENoYW5nZSIsIm9uUmVxdWVzdENsb3NlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUNvbnRleHRQaW5Qb3BvdmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIENvbnRleHRNZW50aW9uUG9wb3ZlcixcbiAgTUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUixcbiAgU0NNUEFuY2hvcixcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlRW50aXR5U2VhcmNoIH0gZnJvbSAnLi91c2VFbnRpdHlTZWFyY2gnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQge1xuICBidWlsZENvbnRleHRQaW5VcGRhdGVzLFxuICBjb21wdXRlUG9wb3ZlclBvc2l0aW9uLFxuICByZXNvbHZlSW5pdGlhbFBpblR5cGUsXG4gIHJlc29sdmVQaW5BbGxvd2VkVHlwZXMsXG59IGZyb20gJy4vdXNlQ29udGV4dFBpblBvcG92ZXIuaGVscGVycydcblxuZXhwb3J0IHR5cGUgVXNlQ29udGV4dFBpblBvcG92ZXJPcHRpb25zID0ge1xuICAvKiogV3JhcHBlciBkZWwgTUFJQUlucHV0OiBkZWZpbmUgYW5jaG8geSBhbGluZWFjacOzbiBob3Jpem9udGFsIChpZ3VhbCBxdWUgQC1tZW50aW9ucykuICovXG4gIHBvcG92ZXJBbmNob3JSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gIC8qKiBGaWxhIGRlbCBjaGlwIC8gYmFycmEgZGUgY29udGV4dG86IGRlZmluZSBlbCBib3JkZSBzdXBlcmlvciB2ZXJ0aWNhbCBkZWwgcG9wb3Zlci4gKi9cbiAgdG9wQW5jaG9yUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIEJvdMOzbiBcIisgQ29udGV4dG9cIjsgbm8gY2VycmFyIGFsIGhhY2VyIGNsaWNrIGVuIGVsIHRyaWdnZXIuICovXG4gIHRyaWdnZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogT3ZlcnJpZGUgZGVsIHNldCBkZSB0YWJzIHBpbmVhYmxlczsgcG9yIGRlZmVjdG8gY2xpZW50ZS9wcm95ZWN0by90YXJlYS4gKi9cbiAgZW5hYmxlZFR5cGVzPzogQ29udGV4dEVudGl0eVR5cGVbXVxuICAvKiogQ2FsbGJhY2sgdHJhcyBmaWphciB1biBjb250ZXh0byAoYW5hbHl0aWNzIC8gY2llcnJlIGV4dGVybm8pLiAqL1xuICBvblBpbm5lZD86IChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgVXNlQ29udGV4dFBpblBvcG92ZXJSZXR1cm4gPSB7XG4gIG9wZW46IGJvb2xlYW5cbiAgLyoqIEFicmUvY2llcnJhIGVsIHBvcG92ZXIgKGhhbmRsZXIgZGVsIGJvdMOzbiBcIisgQ29udGV4dG9cIikuICovXG4gIHRvZ2dsZTogKCkgPT4gdm9pZFxuICBjbG9zZTogKCkgPT4gdm9pZFxuICAvKiogTm9kbyBkZWwgcG9wb3ZlcjsgZWwgY29uc3VtZXIgZGViZSBwb3J0YXJsbyBjb24gYGNyZWF0ZVBvcnRhbGAuICovXG4gIHBvcG92ZXJOb2RlOiBSZWFjdE5vZGUgfCBudWxsXG59XG5cbi8qKlxuICogU2VndW5kbyBwdW50byBkZSBlbnRyYWRhIGRlbCBidXNjYWRvciBkZSBjb250ZXh0byAoUkZDIMKnNik6IGVsIG1pc21vIG1vdG9yXG4gKiAoYHVzZUVudGl0eVNlYXJjaGAgKyBgQ29udGV4dE1lbnRpb25Qb3BvdmVyYCkgcGVybyBlbCBjb21taXQgZmlqYSB1biAqKnBpbioqXG4gKiBwZXJzaXN0ZW50ZSBlbiBlbCBjb250ZXh0byBnbG9iYWwgZW4gdmV6IGRlIGluc2VydGFyIHVuYSBtZW5jacOzbi5cbiAqXG4gKiBKZXJhcnF1w61hIG1vbm8tY29udGV4dG8gKFJGQyDCpzUuMSk6IHVuIHBpbiBhIGxhIHZlejsgZmlqYXIgdW5vIHJlZW1wbGF6YSBhbFxuICogYW50ZXJpb3IgeSBhcnJhc3RyYSBzdSBzY29wZSBoYWNpYSBhcnJpYmEgKHRhcmVhIOKHkiBwcm95ZWN0bytjbGllbnRlLCBldGMuKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUNvbnRleHRQaW5Qb3BvdmVyID0gKHtcbiAgcG9wb3ZlckFuY2hvclJlZixcbiAgdG9wQW5jaG9yUmVmLFxuICB0cmlnZ2VyUmVmLFxuICBlbmFibGVkVHlwZXMsXG4gIG9uUGlubmVkLFxufTogVXNlQ29udGV4dFBpblBvcG92ZXJPcHRpb25zKTogVXNlQ29udGV4dFBpblBvcG92ZXJSZXR1cm4gPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgekluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMjAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3QgYWxsb3dlZFR5cGVzID0gcmVzb2x2ZVBpbkFsbG93ZWRUeXBlcyhlbmFibGVkVHlwZXMpXG4gIGNvbnN0IFthY3RpdmVUeXBlLCBzZXRBY3RpdmVUeXBlXSA9IHVzZVN0YXRlPENvbnRleHRFbnRpdHlUeXBlPigoKSA9PiByZXNvbHZlSW5pdGlhbFBpblR5cGUoYWxsb3dlZFR5cGVzKSlcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwb3MsIHNldFBvc10gPSB1c2VTdGF0ZTx7IGJvdHRvbTogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfT4oeyBib3R0b206IDAsIGxlZnQ6IDAsIHdpZHRoOiAwIH0pXG5cbiAgLy8gU2NvcGUgc2luIHJlc3RyaWNjacOzbjogZGVzZGUgZWwgYm90w7NuIHNlIGJ1c2NhIGxpYnJlbWVudGUgY3VhbHF1aWVyIGVudGlkYWQgKG1vZG8gZ2xvYmFsKS5cbiAgY29uc3QgeyBpdGVtcywgbG9hZGluZywgZXJyb3IsIGhpZGVSZWNlbnRzTGFiZWwsIGhhc01vcmUsIGlzTG9hZGluZ01vcmUsIGxvYWRNb3JlLCBzZWFyY2hWYWx1ZSwgdXBkYXRlU2VhcmNoVmFsdWUgfSA9XG4gICAgdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUpXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0UmVjdCA9IHBvcG92ZXJBbmNob3JSZWYuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBpZiAoIWlucHV0UmVjdCB8fCBpbnB1dFJlY3Qud2lkdGggPD0gMCkgcmV0dXJuXG4gICAgY29uc3QgdG9wUmVjdCA9IHRvcEFuY2hvclJlZj8uY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBzZXRQb3MoXG4gICAgICBjb21wdXRlUG9wb3ZlclBvc2l0aW9uKGlucHV0UmVjdCwgdG9wUmVjdCwge1xuICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgfSlcbiAgICApXG4gIH0sIFtwb3BvdmVyQW5jaG9yUmVmLCB0b3BBbmNob3JSZWZdKVxuXG4gIGNvbnN0IGNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgdG9nZ2xlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4ocHJldiA9PiB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICB1cGRhdGVTZWFyY2hWYWx1ZSgnJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9KVxuICB9LCBbcG9zaXRpb25Qb3BvdmVyLCB1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgY29tbWl0UGluID0gdXNlQ2FsbGJhY2soXG4gICAgKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlcyA9IGJ1aWxkQ29udGV4dFBpblVwZGF0ZXMoaXRlbSlcbiAgICAgIHNldENsaWVudCh1cGRhdGVzLmNsaWVudClcbiAgICAgIHNldFByb2plY3QodXBkYXRlcy5wcm9qZWN0KVxuICAgICAgc2V0VGFzayh1cGRhdGVzLnRhc2spXG4gICAgICBzZXRDaGlwc1Byb2plY3QodXBkYXRlcy5jaGlwc1Byb2plY3QpXG4gICAgICBvblBpbm5lZD8uKGl0ZW0pXG4gICAgICBjbG9zZSgpXG4gICAgfSxcbiAgICBbc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QsIG9uUGlubmVkLCBjbG9zZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZXIsIHRydWUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgfVxuICB9LCBbb3BlbiwgcG9zaXRpb25Qb3BvdmVyXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSA9IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBtb3VzZUV2ZW50LnRhcmdldCBhcyBOb2RlIHwgbnVsbFxuICAgICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgICAgaWYgKHBvcG92ZXJBbmNob3JSZWYuY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuXG4gICAgICBpZiAodHJpZ2dlclJlZj8uY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuXG4gICAgICBjb25zdCBvdmVybGF5ID0gKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGBbJHtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSfV1gKVxuICAgICAgaWYgKG92ZXJsYXkpIHJldHVyblxuICAgICAgY2xvc2UoKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW29wZW4sIGNsb3NlLCBwb3BvdmVyQW5jaG9yUmVmLCB0cmlnZ2VyUmVmXSlcblxuICBjb25zdCBwb3BvdmVyTm9kZSA9IHVzZU1lbW88UmVhY3ROb2RlIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPFNDTVBBbmNob3JcbiAgICAgICAgey4uLnsgW01BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFJdOiAnJyB9fVxuICAgICAgICAkYm90dG9tPXtwb3MuYm90dG9tfVxuICAgICAgICAkbGVmdD17cG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9zLndpZHRofVxuICAgICAgICAkekluZGV4PXt6SW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17c2V0QWN0aXZlVHlwZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBvbkl0ZW1TZWxlY3RlZD17Y29tbWl0UGlufVxuICAgICAgICAgIHNob3dTZWFyY2hJbnB1dFxuICAgICAgICAgIGhpZGVUYWJQcmVmaXhcbiAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj17dCgnY29udGV4dFBpbi5zZWFyY2hQbGFjZWhvbGRlcicsIHsgZGVmYXVsdFZhbHVlOiAnQnVzY2FyIGNvbnRleHRv4oCmJyB9KX1cbiAgICAgICAgICBvblNlYXJjaENoYW5nZT17dXBkYXRlU2VhcmNoVmFsdWV9XG4gICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e2Nsb3NlfVxuICAgICAgICAvPlxuICAgICAgPC9TQ01QQW5jaG9yPlxuICAgIClcbiAgfSwgW1xuICAgIG9wZW4sXG4gICAgcG9zLFxuICAgIHpJbmRleCxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIGNvbW1pdFBpbixcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZSxcbiAgICBjbG9zZSxcbiAgICB0LFxuICBdKVxuXG4gIHJldHVybiB7IG9wZW4sIHRvZ2dsZSwgY2xvc2UsIHBvcG92ZXJOb2RlIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQStCQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN2RixTQUNFQyxxQkFBcUIsRUFDckJDLDRCQUE0QixFQUM1QkMsVUFBVSxRQUNMLDJDQUEyQztBQUNsRCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBQzVELFNBQVNDLElBQUksUUFBUSxRQUFRO0FBQzdCO0FBQ0EsU0FBU0MsZUFBZSxRQUFRLG1CQUFtQjtBQUVuRCxTQUNFQyxzQkFBc0IsRUFDdEJDLHNCQUFzQixFQUN0QkMscUJBQXFCLEVBQ3JCQyxzQkFBc0IsUUFDakIsZ0NBQWdDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBd0J2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFBQyxJQUFBLEVBTThCO0VBQUEsSUFMN0RDLGdCQUFnQixHQUFBRCxJQUFBLENBQWhCQyxnQkFBZ0I7SUFDaEJDLFlBQVksR0FBQUYsSUFBQSxDQUFaRSxZQUFZO0lBQ1pDLFVBQVUsR0FBQUgsSUFBQSxDQUFWRyxVQUFVO0lBQ1ZDLFlBQVksR0FBQUosSUFBQSxDQUFaSSxZQUFZO0lBQ1pDLFFBQVEsR0FBQUws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
|
|
228
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwianN4IiwiX2pzeCIsIlBJTl9BTExPV0VEX1RZUEVTIiwiUElOX0RFRkFVTFRfVFlQRSIsInVzZUNvbnRleHRQaW5Qb3BvdmVyIiwiX3JlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJ0b3BBbmNob3JSZWYiLCJ0cmlnZ2VyUmVmIiwiZW5hYmxlZFR5cGVzIiwib25QaW5uZWQiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2V0Q2hpcHNQcm9qZWN0IiwiekluZGV4IiwiYWxsb3dlZFR5cGVzIiwibGVuZ3RoIiwiX3VzZVN0YXRlIiwiaW5jbHVkZXMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib3BlbiIsInNldE9wZW4iLCJfdXNlU3RhdGU1IiwiYm90dG9tIiwibGVmdCIsIndpZHRoIiwiX3VzZVN0YXRlNiIsInBvcyIsInNldFBvcyIsIl91c2VFbnRpdHlTZWFyY2giLCJpdGVtcyIsImxvYWRpbmciLCJlcnJvciIsImhpZGVSZWNlbnRzTGFiZWwiLCJoYXNNb3JlIiwiaXNMb2FkaW5nTW9yZSIsImxvYWRNb3JlIiwic2VhcmNoVmFsdWUiLCJ1cGRhdGVTZWFyY2hWYWx1ZSIsInBvc2l0aW9uUG9wb3ZlciIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1ciIsIl90b3BBbmNob3JSZWYkY3VycmVudCIsIl90b3BSZWN0JHRvcCIsImlucHV0UmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3BSZWN0IiwiYW5jaG9yVG9wIiwidG9wIiwidmlld3BvcnRXIiwid2luZG93IiwiaW5uZXJXaWR0aCIsInZpZXdwb3J0SCIsImlubmVySGVpZ2h0IiwiTWF0aCIsIm1heCIsIm1pbiIsImNsb3NlIiwidG9nZ2xlIiwicHJldiIsImNvbW1pdFBpbiIsIml0ZW0iLCJfcmF3JGNsaWVudE5hbWUiLCJyYXciLCJjbGllbnRJZCIsIk51bWJlciIsInVuZGVmaW5lZCIsImNsaWVudE5hbWUiLCJ0eXBlIiwiX3JhdyR0b3RhbFByb3llY3RvcyIsImlkIiwibmFtZSIsInRvdGFsUHJveWVjdG9zIiwiX29iamVjdFNwcmVhZCIsImZlZUlkIiwiY2xpZW50IiwicHJvamVjdElkIiwiU3RyaW5nIiwicHJvamVjdE5hbWUiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJBbmNob3JSZWYkY3VyMiIsIl90cmlnZ2VyUmVmJGN1cnJlbnQiLCJfY2xvc2VzdCIsIl9yZWYyIiwidGFyZ2V0IiwiY29udGFpbnMiLCJvdmVybGF5IiwiY2xvc2VzdCIsImNhbGwiLCJjb25jYXQiLCJkb2N1bWVudCIsInBvcG92ZXJOb2RlIiwiX2RlZmluZVByb3BlcnR5IiwiJGJvdHRvbSIsIiRsZWZ0IiwiJHdpZHRoIiwiJHpJbmRleCIsIm9uTW91c2VEb3duIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImNoaWxkcmVuIiwib25UeXBlQ2hhbmdlIiwib25SZWFjaExpc3RFbmQiLCJvbkl0ZW1TZWxlY3RlZCIsInNob3dTZWFyY2hJbnB1dCIsImhpZGVUYWJQcmVmaXgiLCJzZWFyY2hQbGFjZWhvbGRlciIsImRlZmF1bHRWYWx1ZSIsIm9uU2VhcmNoQ2hhbmdlIiwib25SZXF1ZXN0Q2xvc2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQ29udGV4dFBpblBvcG92ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgQ29udGV4dE1lbnRpb25Qb3BvdmVyLFxuICBNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSLFxuICBTQ01QQW5jaG9yLFxufSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuL3VzZVQnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgeyB1c2VFbnRpdHlTZWFyY2ggfSBmcm9tICcuL3VzZUVudGl0eVNlYXJjaCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbkl0ZW0gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcblxuLyoqIFRpcG9zIHBpbmVhYmxlcyBjb21vIGNvbnRleHRvIHBlcnNpc3RlbnRlIChSRkMgwqc2OiBubyBpbmNsdXllIGB1c2VyYCwgcXVlIGVzIHNvbG8gbWVuY2nDs24pLiAqL1xuY29uc3QgUElOX0FMTE9XRURfVFlQRVM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snXVxuY29uc3QgUElOX0RFRkFVTFRfVFlQRTogQ29udGV4dEVudGl0eVR5cGUgPSAncHJvamVjdCdcblxuZXhwb3J0IHR5cGUgVXNlQ29udGV4dFBpblBvcG92ZXJPcHRpb25zID0ge1xuICAvKiogV3JhcHBlciBkZWwgTUFJQUlucHV0OiBkZWZpbmUgYW5jaG8geSBhbGluZWFjacOzbiBob3Jpem9udGFsIChpZ3VhbCBxdWUgQC1tZW50aW9ucykuICovXG4gIHBvcG92ZXJBbmNob3JSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gIC8qKiBGaWxhIGRlbCBjaGlwIC8gYmFycmEgZGUgY29udGV4dG86IGRlZmluZSBlbCBib3JkZSBzdXBlcmlvciB2ZXJ0aWNhbCBkZWwgcG9wb3Zlci4gKi9cbiAgdG9wQW5jaG9yUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIEJvdMOzbiBcIisgQ29udGV4dG9cIjsgbm8gY2VycmFyIGFsIGhhY2VyIGNsaWNrIGVuIGVsIHRyaWdnZXIuICovXG4gIHRyaWdnZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogT3ZlcnJpZGUgZGVsIHNldCBkZSB0YWJzIHBpbmVhYmxlczsgcG9yIGRlZmVjdG8gY2xpZW50ZS9wcm95ZWN0by90YXJlYS4gKi9cbiAgZW5hYmxlZFR5cGVzPzogQ29udGV4dEVudGl0eVR5cGVbXVxuICAvKiogQ2FsbGJhY2sgdHJhcyBmaWphciB1biBjb250ZXh0byAoYW5hbHl0aWNzIC8gY2llcnJlIGV4dGVybm8pLiAqL1xuICBvblBpbm5lZD86IChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgVXNlQ29udGV4dFBpblBvcG92ZXJSZXR1cm4gPSB7XG4gIG9wZW46IGJvb2xlYW5cbiAgLyoqIEFicmUvY2llcnJhIGVsIHBvcG92ZXIgKGhhbmRsZXIgZGVsIGJvdMOzbiBcIisgQ29udGV4dG9cIikuICovXG4gIHRvZ2dsZTogKCkgPT4gdm9pZFxuICBjbG9zZTogKCkgPT4gdm9pZFxuICAvKiogTm9kbyBkZWwgcG9wb3ZlcjsgZWwgY29uc3VtZXIgZGViZSBwb3J0YXJsbyBjb24gYGNyZWF0ZVBvcnRhbGAuICovXG4gIHBvcG92ZXJOb2RlOiBSZWFjdE5vZGUgfCBudWxsXG59XG5cbi8qKlxuICogU2VndW5kbyBwdW50byBkZSBlbnRyYWRhIGRlbCBidXNjYWRvciBkZSBjb250ZXh0byAoUkZDIMKnNik6IGVsIG1pc21vIG1vdG9yXG4gKiAoYHVzZUVudGl0eVNlYXJjaGAgKyBgQ29udGV4dE1lbnRpb25Qb3BvdmVyYCkgcGVybyBlbCBjb21taXQgZmlqYSB1biAqKnBpbioqXG4gKiBwZXJzaXN0ZW50ZSBlbiBlbCBjb250ZXh0byBnbG9iYWwgZW4gdmV6IGRlIGluc2VydGFyIHVuYSBtZW5jacOzbi5cbiAqXG4gKiBKZXJhcnF1w61hIG1vbm8tY29udGV4dG8gKFJGQyDCpzUuMSk6IHVuIHBpbiBhIGxhIHZlejsgZmlqYXIgdW5vIHJlZW1wbGF6YSBhbFxuICogYW50ZXJpb3IgeSBhcnJhc3RyYSBzdSBzY29wZSBoYWNpYSBhcnJpYmEgKHRhcmVhIOKHkiBwcm95ZWN0bytjbGllbnRlLCBldGMuKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUNvbnRleHRQaW5Qb3BvdmVyID0gKHtcbiAgcG9wb3ZlckFuY2hvclJlZixcbiAgdG9wQW5jaG9yUmVmLFxuICB0cmlnZ2VyUmVmLFxuICBlbmFibGVkVHlwZXMsXG4gIG9uUGlubmVkLFxufTogVXNlQ29udGV4dFBpblBvcG92ZXJPcHRpb25zKTogVXNlQ29udGV4dFBpblBvcG92ZXJSZXR1cm4gPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgekluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMjAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3QgYWxsb3dlZFR5cGVzID0gZW5hYmxlZFR5cGVzICYmIGVuYWJsZWRUeXBlcy5sZW5ndGggPiAwID8gZW5hYmxlZFR5cGVzIDogUElOX0FMTE9XRURfVFlQRVNcbiAgY29uc3QgW2FjdGl2ZVR5cGUsIHNldEFjdGl2ZVR5cGVdID0gdXNlU3RhdGU8Q29udGV4dEVudGl0eVR5cGU+KFxuICAgIGFsbG93ZWRUeXBlcy5pbmNsdWRlcyhQSU5fREVGQVVMVF9UWVBFKSA/IFBJTl9ERUZBVUxUX1RZUEUgOiBhbGxvd2VkVHlwZXNbMF1cbiAgKVxuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Bvcywgc2V0UG9zXSA9IHVzZVN0YXRlPHsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9Pih7IGJvdHRvbTogMCwgbGVmdDogMCwgd2lkdGg6IDAgfSlcblxuICAvLyBTY29wZSBzaW4gcmVzdHJpY2Npw7NuOiBkZXNkZSBlbCBib3TDs24gc2UgYnVzY2EgbGlicmVtZW50ZSBjdWFscXVpZXIgZW50aWRhZCAobW9kbyBnbG9iYWwpLlxuICBjb25zdCB7IGl0ZW1zLCBsb2FkaW5nLCBlcnJvciwgaGlkZVJlY2VudHNMYWJlbCwgaGFzTW9yZSwgaXNMb2FkaW5nTW9yZSwgbG9hZE1vcmUsIHNlYXJjaFZhbHVlLCB1cGRhdGVTZWFyY2hWYWx1ZSB9ID1cbiAgICB1c2VFbnRpdHlTZWFyY2goYWN0aXZlVHlwZSlcblxuICBjb25zdCBwb3NpdGlvblBvcG92ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgaW5wdXRSZWN0ID0gcG9wb3ZlckFuY2hvclJlZi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGlmICghaW5wdXRSZWN0IHx8IGlucHV0UmVjdC53aWR0aCA8PSAwKSByZXR1cm5cbiAgICBjb25zdCB0b3BSZWN0ID0gdG9wQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGFuY2hvclRvcCA9IHRvcFJlY3Q/LnRvcCA/PyBpbnB1dFJlY3QudG9wXG4gICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICBjb25zdCB2aWV3cG9ydEggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBpbnB1dFJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCBpbnB1dFJlY3QubGVmdCkpXG4gICAgLyoqIH40cHggc29icmUgZWwgYm9yZGUgc3VwZXJpb3IgZGUgbGEgYmFycmEgZGUgY29udGV4dG8gKGNoaXApLCBubyBkZWwgaW5wdXQuICovXG4gICAgc2V0UG9zKHsgd2lkdGgsIGxlZnQsIGJvdHRvbTogdmlld3BvcnRIIC0gYW5jaG9yVG9wICsgNCB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgdG9wQW5jaG9yUmVmXSlcblxuICBjb25zdCBjbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRPcGVuKGZhbHNlKVxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlKCcnKVxuICB9LCBbdXBkYXRlU2VhcmNoVmFsdWVdKVxuXG4gIGNvbnN0IHRvZ2dsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRPcGVuKHByZXYgPT4ge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgcG9zaXRpb25Qb3BvdmVyKClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgfSwgW3Bvc2l0aW9uUG9wb3ZlciwgdXBkYXRlU2VhcmNoVmFsdWVdKVxuXG4gIGNvbnN0IGNvbW1pdFBpbiA9IHVzZUNhbGxiYWNrKFxuICAgIChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHsgcmF3IH0gPSBpdGVtXG4gICAgICBjb25zdCBjbGllbnRJZCA9IHJhdy5jbGllbnRJZCAhPSBudWxsID8gTnVtYmVyKHJhdy5jbGllbnRJZCkgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSByYXcuY2xpZW50TmFtZSA/PyB1bmRlZmluZWRcblxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICBzZXRUYXNrKG51bGwpXG4gICAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgICBzZXRDbGllbnQoeyBpZDogTnVtYmVyKHJhdy5pZCksIG5hbWU6IHJhdy5uYW1lLCB0b3RhbFByb3llY3RvczogcmF3LnRvdGFsUHJveWVjdG9zID8/IHVuZGVmaW5lZCB9KVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBzZXRUYXNrKG51bGwpXG4gICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgIGlkOiBOdW1iZXIocmF3LmlkKSxcbiAgICAgICAgICBuYW1lOiByYXcubmFtZSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocmF3LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiByYXcuZmVlSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50OiB7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSA/PyAnJyB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIC8vIGNoaXBzUHJvamVjdCBoYWNlIHZpc2libGUgZWwgcGluIGVuIGVsIGNoaXAgZGVsIG9ycXVlc3RhZG9yIChSRkMgwqc3KS5cbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocmF3LmlkKSwgcHJvamVjdE5hbWU6IHJhdy5uYW1lLCBjbGllbnROYW1lOiBjbGllbnROYW1lID8/ICcnIH0pXG4gICAgICAgIHNldENsaWVudChjbGllbnRJZCAhPSBudWxsID8geyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgPz8gJycgfSA6IG51bGwpXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIC8vIEVsIGl0ZW0gZGUgdGFyZWEgbm8gdHJhZSBwcm9qZWN0SWQgZmlhYmxlOyBzdWJpbW9zIGxvIGRpc3BvbmlibGUgKHByb3llY3RvIHBvciBub21icmUsIGNsaWVudGUgcG9yIGlkKS5cbiAgICAgICAgc2V0VGFzayh7IGlkOiByYXcuaWQsIG5hbWU6IHJhdy5uYW1lLCAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QoXG4gICAgICAgICAgcmF3LnByb2plY3ROYW1lID8geyBwcm9qZWN0SWQ6ICcnLCBwcm9qZWN0TmFtZTogcmF3LnByb2plY3ROYW1lLCBjbGllbnROYW1lOiBjbGllbnROYW1lID8/ICcnIH0gOiBudWxsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGNsaWVudElkICE9IG51bGwpIHNldENsaWVudCh7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSA/PyAnJyB9KVxuICAgICAgfVxuXG4gICAgICBvblBpbm5lZD8uKGl0ZW0pXG4gICAgICBjbG9zZSgpXG4gICAgfSxcbiAgICBbc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QsIG9uUGlubmVkLCBjbG9zZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZXIsIHRydWUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgfVxuICB9LCBbb3BlbiwgcG9zaXRpb25Qb3BvdmVyXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSA9IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBtb3VzZUV2ZW50LnRhcmdldCBhcyBOb2RlIHwgbnVsbFxuICAgICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgICAgaWYgKHBvcG92ZXJBbmNob3JSZWYuY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuXG4gICAgICBpZiAodHJpZ2dlclJlZj8uY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuXG4gICAgICBjb25zdCBvdmVybGF5ID0gKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGBbJHtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSfV1gKVxuICAgICAgaWYgKG92ZXJsYXkpIHJldHVyblxuICAgICAgY2xvc2UoKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW29wZW4sIGNsb3NlLCBwb3BvdmVyQW5jaG9yUmVmLCB0cmlnZ2VyUmVmXSlcblxuICBjb25zdCBwb3BvdmVyTm9kZSA9IHVzZU1lbW88UmVhY3ROb2RlIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPFNDTVBBbmNob3JcbiAgICAgICAgey4uLnsgW01BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFJdOiAnJyB9fVxuICAgICAgICAkYm90dG9tPXtwb3MuYm90dG9tfVxuICAgICAgICAkbGVmdD17cG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9zLndpZHRofVxuICAgICAgICAkekluZGV4PXt6SW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17c2V0QWN0aXZlVHlwZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBvbkl0ZW1TZWxlY3RlZD17Y29tbWl0UGlufVxuICAgICAgICAgIHNob3dTZWFyY2hJbnB1dFxuICAgICAgICAgIGhpZGVUYWJQcmVmaXhcbiAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj17dCgnY29udGV4dFBpbi5zZWFyY2hQbGFjZWhvbGRlcicsIHsgZGVmYXVsdFZhbHVlOiAnQnVzY2FyIGNvbnRleHRv4oCmJyB9KX1cbiAgICAgICAgICBvblNlYXJjaENoYW5nZT17dXBkYXRlU2VhcmNoVmFsdWV9XG4gICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e2Nsb3NlfVxuICAgICAgICAvPlxuICAgICAgPC9TQ01QQW5jaG9yPlxuICAgIClcbiAgfSwgW1xuICAgIG9wZW4sXG4gICAgcG9zLFxuICAgIHpJbmRleCxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIGNvbW1pdFBpbixcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZSxcbiAgICBjbG9zZSxcbiAgICB0LFxuICBdKVxuXG4gIHJldHVybiB7IG9wZW4sIHRvZ2dsZSwgY2xvc2UsIHBvcG92ZXJOb2RlIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQStCQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN2RixTQUNFQyxxQkFBcUIsRUFDckJDLDRCQUE0QixFQUM1QkMsVUFBVSxRQUNMLDJDQUEyQztBQUNsRCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBQzVELFNBQVNDLElBQUksUUFBUSxRQUFRO0FBQzdCO0FBQ0EsU0FBU0MsZUFBZSxRQUFRLG1CQUFtQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQTtBQUduRDtBQUNBLElBQU1DLGlCQUFzQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFDNUUsSUFBTUMsZ0JBQW1DLEdBQUcsU0FBUztBQXdCckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBQUMsSUFBQSxFQU04QjtFQUFBLElBTDdEQyxnQkFBZ0IsR0FBQUQsSUFBQSxDQUFoQkMsZ0JBQWdCO0lBQ2hCQyxZ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QUFBLGFBQUEsS0FBQXVCLGVBQUEsS0FDRi9HLDRCQUE0QixFQUFHLEVBQUU7TUFDeENnSCxPQUFPLEVBQUV0RSxHQUFHLENBQUNKLE1BQU87TUFDcEIyRSxLQUFLLEVBQUV2RSxHQUFHLENBQUNILElBQUs7TUFDaEIyRSxNQUFNLEVBQUV4RSxHQUFHLENBQUNGLEtBQU07TUFDbEIyRSxPQUFPLEVBQUUzRixNQUFPO01BQ2hCNEYsV0FBVyxFQUFFLFNBQWJBLFdBQVdBLENBQUVDLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFBQyxRQUFBLGVBRXRDaEgsSUFBQSxDQUFDUixxQkFBcUI7UUFDcEIwQixZQUFZLEVBQUVBLFlBQWE7UUFDM0JNLFVBQVUsRUFBRUEsVUFBVztRQUN2QnlGLFlBQVksRUFBRXhGLGFBQWM7UUFDNUJhLEtBQUssRUFBRUEsS0FBTTtRQUNiQyxPQUFPLEVBQUVBLE9BQVE7UUFDakJDLEtBQUssRUFBRUEsS0FBTTtRQUNiQyxnQkFBZ0IsRUFBRUEsZ0JBQWlCO1FBQ25DQyxPQUFPLEVBQUVBLE9BQVE7UUFDakJDLGFBQWEsRUFBRUEsYUFBYztRQUM3QnVFLGNBQWMsRUFBRXRFLFFBQVM7UUFDekJDLFdBQVcsRUFBRUEsV0FBWTtRQUN6QnNFLGNBQWMsRUFBRS9DLFNBQVU7UUFDMUJnRCxlQUFlO1FBQ2ZDLGFBQWE7UUFDYkMsaUJBQWlCLEVBQUUzRyxDQUFDLENBQUMsOEJBQThCLEVBQUU7VUFBRTRHLFlBQVksRUFBRTtRQUFtQixDQUFDLENBQUU7UUFDM0ZDLGNBQWMsRUFBRTFFLGlCQUFrQjtRQUNsQzJFLGNBQWMsRUFBRXhEO01BQU0sQ0FDdkI7SUFBQyxFQUNRLENBQUM7RUFFakIsQ0FBQyxFQUFFLENBQ0RyQyxJQUFJLEVBQ0pPLEdBQUcsRUFDSGxCLE1BQU0sRUFDTkMsWUFBWSxFQUNaTSxVQUFVLEVBQ1ZjLEtBQUssRUFDTEMsT0FBTyxFQUNQQyxLQUFLLEVBQ0xDLGdCQUFnQixFQUNoQkMsT0FBTyxFQUNQQyxhQUFhLEVBQ2JDLFFBQVEsRUFDUkMsV0FBVyxFQUNYdUIsU0FBUyxFQUNUdEIsaUJBQWlCLEVBQ2pCbUIsS0FBSyxFQUNMdEQsQ0FBQyxDQUNGLENBQUM7RUFFRixPQUFPO0lBQUVpQixJQUFJLEVBQUpBLElBQUk7SUFBRXNDLE1BQU0sRUFBTkEsTUFBTTtJQUFFRCxLQUFLLEVBQUxBLEtBQUs7SUFBRXNDLFdBQVcsRUFBWEE7RUFBWSxDQUFDO0FBQzdDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|