@projectcor/maia-components 2.50.1-1 → 2.51.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.helpers.js +1 -3
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +1 -3
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +14 -24
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +10 -28
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +15 -19
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -8
- package/lib/components/atoms/ClientSelector/ClientSelector.js +13 -15
- package/lib/components/atoms/Fade/Fade.js +6 -10
- 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.attachments.helpers.js +2 -3
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +2 -3
- package/lib/components/atoms/MAIAInput/MAIAInput.js +99 -123
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +4 -9
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +5 -4
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +26 -28
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +14 -15
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +8 -6
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +4 -6
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +16 -25
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +72 -93
- package/lib/components/molecules/ChatAIHome/styles.js +78 -85
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +14 -30
- package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +1 -8
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -25
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- 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 +367 -63
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +2 -5
- package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +7 -11
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +1 -4
- 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/useAgentModel/useUpdateAgent.js +6 -7
- package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
- package/lib/hooks/useChatManager/useChatManager.js +7 -8
- package/lib/hooks/useEntitySearch.js +1 -3
- package/lib/hooks/useFrequentlyUsedActions.js +22 -61
- package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +15 -16
- package/lib/hooks/useProjectSummaryConfig.js +5 -10
- package/lib/index.js +2 -5
- package/lib/lang/br/index.js +2 -27
- package/lib/lang/en/index.js +2 -27
- package/lib/lang/es/index.js +2 -27
- package/lib/lang/fr/index.js +2 -27
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Agents/connectors.js +1 -3
- package/lib/store/sessions/sessionStreamManager.js +55 -51
- package/lib/store/useChatsStore.js +3 -4
- package/lib/styles/cascade.js +3 -29
- package/lib/styles/transitions.js +1 -3
- package/lib/types/global.d.js +1 -1
- package/lib/utils/hoursPlannerQuickActionType.js +1 -116
- package/lib/utils/imagePreprocessor.js +3 -14
- package/lib/utils/navigateContextEntity.js +2 -2
- package/lib/utils/openTaskInCorPanel.js +2 -2
- package/lib/utils/streamActivityMessages.helpers.js +4 -5
- package/lib/utils/streamActivityMessages.js +20 -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.helpers.spec.js +0 -63
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -183
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -139
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -385
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -94
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -396
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -526
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -169
- 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.helpers.spec.js +0 -45
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -133
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +0 -107
- 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.spec.js +0 -109
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -92
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -319
- 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 -66
- 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.attachments.helpers.spec.js +0 -113
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -381
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -719
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -92
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -193
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -32
- 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.spec.js +0 -35
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -146
- 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 -170
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
- 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 -8
- 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/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
- 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.helpers.spec.js +0 -71
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -120
- 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.helpers.spec.js +0 -25
- package/lib/components/atoms/TextArea/TextArea.spec.js +0 -126
- 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 -82
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -742
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -107
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -256
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -175
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -318
- 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.helpers.spec.js +0 -622
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -264
- 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.spec.js +0 -742
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -541
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -1394
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -1401
- 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.spec.js +0 -142
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +0 -69
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +0 -144
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +0 -95
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +0 -174
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +0 -99
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +0 -65
- 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.helpers.spec.js +0 -93
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -297
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +0 -62
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -221
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -104
- 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.helpers.spec.js +0 -119
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -464
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -1067
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1236
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +0 -77
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -503
- 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 -246
- 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 -291
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -284
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -343
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -197
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
- 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/formatExtensions.spec.js +0 -15
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
- package/lib/constants/maiaFeatureAccess.spec.js +0 -30
- package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
- package/lib/constants/maiaTaskPanelAccess.spec.js +0 -41
- package/lib/constants/permissions/clientRoleAccess.spec.js +0 -65
- package/lib/constants/permissions/utils.spec.js +0 -128
- package/lib/constants/plannerSyncEvents.spec.js +0 -31
- package/lib/constants/taskUrls.spec.js +0 -9
- 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.helpers.spec.js +0 -268
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -314
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -374
- package/lib/hooks/useAgentSuggestions.spec.js +0 -89
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -2027
- package/lib/hooks/useChatManager/useChatManager.spec.js +0 -2409
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -491
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -729
- package/lib/hooks/useChats/useChats.spec.js +0 -208
- package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
- package/lib/hooks/useClientSearch.spec.js +0 -86
- package/lib/hooks/useContextMentions.helpers.spec.js +0 -267
- package/lib/hooks/useContextMentions.spec.js +0 -338
- package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -183
- 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/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +0 -257
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEntitySearch.helpers.spec.js +0 -723
- package/lib/hooks/useEntitySearch.spec.js +0 -718
- package/lib/hooks/useEvent.spec.js +0 -45
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
- package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -293
- 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.spec.js +0 -100
- package/lib/hooks/useMentionPopover.spec.js +0 -392
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -176
- 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.helpers.spec.js +0 -138
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -417
- package/lib/hooks/useProjectSearch.helpers.spec.js +0 -89
- package/lib/hooks/useProjectSearch.spec.js +0 -91
- package/lib/hooks/useProjectSummary.spec.js +0 -193
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -151
- package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
- 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/appcues.spec.js +0 -37
- package/lib/services/maia/Access/updateAccess.spec.js +0 -137
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -121
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
- package/lib/services/maia/Agents/connectors.spec.js +0 -496
- 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.spec.js +0 -325
- package/lib/services/maia/Agents/getAgents.spec.js +0 -1135
- 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.spec.js +0 -225
- 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.helpers.spec.js +0 -336
- package/lib/services/utils/mapChatMessages.spec.js +0 -254
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -145
- 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.spec.js +0 -63
- package/lib/store/sessions/sessionNotifications.spec.js +0 -106
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +0 -177
- package/lib/store/sessions/sessionStreamManager.spec.js +0 -939
- 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/utils/actionCategoryMap.spec.js +0 -18
- package/lib/utils/agentDisplayName.spec.js +0 -48
- 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 -44
- 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 -136
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -124
- 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 -98
- package/lib/utils/openTaskInCorPanel.spec.js +0 -43
- 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.helpers.spec.js +0 -87
- package/lib/utils/renderContextMentions.spec.js +0 -268
- package/lib/utils/retryCompletion.spec.js +0 -181
- 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.helpers.spec.js +0 -84
- package/lib/utils/streamActivityMessages.spec.js +0 -336
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -382,14 +382,14 @@ export var resolveSendMessageGate = function resolveSendMessageGate(params) {
|
|
|
382
382
|
return null;
|
|
383
383
|
};
|
|
384
384
|
export var resolveSendMessagePayloadFields = function resolveSendMessagePayloadFields(options, positional) {
|
|
385
|
-
var _positional$faqId, _positional$agentSugg, _positional$mentions, _positional$fuaId, _positional$scId
|
|
385
|
+
var _positional$faqId, _positional$agentSugg, _positional$mentions, _positional$fuaId, _positional$scId;
|
|
386
386
|
return {
|
|
387
387
|
faqId: (_positional$faqId = positional === null || positional === void 0 ? void 0 : positional.faqId) !== null && _positional$faqId !== void 0 ? _positional$faqId : options.faqId,
|
|
388
388
|
agentSuggestionId: (_positional$agentSugg = positional === null || positional === void 0 ? void 0 : positional.agentSuggestionId) !== null && _positional$agentSugg !== void 0 ? _positional$agentSugg : options.agentSuggestionId,
|
|
389
389
|
mentions: (_positional$mentions = positional === null || positional === void 0 ? void 0 : positional.mentions) !== null && _positional$mentions !== void 0 ? _positional$mentions : options.mentions,
|
|
390
390
|
fuaId: (_positional$fuaId = positional === null || positional === void 0 ? void 0 : positional.fuaId) !== null && _positional$fuaId !== void 0 ? _positional$fuaId : options.fuaId,
|
|
391
391
|
scId: (_positional$scId = positional === null || positional === void 0 ? void 0 : positional.scId) !== null && _positional$scId !== void 0 ? _positional$scId : options.scId,
|
|
392
|
-
contextData:
|
|
392
|
+
contextData: options.contextData
|
|
393
393
|
};
|
|
394
394
|
};
|
|
395
395
|
export var buildChatHistoryFromMessages = function buildChatHistoryFromMessages(messages, authUserId) {
|
|
@@ -910,4 +910,4 @@ function _resolveActiveStreamFinishProcessing() {
|
|
|
910
910
|
}));
|
|
911
911
|
return _resolveActiveStreamFinishProcessing.apply(this, arguments);
|
|
912
912
|
}
|
|
913
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0hvdXJzQ2hhcmdlVG9vbCIsIkNoYXRIaXN0b3J5Um9sZSIsInJlYXNvbmluZ1N0b3JlIiwiYnVpbGRSZWFzb25pbmdUcmFjZSIsIm1hcENvbnRleHRDb21wYWN0aW9uIiwicmVzb2x2ZVJldHJ5VHVybklkIiwicmVhc29uaW5nVHJhY2VGb3IiLCJtZXNzYWdlSWQiLCJzbmFwc2hvdCIsImdldFNuYXBzaG90Iiwic3RlcHMiLCJsZW5ndGgiLCJzdW1tYXJ5IiwiY29tcGFjdGlvbkZvciIsInBheWxvYWQiLCJfcmVhc29uaW5nU3RvcmUkZ2V0U24iLCJjb21wYWN0aW9uIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwiY2hpcHNQcm9qZWN0IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJjaGlwc1Byb2plY3RJZCIsInByb2plY3RJZCIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VkIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJjdHhDbGllbnQiLCJjdHhQcm9qZWN0IiwiX2N0eFByb2plY3QkY2xpZW50IiwiaWQiLCJfb2JqZWN0U3ByZWFkIiwiY2xpZW50SWQiLCJuYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwicGFyc2VkU2l6ZSIsImZpbGUiLCJGaWxlIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJpc1Rhc2tFZGl0VG9vbE5hbWUiLCJpc1Rhc2tEZWxldGVUb29sTmFtZSIsInBlbmRpbmdBY3Rpb25zSW5jbHVkZVRvb2wiLCJ0b29scyIsInNvbWUiLCJyZXNvbHZlQXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwiYXBwcm92YWxTdGF0dXMiLCJhcHByb3ZlZCIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJzaG91bGRTeW5jVGFza0Rhc2hib2FyZCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJyZXNvbHZlVGFza0lkc0ZvckRhc2hib2FyZCIsImNvbnRlbnQiLCJ0YXNrVXJsUmVnZXgiLCJ0YXNrSWRzRnJvbVVybHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYXRjaEFsbCIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInJlcGxhY2VUYXNrVXJsc1dpdGhUYWJTZWdtZW50IiwidGFiU2VnbWVudCIsInJlcGxhY2UiLCJ1cmwiLCJyZXNvbHZlUHJvamVjdERhc2hib2FyZFN5bmMiLCJjb250ZXh0UHJvamVjdElkIiwicGF0aG5hbWUiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJCb29sZWFuIiwicmVzb2x2ZUNyZWF0ZUFnZW50Rm9sbG93VXAiLCJmbGFncyIsIm11bHRpQWdlbnRzQWNjZXNzIiwiY29tcGxldGVkQWdlbnRJZCIsImNvbmZpZ3VyZWRBZ2VudElkIiwicmVzb2x2ZUVkaXRBZ2VudEZvbGxvd1VwIiwicmVzb2x2ZWRBZ2VudElkIiwic2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwiLCJvcGVuVGFza1BhbmVsSWQiLCJtYW51YWxGbGFncyIsImFmZmVjdGVkVGFza0lkcyIsInRhc2tGbG93QWN0aXZlIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwicmVzb2x2ZVN0cmVhbUVycm9yUHJlc2VudGF0aW9uIiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsImlzQWNjZXNzRGVuaWVkIiwiaXNQcm9tcHRUb29Mb25nIiwidG9rZW5zVXNlZCIsInNob3dSZXRyeSIsInJlc29sdmVTdHJlYW1FcnJvck1lc3NhZ2VLZXkiLCJwcmVzZW50YXRpb24iLCJtZXNzYWdlS2V5IiwicmVzb2x2ZVByb2plY3REYXNoYm9hcmRNdXRhdGlvbiIsImFwcGx5UHJvamVjdERhc2hib2FyZE11dGF0aW9uIiwibXV0YXRpb24iLCJ0YXNrSWRzIiwiZGFzaGJvYXJkIiwiX2Rhc2hib2FyZCRkZWxldGVFeGlzIiwiX2Rhc2hib2FyZCRhZGRFeGlzdGluIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJjYWxsIiwiX2Rhc2hib2FyZCRlZGl0RXhpc3RpIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsIm1lcmdlQWZmZWN0ZWRUYXNrSWRzRm9yUGFuZWxSZWZldGNoIiwibWFudWFsQXBwcm92YWwiLCJtYW51YWxQc2V1ZG9BY3Rpb25zIiwiX21hbnVhbEFwcHJvdmFsJHRvb2xBIiwidG9vbEFyZ3MiLCJ0aHJlYWRfaWQiLCJ0b29sX2NhbGxfaWQiLCJtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyIiwiYXV0aFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEluTGlzdCIsInRocmVhZElkcyIsIm1lc3NhZ2VzIiwic2Vzc2lvbklkIiwiZm91bmQiLCJtZXNzYWdlIiwiX21lc3NhZ2UkYXBwcm92YWwiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNlc3Npb25faWQiLCJjYW5TZW5kQ2hhdE1lc3NhZ2UiLCJpc1Byb2Nlc3NpbmciLCJ3YWl0aW5nUmVzcG9uc2UiLCJsb2FkaW5nTWVzc2FnZXMiLCJzaG91bGRCbG9ja0NvbmN1cnJlbnRTdHJlYW1TdGFydCIsIndpbGxTdGFydE5ld1N0cmVhbSIsImFjdGl2ZUNvdW50IiwibWF4Q29uY3VycmVudCIsInJlc29sdmVTZW5kTWVzc2FnZUdhdGUiLCJwYXJhbXMiLCJhY3RpdmVTdHJlYW1Db3VudCIsInJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMiLCJwb3NpdGlvbmFsIiwiX3Bvc2l0aW9uYWwkZmFxSWQiLCJfcG9zaXRpb25hbCRhZ2VudFN1Z2ciLCJfcG9zaXRpb25hbCRtZW50aW9ucyIsIl9wb3NpdGlvbmFsJGZ1YUlkIiwiX3Bvc2l0aW9uYWwkc2NJZCIsIl9wb3NpdGlvbmFsJGNvbnRleHREYSIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiYnVpbGRDaGF0SGlzdG9yeUZyb21NZXNzYWdlcyIsImF1dGhVc2VySWQiLCJoaXN0b3J5TWVzc2FnZSIsInVzZXIiLCJVU0VSIiwiQVNTSVNUQU5UIiwicmVzb2x2ZUxhc3RNZXNzYWdlQWdlbnRJZCIsIl9tZXNzYWdlcyRhdCIsImF0IiwicmVzb2x2ZUFnZW50SWRGb3JTdHJlYW0iLCJhZ2VudElkRnJvbU1lc3NhZ2VzIiwiZmFsbGJhY2tBZ2VudElkIiwicmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCIsInR1cm5NZXNzYWdlSWQiLCJidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCIsIl9wYXJhbXMkY3R4UHJvamVjdCIsIl9wYXJhbXMkY3R4VGFzayIsImhpc3RvcnkiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiY2hhdElkIiwiYWdlbnROYW1lIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJpc0F1dG9BcHByb3ZlQWN0aXZlIiwiZmVlSWQiLCJwcm9qZWN0TmFtZSIsImN0eFRhc2siLCJ0YXNrSWQiLCJ0YXNrTmFtZSIsImFnZW50RW50aXR5IiwiYWdlbnRUeXBlIiwiYWdlbnRFbW9qaSIsImNvbnRleHRNZXNzYWdlIiwiYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlIiwicHJvamVjdCIsInJlc29sdmVTdHJlYW1FcnJvckhhbmRsaW5nTW9kZSIsImhhc1JldHJ5U25hcHNob3QiLCJyZXNvbHZlU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlSWQiLCJidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSIsImlzRXJyb3IiLCJzdWdnZXN0aW9ucyIsInJldHJ5TGFiZWwiLCJkYXRlIiwiRGF0ZSIsInNob3VsZFNraXBIaXRsQXBwcm92YWxVaSIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImF1dG9fYXBwcm92ZWQiLCJhcHByb3ZhbF9zdGF0dXMiLCJyZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lIiwiYXBwcm92YWxNZXNzYWdlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlIiwiYWNjdW11bGF0ZWRDb250ZW50IiwicmVhc29uaW5nIiwic2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AiLCJzdG9wcGVkVHJhY2UiLCJidWlsZFN0cmVhbVN0b3BQYXJ0aWFsQXNzaXN0YW50TWVzc2FnZSIsImZpbmFsTWVzc2FnZUlkIiwicGFydGlhbFRleHQiLCJidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlIiwiY2FuY2VsbGVkTWVzc2FnZUlkIiwiY2FuY2VsbGVkTGFiZWwiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwicmVzb2x2ZVJldHJ5QmxvY2tSZWFzb24iLCJpc1Nlc3Npb25TdHJlYW1BY3RpdmUiLCJzaG91bGRVc2VPcmNoZXN0cmF0b3JSZXRyeUZhbGxiYWNrIiwiX21lc3NhZ2UkbWVtb3J5U2Vzc2lvIiwibWVtb3J5U2Vzc2lvbklkIiwicmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHkiLCJwcmV2aW91c01lc3NhZ2VzIiwidXNlck1lc3NhZ2UiLCJfdXNlck1lc3NhZ2UkbWVzc2FnZSIsIl91c2VyTWVzc2FnZSRhdHRhY2htZSIsIl91c2VyTWVzc2FnZSRzb3VyY2VzIiwiaXRlbSIsImVsaWdpYmxlIiwicmVhc29uIiwic291cmNlcyIsInR1cm5JZCIsInVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIiwicmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzIiwic2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlIiwibmV4dFByb2plY3RJZCIsImN1cnJlbnRQcm9qZWN0SWQiLCJzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UiLCJ1c2VyUXVlc3Rpb24iLCJyZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyIsImRlY2lzaW9uIiwicmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwicmVzb2x2ZUFwcHJvdmFsU3RyZWFtQmxvY2tSZWFzb24iLCJfcGFyYW1zJHRocmVhZElkcyIsImhhc0FwcHJvdmFsTWVzc2FnZSIsInJlc29sdmVIb3Vyc0NoYXJnZVRvb2xzT25TdHJlYW1GaW5pc2giLCJtYW51YWxBcHByb3ZhbFRvb2xOYW1lIiwiaG91cnNUb29sc0Zyb21BcHByb3ZhbCIsIndhc0hvdXJzQ2hhcmdlQXBwcm92ZWQiLCJmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzIiwiYWN0aXZlTWVzc2FnZXMiLCJzZXNzaW9uTWVzc2FnZXNCeUlkIiwiYWN0aXZlU2Vzc2lvbklkIiwiZnJvbUFjdGl2ZVZpZXciLCJzZXNzaW9uRW50cnkiLCJPYmplY3QiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5Iiwic2Vzc2lvbk1lc3NhZ2VzIiwiX21lc3NhZ2UkYXBwcm92YWwyIiwiX3Nlc3Npb25FbnRyeSIsInJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1TdG9wTWVzc2FnZUlkcyIsImN1cnJlbnRNZXNzYWdlSWQiLCJyZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UiLCJyZW50YWJpbGlkYWRMYWJlbCIsImluY29tZVR5cGUiLCJyZXNvbHZlU3RyZWFtRXJyb3JVc2VyTWVzc2FnZSIsInRyYW5zbGF0ZSIsInVzZWQiLCJyZXNvbHZlUHJldmlvdXNBc3Npc3RhbnRNZXNzYWdlQmVmb3JlUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlcklkIiwicmVzb2x2ZUhpdGxFeGVjdXRpb25Db250ZXh0IiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0MiIsIm1lc3NhZ2VUZXh0IiwidGhyZWFkSWQiLCJyZXNvbHZlU2tpcHBlZEhpdGxNYW51YWxBcHByb3ZhbCIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDMiLCJfcmVmNCIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiZmlyc3RBY3Rpb24iLCJyZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlIiwicmVzb2x2ZUNyZWF0ZUFnZW50SGl0bEFuYWx5dGljc0V2ZW50cyIsIl9wYXJhbXMkY29tcGxldGVkQWdlbiIsImV2ZW50cyIsInRyaW1tZWRBZ2VudElkIiwiaWRGaWVsZCIsImNyZWF0ZWRfYWdlbnRfaWQiLCJhZ2VudF90eXBlIiwiYWN0aW9uX3R5cGUiLCJidWlsZEFjdGlvblR5cGVMaXN0Iiwib3B0aW9uIiwibWFudWFsVG9vbCIsIm5vcm1hbGl6ZVRvb2xOYW1lIiwicmVzb2x1dGlvbl9zb3VyY2UiLCJyZXNvbHZlQ29udGV4dFByb2plY3RJZEZvckRhc2hib2FyZCIsInJlc29sdmVEYXNoYm9hcmRTeW5jZWRDb250ZW50IiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNob3VsZFN5bmNEYXNoYm9hcmQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsIm1hdGNoZXMiLCJ0YWIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfeDUiLCJhcHBseSIsImFyZ3VtZW50cyIsImlzVGVybWluYWxTZXNzaW9uU3RhdHVzIiwic3RhdHVzIiwiYnVpbGRUZXJtaW5hbFNlc3Npb25SZWNvbmNpbGlhdGlvbktleSIsImZpbmlzaGVkQXQiLCJoYXNTdGFsZVN0cmVhbWluZ1BsYWNlaG9sZGVySW5UYWlsIiwidGFpbCIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXIiLCJzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24iLCJzaG91bGRSb3RhdGVTZXNzaW9uRm9yTmV3SG9tZSIsImluaXRpYWxDaGF0SWQiLCJwcmV2aW91c0luaXRpYWxDaGF0SWQiLCJzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbiIsImN1cnJlbnRDaGF0SWQiLCJidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2UiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwic2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2giLCJpc0FjdGl2ZSIsImlzQ2hhdFZpZXdWaXNpYmxlIiwic2hvdWxkRGlzcGF0Y2hGaXJzdFNlc3Npb25SZWZldGNoIiwiZmlyc3RUaW1lIiwicmVzb2x2ZUFjdGl2ZVN0cmVhbUZpbmlzaFByb2Nlc3NpbmciLCJfeDYiLCJfcmVzb2x2ZUFjdGl2ZVN0cmVhbUZpbmlzaFByb2Nlc3NpbmciLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl9wYXJhbXMkbWFudWFsQXBwcm92YSIsIl9wYXJhbXMkbWFudWFsQXBwcm92YTIiLCJfcGFyYW1zJG1hbnVhbEFwcHJvdmEzIiwiX3BhcmFtcyRtYW51YWxBcHByb3ZhNCIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsIl9yZXNvbHZlQXBwcm92ZWRQZW5kaSIsImVkaXRBZ2VudEZvbGxvd1VwIiwibGFzdFByb2plY3RNZXNzYWdlIiwiX3Jlc29sdmVQcm9qZWN0RGFzaGJvIiwiaG91cnNDaGFyZ2VUb29scyIsIl9jb250ZXh0MiIsInRlbXBNZXNzYWdlSWQiLCJtc2ciLCJhcHBseURhc2hib2FyZE11dGF0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLmhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNIb3Vyc0NoYXJnZVRvb2wgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIEFwcHJvdmFsUmVxdWVzdCxcbiAgQ2hhdEhpc3RvcnksXG4gIENoYXRIaXN0b3J5Um9sZSxcbiAgQ2hhdE1lc3NhZ2UsXG4gIENoYXRNZXNzYWdlVXNlcixcbiAgUGVuZGluZ0FjdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgYnVpbGRSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JlYXNvbmluZ01hcHBlcnMnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgeyBtYXBDb250ZXh0Q29tcGFjdGlvbiwgdHlwZSBDb250ZXh0Q29tcGFjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRDb21wYWN0aW9uJ1xuaW1wb3J0IHR5cGUgeyBTZW5kTWVzc2FnZU9wdGlvbnMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB0eXBlIHsgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgdHlwZSB7IEFnZW50RW50aXR5LCBBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCB9IGZyb20gJy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuLyoqIFRyYWNlIGFjdW11bGFkbyBlbiB2aXZvIHBhcmEgYG1lc3NhZ2VJZGAsIG8gbnVsbCBzaSBlbCBzdG9yZSBhcHVudGEgYSBvdHJvIG1lbnNhamUuICovXG5leHBvcnQgY29uc3QgcmVhc29uaW5nVHJhY2VGb3IgPSAobWVzc2FnZUlkOiBzdHJpbmcpOiBSZWFzb25pbmdUcmFjZSB8IG51bGwgPT4ge1xuICBjb25zdCBzbmFwc2hvdCA9IHJlYXNvbmluZ1N0b3JlLmdldFNuYXBzaG90KG1lc3NhZ2VJZClcbiAgaWYgKCFzbmFwc2hvdC5zdGVwcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIHJldHVybiBidWlsZFJlYXNvbmluZ1RyYWNlKHNuYXBzaG90LnN0ZXBzLCBzbmFwc2hvdC5zdW1tYXJ5KVxufVxuXG4vKiogQXZpc28gZGUgY29tcGFjdGFjacOzbjogc3RvcmUgZW4gdml2bywgbyBlbCBgY29tcGxldGVgIHBlcnNpc3RpZG8uIENhcHR1cmFyIGFudGVzIGRlbCBgcmVuYW1lYC4gKi9cbmV4cG9ydCBjb25zdCBjb21wYWN0aW9uRm9yID0gKG1lc3NhZ2VJZDogc3RyaW5nLCBwYXlsb2FkPzogUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCk6IENvbnRleHRDb21wYWN0aW9uIHwgbnVsbCA9PlxuICByZWFzb25pbmdTdG9yZS5nZXRTbmFwc2hvdChtZXNzYWdlSWQpLmNvbXBhY3Rpb24gPz8gbWFwQ29udGV4dENvbXBhY3Rpb24ocGF5bG9hZD8uY29tcGFjdGlvbilcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuLyoqIGNoaXBzUHJvamVjdCBlcyBsYSBmdWVudGUgZGUgdmVyZGFkIGRlbCBwaW4gdmlzaWJsZTsgc2kgbm8gaGF5IHBpbiwgcmVzdGF1cmFyIGRlc2RlIGhpc3RvcmlhbC4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvamVjdFRvUmVxdWVzdCA9IChcbiAgY2hpcHNQcm9qZWN0OiB7IHByb2plY3RJZD86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbGFzdE1lc3NhZ2VQcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IG51bWJlciB8IG51bGwgPT4ge1xuICBjb25zdCBjaGlwc1Byb2plY3RJZCA9IGNoaXBzUHJvamVjdD8ucHJvamVjdElkID8gTnVtYmVyKGNoaXBzUHJvamVjdC5wcm9qZWN0SWQpIDogbnVsbFxuICBpZiAoY2hpcHNQcm9qZWN0SWQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoY2hpcHNQcm9qZWN0SWQpKSB7XG4gICAgcmV0dXJuIGNoaXBzUHJvamVjdElkXG4gIH1cbiAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ2xpZW50UGF5bG9hZCA9IChcbiAgY3R4Q2xpZW50OiB7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjdHhQcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogeyBjbGllbnRJZD86IG51bWJlcjsgY2xpZW50TmFtZT86IHN0cmluZyB9ID0+IHtcbiAgaWYgKGN0eENsaWVudD8uaWQpIHtcbiAgICByZXR1cm4geyBjbGllbnRJZDogY3R4Q2xpZW50LmlkLCAuLi4oY3R4Q2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eENsaWVudC5uYW1lIH0gOiB7fSkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IE51bWJlcihjdHhQcm9qZWN0LmNsaWVudElkKSB9XG4gIH1cbiAgaWYgKGN0eFByb2plY3Q/LmNsaWVudD8uaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50SWQ6IGN0eFByb2plY3QuY2xpZW50LmlkLFxuICAgICAgLi4uKGN0eFByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eFByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt9XG59XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBsZXQgbnVtZXJpY1NpemUgPSAwXG4gICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQuc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbnVtZXJpY1NpemUgPSBhdHRhY2htZW50LnNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNpemUgPSBOdW1iZXIoYXR0YWNobWVudC5zaXplKVxuICAgICAgICBudW1lcmljU2l6ZSA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWRTaXplKSA/IHBhcnNlZFNpemUgOiAwXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBmdWxsRmlsZU5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSksXG4gICAgICAgIGlkOlxuICAgICAgICAgIHR5cGVvZiBhdHRhY2htZW50LmlkID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LmlkLnRyaW0oKVxuICAgICAgICAgICAgPyBhdHRhY2htZW50LmlkXG4gICAgICAgICAgICA6IGBhc3Npc3RhbnQtZmlsZS0ke2luZGV4fS0ke2Z1bGxGaWxlTmFtZX1gLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzaXplOiBudW1lcmljU2l6ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXJsX29yaWdpbmFsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF90aHVtYm5haWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfZmlsZTogdHlwZW9mIGF0dGFjaG1lbnQudXJsX2ZpbGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfZmlsZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcm9sZTogYXR0YWNobWVudC5yb2xlID09PSAnYXNzaXN0YW50JyA/ICdhc3Npc3RhbnQnIDogJ3VzZXInLFxuICAgICAgfVxuICAgIH0pXG59XG5cbi8qKiBFeHRyYWUgdGFza19pZHMgZGUgbG9zIHRvb2xfYXJncyBkZSBwZW5kaW5nX2FjdGlvbnMuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzID0gKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBjb25zdCBwdXNoSWQgPSAocmF3OiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm5cbiAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICB9XG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBwdXNoSWQocmVjLnRhc2tfaWQgPz8gcmVjLmlkKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrX2lkcykpIHtcbiAgICAgIHJlYy50YXNrX2lkcy5mb3JFYWNoKHB1c2hJZClcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tzKSkge1xuICAgICAgcmVjLnRhc2tzLmZvckVhY2godCA9PiB7XG4gICAgICAgIGlmICh0ICYmIHR5cGVvZiB0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0KSkge1xuICAgICAgICAgIGNvbnN0IHRyZWMgPSB0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgcHVzaElkKHRyZWMudGFza19pZCA/PyB0cmVjLmlkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMgPSAocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdID0+IHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zID0gKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgZWRpdEFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcbiAgaWYgKFxuICAgICFlZGl0QWN0aW9uIHx8XG4gICAgIWVkaXRBY3Rpb24udG9vbF9hcmdzIHx8XG4gICAgdHlwZW9mIGVkaXRBY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkoZWRpdEFjdGlvbi50b29sX2FyZ3MpXG4gICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gZWRpdEFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lID0gKFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLFxuICB0b29sTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5leHBvcnQgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJywgJ2Nsb25lX3Rhc2snXSBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IFRBU0tfRURJVF9UT09MUyA9IFtcbiAgJ2VkaXRfdGFzaycsXG4gICdlZGl0X3Rhc2tzX2JhdGNoJyxcbiAgJ3Rhc2tfYXNzaWduJyxcbiAgJ3Rhc2tfdW5hc3NpZ24nLFxuICAndXBkYXRlX3Rhc2tfdHlwZScsXG4gICd1cGRhdGVfZXN0aW1hdGVkX2hvdXJzJyxcbiAgJ2Fzc2lnbl90YXNrX2xhYmVsJyxcbl0gYXMgY29uc3RcbmV4cG9ydCBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IGlzVGFza0VkaXRUb29sTmFtZSA9ICh0b29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgISF0b29sTmFtZSAmJiAoVEFTS19FRElUX1RPT0xTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh0b29sTmFtZSlcblxuZXhwb3J0IGNvbnN0IGlzVGFza0RlbGV0ZVRvb2xOYW1lID0gKHRvb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogYm9vbGVhbiA9PlxuICAhIXRvb2xOYW1lICYmIChUQVNLX0RFTEVURV9UT09MUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModG9vbE5hbWUpXG5cbmNvbnN0IHBlbmRpbmdBY3Rpb25zSW5jbHVkZVRvb2wgPSAocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSwgdG9vbHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiA9PlxuICBwZW5kaW5nQWN0aW9ucy5zb21lKGFjdGlvbiA9PiB0b29scy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lIHx8ICcnKSlcblxuZXhwb3J0IHR5cGUgQXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MgPSB7XG4gIHdhc1Rhc2tDcmVhdGlvbjogYm9vbGVhblxuICB3YXNUYXNrRWRpdDogYm9vbGVhblxuICB3YXNUYXNrRGVsZXRlOiBib29sZWFuXG4gIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQ6IGJvb2xlYW5cbiAgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZDogYm9vbGVhblxuICB3YXNFZGl0QWdlbnRBcHByb3ZlZDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFwcHJvdmVkUGVuZGluZ0FjdGlvbkZsYWdzID0gKFxuICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlOiBib29sZWFuLFxuICBhcHByb3ZhbFN0YXR1czogQ2hhdE1lc3NhZ2VbJ2FwcHJvdmFsU3RhdHVzJ10sXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW11cbik6IEFwcHJvdmVkUGVuZGluZ0FjdGlvbkZsYWdzID0+IHtcbiAgY29uc3QgYXBwcm92ZWQgPSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIGFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnXG5cbiAgcmV0dXJuIHtcbiAgICB3YXNUYXNrQ3JlYXRpb246IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnNJbmNsdWRlVG9vbChwZW5kaW5nQWN0aW9ucywgVEFTS19DUkVBVElPTl9UT09MUyksXG4gICAgd2FzVGFza0VkaXQ6IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnNJbmNsdWRlVG9vbChwZW5kaW5nQWN0aW9ucywgVEFTS19FRElUX1RPT0xTKSxcbiAgICB3YXNUYXNrRGVsZXRlOiBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zSW5jbHVkZVRvb2wocGVuZGluZ0FjdGlvbnMsIFRBU0tfREVMRVRFX1RPT0xTKSxcbiAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkOiBhcHByb3ZlZCAmJiBwZW5kaW5nQWN0aW9uc0luY2x1ZGVUb29sKHBlbmRpbmdBY3Rpb25zLCBbJ2NyZWF0ZV9hZ2VudCddKSxcbiAgICB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkOlxuICAgICAgYXBwcm92ZWQgJiYgcGVuZGluZ0FjdGlvbnMuc29tZShhY3Rpb24gPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJyksXG4gICAgd2FzRWRpdEFnZW50QXBwcm92ZWQ6XG4gICAgICBhcHByb3ZlZCAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKGFjdGlvbiA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU3luY1Rhc2tEYXNoYm9hcmQgPSAoXG4gIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2U6IGJvb2xlYW4sXG4gIHdhc1Rhc2tDcmVhdGlvbjogYm9vbGVhbixcbiAgd2FzVGFza0VkaXQ6IGJvb2xlYW4sXG4gIHdhc1Rhc2tEZWxldGU6IGJvb2xlYW4sXG4gIHRhc2tJZHNGb3JEYXNoYm9hcmQ6IG51bWJlcltdXG4pOiBib29sZWFuID0+XG4gIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgKHdhc1Rhc2tDcmVhdGlvbiB8fCB3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlKSAmJiB0YXNrSWRzRm9yRGFzaGJvYXJkLmxlbmd0aCA+IDBcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVUYXNrSWRzRm9yRGFzaGJvYXJkID0gKFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHRhc2tVcmxSZWdleDogUmVnRXhwLFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLFxuICB3YXNUYXNrRGVsZXRlOiBib29sZWFuXG4pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHRhc2tJZHNGcm9tVXJscyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICBjb25zdCB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsID0gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG4gIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0ID1cbiAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgID8gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KGNvbnRlbnQpXG4gICAgICA6IFtdXG5cbiAgaWYgKHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPiAwKSByZXR1cm4gdGFza0lkc0Zyb21VcmxzXG4gIGlmICh0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDApIHJldHVybiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsXG4gIHJldHVybiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxufVxuXG5leHBvcnQgY29uc3QgcmVwbGFjZVRhc2tVcmxzV2l0aFRhYlNlZ21lbnQgPSAoY29udGVudDogc3RyaW5nLCB0YXNrVXJsUmVnZXg6IFJlZ0V4cCwgdGFiU2VnbWVudDogc3RyaW5nKTogc3RyaW5nID0+XG4gIGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICApXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvamVjdERhc2hib2FyZFN5bmMgPSAoXG4gIGNvbnRleHRQcm9qZWN0SWQ6IG51bWJlciB8IG51bGwsXG4gIHBhdGhuYW1lOiBzdHJpbmdcbik6IHsgcm91dGVQcm9qZWN0SWQ6IG51bWJlciB8IG51bGw7IGlzT25Qcm9qZWN0Um91dGU6IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IHBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvamVjdHNcXC8oXFxkKylcXC8vKVxuICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICBjb25zdCBpc09uUHJvamVjdFJvdXRlID0gQm9vbGVhbihjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkKVxuICByZXR1cm4geyByb3V0ZVByb2plY3RJZCwgaXNPblByb2plY3RSb3V0ZSB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcCA9IChcbiAgZmxhZ3M6IFBpY2s8QXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MsICd3YXNDcmVhdGVBZ2VudEFwcHJvdmVkJyB8ICd3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkJz4sXG4gIG11bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuLFxuICBjb21wbGV0ZWRBZ2VudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdXG4pOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFtdWx0aUFnZW50c0FjY2VzcykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGlmIChmbGFncy53YXNDcmVhdGVBZ2VudEFwcHJvdmVkICYmIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSkge1xuICAgIHJldHVybiB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgfVxuXG4gIGlmIChmbGFncy53YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkKSB7XG4gICAgY29uc3QgY29uZmlndXJlZEFnZW50SWQgPVxuICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8IGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgIGlmIChjb25maWd1cmVkQWdlbnRJZCkge1xuICAgICAgcmV0dXJuIHsgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcCA9IChcbiAgd2FzRWRpdEFnZW50QXBwcm92ZWQ6IGJvb2xlYW4sXG4gIGNvbXBsZXRlZEFnZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW11cbik6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIXdhc0VkaXRBZ2VudEFwcHJvdmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHJlc29sdmVkQWdlbnRJZCA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fCBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgcmV0dXJuIHJlc29sdmVkQWdlbnRJZCA/IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH0gOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsID0gKFxuICBvcGVuVGFza1BhbmVsSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZmxhZ3M6IFBpY2s8QXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MsICd3YXNUYXNrRWRpdCcgfCAnd2FzVGFza0RlbGV0ZSc+LFxuICBtYW51YWxGbGFnczogeyBtYW51YWxXYXNUYXNrRWRpdDogYm9vbGVhbjsgbWFudWFsV2FzVGFza0RlbGV0ZTogYm9vbGVhbiB9LFxuICBhZmZlY3RlZFRhc2tJZHM6IHN0cmluZ1tdXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKG9wZW5UYXNrUGFuZWxJZCA9PSBudWxsKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgdGFza0Zsb3dBY3RpdmUgPVxuICAgIGZsYWdzLndhc1Rhc2tFZGl0IHx8IGZsYWdzLndhc1Rhc2tEZWxldGUgfHwgbWFudWFsRmxhZ3MubWFudWFsV2FzVGFza0VkaXQgfHwgbWFudWFsRmxhZ3MubWFudWFsV2FzVGFza0RlbGV0ZVxuICBpZiAoIXRhc2tGbG93QWN0aXZlKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGFmZmVjdGVkVGFza0lkcy5pbmNsdWRlcyhTdHJpbmcob3BlblRhc2tQYW5lbElkKSlcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1FcnJvclByZXNlbnRhdGlvbiA9IChlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICBjb25zdCBpc0FjY2Vzc0RlbmllZCA9IGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgY29uc3QgaXNQcm9tcHRUb29Mb25nID1cbiAgICBlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InICYmIEJvb2xlYW4oZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJykpXG4gIGNvbnN0IHRva2Vuc1VzZWQgPSBlcnJvclJhd01lc3NhZ2U/Lm1hdGNoKC8oXFxkKykgdG9rZW5zLyk/LlsxXSA/PyAnJ1xuXG4gIHJldHVybiB7XG4gICAgaXNBY2Nlc3NEZW5pZWQsXG4gICAgaXNQcm9tcHRUb29Mb25nLFxuICAgIHRva2Vuc1VzZWQsXG4gICAgc2hvd1JldHJ5OiAhaXNBY2Nlc3NEZW5pZWQgJiYgIWlzUHJvbXB0VG9vTG9uZyxcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTdHJlYW1FcnJvck1lc3NhZ2VLZXkgPSAnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcgfCAnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnIHwgJ2NoYXQuZXJyb3InXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtRXJyb3JNZXNzYWdlS2V5ID0gKFxuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsXG4gIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZ1xuKTogeyBtZXNzYWdlS2V5OiBTdHJlYW1FcnJvck1lc3NhZ2VLZXk7IHRva2Vuc1VzZWQ6IHN0cmluZzsgc2hvd1JldHJ5OiBib29sZWFuIH0gPT4ge1xuICBjb25zdCBwcmVzZW50YXRpb24gPSByZXNvbHZlU3RyZWFtRXJyb3JQcmVzZW50YXRpb24oZXJyb3JNZXNzYWdlLCBlcnJvclJhd01lc3NhZ2UpXG4gIGxldCBtZXNzYWdlS2V5OiBTdHJlYW1FcnJvck1lc3NhZ2VLZXkgPSAnY2hhdC5lcnJvcidcbiAgaWYgKHByZXNlbnRhdGlvbi5pc0FjY2Vzc0RlbmllZCkgbWVzc2FnZUtleSA9ICdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJ1xuICBlbHNlIGlmIChwcmVzZW50YXRpb24uaXNQcm9tcHRUb29Mb25nKSBtZXNzYWdlS2V5ID0gJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJ1xuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZUtleSxcbiAgICB0b2tlbnNVc2VkOiBwcmVzZW50YXRpb24udG9rZW5zVXNlZCxcbiAgICBzaG93UmV0cnk6IHByZXNlbnRhdGlvbi5zaG93UmV0cnksXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUHJvamVjdERhc2hib2FyZE11dGF0aW9uID0gJ2NyZWF0ZScgfCAnZWRpdCcgfCAnZGVsZXRlJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVByb2plY3REYXNoYm9hcmRNdXRhdGlvbiA9IChmbGFnczoge1xuICB3YXNUYXNrQ3JlYXRpb246IGJvb2xlYW5cbiAgd2FzVGFza0VkaXQ6IGJvb2xlYW5cbiAgd2FzVGFza0RlbGV0ZTogYm9vbGVhblxufSk6IFByb2plY3REYXNoYm9hcmRNdXRhdGlvbiB8IG51bGwgPT4ge1xuICBpZiAoZmxhZ3Mud2FzVGFza0NyZWF0aW9uKSByZXR1cm4gJ2NyZWF0ZSdcbiAgaWYgKGZsYWdzLndhc1Rhc2tFZGl0KSByZXR1cm4gJ2VkaXQnXG4gIGlmIChmbGFncy53YXNUYXNrRGVsZXRlKSByZXR1cm4gJ2RlbGV0ZSdcbiAgcmV0dXJuIG51bGxcbn1cblxudHlwZSBQcm9qZWN0RGFzaGJvYXJkQXBpID0ge1xuICBhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZD86ICh0YXNrSWRzOiBudW1iZXJbXSkgPT4gdm9pZFxuICBlZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/OiAodGFza0lkczogbnVtYmVyW10pID0+IHZvaWRcbiAgZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZD86ICh0YXNrSWRzOiBudW1iZXJbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgYXBwbHlQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24gPSAoXG4gIG11dGF0aW9uOiBQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24gfCBudWxsLFxuICB0YXNrSWRzOiBudW1iZXJbXSxcbiAgZGFzaGJvYXJkOiBQcm9qZWN0RGFzaGJvYXJkQXBpIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogdm9pZCA9PiB7XG4gIGlmICghbXV0YXRpb24gfHwgIWRhc2hib2FyZCkgcmV0dXJuXG4gIGlmIChtdXRhdGlvbiA9PT0gJ2NyZWF0ZScpIHtcbiAgICBkYXNoYm9hcmQuYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChtdXRhdGlvbiA9PT0gJ2VkaXQnKSB7XG4gICAgZGFzaGJvYXJkLmVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgZGFzaGJvYXJkLmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxufVxuXG5leHBvcnQgY29uc3QgbWVyZ2VBZmZlY3RlZFRhc2tJZHNGb3JQYW5lbFJlZmV0Y2ggPSAoXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sXG4gIHRhc2tJZHNGb3JEYXNoYm9hcmQ6IG51bWJlcltdLFxuICBtYW51YWxBcHByb3ZhbD86IHsgdG9vbE5hbWU6IHN0cmluZzsgdG9vbEFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfSB8IG51bGxcbik6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgbWFudWFsUHNldWRvQWN0aW9uczogUGVuZGluZ0FjdGlvbltdID0gW11cbiAgaWYgKG1hbnVhbEFwcHJvdmFsKSB7XG4gICAgbWFudWFsUHNldWRvQWN0aW9ucy5wdXNoKHtcbiAgICAgIHRvb2xfbmFtZTogbWFudWFsQXBwcm92YWwudG9vbE5hbWUsXG4gICAgICB0b29sX2FyZ3M6IG1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzID8/IHt9LFxuICAgICAgdGhyZWFkX2lkOiAnbWFudWFsJyxcbiAgICAgIHRvb2xfY2FsbF9pZDogJ21hbnVhbCcsXG4gICAgfSBhcyBQZW5kaW5nQWN0aW9uKVxuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgIC4uLnRhc2tJZHNGb3JEYXNoYm9hcmQsXG4gICAgLi4uZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKG1hbnVhbFBzZXVkb0FjdGlvbnMpLFxuICBdLm1hcChTdHJpbmcpXG59XG5cbmV4cG9ydCBjb25zdCBtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyID0gKGF1dGhVc2VyOiBDT1JVc2VyKTogQ2hhdE1lc3NhZ2VVc2VyID0+ICh7XG4gIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbn0pXG5cbmV4cG9ydCBjb25zdCBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEluTGlzdCA9IChcbiAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10sXG4gIHNlc3Npb25JZDogc3RyaW5nXG4pOiB7IG1lc3NhZ2U6IENoYXRNZXNzYWdlOyBzZXNzaW9uSWQ6IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGZvdW5kID0gbWVzc2FnZXMuZmluZChtZXNzYWdlID0+XG4gICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gIClcblxuICBpZiAoZm91bmQ/LmFwcHJvdmFsKSB7XG4gICAgcmV0dXJuIHsgbWVzc2FnZTogZm91bmQsIHNlc3Npb25JZDogZm91bmQuYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBzZXNzaW9uSWQgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGNhblNlbmRDaGF0TWVzc2FnZSA9IChcbiAgaXNQcm9jZXNzaW5nOiBib29sZWFuLFxuICB3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW4sXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiAhKGlzUHJvY2Vzc2luZyB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKVxuXG5leHBvcnQgdHlwZSBTZW5kTWVzc2FnZUJsb2NrUmVhc29uID0gJ2J1c3knIHwgJ2NvbmN1cnJlbmN5J1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQmxvY2tDb25jdXJyZW50U3RyZWFtU3RhcnQgPSAoXG4gIHdpbGxTdGFydE5ld1N0cmVhbTogYm9vbGVhbixcbiAgYWN0aXZlQ291bnQ6IG51bWJlcixcbiAgbWF4Q29uY3VycmVudDogbnVtYmVyXG4pOiBib29sZWFuID0+IHdpbGxTdGFydE5ld1N0cmVhbSAmJiBhY3RpdmVDb3VudCA+PSBtYXhDb25jdXJyZW50XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2VuZE1lc3NhZ2VHYXRlID0gKHBhcmFtczoge1xuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW5cbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhblxuICB3aWxsU3RhcnROZXdTdHJlYW06IGJvb2xlYW5cbiAgYWN0aXZlU3RyZWFtQ291bnQ6IG51bWJlclxuICBtYXhDb25jdXJyZW50OiBudW1iZXJcbn0pOiBTZW5kTWVzc2FnZUJsb2NrUmVhc29uIHwgbnVsbCA9PiB7XG4gIGlmICghY2FuU2VuZENoYXRNZXNzYWdlKHBhcmFtcy5pc1Byb2Nlc3NpbmcsIHBhcmFtcy53YWl0aW5nUmVzcG9uc2UsIHBhcmFtcy5sb2FkaW5nTWVzc2FnZXMpKSB7XG4gICAgcmV0dXJuICdidXN5J1xuICB9XG4gIGlmIChzaG91bGRCbG9ja0NvbmN1cnJlbnRTdHJlYW1TdGFydChwYXJhbXMud2lsbFN0YXJ0TmV3U3RyZWFtLCBwYXJhbXMuYWN0aXZlU3RyZWFtQ291bnQsIHBhcmFtcy5tYXhDb25jdXJyZW50KSkge1xuICAgIHJldHVybiAnY29uY3VycmVuY3knXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMgPSAoXG4gIG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgcG9zaXRpb25hbD86IHtcbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9XG4pID0+ICh7XG4gIGZhcUlkOiBwb3NpdGlvbmFsPy5mYXFJZCA/PyBvcHRpb25zLmZhcUlkLFxuICBhZ2VudFN1Z2dlc3Rpb25JZDogcG9zaXRpb25hbD8uYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZCxcbiAgbWVudGlvbnM6IHBvc2l0aW9uYWw/Lm1lbnRpb25zID8/IG9wdGlvbnMubWVudGlvbnMsXG4gIGZ1YUlkOiBwb3NpdGlvbmFsPy5mdWFJZCA/PyBvcHRpb25zLmZ1YUlkLFxuICBzY0lkOiBwb3NpdGlvbmFsPy5zY0lkID8/IG9wdGlvbnMuc2NJZCxcbiAgY29udGV4dERhdGE6IHBvc2l0aW9uYWw/LmNvbnRleHREYXRhID8/IG9wdGlvbnMuY29udGV4dERhdGEsXG59KVxuXG5leHBvcnQgY29uc3QgYnVpbGRDaGF0SGlzdG9yeUZyb21NZXNzYWdlcyA9IChtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSwgYXV0aFVzZXJJZDogc3RyaW5nKTogQ2hhdEhpc3RvcnlbXSA9PlxuICBtZXNzYWdlcy5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VySWQgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gIH0pKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUxhc3RNZXNzYWdlQWdlbnRJZCA9IChtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiBtZXNzYWdlcy5hdCgtMSk/LmFnZW50SWRcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBZ2VudElkRm9yU3RyZWFtID0gKFxuICBhZ2VudElkRnJvbU1lc3NhZ2VzOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGZhbGxiYWNrQWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgPT4gYWdlbnRJZEZyb21NZXNzYWdlcyB8fCBmYWxsYmFja0FnZW50SWQgfHwgJydcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVVc2VyUXVlc3Rpb25NZXNzYWdlSWQgPSAodHVybk1lc3NhZ2VJZDogc3RyaW5nKTogc3RyaW5nID0+IGBxdWVzdGlvbi0ke3R1cm5NZXNzYWdlSWR9YFxuXG5leHBvcnQgdHlwZSBNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZ1xuICBoaXN0b3J5OiBDaGF0SGlzdG9yeVtdXG4gIHByb2plY3RJZDogbnVtYmVyIHwgbnVsbFxuICBsYW5nOiBzdHJpbmdcbiAgdXNlcklkOiBzdHJpbmdcbiAgZmlyc3ROYW1lOiBzdHJpbmdcbiAgbGFzdE5hbWU6IHN0cmluZ1xuICBjb21wYW55SWQ6IHN0cmluZ1xuICBjaGF0SWQ6IHN0cmluZ1xuICBtZXNzYWdlSWQ6IHN0cmluZ1xuICBhZ2VudE5hbWU6IHN0cmluZ1xuICBhZ2VudElkOiBzdHJpbmdcbiAgaXNXZWJTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaXNEZWVwU2VhcmNoQWN0aXZlOiBib29sZWFuXG4gIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGJvb2xlYW5cbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgY2xpZW50TmFtZT86IHN0cmluZ1xuICBmZWVJZD86IG51bWJlclxuICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICB0YXNrSWQ/OiBudW1iZXJcbiAgdGFza05hbWU/OiBzdHJpbmdcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGZhcUlkPzogc3RyaW5nXG4gIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gIGZ1YUlkPzogc3RyaW5nXG4gIHNjSWQ/OiBzdHJpbmdcbiAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eVxuICBhZ2VudFR5cGU/OiBBZ2VudFR5cGVcbiAgYWdlbnRFbW9qaT86IHN0cmluZyB8IG51bGxcbiAgY29udGV4dE1lc3NhZ2U/OiBDb250ZXh0TWVzc2FnZVxuICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCA9IChwYXJhbXM6IHtcbiAgbWVzc2FnZTogc3RyaW5nXG4gIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgcHJvamVjdElkOiBudW1iZXIgfCBudWxsXG4gIGF1dGhVc2VyOiBQaWNrPENPUlVzZXIsICdsYW5nJyB8ICdpZCcgfCAnZmlyc3ROYW1lJyB8ICdsYXN0TmFtZScgfCAnY29tcGFueV9pZCc+XG4gIGNoYXRJZDogc3RyaW5nXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIGFnZW50TmFtZTogc3RyaW5nXG4gIGFnZW50SWQ6IHN0cmluZ1xuICBpc1dlYlNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBpc0RlZXBTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogYm9vbGVhblxuICBjdHhQcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuICBjdHhDbGllbnQ6IHsgaWQ/OiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWRcbiAgY3R4VGFzazogeyBpZD86IG51bWJlciB8IHN0cmluZzsgbmFtZT86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgZmFxSWQ/OiBzdHJpbmdcbiAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgZnVhSWQ/OiBzdHJpbmdcbiAgc2NJZD86IHN0cmluZ1xuICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gIGFnZW50VHlwZT86IEFnZW50VHlwZVxuICBhZ2VudEVtb2ppPzogc3RyaW5nIHwgbnVsbFxuICBjb250ZXh0TWVzc2FnZT86IENvbnRleHRNZXNzYWdlXG4gIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn0pOiBNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQgPT4gKHtcbiAgbWVzc2FnZTogcGFyYW1zLm1lc3NhZ2UsXG4gIGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5LFxuICBwcm9qZWN0SWQ6IHBhcmFtcy5wcm9qZWN0SWQsXG4gIGxhbmc6IHBhcmFtcy5hdXRoVXNlci5sYW5nLFxuICB1c2VySWQ6IHBhcmFtcy5hdXRoVXNlci5pZC50b1N0cmluZygpLFxuICBmaXJzdE5hbWU6IHBhcmFtcy5hdXRoVXNlci5maXJzdE5hbWUsXG4gIGxhc3ROYW1lOiBwYXJhbXMuYXV0aFVzZXIubGFzdE5hbWUsXG4gIGNvbXBhbnlJZDogcGFyYW1zLmF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgY2hhdElkOiBwYXJhbXMuY2hhdElkLFxuICBtZXNzYWdlSWQ6IHBhcmFtcy5tZXNzYWdlSWQsXG4gIGFnZW50TmFtZTogcGFyYW1zLmFnZW50TmFtZSxcbiAgYWdlbnRJZDogcGFyYW1zLmFnZW50SWQsXG4gIGlzV2ViU2VhcmNoQWN0aXZlOiBwYXJhbXMuaXNXZWJTZWFyY2hBY3RpdmUsXG4gIGlzRGVlcFNlYXJjaEFjdGl2ZTogcGFyYW1zLmlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogcGFyYW1zLmlzQXV0b0FwcHJvdmVBY3RpdmUsXG4gIC4uLihwYXJhbXMuY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihwYXJhbXMuY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQocGFyYW1zLmN0eENsaWVudCwgcGFyYW1zLmN0eFByb2plY3QpLFxuICAuLi4ocGFyYW1zLnByb2plY3ROYW1lID8geyBwcm9qZWN0TmFtZTogcGFyYW1zLnByb2plY3ROYW1lIH0gOiB7fSksXG4gIC4uLihwYXJhbXMuY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgID8geyB0YXNrSWQ6IE51bWJlcihwYXJhbXMuY3R4VGFzay5pZCksIC4uLihwYXJhbXMuY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogcGFyYW1zLmN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICA6IHt9KSxcbiAgLi4uKHBhcmFtcy5hdHRhY2htZW50cyAmJiBwYXJhbXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHM6IHBhcmFtcy5hdHRhY2htZW50cyB9IDoge30pLFxuICAuLi4ocGFyYW1zLmZhcUlkID8geyBmYXFJZDogcGFyYW1zLmZhcUlkIH0gOiB7fSksXG4gIC4uLihwYXJhbXMuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXJhbXMuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5mdWFJZCA/IHsgZnVhSWQ6IHBhcmFtcy5mdWFJZCB9IDoge30pLFxuICAuLi4ocGFyYW1zLnNjSWQgPyB7IHNjSWQ6IHBhcmFtcy5zY0lkIH0gOiB7fSksXG4gIC4uLihwYXJhbXMuYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IHBhcmFtcy5hZ2VudEVudGl0eSB9IDoge30pLFxuICAuLi4ocGFyYW1zLmFnZW50VHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IHBhcmFtcy5hZ2VudFR5cGUgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5hZ2VudEVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IHBhcmFtcy5hZ2VudEVtb2ppIH0gOiB7fSksXG4gIC4uLihwYXJhbXMuY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlOiBwYXJhbXMuY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHBhcmFtcy5jb250ZXh0RGF0YSB9IDoge30pLFxufSlcblxuZXhwb3J0IGNvbnN0IGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkRm9yUHJvamVjdENoYW5nZSA9IChwYXJhbXM6IHtcbiAgbWVzc2FnZTogc3RyaW5nXG4gIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgcHJvamVjdDogUHJvamVjdFxuICBhdXRoVXNlcjogUGljazxDT1JVc2VyLCAnbGFuZycgfCAnaWQnIHwgJ2ZpcnN0TmFtZScgfCAnbGFzdE5hbWUnIHwgJ2NvbXBhbnlfaWQnPlxuICBjaGF0SWQ6IHN0cmluZ1xuICBtZXNzYWdlSWQ6IHN0cmluZ1xuICBhZ2VudE5hbWU6IHN0cmluZ1xuICBhZ2VudElkOiBzdHJpbmdcbiAgaXNXZWJTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaXNEZWVwU2VhcmNoQWN0aXZlOiBib29sZWFuXG4gIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGJvb2xlYW5cbiAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eVxuICBhZ2VudFR5cGU/OiBBZ2VudFR5cGVcbn0pOiBNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQgPT4gKHtcbiAgbWVzc2FnZTogcGFyYW1zLm1lc3NhZ2UsXG4gIGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5LFxuICBwcm9qZWN0SWQ6IHBhcmFtcy5wcm9qZWN0LmlkLFxuICBsYW5nOiBwYXJhbXMuYXV0aFVzZXIubGFuZyxcbiAgdXNlcklkOiBwYXJhbXMuYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgZmlyc3ROYW1lOiBwYXJhbXMuYXV0aFVzZXIuZmlyc3ROYW1lLFxuICBsYXN0TmFtZTogcGFyYW1zLmF1dGhVc2VyLmxhc3ROYW1lLFxuICBjb21wYW55SWQ6IHBhcmFtcy5hdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gIGNoYXRJZDogcGFyYW1zLmNoYXRJZCxcbiAgbWVzc2FnZUlkOiBwYXJhbXMubWVzc2FnZUlkLFxuICBhZ2VudE5hbWU6IHBhcmFtcy5hZ2VudE5hbWUsXG4gIGFnZW50SWQ6IHBhcmFtcy5hZ2VudElkLFxuICBpc1dlYlNlYXJjaEFjdGl2ZTogcGFyYW1zLmlzV2ViU2VhcmNoQWN0aXZlLFxuICBpc0RlZXBTZWFyY2hBY3RpdmU6IHBhcmFtcy5pc0RlZXBTZWFyY2hBY3RpdmUsXG4gIGlzQXV0b0FwcHJvdmVBY3RpdmU6IHBhcmFtcy5pc0F1dG9BcHByb3ZlQWN0aXZlLFxuICAuLi4ocGFyYW1zLnByb2plY3QuZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihwYXJhbXMucHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5wcm9qZWN0LmNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkOiBOdW1iZXIocGFyYW1zLnByb2plY3QuY2xpZW50SWQpIH0gOiB7fSksXG4gIC4uLihwYXJhbXMuYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IHBhcmFtcy5hZ2VudEVudGl0eSB9IDoge30pLFxuICAuLi4ocGFyYW1zLmFnZW50VHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IHBhcmFtcy5hZ2VudFR5cGUgfSA6IHt9KSxcbn0pXG5cbmV4cG9ydCB0eXBlIFN0cmVhbUVycm9ySGFuZGxpbmdNb2RlID0gJ3JldHJ5LXJlc3RvcmUnIHwgJ2NvbW1pdC1lcnJvcidcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1FcnJvckhhbmRsaW5nTW9kZSA9IChoYXNSZXRyeVNuYXBzaG90OiBib29sZWFuKTogU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUgPT5cbiAgaGFzUmV0cnlTbmFwc2hvdCA/ICdyZXRyeS1yZXN0b3JlJyA6ICdjb21taXQtZXJyb3InXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlSWQgPSAobWVzc2FnZUlkOiBzdHJpbmcpOiBzdHJpbmcgPT4gYGFuc3dlci0ke21lc3NhZ2VJZH1gXG5cbmV4cG9ydCBjb25zdCBidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSA9IChwYXJhbXM6IHtcbiAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG4gIHNob3dSZXRyeTogYm9vbGVhblxuICByZXRyeUxhYmVsOiBzdHJpbmdcbn0pOiBDaGF0TWVzc2FnZSA9PiAoe1xuICBpZDogcmVzb2x2ZVN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZUlkKHBhcmFtcy5tZXNzYWdlSWQpLFxuICBtZXNzYWdlOiBwYXJhbXMubWVzc2FnZSxcbiAgaXNFcnJvcjogdHJ1ZSxcbiAgLi4uKHBhcmFtcy5zaG93UmV0cnkgPyB7IHN1Z2dlc3Rpb25zOiBbcGFyYW1zLnJldHJ5TGFiZWxdIH0gOiB7fSksXG4gIGRhdGU6IG5ldyBEYXRlKCksXG4gIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxufSlcblxuZXhwb3J0IHR5cGUgSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lID0geyB0eXBlOiAnc2tpcC11aScgfSB8IHsgdHlwZTogJ3Nob3ctdWknOyBhcHByb3ZhbE1lc3NhZ2VJZDogc3RyaW5nIH1cblxuLyoqIEhJVEwgcHJlLWFwcm9iYWRvIChtYW51YWwvYXV0byk6IGVsIHN0cmVhbSBzaWd1ZSBzaW4gcGludGFyIGxhIGNhamEgZGUgYXByb2JhY2nDs24uICovXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcEhpdGxBcHByb3ZhbFVpID0gKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QpOiBib29sZWFuID0+XG4gIEJvb2xlYW4oYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIHx8IGFwcHJvdmFsLmF1dG9fYXBwcm92ZWQgfHwgYXBwcm92YWwuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhpdGxBcHByb3ZhbFJlcXVpcmVkT3V0Y29tZSA9IChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0KTogSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lID0+XG4gIHNob3VsZFNraXBIaXRsQXBwcm92YWxVaShhcHByb3ZhbClcbiAgICA/IHsgdHlwZTogJ3NraXAtdWknIH1cbiAgICA6IHsgdHlwZTogJ3Nob3ctdWknLCBhcHByb3ZhbE1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAgfVxuXG5leHBvcnQgY29uc3QgYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSA9IChwYXJhbXM6IHtcbiAgYXBwcm92YWxNZXNzYWdlSWQ6IHN0cmluZ1xuICBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZ1xuICBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0XG4gIHJlYXNvbmluZz86IFJlYXNvbmluZ1RyYWNlIHwgbnVsbFxuICBjb21wYWN0aW9uPzogQ29udGV4dENvbXBhY3Rpb24gfCBudWxsXG59KTogQ2hhdE1lc3NhZ2UgPT4gKHtcbiAgaWQ6IHBhcmFtcy5hcHByb3ZhbE1lc3NhZ2VJZCxcbiAgbWVzc2FnZTogcGFyYW1zLmFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgZGF0ZTogbmV3IERhdGUoKSxcbiAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gIGFwcHJvdmFsOiBwYXJhbXMuYXBwcm92YWwsXG4gIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gIHJlYXNvbmluZzogcGFyYW1zLnJlYXNvbmluZyxcbiAgY29tcGFjdGlvbjogcGFyYW1zLmNvbXBhY3Rpb24sXG59KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AgPSAoXG4gIHN0b3BwZWRUcmFjZTogUmVhc29uaW5nVHJhY2UgfCBudWxsLFxuICBjb21wYWN0aW9uPzogQ29udGV4dENvbXBhY3Rpb24gfCBudWxsXG4pOiBib29sZWFuID0+IEJvb2xlYW4oc3RvcHBlZFRyYWNlPy5zdGVwcy5sZW5ndGggfHwgY29tcGFjdGlvbilcblxuZXhwb3J0IGNvbnN0IGJ1aWxkU3RyZWFtU3RvcFBhcnRpYWxBc3Npc3RhbnRNZXNzYWdlID0gKHBhcmFtczoge1xuICBmaW5hbE1lc3NhZ2VJZDogc3RyaW5nXG4gIHBhcnRpYWxUZXh0OiBzdHJpbmdcbiAgc3RvcHBlZFRyYWNlOiBSZWFzb25pbmdUcmFjZSB8IG51bGxcbiAgY29tcGFjdGlvbj86IENvbnRleHRDb21wYWN0aW9uIHwgbnVsbFxufSk6IENoYXRNZXNzYWdlID0+ICh7XG4gIGlkOiBwYXJhbXMuZmluYWxNZXNzYWdlSWQsXG4gIG1lc3NhZ2U6IHBhcmFtcy5wYXJ0aWFsVGV4dCxcbiAgZGF0ZTogbmV3IERhdGUoKSxcbiAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gIC4uLihwYXJhbXMuc3RvcHBlZFRyYWNlID8geyByZWFzb25pbmc6IHBhcmFtcy5zdG9wcGVkVHJhY2UgfSA6IHt9KSxcbiAgY29tcGFjdGlvbjogcGFyYW1zLmNvbXBhY3Rpb24sXG59KVxuXG5leHBvcnQgY29uc3QgYnVpbGRTdHJlYW1TdG9wQ2FuY2VsbGVkQXNzaXN0YW50TWVzc2FnZSA9IChwYXJhbXM6IHtcbiAgY2FuY2VsbGVkTWVzc2FnZUlkOiBzdHJpbmdcbiAgY2FuY2VsbGVkTGFiZWw6IHN0cmluZ1xufSk6IENoYXRNZXNzYWdlID0+ICh7XG4gIGlkOiBwYXJhbXMuY2FuY2VsbGVkTWVzc2FnZUlkLFxuICBtZXNzYWdlOiBwYXJhbXMuY2FuY2VsbGVkTGFiZWwsXG4gIGRhdGU6IG5ldyBEYXRlKCksXG4gIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxufSlcblxuZXhwb3J0IHR5cGUgUmV0cnlCbG9ja1JlYXNvbiA9ICdidXN5JyB8ICdzZXNzaW9uLWFjdGl2ZScgfCAnY29uY3VycmVuY3knXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmV0cnlCbG9ja1JlYXNvbiA9IChwYXJhbXM6IHtcbiAgaXNQcm9jZXNzaW5nOiBib29sZWFuXG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhblxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW5cbiAgaXNTZXNzaW9uU3RyZWFtQWN0aXZlOiBib29sZWFuXG4gIGFjdGl2ZVN0cmVhbUNvdW50OiBudW1iZXJcbiAgbWF4Q29uY3VycmVudDogbnVtYmVyXG59KTogUmV0cnlCbG9ja1JlYXNvbiB8IG51bGwgPT4ge1xuICBpZiAocGFyYW1zLmlzUHJvY2Vzc2luZyB8fCBwYXJhbXMud2FpdGluZ1Jlc3BvbnNlIHx8IHBhcmFtcy5sb2FkaW5nTWVzc2FnZXMpIHJldHVybiAnYnVzeSdcbiAgaWYgKHBhcmFtcy5pc1Nlc3Npb25TdHJlYW1BY3RpdmUpIHJldHVybiAnc2Vzc2lvbi1hY3RpdmUnXG4gIGlmIChwYXJhbXMuYWN0aXZlU3RyZWFtQ291bnQgPj0gcGFyYW1zLm1heENvbmN1cnJlbnQpIHJldHVybiAnY29uY3VycmVuY3knXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRVc2VPcmNoZXN0cmF0b3JSZXRyeUZhbGxiYWNrID0gKFxuICBtZXNzYWdlOiBQaWNrPENoYXRNZXNzYWdlLCAnaXNGcm9udGVuZENhbmNlbGxlZCcgfCAnbWVtb3J5U2Vzc2lvbklkJz5cbik6IGJvb2xlYW4gPT4gQm9vbGVhbihtZXNzYWdlLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIW1lc3NhZ2UubWVtb3J5U2Vzc2lvbklkPy50cmltKCkpXG5cbmV4cG9ydCB0eXBlIFJldHJ5RWxpZ2liaWxpdHkgPVxuICB8IHsgZWxpZ2libGU6IGZhbHNlOyByZWFzb246ICdub3QtaW4tdGhyZWFkJyB8ICdlbXB0eS11c2VyJyB8ICduby10dXJuJyB9XG4gIHwgeyBlbGlnaWJsZTogdHJ1ZTsgdHVybklkOiBzdHJpbmcgfCBudWxsOyB1c2VPcmNoZXN0cmF0b3JGYWxsYmFjazogYm9vbGVhbiB9XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmV0cnlFbGlnaWJpbGl0eSA9IChcbiAgcHJldmlvdXNNZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSxcbiAgbWVzc2FnZTogQ2hhdE1lc3NhZ2UsXG4gIHVzZXJNZXNzYWdlOiBDaGF0TWVzc2FnZSB8IG51bGwgfCB1bmRlZmluZWRcbik6IFJldHJ5RWxpZ2liaWxpdHkgPT4ge1xuICBpZiAoIXByZXZpb3VzTWVzc2FnZXMuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IG1lc3NhZ2UuaWQpKSB7XG4gICAgcmV0dXJuIHsgZWxpZ2libGU6IGZhbHNlLCByZWFzb246ICdub3QtaW4tdGhyZWFkJyB9XG4gIH1cbiAgaWYgKCF1c2VyTWVzc2FnZT8ubWVzc2FnZT8udHJpbSgpICYmICF1c2VyTWVzc2FnZT8uYXR0YWNobWVudHM/Lmxlbmd0aCAmJiAhdXNlck1lc3NhZ2U/LnNvdXJjZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7IGVsaWdpYmxlOiBmYWxzZSwgcmVhc29uOiAnZW1wdHktdXNlcicgfVxuICB9XG4gIGNvbnN0IHR1cm5JZCA9IHJlc29sdmVSZXRyeVR1cm5JZChtZXNzYWdlKVxuICBjb25zdCB1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayA9IHNob3VsZFVzZU9yY2hlc3RyYXRvclJldHJ5RmFsbGJhY2sobWVzc2FnZSlcbiAgaWYgKCF0dXJuSWQgJiYgIXVzZU9yY2hlc3RyYXRvckZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHsgZWxpZ2libGU6IGZhbHNlLCByZWFzb246ICduby10dXJuJyB9XG4gIH1cbiAgcmV0dXJuIHsgZWxpZ2libGU6IHRydWUsIHR1cm5JZCwgdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2sgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzID0gKHVzZXJNZXNzYWdlOiBDaGF0TWVzc2FnZSk6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5hdHRhY2htZW50cykpIHJldHVybiB1c2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5zb3VyY2VzKSkgcmV0dXJuIHVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgcmV0dXJuIFtdXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRVcGRhdGVQcm9qZWN0T25DaGFuZ2UgPSAobmV4dFByb2plY3RJZDogbnVtYmVyLCBjdXJyZW50UHJvamVjdElkPzogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBuZXh0UHJvamVjdElkICE9PSBjdXJyZW50UHJvamVjdElkXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UgPSAoXG4gIHVzZXJRdWVzdGlvbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgcHJvamVjdDogUHJvamVjdCB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4gQm9vbGVhbih1c2VyUXVlc3Rpb24gJiYgcHJvamVjdClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzID0gKGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0Jyk6ICdhcHByb3ZlZCcgfCAncmVqZWN0ZWQnID0+XG4gIGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24gPSAoXG4gIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgZWRpdGVkQWN0aW9ucz86IHVua25vd25bXVxuKTogJ2FwcHJvdmUnIHwgJ3JlamVjdCcgfCAnZWRpdCcgPT4gKGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbilcblxuZXhwb3J0IHR5cGUgQXBwcm92YWxTdHJlYW1CbG9ja1JlYXNvbiA9XG4gICdtaXNzaW5nLXRocmVhZHMnIHwgJ21pc3NpbmctYXBwcm92YWwnIHwgJ21pc3Npbmctc2Vzc2lvbicgfCAnc2Vzc2lvbi1hY3RpdmUnIHwgJ2xpbWl0J1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFwcHJvdmFsU3RyZWFtQmxvY2tSZWFzb24gPSAocGFyYW1zOiB7XG4gIHRocmVhZElkczogc3RyaW5nW11cbiAgaGFzQXBwcm92YWxNZXNzYWdlOiBib29sZWFuXG4gIHNlc3Npb25JZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICBpc1Nlc3Npb25TdHJlYW1BY3RpdmU6IGJvb2xlYW5cbiAgYWN0aXZlU3RyZWFtQ291bnQ6IG51bWJlclxuICBtYXhDb25jdXJyZW50OiBudW1iZXJcbn0pOiBBcHByb3ZhbFN0cmVhbUJsb2NrUmVhc29uIHwgbnVsbCA9PiB7XG4gIGlmICghcGFyYW1zLnRocmVhZElkcz8ubGVuZ3RoKSByZXR1cm4gJ21pc3NpbmctdGhyZWFkcydcbiAgaWYgKCFwYXJhbXMuaGFzQXBwcm92YWxNZXNzYWdlKSByZXR1cm4gJ21pc3NpbmctYXBwcm92YWwnXG4gIGlmICghcGFyYW1zLnNlc3Npb25JZCkgcmV0dXJuICdtaXNzaW5nLXNlc3Npb24nXG4gIGlmIChwYXJhbXMuaXNTZXNzaW9uU3RyZWFtQWN0aXZlKSByZXR1cm4gJ3Nlc3Npb24tYWN0aXZlJ1xuICBpZiAocGFyYW1zLmFjdGl2ZVN0cmVhbUNvdW50ID49IHBhcmFtcy5tYXhDb25jdXJyZW50KSByZXR1cm4gJ2xpbWl0J1xuICByZXR1cm4gbnVsbFxufVxuXG4vKiogVG9vbHMgZGUgY2FyZ2EgZGUgaG9yYXMgYSBzaW5jcm9uaXphciBjb24gUGxhbm5lciBhbCBjZXJyYXIgdW4gc3RyZWFtIChISVRMIGFwcm9iYWRvKS4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlSG91cnNDaGFyZ2VUb29sc09uU3RyZWFtRmluaXNoID0gKFxuICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlOiBib29sZWFuLFxuICBhcHByb3ZhbFN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLFxuICBtYW51YWxBcHByb3ZhbFRvb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGhvdXJzVG9vbHNGcm9tQXBwcm92YWwgPSBwZW5kaW5nQWN0aW9uc1xuICAgIC5tYXAoYWN0aW9uID0+IGFjdGlvbi50b29sX25hbWUpXG4gICAgLmZpbHRlcigodG9vbE5hbWUpOiB0b29sTmFtZSBpcyBzdHJpbmcgPT4gaXNIb3Vyc0NoYXJnZVRvb2wodG9vbE5hbWUpKVxuXG4gIGNvbnN0IHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgPVxuICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiYgaG91cnNUb29sc0Zyb21BcHByb3ZhbC5sZW5ndGggPiAwXG5cbiAgaWYgKHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQpIHtcbiAgICByZXR1cm4gaG91cnNUb29sc0Zyb21BcHByb3ZhbFxuICB9XG5cbiAgaWYgKGlzSG91cnNDaGFyZ2VUb29sKG1hbnVhbEFwcHJvdmFsVG9vbE5hbWUpKSB7XG4gICAgcmV0dXJuIG1hbnVhbEFwcHJvdmFsVG9vbE5hbWUgPyBbbWFudWFsQXBwcm92YWxUb29sTmFtZV0gOiBbXVxuICB9XG5cbiAgcmV0dXJuIFtdXG59XG5cbmV4cG9ydCBjb25zdCBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzID0gKFxuICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICBhY3RpdmVNZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSxcbiAgc2Vzc2lvbk1lc3NhZ2VzQnlJZDogUmVjb3JkPHN0cmluZywgQ2hhdE1lc3NhZ2VbXT4sXG4gIGFjdGl2ZVNlc3Npb25JZDogc3RyaW5nIHwgbnVsbFxuKTogeyBtZXNzYWdlOiBDaGF0TWVzc2FnZTsgc2Vzc2lvbklkOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICBjb25zdCBmcm9tQWN0aXZlVmlldyA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsSW5MaXN0KHRocmVhZElkcywgYWN0aXZlTWVzc2FnZXMsIGFjdGl2ZVNlc3Npb25JZCB8fCAnJylcbiAgaWYgKGZyb21BY3RpdmVWaWV3KSByZXR1cm4gZnJvbUFjdGl2ZVZpZXdcblxuICBjb25zdCBzZXNzaW9uRW50cnkgPSBPYmplY3QuZW50cmllcyhzZXNzaW9uTWVzc2FnZXNCeUlkKS5maW5kKChbLCBzZXNzaW9uTWVzc2FnZXNdKSA9PlxuICAgIHNlc3Npb25NZXNzYWdlcy5zb21lKG1lc3NhZ2UgPT5cbiAgICAgIG1lc3NhZ2UuYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgIClcbiAgKVxuXG4gIGlmICghc2Vzc2lvbkVudHJ5KSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtzZXNzaW9uSWQsIHNlc3Npb25NZXNzYWdlc10gPSBzZXNzaW9uRW50cnlcbiAgcmV0dXJuIGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsSW5MaXN0KHRocmVhZElkcywgc2Vzc2lvbk1lc3NhZ2VzLCBzZXNzaW9uSWQpXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtRmluaXNoRmluYWxNZXNzYWdlSWQgPSAobWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcpOiBzdHJpbmcgPT4gYGFuc3dlci0ke21lbW9yeVNlc3Npb25JZH1gXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtU3RvcE1lc3NhZ2VJZHMgPSAoXG4gIGN1cnJlbnRNZXNzYWdlSWQ6IHN0cmluZ1xuKToge1xuICBmaW5hbE1lc3NhZ2VJZDogc3RyaW5nXG4gIGNhbmNlbGxlZE1lc3NhZ2VJZDogc3RyaW5nXG59ID0+ICh7XG4gIGZpbmFsTWVzc2FnZUlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZH1gLFxuICBjYW5jZWxsZWRNZXNzYWdlSWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkfS1jYW5jZWxsZWRgLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZW50YWJpbGlkYWRQcm9qZWN0RmFxTWVzc2FnZSA9IChcbiAgbWVzc2FnZTogc3RyaW5nLFxuICByZW50YWJpbGlkYWRMYWJlbDogc3RyaW5nLFxuICBpbmNvbWVUeXBlPzogc3RyaW5nIHwgbnVsbFxuKTogc3RyaW5nID0+IHtcbiAgaWYgKG1lc3NhZ2UgIT09IHJlbnRhYmlsaWRhZExhYmVsKSByZXR1cm4gbWVzc2FnZVxuICByZXR1cm4gYEZBUTogJHtyZW50YWJpbGlkYWRMYWJlbH0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtpbmNvbWVUeXBlID8/ICcnfWBcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlID0gKFxuICBtZXNzYWdlS2V5OiBTdHJlYW1FcnJvck1lc3NhZ2VLZXksXG4gIHRyYW5zbGF0ZTogKGtleTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBzdHJpbmcsXG4gIHRva2Vuc1VzZWQ6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgaWYgKG1lc3NhZ2VLZXkgPT09ICdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJykgcmV0dXJuIHRyYW5zbGF0ZSgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gIGlmIChtZXNzYWdlS2V5ID09PSAnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnKSByZXR1cm4gdHJhbnNsYXRlKCdjaGF0LmVycm9yUHJvbXB0VG9vTG9uZycsIHsgdXNlZDogdG9rZW5zVXNlZCB9KVxuICByZXR1cm4gdHJhbnNsYXRlKCdjaGF0LmVycm9yJylcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQcmV2aW91c0Fzc2lzdGFudE1lc3NhZ2VCZWZvcmVQbGFjZWhvbGRlciA9IChcbiAgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10sXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuKTogQ2hhdE1lc3NhZ2UgfCB1bmRlZmluZWQgPT4gbWVzc2FnZXMuZmlsdGVyKG1lc3NhZ2UgPT4gbWVzc2FnZS5pZCAhPT0gcGxhY2Vob2xkZXJJZCkuYXQoLTEpXG5cbmV4cG9ydCB0eXBlIEhpdGxFeGVjdXRpb25Db250ZXh0U25hcHNob3QgPSB7XG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIG1lc3NhZ2VUZXh0OiBzdHJpbmdcbiAgYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdXG4gIHRocmVhZElkczogc3RyaW5nW11cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVIaXRsRXhlY3V0aW9uQ29udGV4dCA9IChcbiAgYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCxcbiAgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmdcbik6IEhpdGxFeGVjdXRpb25Db250ZXh0U25hcHNob3QgPT4gKHtcbiAgbWVzc2FnZUlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgbWVzc2FnZVRleHQ6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgYXBwcm92YWwsXG4gIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gIHRocmVhZElkczpcbiAgICBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnNcbiAgICAgID8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKVxuICAgICAgLmZpbHRlcigodGhyZWFkSWQpOiB0aHJlYWRJZCBpcyBzdHJpbmcgPT4gQm9vbGVhbih0aHJlYWRJZCkpID8/IFtdLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTa2lwcGVkSGl0bE1hbnVhbEFwcHJvdmFsID0gKFxuICBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0XG4pOiB7IHRvb2xOYW1lOiBzdHJpbmc7IHRvb2xBcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfSB8IG51bGwgPT4ge1xuICBjb25zdCBmaXJzdEFjdGlvbiA9IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8uWzBdXG4gIGNvbnN0IHRvb2xOYW1lID0gKGFwcHJvdmFsIGFzIHsgdG9vbF9uYW1lPzogc3RyaW5nIH0pLnRvb2xfbmFtZSA/PyBmaXJzdEFjdGlvbj8udG9vbF9uYW1lID8/ICcnXG4gIGlmICghdG9vbE5hbWUpIHJldHVybiBudWxsXG4gIGNvbnN0IHRvb2xBcmdzID1cbiAgICAoKGFwcHJvdmFsIGFzIHsgdG9vbF9hcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkudG9vbF9hcmdzID8/XG4gICAgICAoZmlyc3RBY3Rpb24/LnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkpIHx8XG4gICAgbnVsbFxuICByZXR1cm4geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhpdGxTa2lwUmVzb2x1dGlvblNvdXJjZSA9IChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0KTogJ21hbnVhbCcgfCAnYXV0bycgPT5cbiAgYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkID8gJ21hbnVhbCcgOiAnYXV0bydcblxuZXhwb3J0IHR5cGUgQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnQgPSB7XG4gIGFnZW50X3R5cGU6IHN0cmluZ1xuICBhY3Rpb25fdHlwZTogc3RyaW5nXG4gIGRlY2lzaW9uOiAnYWNjZXB0J1xuICBvcHRpb246ICdjcmVhdGVfYWdlbnQnXG4gIHJlc29sdXRpb25fc291cmNlPzogJ21hbnVhbCdcbiAgY3JlYXRlZF9hZ2VudF9pZD86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNyZWF0ZUFnZW50SGl0bEFuYWx5dGljc0V2ZW50cyA9IChwYXJhbXM6IHtcbiAgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZDogYm9vbGVhblxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdXG4gIG1hbnVhbEFwcHJvdmFsVG9vbE5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgYWdlbnRUeXBlOiBzdHJpbmdcbiAgbm9ybWFsaXplVG9vbE5hbWU6ICh0b29sTmFtZTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgYnVpbGRBY3Rpb25UeXBlTGlzdDogKGFjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSkgPT4gc3RyaW5nXG59KTogQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRbXSA9PiB7XG4gIGNvbnN0IGV2ZW50czogQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRbXSA9IFtdXG4gIGNvbnN0IHRyaW1tZWRBZ2VudElkID0gcGFyYW1zLmNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICBjb25zdCBpZEZpZWxkID0gdHJpbW1lZEFnZW50SWQgPyB7IGNyZWF0ZWRfYWdlbnRfaWQ6IHRyaW1tZWRBZ2VudElkIH0gOiB7fVxuXG4gIGlmIChwYXJhbXMud2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCkge1xuICAgIGV2ZW50cy5wdXNoKHtcbiAgICAgIGFnZW50X3R5cGU6IHBhcmFtcy5hZ2VudFR5cGUsXG4gICAgICBhY3Rpb25fdHlwZTogcGFyYW1zLmJ1aWxkQWN0aW9uVHlwZUxpc3QocGFyYW1zLnBlbmRpbmdBY3Rpb25zKSxcbiAgICAgIGRlY2lzaW9uOiAnYWNjZXB0JyxcbiAgICAgIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAuLi5pZEZpZWxkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBtYW51YWxUb29sID0gcGFyYW1zLm1hbnVhbEFwcHJvdmFsVG9vbE5hbWVcbiAgaWYgKG1hbnVhbFRvb2wgJiYgcGFyYW1zLm5vcm1hbGl6ZVRvb2xOYW1lKG1hbnVhbFRvb2wpID09PSAnY3JlYXRlX2FnZW50Jykge1xuICAgIGV2ZW50cy5wdXNoKHtcbiAgICAgIGFnZW50X3R5cGU6IHBhcmFtcy5hZ2VudFR5cGUsXG4gICAgICBhY3Rpb25fdHlwZTogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICByZXNvbHV0aW9uX3NvdXJjZTogJ21hbnVhbCcsXG4gICAgICBvcHRpb246ICdjcmVhdGVfYWdlbnQnLFxuICAgICAgLi4uaWRGaWVsZCxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50c1xufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbnRleHRQcm9qZWN0SWRGb3JEYXNoYm9hcmQgPSAoXG4gIHByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBsYXN0TWVzc2FnZVByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBudW1iZXIgfCBudWxsID0+IHtcbiAgY29uc3QgcmF3ID0gcHJvamVjdElkID8/IGxhc3RNZXNzYWdlUHJvamVjdElkXG4gIGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuIG51bGxcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRGFzaGJvYXJkU3luY2VkQ29udGVudCA9IGFzeW5jIChcbiAgY29udGVudDogc3RyaW5nLFxuICB0YXNrVXJsUmVnZXg6IFJlZ0V4cCxcbiAgc2hvdWxkU3luY0Rhc2hib2FyZDogYm9vbGVhbixcbiAgdGFza0lkczogbnVtYmVyW10sXG4gIGdldFRhYlRhc2tEZWZhdWx0OiAodGFza0lkOiBudW1iZXIpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD5cbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmICghc2hvdWxkU3luY0Rhc2hib2FyZCB8fCB0YXNrSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbnRlbnRcbiAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbnRlbnRcbiAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICByZXR1cm4gcmVwbGFjZVRhc2tVcmxzV2l0aFRhYlNlZ21lbnQoY29udGVudCwgdGFza1VybFJlZ2V4LCB0YWJTZWdtZW50KVxufVxuXG5leHBvcnQgY29uc3QgaXNUZXJtaW5hbFNlc3Npb25TdGF0dXMgPSAoc3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIHN0YXR1cyA9PT0gJ2NvbXBsZXRlJyB8fCBzdGF0dXMgPT09ICdlcnJvcidcblxuZXhwb3J0IGNvbnN0IGJ1aWxkVGVybWluYWxTZXNzaW9uUmVjb25jaWxpYXRpb25LZXkgPSAoXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBzdGF0dXM6IHN0cmluZyxcbiAgZmluaXNoZWRBdD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbik6IHN0cmluZyA9PiBgJHtzZXNzaW9uSWR9OiR7c3RhdHVzfToke2ZpbmlzaGVkQXQgPz8gJyd9YFxuXG5leHBvcnQgY29uc3QgaGFzU3RhbGVTdHJlYW1pbmdQbGFjZWhvbGRlckluVGFpbCA9IChcbiAgdGFpbDogQXJyYXk8eyBpZD86IHN0cmluZyB9PixcbiAgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcjogKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuXG4pOiBib29sZWFuID0+IHRhaWwuc29tZShtZXNzYWdlID0+IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIobWVzc2FnZS5pZCkpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24gPSAoXG4gIHN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0YWlsOiBBcnJheTx7IGlkPzogc3RyaW5nIH0+LFxuICBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiAobWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gaXNUZXJtaW5hbFNlc3Npb25TdGF0dXMoc3RhdHVzKSAmJiBoYXNTdGFsZVN0cmVhbWluZ1BsYWNlaG9sZGVySW5UYWlsKHRhaWwsIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSb3RhdGVTZXNzaW9uRm9yTmV3SG9tZSA9IChcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgcHJldmlvdXNJbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+ICFpbml0aWFsQ2hhdElkICYmIEJvb2xlYW4ocHJldmlvdXNJbml0aWFsQ2hhdElkKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU3dpdGNoVG9Jbml0aWFsQ2hhdFNlc3Npb24gPSAoXG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGN1cnJlbnRDaGF0SWQ6IHN0cmluZ1xuKTogYm9vbGVhbiA9PiBCb29sZWFuKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZClcblxuZXhwb3J0IHR5cGUgTWFudWFsQXBwcm92YWxTbmFwc2hvdCA9IHsgdG9vbE5hbWU6IHN0cmluZzsgdG9vbEFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfSB8IG51bGxcblxuZXhwb3J0IHR5cGUgU3RyZWFtRmluaXNoQXNzaXN0YW50Q29tbWl0ID0ge1xuICBmaW5hbE1lc3NhZ2VJZDogc3RyaW5nXG4gIGNvbnRlbnQ6IHN0cmluZ1xuICBzb3VyY2VzOiB1bmtub3duXG4gIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nXG4gIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiBSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcD5cbiAgcmVhc29uaW5nPzogUmVhc29uaW5nVHJhY2UgfCBudWxsXG4gIGNvbXBhY3Rpb24/OiBDb250ZXh0Q29tcGFjdGlvbiB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU3RyZWFtRmluaXNoQXNzaXN0YW50TWVzc2FnZSA9IChwYXJhbXM6IFN0cmVhbUZpbmlzaEFzc2lzdGFudENvbW1pdCk6IENoYXRNZXNzYWdlID0+ICh7XG4gIGlkOiBwYXJhbXMuZmluYWxNZXNzYWdlSWQsXG4gIG1lc3NhZ2U6IHBhcmFtcy5jb250ZW50LFxuICBkYXRlOiBuZXcgRGF0ZSgpLFxuICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgc291cmNlczogcGFyYW1zLnNvdXJjZXMsXG4gIC4uLihwYXJhbXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHM6IHBhcmFtcy5hdHRhY2htZW50cyB9IDoge30pLFxuICBtZW1vcnlTZXNzaW9uSWQ6IHBhcmFtcy5tZW1vcnlTZXNzaW9uSWQsXG4gIHN1Z2dlc3Rpb25zOiBwYXJhbXMuc3VnZ2VzdGlvbnMgfHwgW10sXG4gIC4uLihwYXJhbXMuY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcDogcGFyYW1zLmNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgcmVhc29uaW5nOiBwYXJhbXMucmVhc29uaW5nLFxuICBjb21wYWN0aW9uOiBwYXJhbXMuY29tcGFjdGlvbixcbn0pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRNYXJrQ2hhdFJlYWRBZnRlclN0cmVhbUZpbmlzaCA9IChpc0FjdGl2ZTogYm9vbGVhbiwgaXNDaGF0Vmlld1Zpc2libGU6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIGlzQWN0aXZlICYmIGlzQ2hhdFZpZXdWaXNpYmxlXG5cbmV4cG9ydCBjb25zdCBzaG91bGREaXNwYXRjaEZpcnN0U2Vzc2lvblJlZmV0Y2ggPSAoZmlyc3RUaW1lOiBib29sZWFuKTogYm9vbGVhbiA9PiBmaXJzdFRpbWVcblxuZXhwb3J0IHR5cGUgQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZ1Jlc3VsdCA9IHtcbiAgY29udGVudFRvQWRkOiBzdHJpbmdcbiAgY3JlYXRlQWdlbnRGb2xsb3dVcDogUmV0dXJuVHlwZTx0eXBlb2YgcmVzb2x2ZUNyZWF0ZUFnZW50Rm9sbG93VXA+XG4gIGVkaXRBZ2VudEZvbGxvd1VwOiBSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlRWRpdEFnZW50Rm9sbG93VXA+XG4gIGhvdXJzQ2hhcmdlVG9vbHM6IFJldHVyblR5cGU8dHlwZW9mIHJlc29sdmVIb3Vyc0NoYXJnZVRvb2xzT25TdHJlYW1GaW5pc2g+XG4gIGFmZmVjdGVkVGFza0lkczogc3RyaW5nW11cbiAgbWFudWFsV2FzVGFza0VkaXQ6IGJvb2xlYW5cbiAgbWFudWFsV2FzVGFza0RlbGV0ZTogYm9vbGVhblxuICB3YXNUYXNrRWRpdDogYm9vbGVhblxuICB3YXNUYXNrRGVsZXRlOiBib29sZWFuXG4gIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQ6IGJvb2xlYW5cbiAgcGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUFjdGl2ZVN0cmVhbUZpbmlzaFByb2Nlc3NpbmcocGFyYW1zOiB7XG4gIGNvbnRlbnQ6IHN0cmluZ1xuICBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXVxuICB0ZW1wTWVzc2FnZUlkOiBzdHJpbmdcbiAgdGFza1VybFJlZ2V4OiBSZWdFeHBcbiAgcHJvamVjdElkOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWRcbiAgcGF0aG5hbWU6IHN0cmluZ1xuICBnZXRUYWJUYXNrRGVmYXVsdDogKHRhc2tJZDogbnVtYmVyKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+XG4gIG11bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuXG4gIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gIG1hbnVhbEFwcHJvdmFsOiBNYW51YWxBcHByb3ZhbFNuYXBzaG90XG4gIGFwcGx5RGFzaGJvYXJkTXV0YXRpb24/OiAobXV0YXRpb246IFJldHVyblR5cGU8dHlwZW9mIHJlc29sdmVQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24+LCB0YXNrSWRzOiBudW1iZXJbXSkgPT4gdm9pZFxufSk6IFByb21pc2U8QWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZ1Jlc3VsdD4ge1xuICBsZXQgY29udGVudFRvQWRkID0gcGFyYW1zLmNvbnRlbnRcbiAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gcmVzb2x2ZVByZXZpb3VzQXNzaXN0YW50TWVzc2FnZUJlZm9yZVBsYWNlaG9sZGVyKHBhcmFtcy5tZXNzYWdlcywgcGFyYW1zLnRlbXBNZXNzYWdlSWQpXG4gIGNvbnN0IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsICE9IG51bGxcbiAgY29uc3QgcGVuZGluZ0FjdGlvbnMgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgfHwgW11cbiAgY29uc3Qge1xuICAgIHdhc1Rhc2tDcmVhdGlvbixcbiAgICB3YXNUYXNrRWRpdCxcbiAgICB3YXNUYXNrRGVsZXRlLFxuICAgIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQsXG4gICAgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCxcbiAgICB3YXNFZGl0QWdlbnRBcHByb3ZlZCxcbiAgfSA9IHJlc29sdmVBcHByb3ZlZFBlbmRpbmdBY3Rpb25GbGFncyhoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlLCBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzLCBwZW5kaW5nQWN0aW9ucylcblxuICBjb25zdCBjcmVhdGVBZ2VudEZvbGxvd1VwID0gcmVzb2x2ZUNyZWF0ZUFnZW50Rm9sbG93VXAoXG4gICAgeyB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLCB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIH0sXG4gICAgcGFyYW1zLm11bHRpQWdlbnRzQWNjZXNzLFxuICAgIHBhcmFtcy5jb21wbGV0ZWRBZ2VudElkLFxuICAgIHBlbmRpbmdBY3Rpb25zXG4gIClcbiAgY29uc3QgZWRpdEFnZW50Rm9sbG93VXAgPSByZXNvbHZlRWRpdEFnZW50Rm9sbG93VXAod2FzRWRpdEFnZW50QXBwcm92ZWQsIHBhcmFtcy5jb21wbGV0ZWRBZ2VudElkLCBwZW5kaW5nQWN0aW9ucylcbiAgY29uc3QgdGFza0lkc0ZvckRhc2hib2FyZCA9IHJlc29sdmVUYXNrSWRzRm9yRGFzaGJvYXJkKFxuICAgIHBhcmFtcy5jb250ZW50LFxuICAgIHBhcmFtcy50YXNrVXJsUmVnZXgsXG4gICAgcGVuZGluZ0FjdGlvbnMsXG4gICAgd2FzVGFza0RlbGV0ZVxuICApXG5cbiAgY29uc3Qgc2hvdWxkU3luY0Rhc2hib2FyZCA9IHNob3VsZFN5bmNUYXNrRGFzaGJvYXJkKFxuICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UsXG4gICAgd2FzVGFza0NyZWF0aW9uLFxuICAgIHdhc1Rhc2tFZGl0LFxuICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgdGFza0lkc0ZvckRhc2hib2FyZFxuICApXG5cbiAgaWYgKHNob3VsZFN5bmNEYXNoYm9hcmQpIHtcbiAgICBjb250ZW50VG9BZGQgPSBhd2FpdCByZXNvbHZlRGFzaGJvYXJkU3luY2VkQ29udGVudChcbiAgICAgIHBhcmFtcy5jb250ZW50LFxuICAgICAgcGFyYW1zLnRhc2tVcmxSZWdleCxcbiAgICAgIHNob3VsZFN5bmNEYXNoYm9hcmQsXG4gICAgICB0YXNrSWRzRm9yRGFzaGJvYXJkLFxuICAgICAgcGFyYW1zLmdldFRhYlRhc2tEZWZhdWx0XG4gICAgKVxuXG4gICAgY29uc3QgbGFzdFByb2plY3RNZXNzYWdlID0gcGFyYW1zLm1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHJlc29sdmVDb250ZXh0UHJvamVjdElkRm9yRGFzaGJvYXJkKHBhcmFtcy5wcm9qZWN0SWQsIGxhc3RQcm9qZWN0TWVzc2FnZT8ucHJvamVjdElkKVxuICAgIGNvbnN0IHsgaXNPblByb2plY3RSb3V0ZSB9ID0gcmVzb2x2ZVByb2plY3REYXNoYm9hcmRTeW5jKGNvbnRleHRQcm9qZWN0SWQsIHBhcmFtcy5wYXRobmFtZSlcblxuICAgIGlmIChpc09uUHJvamVjdFJvdXRlICYmIHBhcmFtcy5hcHBseURhc2hib2FyZE11dGF0aW9uKSB7XG4gICAgICBwYXJhbXMuYXBwbHlEYXNoYm9hcmRNdXRhdGlvbihcbiAgICAgICAgcmVzb2x2ZVByb2plY3REYXNoYm9hcmRNdXRhdGlvbih7IHdhc1Rhc2tDcmVhdGlvbiwgd2FzVGFza0VkaXQsIHdhc1Rhc2tEZWxldGUgfSksXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmRcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb25zdCBtYW51YWxXYXNUYXNrRWRpdCA9IGlzVGFza0VkaXRUb29sTmFtZShwYXJhbXMubWFudWFsQXBwcm92YWw/LnRvb2xOYW1lKVxuICBjb25zdCBtYW51YWxXYXNUYXNrRGVsZXRlID0gaXNUYXNrRGVsZXRlVG9vbE5hbWUocGFyYW1zLm1hbnVhbEFwcHJvdmFsPy50b29sTmFtZSlcbiAgY29uc3QgaG91cnNDaGFyZ2VUb29scyA9IHJlc29sdmVIb3Vyc0NoYXJnZVRvb2xzT25TdHJlYW1GaW5pc2goXG4gICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSxcbiAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzLFxuICAgIHBlbmRpbmdBY3Rpb25zLFxuICAgIHBhcmFtcy5tYW51YWxBcHByb3ZhbD8udG9vbE5hbWVcbiAgKVxuICBjb25zdCBhZmZlY3RlZFRhc2tJZHMgPSBtZXJnZUFmZmVjdGVkVGFza0lkc0ZvclBhbmVsUmVmZXRjaChcbiAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICB0YXNrSWRzRm9yRGFzaGJvYXJkLFxuICAgIHBhcmFtcy5tYW51YWxBcHByb3ZhbD8udG9vbE5hbWVcbiAgICAgID8geyB0b29sTmFtZTogcGFyYW1zLm1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lLCB0b29sQXJnczogcGFyYW1zLm1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzIH1cbiAgICAgIDogbnVsbFxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZW50VG9BZGQsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBlZGl0QWdlbnRGb2xsb3dVcCxcbiAgICBob3Vyc0NoYXJnZVRvb2xzLFxuICAgIGFmZmVjdGVkVGFza0lkcyxcbiAgICBtYW51YWxXYXNUYXNrRWRpdCxcbiAgICBtYW51YWxXYXNUYXNrRGVsZXRlLFxuICAgIHdhc1Rhc2tFZGl0LFxuICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCxcbiAgICBwZW5kaW5nQWN0aW9ucyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLFNBQVNBLGlCQUFpQixRQUFRLG1DQUFtQztBQUVyRSxTQUdFQyxlQUFlLFFBSVYsa0JBQWtCO0FBR3pCLFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFDckQsU0FBU0MsbUJBQW1CLFFBQVEsOEJBQThCO0FBRWxFLFNBQVNDLG9CQUFvQixRQUFnQywrQkFBK0I7QUFJNUYsU0FBU0Msa0JBQWtCLFFBQVEsNkJBQTZCO0FBSWhFO0FBQ0EsT0FBTyxJQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFJQyxTQUFpQixFQUE0QjtFQUM3RSxJQUFNQyxRQUFRLEdBQUdOLGNBQWMsQ0FBQ08sV0FBVyxDQUFDRixTQUFTLENBQUM7RUFDdEQsSUFBSSxDQUFDQyxRQUFRLENBQUNFLEtBQUssQ0FBQ0MsTUFBTSxFQUFFLE9BQU8sSUFBSTtFQUN2QyxPQUFPUixtQkFBbUIsQ0FBQ0ssUUFBUSxDQUFDRSxLQUFLLEVBQUVGLFFBQVEsQ0FBQ0ksT0FBTyxDQUFDO0FBQzlELENBQUM7O0FBRUQ7QUFDQSxPQUFPLElBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSU4sU0FBaUIsRUFBRU8sT0FBc0M7RUFBQSxJQUFBQyxxQkFBQTtFQUFBLFFBQUFBLHFCQUFBLEdBQ3JGYixjQUFjLENBQUNPLFdBQVcsQ0FBQ0YsU0FBUyxDQUFDLENBQUNTLFVBQVUsY0FBQUQscUJBQUEsY0FBQUEscUJBQUEsR0FBSVgsb0JBQW9CLENBQUNVLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFRSxVQUFVLENBQUM7QUFBQTtBQUUvRixPQUFPLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLG9CQUEyQyxFQUFLO0VBQUEsSUFBQUMsb0JB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
|
|
913
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0hvdXJzQ2hhcmdlVG9vbCIsIkNoYXRIaXN0b3J5Um9sZSIsInJlYXNvbmluZ1N0b3JlIiwiYnVpbGRSZWFzb25pbmdUcmFjZSIsIm1hcENvbnRleHRDb21wYWN0aW9uIiwicmVzb2x2ZVJldHJ5VHVybklkIiwicmVhc29uaW5nVHJhY2VGb3IiLCJtZXNzYWdlSWQiLCJzbmFwc2hvdCIsImdldFNuYXBzaG90Iiwic3RlcHMiLCJsZW5ndGgiLCJzdW1tYXJ5IiwiY29tcGFjdGlvbkZvciIsInBheWxvYWQiLCJfcmVhc29uaW5nU3RvcmUkZ2V0U24iLCJjb21wYWN0aW9uIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwiY2hpcHNQcm9qZWN0IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJjaGlwc1Byb2plY3RJZCIsInByb2plY3RJZCIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VkIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJjdHhDbGllbnQiLCJjdHhQcm9qZWN0IiwiX2N0eFByb2plY3QkY2xpZW50IiwiaWQiLCJfb2JqZWN0U3ByZWFkIiwiY2xpZW50SWQiLCJuYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwicGFyc2VkU2l6ZSIsImZpbGUiLCJGaWxlIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJpc1Rhc2tFZGl0VG9vbE5hbWUiLCJpc1Rhc2tEZWxldGVUb29sTmFtZSIsInBlbmRpbmdBY3Rpb25zSW5jbHVkZVRvb2wiLCJ0b29scyIsInNvbWUiLCJyZXNvbHZlQXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwiYXBwcm92YWxTdGF0dXMiLCJhcHByb3ZlZCIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJzaG91bGRTeW5jVGFza0Rhc2hib2FyZCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJyZXNvbHZlVGFza0lkc0ZvckRhc2hib2FyZCIsImNvbnRlbnQiLCJ0YXNrVXJsUmVnZXgiLCJ0YXNrSWRzRnJvbVVybHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYXRjaEFsbCIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInJlcGxhY2VUYXNrVXJsc1dpdGhUYWJTZWdtZW50IiwidGFiU2VnbWVudCIsInJlcGxhY2UiLCJ1cmwiLCJyZXNvbHZlUHJvamVjdERhc2hib2FyZFN5bmMiLCJjb250ZXh0UHJvamVjdElkIiwicGF0aG5hbWUiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJCb29sZWFuIiwicmVzb2x2ZUNyZWF0ZUFnZW50Rm9sbG93VXAiLCJmbGFncyIsIm11bHRpQWdlbnRzQWNjZXNzIiwiY29tcGxldGVkQWdlbnRJZCIsImNvbmZpZ3VyZWRBZ2VudElkIiwicmVzb2x2ZUVkaXRBZ2VudEZvbGxvd1VwIiwicmVzb2x2ZWRBZ2VudElkIiwic2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwiLCJvcGVuVGFza1BhbmVsSWQiLCJtYW51YWxGbGFncyIsImFmZmVjdGVkVGFza0lkcyIsInRhc2tGbG93QWN0aXZlIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwicmVzb2x2ZVN0cmVhbUVycm9yUHJlc2VudGF0aW9uIiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsImlzQWNjZXNzRGVuaWVkIiwiaXNQcm9tcHRUb29Mb25nIiwidG9rZW5zVXNlZCIsInNob3dSZXRyeSIsInJlc29sdmVTdHJlYW1FcnJvck1lc3NhZ2VLZXkiLCJwcmVzZW50YXRpb24iLCJtZXNzYWdlS2V5IiwicmVzb2x2ZVByb2plY3REYXNoYm9hcmRNdXRhdGlvbiIsImFwcGx5UHJvamVjdERhc2hib2FyZE11dGF0aW9uIiwibXV0YXRpb24iLCJ0YXNrSWRzIiwiZGFzaGJvYXJkIiwiX2Rhc2hib2FyZCRkZWxldGVFeGlzIiwiX2Rhc2hib2FyZCRhZGRFeGlzdGluIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJjYWxsIiwiX2Rhc2hib2FyZCRlZGl0RXhpc3RpIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsIm1lcmdlQWZmZWN0ZWRUYXNrSWRzRm9yUGFuZWxSZWZldGNoIiwibWFudWFsQXBwcm92YWwiLCJtYW51YWxQc2V1ZG9BY3Rpb25zIiwiX21hbnVhbEFwcHJvdmFsJHRvb2xBIiwidG9vbEFyZ3MiLCJ0aHJlYWRfaWQiLCJ0b29sX2NhbGxfaWQiLCJtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyIiwiYXV0aFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEluTGlzdCIsInRocmVhZElkcyIsIm1lc3NhZ2VzIiwic2Vzc2lvbklkIiwiZm91bmQiLCJtZXNzYWdlIiwiX21lc3NhZ2UkYXBwcm92YWwiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNlc3Npb25faWQiLCJjYW5TZW5kQ2hhdE1lc3NhZ2UiLCJpc1Byb2Nlc3NpbmciLCJ3YWl0aW5nUmVzcG9uc2UiLCJsb2FkaW5nTWVzc2FnZXMiLCJzaG91bGRCbG9ja0NvbmN1cnJlbnRTdHJlYW1TdGFydCIsIndpbGxTdGFydE5ld1N0cmVhbSIsImFjdGl2ZUNvdW50IiwibWF4Q29uY3VycmVudCIsInJlc29sdmVTZW5kTWVzc2FnZUdhdGUiLCJwYXJhbXMiLCJhY3RpdmVTdHJlYW1Db3VudCIsInJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMiLCJwb3NpdGlvbmFsIiwiX3Bvc2l0aW9uYWwkZmFxSWQiLCJfcG9zaXRpb25hbCRhZ2VudFN1Z2ciLCJfcG9zaXRpb25hbCRtZW50aW9ucyIsIl9wb3NpdGlvbmFsJGZ1YUlkIiwiX3Bvc2l0aW9uYWwkc2NJZCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiYnVpbGRDaGF0SGlzdG9yeUZyb21NZXNzYWdlcyIsImF1dGhVc2VySWQiLCJoaXN0b3J5TWVzc2FnZSIsInVzZXIiLCJVU0VSIiwiQVNTSVNUQU5UIiwicmVzb2x2ZUxhc3RNZXNzYWdlQWdlbnRJZCIsIl9tZXNzYWdlcyRhdCIsImF0IiwicmVzb2x2ZUFnZW50SWRGb3JTdHJlYW0iLCJhZ2VudElkRnJvbU1lc3NhZ2VzIiwiZmFsbGJhY2tBZ2VudElkIiwicmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCIsInR1cm5NZXNzYWdlSWQiLCJidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCIsIl9wYXJhbXMkY3R4UHJvamVjdCIsIl9wYXJhbXMkY3R4VGFzayIsImhpc3RvcnkiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiY2hhdElkIiwiYWdlbnROYW1lIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJpc0F1dG9BcHByb3ZlQWN0aXZlIiwiZmVlSWQiLCJwcm9qZWN0TmFtZSIsImN0eFRhc2siLCJ0YXNrSWQiLCJ0YXNrTmFtZSIsImFnZW50RW50aXR5IiwiYWdlbnRUeXBlIiwiYWdlbnRFbW9qaSIsImNvbnRleHRNZXNzYWdlIiwiYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlIiwicHJvamVjdCIsInJlc29sdmVTdHJlYW1FcnJvckhhbmRsaW5nTW9kZSIsImhhc1JldHJ5U25hcHNob3QiLCJyZXNvbHZlU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlSWQiLCJidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSIsImlzRXJyb3IiLCJzdWdnZXN0aW9ucyIsInJldHJ5TGFiZWwiLCJkYXRlIiwiRGF0ZSIsInNob3VsZFNraXBIaXRsQXBwcm92YWxVaSIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImF1dG9fYXBwcm92ZWQiLCJhcHByb3ZhbF9zdGF0dXMiLCJyZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lIiwiYXBwcm92YWxNZXNzYWdlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlIiwiYWNjdW11bGF0ZWRDb250ZW50IiwicmVhc29uaW5nIiwic2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AiLCJzdG9wcGVkVHJhY2UiLCJidWlsZFN0cmVhbVN0b3BQYXJ0aWFsQXNzaXN0YW50TWVzc2FnZSIsImZpbmFsTWVzc2FnZUlkIiwicGFydGlhbFRleHQiLCJidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlIiwiY2FuY2VsbGVkTWVzc2FnZUlkIiwiY2FuY2VsbGVkTGFiZWwiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwicmVzb2x2ZVJldHJ5QmxvY2tSZWFzb24iLCJpc1Nlc3Npb25TdHJlYW1BY3RpdmUiLCJzaG91bGRVc2VPcmNoZXN0cmF0b3JSZXRyeUZhbGxiYWNrIiwiX21lc3NhZ2UkbWVtb3J5U2Vzc2lvIiwibWVtb3J5U2Vzc2lvbklkIiwicmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHkiLCJwcmV2aW91c01lc3NhZ2VzIiwidXNlck1lc3NhZ2UiLCJfdXNlck1lc3NhZ2UkbWVzc2FnZSIsIl91c2VyTWVzc2FnZSRhdHRhY2htZSIsIl91c2VyTWVzc2FnZSRzb3VyY2VzIiwiaXRlbSIsImVsaWdpYmxlIiwicmVhc29uIiwic291cmNlcyIsInR1cm5JZCIsInVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIiwicmVzb2x2ZVJldHJ5VXNlckF0dGFjaG1lbnRzIiwic2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlIiwibmV4dFByb2plY3RJZCIsImN1cnJlbnRQcm9qZWN0SWQiLCJzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UiLCJ1c2VyUXVlc3Rpb24iLCJyZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyIsImRlY2lzaW9uIiwicmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwicmVzb2x2ZUFwcHJvdmFsU3RyZWFtQmxvY2tSZWFzb24iLCJfcGFyYW1zJHRocmVhZElkcyIsImhhc0FwcHJvdmFsTWVzc2FnZSIsInJlc29sdmVIb3Vyc0NoYXJnZVRvb2xzT25TdHJlYW1GaW5pc2giLCJtYW51YWxBcHByb3ZhbFRvb2xOYW1lIiwiaG91cnNUb29sc0Zyb21BcHByb3ZhbCIsIndhc0hvdXJzQ2hhcmdlQXBwcm92ZWQiLCJmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzIiwiYWN0aXZlTWVzc2FnZXMiLCJzZXNzaW9uTWVzc2FnZXNCeUlkIiwiYWN0aXZlU2Vzc2lvbklkIiwiZnJvbUFjdGl2ZVZpZXciLCJzZXNzaW9uRW50cnkiLCJPYmplY3QiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5Iiwic2Vzc2lvbk1lc3NhZ2VzIiwiX21lc3NhZ2UkYXBwcm92YWwyIiwiX3Nlc3Npb25FbnRyeSIsInJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1TdG9wTWVzc2FnZUlkcyIsImN1cnJlbnRNZXNzYWdlSWQiLCJyZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UiLCJyZW50YWJpbGlkYWRMYWJlbCIsImluY29tZVR5cGUiLCJyZXNvbHZlU3RyZWFtRXJyb3JVc2VyTWVzc2FnZSIsInRyYW5zbGF0ZSIsInVzZWQiLCJyZXNvbHZlUHJldmlvdXNBc3Npc3RhbnRNZXNzYWdlQmVmb3JlUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlcklkIiwicmVzb2x2ZUhpdGxFeGVjdXRpb25Db250ZXh0IiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0MiIsIm1lc3NhZ2VUZXh0IiwidGhyZWFkSWQiLCJyZXNvbHZlU2tpcHBlZEhpdGxNYW51YWxBcHByb3ZhbCIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDMiLCJfcmVmNCIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiZmlyc3RBY3Rpb24iLCJyZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlIiwicmVzb2x2ZUNyZWF0ZUFnZW50SGl0bEFuYWx5dGljc0V2ZW50cyIsIl9wYXJhbXMkY29tcGxldGVkQWdlbiIsImV2ZW50cyIsInRyaW1tZWRBZ2VudElkIiwiaWRGaWVsZCIsImNyZWF0ZWRfYWdlbnRfaWQiLCJhZ2VudF90eXBlIiwiYWN0aW9uX3R5cGUiLCJidWlsZEFjdGlvblR5cGVMaXN0Iiwib3B0aW9uIiwibWFudWFsVG9vbCIsIm5vcm1hbGl6ZVRvb2xOYW1lIiwicmVzb2x1dGlvbl9zb3VyY2UiLCJyZXNvbHZlQ29udGV4dFByb2plY3RJZEZvckRhc2hib2FyZCIsInJlc29sdmVEYXNoYm9hcmRTeW5jZWRDb250ZW50IiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNob3VsZFN5bmNEYXNoYm9hcmQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsIm1hdGNoZXMiLCJ0YWIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfeDUiLCJhcHBseSIsImFyZ3VtZW50cyIsImlzVGVybWluYWxTZXNzaW9uU3RhdHVzIiwic3RhdHVzIiwiYnVpbGRUZXJtaW5hbFNlc3Npb25SZWNvbmNpbGlhdGlvbktleSIsImZpbmlzaGVkQXQiLCJoYXNTdGFsZVN0cmVhbWluZ1BsYWNlaG9sZGVySW5UYWlsIiwidGFpbCIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXIiLCJzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24iLCJzaG91bGRSb3RhdGVTZXNzaW9uRm9yTmV3SG9tZSIsImluaXRpYWxDaGF0SWQiLCJwcmV2aW91c0luaXRpYWxDaGF0SWQiLCJzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbiIsImN1cnJlbnRDaGF0SWQiLCJidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2UiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwic2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2giLCJpc0FjdGl2ZSIsImlzQ2hhdFZpZXdWaXNpYmxlIiwic2hvdWxkRGlzcGF0Y2hGaXJzdFNlc3Npb25SZWZldGNoIiwiZmlyc3RUaW1lIiwicmVzb2x2ZUFjdGl2ZVN0cmVhbUZpbmlzaFByb2Nlc3NpbmciLCJfeDYiLCJfcmVzb2x2ZUFjdGl2ZVN0cmVhbUZpbmlzaFByb2Nlc3NpbmciLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl9wYXJhbXMkbWFudWFsQXBwcm92YSIsIl9wYXJhbXMkbWFudWFsQXBwcm92YTIiLCJfcGFyYW1zJG1hbnVhbEFwcHJvdmEzIiwiX3BhcmFtcyRtYW51YWxBcHByb3ZhNCIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsIl9yZXNvbHZlQXBwcm92ZWRQZW5kaSIsImVkaXRBZ2VudEZvbGxvd1VwIiwibGFzdFByb2plY3RNZXNzYWdlIiwiX3Jlc29sdmVQcm9qZWN0RGFzaGJvIiwiaG91cnNDaGFyZ2VUb29scyIsIl9jb250ZXh0MiIsInRlbXBNZXNzYWdlSWQiLCJtc2ciLCJhcHBseURhc2hib2FyZE11dGF0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLmhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNIb3Vyc0NoYXJnZVRvb2wgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIEFwcHJvdmFsUmVxdWVzdCxcbiAgQ2hhdEhpc3RvcnksXG4gIENoYXRIaXN0b3J5Um9sZSxcbiAgQ2hhdE1lc3NhZ2UsXG4gIENoYXRNZXNzYWdlVXNlcixcbiAgUGVuZGluZ0FjdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgYnVpbGRSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JlYXNvbmluZ01hcHBlcnMnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgeyBtYXBDb250ZXh0Q29tcGFjdGlvbiwgdHlwZSBDb250ZXh0Q29tcGFjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRDb21wYWN0aW9uJ1xuaW1wb3J0IHR5cGUgeyBTZW5kTWVzc2FnZU9wdGlvbnMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB0eXBlIHsgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgdHlwZSB7IEFnZW50RW50aXR5LCBBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCB9IGZyb20gJy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuLyoqIFRyYWNlIGFjdW11bGFkbyBlbiB2aXZvIHBhcmEgYG1lc3NhZ2VJZGAsIG8gbnVsbCBzaSBlbCBzdG9yZSBhcHVudGEgYSBvdHJvIG1lbnNhamUuICovXG5leHBvcnQgY29uc3QgcmVhc29uaW5nVHJhY2VGb3IgPSAobWVzc2FnZUlkOiBzdHJpbmcpOiBSZWFzb25pbmdUcmFjZSB8IG51bGwgPT4ge1xuICBjb25zdCBzbmFwc2hvdCA9IHJlYXNvbmluZ1N0b3JlLmdldFNuYXBzaG90KG1lc3NhZ2VJZClcbiAgaWYgKCFzbmFwc2hvdC5zdGVwcy5sZW5ndGgpIHJldHVybiBudWxsXG4gIHJldHVybiBidWlsZFJlYXNvbmluZ1RyYWNlKHNuYXBzaG90LnN0ZXBzLCBzbmFwc2hvdC5zdW1tYXJ5KVxufVxuXG4vKiogQXZpc28gZGUgY29tcGFjdGFjacOzbjogc3RvcmUgZW4gdml2bywgbyBlbCBgY29tcGxldGVgIHBlcnNpc3RpZG8uIENhcHR1cmFyIGFudGVzIGRlbCBgcmVuYW1lYC4gKi9cbmV4cG9ydCBjb25zdCBjb21wYWN0aW9uRm9yID0gKG1lc3NhZ2VJZDogc3RyaW5nLCBwYXlsb2FkPzogUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCk6IENvbnRleHRDb21wYWN0aW9uIHwgbnVsbCA9PlxuICByZWFzb25pbmdTdG9yZS5nZXRTbmFwc2hvdChtZXNzYWdlSWQpLmNvbXBhY3Rpb24gPz8gbWFwQ29udGV4dENvbXBhY3Rpb24ocGF5bG9hZD8uY29tcGFjdGlvbilcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuLyoqIGNoaXBzUHJvamVjdCBlcyBsYSBmdWVudGUgZGUgdmVyZGFkIGRlbCBwaW4gdmlzaWJsZTsgc2kgbm8gaGF5IHBpbiwgcmVzdGF1cmFyIGRlc2RlIGhpc3RvcmlhbC4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvamVjdFRvUmVxdWVzdCA9IChcbiAgY2hpcHNQcm9qZWN0OiB7IHByb2plY3RJZD86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbGFzdE1lc3NhZ2VQcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IG51bWJlciB8IG51bGwgPT4ge1xuICBjb25zdCBjaGlwc1Byb2plY3RJZCA9IGNoaXBzUHJvamVjdD8ucHJvamVjdElkID8gTnVtYmVyKGNoaXBzUHJvamVjdC5wcm9qZWN0SWQpIDogbnVsbFxuICBpZiAoY2hpcHNQcm9qZWN0SWQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoY2hpcHNQcm9qZWN0SWQpKSB7XG4gICAgcmV0dXJuIGNoaXBzUHJvamVjdElkXG4gIH1cbiAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ2xpZW50UGF5bG9hZCA9IChcbiAgY3R4Q2xpZW50OiB7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjdHhQcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogeyBjbGllbnRJZD86IG51bWJlcjsgY2xpZW50TmFtZT86IHN0cmluZyB9ID0+IHtcbiAgaWYgKGN0eENsaWVudD8uaWQpIHtcbiAgICByZXR1cm4geyBjbGllbnRJZDogY3R4Q2xpZW50LmlkLCAuLi4oY3R4Q2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eENsaWVudC5uYW1lIH0gOiB7fSkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IE51bWJlcihjdHhQcm9qZWN0LmNsaWVudElkKSB9XG4gIH1cbiAgaWYgKGN0eFByb2plY3Q/LmNsaWVudD8uaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50SWQ6IGN0eFByb2plY3QuY2xpZW50LmlkLFxuICAgICAgLi4uKGN0eFByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eFByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt9XG59XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBsZXQgbnVtZXJpY1NpemUgPSAwXG4gICAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQuc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbnVtZXJpY1NpemUgPSBhdHRhY2htZW50LnNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNpemUgPSBOdW1iZXIoYXR0YWNobWVudC5zaXplKVxuICAgICAgICBudW1lcmljU2l6ZSA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWRTaXplKSA/IHBhcnNlZFNpemUgOiAwXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBmdWxsRmlsZU5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSksXG4gICAgICAgIGlkOlxuICAgICAgICAgIHR5cGVvZiBhdHRhY2htZW50LmlkID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LmlkLnRyaW0oKVxuICAgICAgICAgICAgPyBhdHRhY2htZW50LmlkXG4gICAgICAgICAgICA6IGBhc3Npc3RhbnQtZmlsZS0ke2luZGV4fS0ke2Z1bGxGaWxlTmFtZX1gLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzaXplOiBudW1lcmljU2l6ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXJsX29yaWdpbmFsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF90aHVtYm5haWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfZmlsZTogdHlwZW9mIGF0dGFjaG1lbnQudXJsX2ZpbGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfZmlsZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcm9sZTogYXR0YWNobWVudC5yb2xlID09PSAnYXNzaXN0YW50JyA/ICdhc3Npc3RhbnQnIDogJ3VzZXInLFxuICAgICAgfVxuICAgIH0pXG59XG5cbi8qKiBFeHRyYWUgdGFza19pZHMgZGUgbG9zIHRvb2xfYXJncyBkZSBwZW5kaW5nX2FjdGlvbnMuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzID0gKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBjb25zdCBwdXNoSWQgPSAocmF3OiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm5cbiAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICB9XG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBwdXNoSWQocmVjLnRhc2tfaWQgPz8gcmVjLmlkKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrX2lkcykpIHtcbiAgICAgIHJlYy50YXNrX2lkcy5mb3JFYWNoKHB1c2hJZClcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tzKSkge1xuICAgICAgcmVjLnRhc2tzLmZvckVhY2godCA9PiB7XG4gICAgICAgIGlmICh0ICYmIHR5cGVvZiB0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0KSkge1xuICAgICAgICAgIGNvbnN0IHRyZWMgPSB0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgcHVzaElkKHRyZWMudGFza19pZCA/PyB0cmVjLmlkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMgPSAocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdID0+IHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zID0gKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgZWRpdEFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcbiAgaWYgKFxuICAgICFlZGl0QWN0aW9uIHx8XG4gICAgIWVkaXRBY3Rpb24udG9vbF9hcmdzIHx8XG4gICAgdHlwZW9mIGVkaXRBY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkoZWRpdEFjdGlvbi50b29sX2FyZ3MpXG4gICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gZWRpdEFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lID0gKFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLFxuICB0b29sTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5leHBvcnQgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJywgJ2Nsb25lX3Rhc2snXSBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IFRBU0tfRURJVF9UT09MUyA9IFtcbiAgJ2VkaXRfdGFzaycsXG4gICdlZGl0X3Rhc2tzX2JhdGNoJyxcbiAgJ3Rhc2tfYXNzaWduJyxcbiAgJ3Rhc2tfdW5hc3NpZ24nLFxuICAndXBkYXRlX3Rhc2tfdHlwZScsXG4gICd1cGRhdGVfZXN0aW1hdGVkX2hvdXJzJyxcbiAgJ2Fzc2lnbl90YXNrX2xhYmVsJyxcbl0gYXMgY29uc3RcbmV4cG9ydCBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IGlzVGFza0VkaXRUb29sTmFtZSA9ICh0b29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgISF0b29sTmFtZSAmJiAoVEFTS19FRElUX1RPT0xTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh0b29sTmFtZSlcblxuZXhwb3J0IGNvbnN0IGlzVGFza0RlbGV0ZVRvb2xOYW1lID0gKHRvb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogYm9vbGVhbiA9PlxuICAhIXRvb2xOYW1lICYmIChUQVNLX0RFTEVURV9UT09MUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModG9vbE5hbWUpXG5cbmNvbnN0IHBlbmRpbmdBY3Rpb25zSW5jbHVkZVRvb2wgPSAocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSwgdG9vbHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiA9PlxuICBwZW5kaW5nQWN0aW9ucy5zb21lKGFjdGlvbiA9PiB0b29scy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lIHx8ICcnKSlcblxuZXhwb3J0IHR5cGUgQXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MgPSB7XG4gIHdhc1Rhc2tDcmVhdGlvbjogYm9vbGVhblxuICB3YXNUYXNrRWRpdDogYm9vbGVhblxuICB3YXNUYXNrRGVsZXRlOiBib29sZWFuXG4gIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQ6IGJvb2xlYW5cbiAgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZDogYm9vbGVhblxuICB3YXNFZGl0QWdlbnRBcHByb3ZlZDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFwcHJvdmVkUGVuZGluZ0FjdGlvbkZsYWdzID0gKFxuICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlOiBib29sZWFuLFxuICBhcHByb3ZhbFN0YXR1czogQ2hhdE1lc3NhZ2VbJ2FwcHJvdmFsU3RhdHVzJ10sXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW11cbik6IEFwcHJvdmVkUGVuZGluZ0FjdGlvbkZsYWdzID0+IHtcbiAgY29uc3QgYXBwcm92ZWQgPSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIGFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnXG5cbiAgcmV0dXJuIHtcbiAgICB3YXNUYXNrQ3JlYXRpb246IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnNJbmNsdWRlVG9vbChwZW5kaW5nQWN0aW9ucywgVEFTS19DUkVBVElPTl9UT09MUyksXG4gICAgd2FzVGFza0VkaXQ6IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnNJbmNsdWRlVG9vbChwZW5kaW5nQWN0aW9ucywgVEFTS19FRElUX1RPT0xTKSxcbiAgICB3YXNUYXNrRGVsZXRlOiBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zSW5jbHVkZVRvb2wocGVuZGluZ0FjdGlvbnMsIFRBU0tfREVMRVRFX1RPT0xTKSxcbiAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkOiBhcHByb3ZlZCAmJiBwZW5kaW5nQWN0aW9uc0luY2x1ZGVUb29sKHBlbmRpbmdBY3Rpb25zLCBbJ2NyZWF0ZV9hZ2VudCddKSxcbiAgICB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkOlxuICAgICAgYXBwcm92ZWQgJiYgcGVuZGluZ0FjdGlvbnMuc29tZShhY3Rpb24gPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJyksXG4gICAgd2FzRWRpdEFnZW50QXBwcm92ZWQ6XG4gICAgICBhcHByb3ZlZCAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKGFjdGlvbiA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU3luY1Rhc2tEYXNoYm9hcmQgPSAoXG4gIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2U6IGJvb2xlYW4sXG4gIHdhc1Rhc2tDcmVhdGlvbjogYm9vbGVhbixcbiAgd2FzVGFza0VkaXQ6IGJvb2xlYW4sXG4gIHdhc1Rhc2tEZWxldGU6IGJvb2xlYW4sXG4gIHRhc2tJZHNGb3JEYXNoYm9hcmQ6IG51bWJlcltdXG4pOiBib29sZWFuID0+XG4gIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgKHdhc1Rhc2tDcmVhdGlvbiB8fCB3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlKSAmJiB0YXNrSWRzRm9yRGFzaGJvYXJkLmxlbmd0aCA+IDBcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVUYXNrSWRzRm9yRGFzaGJvYXJkID0gKFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHRhc2tVcmxSZWdleDogUmVnRXhwLFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLFxuICB3YXNUYXNrRGVsZXRlOiBib29sZWFuXG4pOiBudW1iZXJbXSA9PiB7XG4gIGNvbnN0IHRhc2tJZHNGcm9tVXJscyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICBjb25zdCB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsID0gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG4gIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0ID1cbiAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgID8gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KGNvbnRlbnQpXG4gICAgICA6IFtdXG5cbiAgaWYgKHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPiAwKSByZXR1cm4gdGFza0lkc0Zyb21VcmxzXG4gIGlmICh0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDApIHJldHVybiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsXG4gIHJldHVybiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxufVxuXG5leHBvcnQgY29uc3QgcmVwbGFjZVRhc2tVcmxzV2l0aFRhYlNlZ21lbnQgPSAoY29udGVudDogc3RyaW5nLCB0YXNrVXJsUmVnZXg6IFJlZ0V4cCwgdGFiU2VnbWVudDogc3RyaW5nKTogc3RyaW5nID0+XG4gIGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICApXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvamVjdERhc2hib2FyZFN5bmMgPSAoXG4gIGNvbnRleHRQcm9qZWN0SWQ6IG51bWJlciB8IG51bGwsXG4gIHBhdGhuYW1lOiBzdHJpbmdcbik6IHsgcm91dGVQcm9qZWN0SWQ6IG51bWJlciB8IG51bGw7IGlzT25Qcm9qZWN0Um91dGU6IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IHBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvamVjdHNcXC8oXFxkKylcXC8vKVxuICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICBjb25zdCBpc09uUHJvamVjdFJvdXRlID0gQm9vbGVhbihjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkKVxuICByZXR1cm4geyByb3V0ZVByb2plY3RJZCwgaXNPblByb2plY3RSb3V0ZSB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcCA9IChcbiAgZmxhZ3M6IFBpY2s8QXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MsICd3YXNDcmVhdGVBZ2VudEFwcHJvdmVkJyB8ICd3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkJz4sXG4gIG11bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuLFxuICBjb21wbGV0ZWRBZ2VudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdXG4pOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFtdWx0aUFnZW50c0FjY2VzcykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGlmIChmbGFncy53YXNDcmVhdGVBZ2VudEFwcHJvdmVkICYmIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSkge1xuICAgIHJldHVybiB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgfVxuXG4gIGlmIChmbGFncy53YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkKSB7XG4gICAgY29uc3QgY29uZmlndXJlZEFnZW50SWQgPVxuICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8IGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgIGlmIChjb25maWd1cmVkQWdlbnRJZCkge1xuICAgICAgcmV0dXJuIHsgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcCA9IChcbiAgd2FzRWRpdEFnZW50QXBwcm92ZWQ6IGJvb2xlYW4sXG4gIGNvbXBsZXRlZEFnZW50SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW11cbik6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIXdhc0VkaXRBZ2VudEFwcHJvdmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHJlc29sdmVkQWdlbnRJZCA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fCBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgcmV0dXJuIHJlc29sdmVkQWdlbnRJZCA/IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH0gOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsID0gKFxuICBvcGVuVGFza1BhbmVsSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZmxhZ3M6IFBpY2s8QXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MsICd3YXNUYXNrRWRpdCcgfCAnd2FzVGFza0RlbGV0ZSc+LFxuICBtYW51YWxGbGFnczogeyBtYW51YWxXYXNUYXNrRWRpdDogYm9vbGVhbjsgbWFudWFsV2FzVGFza0RlbGV0ZTogYm9vbGVhbiB9LFxuICBhZmZlY3RlZFRhc2tJZHM6IHN0cmluZ1tdXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKG9wZW5UYXNrUGFuZWxJZCA9PSBudWxsKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgdGFza0Zsb3dBY3RpdmUgPVxuICAgIGZsYWdzLndhc1Rhc2tFZGl0IHx8IGZsYWdzLndhc1Rhc2tEZWxldGUgfHwgbWFudWFsRmxhZ3MubWFudWFsV2FzVGFza0VkaXQgfHwgbWFudWFsRmxhZ3MubWFudWFsV2FzVGFza0RlbGV0ZVxuICBpZiAoIXRhc2tGbG93QWN0aXZlKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGFmZmVjdGVkVGFza0lkcy5pbmNsdWRlcyhTdHJpbmcob3BlblRhc2tQYW5lbElkKSlcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1FcnJvclByZXNlbnRhdGlvbiA9IChlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICBjb25zdCBpc0FjY2Vzc0RlbmllZCA9IGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgY29uc3QgaXNQcm9tcHRUb29Mb25nID1cbiAgICBlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InICYmIEJvb2xlYW4oZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJykpXG4gIGNvbnN0IHRva2Vuc1VzZWQgPSBlcnJvclJhd01lc3NhZ2U/Lm1hdGNoKC8oXFxkKykgdG9rZW5zLyk/LlsxXSA/PyAnJ1xuXG4gIHJldHVybiB7XG4gICAgaXNBY2Nlc3NEZW5pZWQsXG4gICAgaXNQcm9tcHRUb29Mb25nLFxuICAgIHRva2Vuc1VzZWQsXG4gICAgc2hvd1JldHJ5OiAhaXNBY2Nlc3NEZW5pZWQgJiYgIWlzUHJvbXB0VG9vTG9uZyxcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTdHJlYW1FcnJvck1lc3NhZ2VLZXkgPSAnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcgfCAnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnIHwgJ2NoYXQuZXJyb3InXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtRXJyb3JNZXNzYWdlS2V5ID0gKFxuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsXG4gIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZ1xuKTogeyBtZXNzYWdlS2V5OiBTdHJlYW1FcnJvck1lc3NhZ2VLZXk7IHRva2Vuc1VzZWQ6IHN0cmluZzsgc2hvd1JldHJ5OiBib29sZWFuIH0gPT4ge1xuICBjb25zdCBwcmVzZW50YXRpb24gPSByZXNvbHZlU3RyZWFtRXJyb3JQcmVzZW50YXRpb24oZXJyb3JNZXNzYWdlLCBlcnJvclJhd01lc3NhZ2UpXG4gIGxldCBtZXNzYWdlS2V5OiBTdHJlYW1FcnJvck1lc3NhZ2VLZXkgPSAnY2hhdC5lcnJvcidcbiAgaWYgKHByZXNlbnRhdGlvbi5pc0FjY2Vzc0RlbmllZCkgbWVzc2FnZUtleSA9ICdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJ1xuICBlbHNlIGlmIChwcmVzZW50YXRpb24uaXNQcm9tcHRUb29Mb25nKSBtZXNzYWdlS2V5ID0gJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJ1xuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZUtleSxcbiAgICB0b2tlbnNVc2VkOiBwcmVzZW50YXRpb24udG9rZW5zVXNlZCxcbiAgICBzaG93UmV0cnk6IHByZXNlbnRhdGlvbi5zaG93UmV0cnksXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUHJvamVjdERhc2hib2FyZE11dGF0aW9uID0gJ2NyZWF0ZScgfCAnZWRpdCcgfCAnZGVsZXRlJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVByb2plY3REYXNoYm9hcmRNdXRhdGlvbiA9IChmbGFnczoge1xuICB3YXNUYXNrQ3JlYXRpb246IGJvb2xlYW5cbiAgd2FzVGFza0VkaXQ6IGJvb2xlYW5cbiAgd2FzVGFza0RlbGV0ZTogYm9vbGVhblxufSk6IFByb2plY3REYXNoYm9hcmRNdXRhdGlvbiB8IG51bGwgPT4ge1xuICBpZiAoZmxhZ3Mud2FzVGFza0NyZWF0aW9uKSByZXR1cm4gJ2NyZWF0ZSdcbiAgaWYgKGZsYWdzLndhc1Rhc2tFZGl0KSByZXR1cm4gJ2VkaXQnXG4gIGlmIChmbGFncy53YXNUYXNrRGVsZXRlKSByZXR1cm4gJ2RlbGV0ZSdcbiAgcmV0dXJuIG51bGxcbn1cblxudHlwZSBQcm9qZWN0RGFzaGJvYXJkQXBpID0ge1xuICBhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZD86ICh0YXNrSWRzOiBudW1iZXJbXSkgPT4gdm9pZFxuICBlZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/OiAodGFza0lkczogbnVtYmVyW10pID0+IHZvaWRcbiAgZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZD86ICh0YXNrSWRzOiBudW1iZXJbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgYXBwbHlQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24gPSAoXG4gIG11dGF0aW9uOiBQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24gfCBudWxsLFxuICB0YXNrSWRzOiBudW1iZXJbXSxcbiAgZGFzaGJvYXJkOiBQcm9qZWN0RGFzaGJvYXJkQXBpIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogdm9pZCA9PiB7XG4gIGlmICghbXV0YXRpb24gfHwgIWRhc2hib2FyZCkgcmV0dXJuXG4gIGlmIChtdXRhdGlvbiA9PT0gJ2NyZWF0ZScpIHtcbiAgICBkYXNoYm9hcmQuYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChtdXRhdGlvbiA9PT0gJ2VkaXQnKSB7XG4gICAgZGFzaGJvYXJkLmVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgZGFzaGJvYXJkLmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxufVxuXG5leHBvcnQgY29uc3QgbWVyZ2VBZmZlY3RlZFRhc2tJZHNGb3JQYW5lbFJlZmV0Y2ggPSAoXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sXG4gIHRhc2tJZHNGb3JEYXNoYm9hcmQ6IG51bWJlcltdLFxuICBtYW51YWxBcHByb3ZhbD86IHsgdG9vbE5hbWU6IHN0cmluZzsgdG9vbEFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfSB8IG51bGxcbik6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgbWFudWFsUHNldWRvQWN0aW9uczogUGVuZGluZ0FjdGlvbltdID0gW11cbiAgaWYgKG1hbnVhbEFwcHJvdmFsKSB7XG4gICAgbWFudWFsUHNldWRvQWN0aW9ucy5wdXNoKHtcbiAgICAgIHRvb2xfbmFtZTogbWFudWFsQXBwcm92YWwudG9vbE5hbWUsXG4gICAgICB0b29sX2FyZ3M6IG1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzID8/IHt9LFxuICAgICAgdGhyZWFkX2lkOiAnbWFudWFsJyxcbiAgICAgIHRvb2xfY2FsbF9pZDogJ21hbnVhbCcsXG4gICAgfSBhcyBQZW5kaW5nQWN0aW9uKVxuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgIC4uLnRhc2tJZHNGb3JEYXNoYm9hcmQsXG4gICAgLi4uZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKG1hbnVhbFBzZXVkb0FjdGlvbnMpLFxuICBdLm1hcChTdHJpbmcpXG59XG5cbmV4cG9ydCBjb25zdCBtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyID0gKGF1dGhVc2VyOiBDT1JVc2VyKTogQ2hhdE1lc3NhZ2VVc2VyID0+ICh7XG4gIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbn0pXG5cbmV4cG9ydCBjb25zdCBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEluTGlzdCA9IChcbiAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10sXG4gIHNlc3Npb25JZDogc3RyaW5nXG4pOiB7IG1lc3NhZ2U6IENoYXRNZXNzYWdlOyBzZXNzaW9uSWQ6IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGZvdW5kID0gbWVzc2FnZXMuZmluZChtZXNzYWdlID0+XG4gICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gIClcblxuICBpZiAoZm91bmQ/LmFwcHJvdmFsKSB7XG4gICAgcmV0dXJuIHsgbWVzc2FnZTogZm91bmQsIHNlc3Npb25JZDogZm91bmQuYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBzZXNzaW9uSWQgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGNhblNlbmRDaGF0TWVzc2FnZSA9IChcbiAgaXNQcm9jZXNzaW5nOiBib29sZWFuLFxuICB3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW4sXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiAhKGlzUHJvY2Vzc2luZyB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKVxuXG5leHBvcnQgdHlwZSBTZW5kTWVzc2FnZUJsb2NrUmVhc29uID0gJ2J1c3knIHwgJ2NvbmN1cnJlbmN5J1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQmxvY2tDb25jdXJyZW50U3RyZWFtU3RhcnQgPSAoXG4gIHdpbGxTdGFydE5ld1N0cmVhbTogYm9vbGVhbixcbiAgYWN0aXZlQ291bnQ6IG51bWJlcixcbiAgbWF4Q29uY3VycmVudDogbnVtYmVyXG4pOiBib29sZWFuID0+IHdpbGxTdGFydE5ld1N0cmVhbSAmJiBhY3RpdmVDb3VudCA+PSBtYXhDb25jdXJyZW50XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2VuZE1lc3NhZ2VHYXRlID0gKHBhcmFtczoge1xuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW5cbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhblxuICB3aWxsU3RhcnROZXdTdHJlYW06IGJvb2xlYW5cbiAgYWN0aXZlU3RyZWFtQ291bnQ6IG51bWJlclxuICBtYXhDb25jdXJyZW50OiBudW1iZXJcbn0pOiBTZW5kTWVzc2FnZUJsb2NrUmVhc29uIHwgbnVsbCA9PiB7XG4gIGlmICghY2FuU2VuZENoYXRNZXNzYWdlKHBhcmFtcy5pc1Byb2Nlc3NpbmcsIHBhcmFtcy53YWl0aW5nUmVzcG9uc2UsIHBhcmFtcy5sb2FkaW5nTWVzc2FnZXMpKSB7XG4gICAgcmV0dXJuICdidXN5J1xuICB9XG4gIGlmIChzaG91bGRCbG9ja0NvbmN1cnJlbnRTdHJlYW1TdGFydChwYXJhbXMud2lsbFN0YXJ0TmV3U3RyZWFtLCBwYXJhbXMuYWN0aXZlU3RyZWFtQ291bnQsIHBhcmFtcy5tYXhDb25jdXJyZW50KSkge1xuICAgIHJldHVybiAnY29uY3VycmVuY3knXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMgPSAoXG4gIG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgcG9zaXRpb25hbD86IHtcbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbikgPT4gKHtcbiAgZmFxSWQ6IHBvc2l0aW9uYWw/LmZhcUlkID8/IG9wdGlvbnMuZmFxSWQsXG4gIGFnZW50U3VnZ2VzdGlvbklkOiBwb3NpdGlvbmFsPy5hZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkLFxuICBtZW50aW9uczogcG9zaXRpb25hbD8ubWVudGlvbnMgPz8gb3B0aW9ucy5tZW50aW9ucyxcbiAgZnVhSWQ6IHBvc2l0aW9uYWw/LmZ1YUlkID8/IG9wdGlvbnMuZnVhSWQsXG4gIHNjSWQ6IHBvc2l0aW9uYWw/LnNjSWQgPz8gb3B0aW9ucy5zY0lkLFxuICBjb250ZXh0RGF0YTogb3B0aW9ucy5jb250ZXh0RGF0YSxcbn0pXG5cbmV4cG9ydCBjb25zdCBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzID0gKG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdLCBhdXRoVXNlcklkOiBzdHJpbmcpOiBDaGF0SGlzdG9yeVtdID0+XG4gIG1lc3NhZ2VzLm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXJJZCA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgfSkpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTGFzdE1lc3NhZ2VBZ2VudElkID0gKG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IG1lc3NhZ2VzLmF0KC0xKT8uYWdlbnRJZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFnZW50SWRGb3JTdHJlYW0gPSAoXG4gIGFnZW50SWRGcm9tTWVzc2FnZXM6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmFsbGJhY2tBZ2VudElkOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHN0cmluZyA9PiBhZ2VudElkRnJvbU1lc3NhZ2VzIHx8IGZhbGxiYWNrQWdlbnRJZCB8fCAnJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCA9ICh0dXJuTWVzc2FnZUlkOiBzdHJpbmcpOiBzdHJpbmcgPT4gYHF1ZXN0aW9uLSR7dHVybk1lc3NhZ2VJZH1gXG5cbmV4cG9ydCB0eXBlIE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCA9IHtcbiAgbWVzc2FnZTogc3RyaW5nXG4gIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgcHJvamVjdElkOiBudW1iZXIgfCBudWxsXG4gIGxhbmc6IHN0cmluZ1xuICB1c2VySWQ6IHN0cmluZ1xuICBmaXJzdE5hbWU6IHN0cmluZ1xuICBsYXN0TmFtZTogc3RyaW5nXG4gIGNvbXBhbnlJZDogc3RyaW5nXG4gIGNoYXRJZDogc3RyaW5nXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIGFnZW50TmFtZTogc3RyaW5nXG4gIGFnZW50SWQ6IHN0cmluZ1xuICBpc1dlYlNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBpc0RlZXBTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogYm9vbGVhblxuICBjbGllbnRJZD86IG51bWJlclxuICBjbGllbnROYW1lPzogc3RyaW5nXG4gIGZlZUlkPzogbnVtYmVyXG4gIHByb2plY3ROYW1lPzogc3RyaW5nXG4gIHRhc2tJZD86IG51bWJlclxuICB0YXNrTmFtZT86IHN0cmluZ1xuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgZmFxSWQ/OiBzdHJpbmdcbiAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgZnVhSWQ/OiBzdHJpbmdcbiAgc2NJZD86IHN0cmluZ1xuICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gIGFnZW50VHlwZT86IEFnZW50VHlwZVxuICBhZ2VudEVtb2ppPzogc3RyaW5nIHwgbnVsbFxuICBjb250ZXh0TWVzc2FnZT86IENvbnRleHRNZXNzYWdlXG4gIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkID0gKHBhcmFtczoge1xuICBtZXNzYWdlOiBzdHJpbmdcbiAgaGlzdG9yeTogQ2hhdEhpc3RvcnlbXVxuICBwcm9qZWN0SWQ6IG51bWJlciB8IG51bGxcbiAgYXV0aFVzZXI6IFBpY2s8Q09SVXNlciwgJ2xhbmcnIHwgJ2lkJyB8ICdmaXJzdE5hbWUnIHwgJ2xhc3ROYW1lJyB8ICdjb21wYW55X2lkJz5cbiAgY2hhdElkOiBzdHJpbmdcbiAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgYWdlbnROYW1lOiBzdHJpbmdcbiAgYWdlbnRJZDogc3RyaW5nXG4gIGlzV2ViU2VhcmNoQWN0aXZlOiBib29sZWFuXG4gIGlzRGVlcFNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBib29sZWFuXG4gIGN0eFByb2plY3Q6IFByb2plY3QgfCBudWxsIHwgdW5kZWZpbmVkXG4gIGN0eENsaWVudDogeyBpZD86IG51bWJlcjsgbmFtZT86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuICBjdHhUYXNrOiB7IGlkPzogbnVtYmVyIHwgc3RyaW5nOyBuYW1lPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkXG4gIHByb2plY3ROYW1lPzogc3RyaW5nXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBmYXFJZD86IHN0cmluZ1xuICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICBmdWFJZD86IHN0cmluZ1xuICBzY0lkPzogc3RyaW5nXG4gIGFnZW50RW50aXR5PzogQWdlbnRFbnRpdHlcbiAgYWdlbnRUeXBlPzogQWdlbnRUeXBlXG4gIGFnZW50RW1vamk/OiBzdHJpbmcgfCBudWxsXG4gIGNvbnRleHRNZXNzYWdlPzogQ29udGV4dE1lc3NhZ2VcbiAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxufSk6IE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCA9PiAoe1xuICBtZXNzYWdlOiBwYXJhbXMubWVzc2FnZSxcbiAgaGlzdG9yeTogcGFyYW1zLmhpc3RvcnksXG4gIHByb2plY3RJZDogcGFyYW1zLnByb2plY3RJZCxcbiAgbGFuZzogcGFyYW1zLmF1dGhVc2VyLmxhbmcsXG4gIHVzZXJJZDogcGFyYW1zLmF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gIGZpcnN0TmFtZTogcGFyYW1zLmF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgbGFzdE5hbWU6IHBhcmFtcy5hdXRoVXNlci5sYXN0TmFtZSxcbiAgY29tcGFueUlkOiBwYXJhbXMuYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICBjaGF0SWQ6IHBhcmFtcy5jaGF0SWQsXG4gIG1lc3NhZ2VJZDogcGFyYW1zLm1lc3NhZ2VJZCxcbiAgYWdlbnROYW1lOiBwYXJhbXMuYWdlbnROYW1lLFxuICBhZ2VudElkOiBwYXJhbXMuYWdlbnRJZCxcbiAgaXNXZWJTZWFyY2hBY3RpdmU6IHBhcmFtcy5pc1dlYlNlYXJjaEFjdGl2ZSxcbiAgaXNEZWVwU2VhcmNoQWN0aXZlOiBwYXJhbXMuaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBwYXJhbXMuaXNBdXRvQXBwcm92ZUFjdGl2ZSxcbiAgLi4uKHBhcmFtcy5jdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKHBhcmFtcy5jdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChwYXJhbXMuY3R4Q2xpZW50LCBwYXJhbXMuY3R4UHJvamVjdCksXG4gIC4uLihwYXJhbXMucHJvamVjdE5hbWUgPyB7IHByb2plY3ROYW1lOiBwYXJhbXMucHJvamVjdE5hbWUgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5jdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgPyB7IHRhc2tJZDogTnVtYmVyKHBhcmFtcy5jdHhUYXNrLmlkKSwgLi4uKHBhcmFtcy5jdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBwYXJhbXMuY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgIDoge30pLFxuICAuLi4ocGFyYW1zLmF0dGFjaG1lbnRzICYmIHBhcmFtcy5hdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50czogcGFyYW1zLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gIC4uLihwYXJhbXMuZmFxSWQgPyB7IGZhcUlkOiBwYXJhbXMuZmFxSWQgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHBhcmFtcy5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAuLi4ocGFyYW1zLmZ1YUlkID8geyBmdWFJZDogcGFyYW1zLmZ1YUlkIH0gOiB7fSksXG4gIC4uLihwYXJhbXMuc2NJZCA/IHsgc2NJZDogcGFyYW1zLnNjSWQgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5hZ2VudEVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogcGFyYW1zLmFnZW50RW50aXR5IH0gOiB7fSksXG4gIC4uLihwYXJhbXMuYWdlbnRUeXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogcGFyYW1zLmFnZW50VHlwZSB9IDoge30pLFxuICAuLi4ocGFyYW1zLmFnZW50RW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogcGFyYW1zLmFnZW50RW1vamkgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5jb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2U6IHBhcmFtcy5jb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAuLi4ocGFyYW1zLmNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YTogcGFyYW1zLmNvbnRleHREYXRhIH0gOiB7fSksXG59KVxuXG5leHBvcnQgY29uc3QgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWRGb3JQcm9qZWN0Q2hhbmdlID0gKHBhcmFtczoge1xuICBtZXNzYWdlOiBzdHJpbmdcbiAgaGlzdG9yeTogQ2hhdEhpc3RvcnlbXVxuICBwcm9qZWN0OiBQcm9qZWN0XG4gIGF1dGhVc2VyOiBQaWNrPENPUlVzZXIsICdsYW5nJyB8ICdpZCcgfCAnZmlyc3ROYW1lJyB8ICdsYXN0TmFtZScgfCAnY29tcGFueV9pZCc+XG4gIGNoYXRJZDogc3RyaW5nXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIGFnZW50TmFtZTogc3RyaW5nXG4gIGFnZW50SWQ6IHN0cmluZ1xuICBpc1dlYlNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBpc0RlZXBTZWFyY2hBY3RpdmU6IGJvb2xlYW5cbiAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogYm9vbGVhblxuICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gIGFnZW50VHlwZT86IEFnZW50VHlwZVxufSk6IE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCA9PiAoe1xuICBtZXNzYWdlOiBwYXJhbXMubWVzc2FnZSxcbiAgaGlzdG9yeTogcGFyYW1zLmhpc3RvcnksXG4gIHByb2plY3RJZDogcGFyYW1zLnByb2plY3QuaWQsXG4gIGxhbmc6IHBhcmFtcy5hdXRoVXNlci5sYW5nLFxuICB1c2VySWQ6IHBhcmFtcy5hdXRoVXNlci5pZC50b1N0cmluZygpLFxuICBmaXJzdE5hbWU6IHBhcmFtcy5hdXRoVXNlci5maXJzdE5hbWUsXG4gIGxhc3ROYW1lOiBwYXJhbXMuYXV0aFVzZXIubGFzdE5hbWUsXG4gIGNvbXBhbnlJZDogcGFyYW1zLmF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgY2hhdElkOiBwYXJhbXMuY2hhdElkLFxuICBtZXNzYWdlSWQ6IHBhcmFtcy5tZXNzYWdlSWQsXG4gIGFnZW50TmFtZTogcGFyYW1zLmFnZW50TmFtZSxcbiAgYWdlbnRJZDogcGFyYW1zLmFnZW50SWQsXG4gIGlzV2ViU2VhcmNoQWN0aXZlOiBwYXJhbXMuaXNXZWJTZWFyY2hBY3RpdmUsXG4gIGlzRGVlcFNlYXJjaEFjdGl2ZTogcGFyYW1zLmlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogcGFyYW1zLmlzQXV0b0FwcHJvdmVBY3RpdmUsXG4gIC4uLihwYXJhbXMucHJvamVjdC5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKHBhcmFtcy5wcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAuLi4ocGFyYW1zLnByb2plY3QuY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IE51bWJlcihwYXJhbXMucHJvamVjdC5jbGllbnRJZCkgfSA6IHt9KSxcbiAgLi4uKHBhcmFtcy5hZ2VudEVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogcGFyYW1zLmFnZW50RW50aXR5IH0gOiB7fSksXG4gIC4uLihwYXJhbXMuYWdlbnRUeXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogcGFyYW1zLmFnZW50VHlwZSB9IDoge30pLFxufSlcblxuZXhwb3J0IHR5cGUgU3RyZWFtRXJyb3JIYW5kbGluZ01vZGUgPSAncmV0cnktcmVzdG9yZScgfCAnY29tbWl0LWVycm9yJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlID0gKGhhc1JldHJ5U25hcHNob3Q6IGJvb2xlYW4pOiBTdHJlYW1FcnJvckhhbmRsaW5nTW9kZSA9PlxuICBoYXNSZXRyeVNuYXBzaG90ID8gJ3JldHJ5LXJlc3RvcmUnIDogJ2NvbW1pdC1lcnJvcidcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1FcnJvckFzc2lzdGFudE1lc3NhZ2VJZCA9IChtZXNzYWdlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiBgYW5zd2VyLSR7bWVzc2FnZUlkfWBcblxuZXhwb3J0IGNvbnN0IGJ1aWxkU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlID0gKHBhcmFtczoge1xuICBtZXNzYWdlSWQ6IHN0cmluZ1xuICBtZXNzYWdlOiBzdHJpbmdcbiAgc2hvd1JldHJ5OiBib29sZWFuXG4gIHJldHJ5TGFiZWw6IHN0cmluZ1xufSk6IENoYXRNZXNzYWdlID0+ICh7XG4gIGlkOiByZXNvbHZlU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlSWQocGFyYW1zLm1lc3NhZ2VJZCksXG4gIG1lc3NhZ2U6IHBhcmFtcy5tZXNzYWdlLFxuICBpc0Vycm9yOiB0cnVlLFxuICAuLi4ocGFyYW1zLnNob3dSZXRyeSA/IHsgc3VnZ2VzdGlvbnM6IFtwYXJhbXMucmV0cnlMYWJlbF0gfSA6IHt9KSxcbiAgZGF0ZTogbmV3IERhdGUoKSxcbiAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG59KVxuXG5leHBvcnQgdHlwZSBIaXRsQXBwcm92YWxSZXF1aXJlZE91dGNvbWUgPSB7IHR5cGU6ICdza2lwLXVpJyB9IHwgeyB0eXBlOiAnc2hvdy11aSc7IGFwcHJvdmFsTWVzc2FnZUlkOiBzdHJpbmcgfVxuXG4vKiogSElUTCBwcmUtYXByb2JhZG8gKG1hbnVhbC9hdXRvKTogZWwgc3RyZWFtIHNpZ3VlIHNpbiBwaW50YXIgbGEgY2FqYSBkZSBhcHJvYmFjacOzbi4gKi9cbmV4cG9ydCBjb25zdCBzaG91bGRTa2lwSGl0bEFwcHJvdmFsVWkgPSAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgfHwgYXBwcm92YWwuYXV0b19hcHByb3ZlZCB8fCBhcHByb3ZhbC5hcHByb3ZhbF9zdGF0dXMgPT09ICdhcHByb3ZlZCcpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lID0gKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QpOiBIaXRsQXBwcm92YWxSZXF1aXJlZE91dGNvbWUgPT5cbiAgc2hvdWxkU2tpcEhpdGxBcHByb3ZhbFVpKGFwcHJvdmFsKVxuICAgID8geyB0eXBlOiAnc2tpcC11aScgfVxuICAgIDogeyB0eXBlOiAnc2hvdy11aScsIGFwcHJvdmFsTWVzc2FnZUlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCB9XG5cbmV4cG9ydCBjb25zdCBidWlsZEhpdGxBcHByb3ZhbFBlbmRpbmdNZXNzYWdlID0gKHBhcmFtczoge1xuICBhcHByb3ZhbE1lc3NhZ2VJZDogc3RyaW5nXG4gIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nXG4gIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3RcbiAgcmVhc29uaW5nPzogUmVhc29uaW5nVHJhY2UgfCBudWxsXG4gIGNvbXBhY3Rpb24/OiBDb250ZXh0Q29tcGFjdGlvbiB8IG51bGxcbn0pOiBDaGF0TWVzc2FnZSA9PiAoe1xuICBpZDogcGFyYW1zLmFwcHJvdmFsTWVzc2FnZUlkLFxuICBtZXNzYWdlOiBwYXJhbXMuYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICBkYXRlOiBuZXcgRGF0ZSgpLFxuICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgYXBwcm92YWw6IHBhcmFtcy5hcHByb3ZhbCxcbiAgYXBwcm92YWxTdGF0dXM6ICdwZW5kaW5nJyxcbiAgcmVhc29uaW5nOiBwYXJhbXMucmVhc29uaW5nLFxuICBjb21wYWN0aW9uOiBwYXJhbXMuY29tcGFjdGlvbixcbn0pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRQcmVzZXJ2ZVJlYXNvbmluZ09uU3RyZWFtU3RvcCA9IChcbiAgc3RvcHBlZFRyYWNlOiBSZWFzb25pbmdUcmFjZSB8IG51bGwsXG4gIGNvbXBhY3Rpb24/OiBDb250ZXh0Q29tcGFjdGlvbiB8IG51bGxcbik6IGJvb2xlYW4gPT4gQm9vbGVhbihzdG9wcGVkVHJhY2U/LnN0ZXBzLmxlbmd0aCB8fCBjb21wYWN0aW9uKVxuXG5leHBvcnQgY29uc3QgYnVpbGRTdHJlYW1TdG9wUGFydGlhbEFzc2lzdGFudE1lc3NhZ2UgPSAocGFyYW1zOiB7XG4gIGZpbmFsTWVzc2FnZUlkOiBzdHJpbmdcbiAgcGFydGlhbFRleHQ6IHN0cmluZ1xuICBzdG9wcGVkVHJhY2U6IFJlYXNvbmluZ1RyYWNlIHwgbnVsbFxuICBjb21wYWN0aW9uPzogQ29udGV4dENvbXBhY3Rpb24gfCBudWxsXG59KTogQ2hhdE1lc3NhZ2UgPT4gKHtcbiAgaWQ6IHBhcmFtcy5maW5hbE1lc3NhZ2VJZCxcbiAgbWVzc2FnZTogcGFyYW1zLnBhcnRpYWxUZXh0LFxuICBkYXRlOiBuZXcgRGF0ZSgpLFxuICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgLi4uKHBhcmFtcy5zdG9wcGVkVHJhY2UgPyB7IHJlYXNvbmluZzogcGFyYW1zLnN0b3BwZWRUcmFjZSB9IDoge30pLFxuICBjb21wYWN0aW9uOiBwYXJhbXMuY29tcGFjdGlvbixcbn0pXG5cbmV4cG9ydCBjb25zdCBidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlID0gKHBhcmFtczoge1xuICBjYW5jZWxsZWRNZXNzYWdlSWQ6IHN0cmluZ1xuICBjYW5jZWxsZWRMYWJlbDogc3RyaW5nXG59KTogQ2hhdE1lc3NhZ2UgPT4gKHtcbiAgaWQ6IHBhcmFtcy5jYW5jZWxsZWRNZXNzYWdlSWQsXG4gIG1lc3NhZ2U6IHBhcmFtcy5jYW5jZWxsZWRMYWJlbCxcbiAgZGF0ZTogbmV3IERhdGUoKSxcbiAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG59KVxuXG5leHBvcnQgdHlwZSBSZXRyeUJsb2NrUmVhc29uID0gJ2J1c3knIHwgJ3Nlc3Npb24tYWN0aXZlJyB8ICdjb25jdXJyZW5jeSdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZXRyeUJsb2NrUmVhc29uID0gKHBhcmFtczoge1xuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW5cbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhblxuICBpc1Nlc3Npb25TdHJlYW1BY3RpdmU6IGJvb2xlYW5cbiAgYWN0aXZlU3RyZWFtQ291bnQ6IG51bWJlclxuICBtYXhDb25jdXJyZW50OiBudW1iZXJcbn0pOiBSZXRyeUJsb2NrUmVhc29uIHwgbnVsbCA9PiB7XG4gIGlmIChwYXJhbXMuaXNQcm9jZXNzaW5nIHx8IHBhcmFtcy53YWl0aW5nUmVzcG9uc2UgfHwgcGFyYW1zLmxvYWRpbmdNZXNzYWdlcykgcmV0dXJuICdidXN5J1xuICBpZiAocGFyYW1zLmlzU2Vzc2lvblN0cmVhbUFjdGl2ZSkgcmV0dXJuICdzZXNzaW9uLWFjdGl2ZSdcbiAgaWYgKHBhcmFtcy5hY3RpdmVTdHJlYW1Db3VudCA+PSBwYXJhbXMubWF4Q29uY3VycmVudCkgcmV0dXJuICdjb25jdXJyZW5jeSdcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFVzZU9yY2hlc3RyYXRvclJldHJ5RmFsbGJhY2sgPSAoXG4gIG1lc3NhZ2U6IFBpY2s8Q2hhdE1lc3NhZ2UsICdpc0Zyb250ZW5kQ2FuY2VsbGVkJyB8ICdtZW1vcnlTZXNzaW9uSWQnPlxuKTogYm9vbGVhbiA9PiBCb29sZWFuKG1lc3NhZ2UuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhbWVzc2FnZS5tZW1vcnlTZXNzaW9uSWQ/LnRyaW0oKSlcblxuZXhwb3J0IHR5cGUgUmV0cnlFbGlnaWJpbGl0eSA9XG4gIHwgeyBlbGlnaWJsZTogZmFsc2U7IHJlYXNvbjogJ25vdC1pbi10aHJlYWQnIHwgJ2VtcHR5LXVzZXInIHwgJ25vLXR1cm4nIH1cbiAgfCB7IGVsaWdpYmxlOiB0cnVlOyB0dXJuSWQ6IHN0cmluZyB8IG51bGw7IHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrOiBib29sZWFuIH1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZXRyeUVsaWdpYmlsaXR5ID0gKFxuICBwcmV2aW91c01lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdLFxuICBtZXNzYWdlOiBDaGF0TWVzc2FnZSxcbiAgdXNlck1lc3NhZ2U6IENoYXRNZXNzYWdlIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogUmV0cnlFbGlnaWJpbGl0eSA9PiB7XG4gIGlmICghcHJldmlvdXNNZXNzYWdlcy5zb21lKGl0ZW0gPT4gaXRlbS5pZCA9PT0gbWVzc2FnZS5pZCkpIHtcbiAgICByZXR1cm4geyBlbGlnaWJsZTogZmFsc2UsIHJlYXNvbjogJ25vdC1pbi10aHJlYWQnIH1cbiAgfVxuICBpZiAoIXVzZXJNZXNzYWdlPy5tZXNzYWdlPy50cmltKCkgJiYgIXVzZXJNZXNzYWdlPy5hdHRhY2htZW50cz8ubGVuZ3RoICYmICF1c2VyTWVzc2FnZT8uc291cmNlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgZWxpZ2libGU6IGZhbHNlLCByZWFzb246ICdlbXB0eS11c2VyJyB9XG4gIH1cbiAgY29uc3QgdHVybklkID0gcmVzb2x2ZVJldHJ5VHVybklkKG1lc3NhZ2UpXG4gIGNvbnN0IHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrID0gc2hvdWxkVXNlT3JjaGVzdHJhdG9yUmV0cnlGYWxsYmFjayhtZXNzYWdlKVxuICBpZiAoIXR1cm5JZCAmJiAhdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2spIHtcbiAgICByZXR1cm4geyBlbGlnaWJsZTogZmFsc2UsIHJlYXNvbjogJ25vLXR1cm4nIH1cbiAgfVxuICByZXR1cm4geyBlbGlnaWJsZTogdHJ1ZSwgdHVybklkLCB1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmV0cnlVc2VyQXR0YWNobWVudHMgPSAodXNlck1lc3NhZ2U6IENoYXRNZXNzYWdlKTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKSkgcmV0dXJuIHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gIGlmIChBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLnNvdXJjZXMpKSByZXR1cm4gdXNlck1lc3NhZ2Uuc291cmNlc1xuICByZXR1cm4gW11cbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFVwZGF0ZVByb2plY3RPbkNoYW5nZSA9IChuZXh0UHJvamVjdElkOiBudW1iZXIsIGN1cnJlbnRQcm9qZWN0SWQ/OiBudW1iZXIpOiBib29sZWFuID0+XG4gIG5leHRQcm9qZWN0SWQgIT09IGN1cnJlbnRQcm9qZWN0SWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlc2VuZEFmdGVyUHJvamVjdENoYW5nZSA9IChcbiAgdXNlclF1ZXN0aW9uOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBwcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PiBCb29sZWFuKHVzZXJRdWVzdGlvbiAmJiBwcm9qZWN0KVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFwcHJvdmFsRGVjaXNpb25TdGF0dXMgPSAoZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKTogJ2FwcHJvdmVkJyB8ICdyZWplY3RlZCcgPT5cbiAgZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbiA9IChcbiAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICBlZGl0ZWRBY3Rpb25zPzogdW5rbm93bltdXG4pOiAnYXBwcm92ZScgfCAncmVqZWN0JyB8ICdlZGl0JyA9PiAoZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uKVxuXG5leHBvcnQgdHlwZSBBcHByb3ZhbFN0cmVhbUJsb2NrUmVhc29uID1cbiAgJ21pc3NpbmctdGhyZWFkcycgfCAnbWlzc2luZy1hcHByb3ZhbCcgfCAnbWlzc2luZy1zZXNzaW9uJyB8ICdzZXNzaW9uLWFjdGl2ZScgfCAnbGltaXQnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQXBwcm92YWxTdHJlYW1CbG9ja1JlYXNvbiA9IChwYXJhbXM6IHtcbiAgdGhyZWFkSWRzOiBzdHJpbmdbXVxuICBoYXNBcHByb3ZhbE1lc3NhZ2U6IGJvb2xlYW5cbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gIGlzU2Vzc2lvblN0cmVhbUFjdGl2ZTogYm9vbGVhblxuICBhY3RpdmVTdHJlYW1Db3VudDogbnVtYmVyXG4gIG1heENvbmN1cnJlbnQ6IG51bWJlclxufSk6IEFwcHJvdmFsU3RyZWFtQmxvY2tSZWFzb24gfCBudWxsID0+IHtcbiAgaWYgKCFwYXJhbXMudGhyZWFkSWRzPy5sZW5ndGgpIHJldHVybiAnbWlzc2luZy10aHJlYWRzJ1xuICBpZiAoIXBhcmFtcy5oYXNBcHByb3ZhbE1lc3NhZ2UpIHJldHVybiAnbWlzc2luZy1hcHByb3ZhbCdcbiAgaWYgKCFwYXJhbXMuc2Vzc2lvbklkKSByZXR1cm4gJ21pc3Npbmctc2Vzc2lvbidcbiAgaWYgKHBhcmFtcy5pc1Nlc3Npb25TdHJlYW1BY3RpdmUpIHJldHVybiAnc2Vzc2lvbi1hY3RpdmUnXG4gIGlmIChwYXJhbXMuYWN0aXZlU3RyZWFtQ291bnQgPj0gcGFyYW1zLm1heENvbmN1cnJlbnQpIHJldHVybiAnbGltaXQnXG4gIHJldHVybiBudWxsXG59XG5cbi8qKiBUb29scyBkZSBjYXJnYSBkZSBob3JhcyBhIHNpbmNyb25pemFyIGNvbiBQbGFubmVyIGFsIGNlcnJhciB1biBzdHJlYW0gKEhJVEwgYXByb2JhZG8pLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVIb3Vyc0NoYXJnZVRvb2xzT25TdHJlYW1GaW5pc2ggPSAoXG4gIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2U6IGJvb2xlYW4sXG4gIGFwcHJvdmFsU3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sXG4gIG1hbnVhbEFwcHJvdmFsVG9vbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbik6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgaG91cnNUb29sc0Zyb21BcHByb3ZhbCA9IHBlbmRpbmdBY3Rpb25zXG4gICAgLm1hcChhY3Rpb24gPT4gYWN0aW9uLnRvb2xfbmFtZSlcbiAgICAuZmlsdGVyKCh0b29sTmFtZSk6IHRvb2xOYW1lIGlzIHN0cmluZyA9PiBpc0hvdXJzQ2hhcmdlVG9vbCh0b29sTmFtZSkpXG5cbiAgY29uc3Qgd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA9XG4gICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJiBhcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJiBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsLmxlbmd0aCA+IDBcblxuICBpZiAod2FzSG91cnNDaGFyZ2VBcHByb3ZlZCkge1xuICAgIHJldHVybiBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsXG4gIH1cblxuICBpZiAoaXNIb3Vyc0NoYXJnZVRvb2wobWFudWFsQXBwcm92YWxUb29sTmFtZSkpIHtcbiAgICByZXR1cm4gbWFudWFsQXBwcm92YWxUb29sTmFtZSA/IFttYW51YWxBcHByb3ZhbFRvb2xOYW1lXSA6IFtdXG4gIH1cblxuICByZXR1cm4gW11cbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMgPSAoXG4gIHRocmVhZElkczogc3RyaW5nW10sXG4gIGFjdGl2ZU1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdLFxuICBzZXNzaW9uTWVzc2FnZXNCeUlkOiBSZWNvcmQ8c3RyaW5nLCBDaGF0TWVzc2FnZVtdPixcbiAgYWN0aXZlU2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsXG4pOiB7IG1lc3NhZ2U6IENoYXRNZXNzYWdlOyBzZXNzaW9uSWQ6IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGZyb21BY3RpdmVWaWV3ID0gZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxJbkxpc3QodGhyZWFkSWRzLCBhY3RpdmVNZXNzYWdlcywgYWN0aXZlU2Vzc2lvbklkIHx8ICcnKVxuICBpZiAoZnJvbUFjdGl2ZVZpZXcpIHJldHVybiBmcm9tQWN0aXZlVmlld1xuXG4gIGNvbnN0IHNlc3Npb25FbnRyeSA9IE9iamVjdC5lbnRyaWVzKHNlc3Npb25NZXNzYWdlc0J5SWQpLmZpbmQoKFssIHNlc3Npb25NZXNzYWdlc10pID0+XG4gICAgc2Vzc2lvbk1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PlxuICAgICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgKVxuICApXG5cbiAgaWYgKCFzZXNzaW9uRW50cnkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgW3Nlc3Npb25JZCwgc2Vzc2lvbk1lc3NhZ2VzXSA9IHNlc3Npb25FbnRyeVxuICByZXR1cm4gZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxJbkxpc3QodGhyZWFkSWRzLCBzZXNzaW9uTWVzc2FnZXMsIHNlc3Npb25JZClcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCA9IChtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyk6IHN0cmluZyA9PiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWBcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1TdG9wTWVzc2FnZUlkcyA9IChcbiAgY3VycmVudE1lc3NhZ2VJZDogc3RyaW5nXG4pOiB7XG4gIGZpbmFsTWVzc2FnZUlkOiBzdHJpbmdcbiAgY2FuY2VsbGVkTWVzc2FnZUlkOiBzdHJpbmdcbn0gPT4gKHtcbiAgZmluYWxNZXNzYWdlSWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkfWAsXG4gIGNhbmNlbGxlZE1lc3NhZ2VJZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWR9LWNhbmNlbGxlZGAsXG59KVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJlbnRhYmlsaWRhZFByb2plY3RGYXFNZXNzYWdlID0gKFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIHJlbnRhYmlsaWRhZExhYmVsOiBzdHJpbmcsXG4gIGluY29tZVR5cGU/OiBzdHJpbmcgfCBudWxsXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAobWVzc2FnZSAhPT0gcmVudGFiaWxpZGFkTGFiZWwpIHJldHVybiBtZXNzYWdlXG4gIHJldHVybiBgRkFROiAke3JlbnRhYmlsaWRhZExhYmVsfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke2luY29tZVR5cGUgPz8gJyd9YFxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVN0cmVhbUVycm9yVXNlck1lc3NhZ2UgPSAoXG4gIG1lc3NhZ2VLZXk6IFN0cmVhbUVycm9yTWVzc2FnZUtleSxcbiAgdHJhbnNsYXRlOiAoa2V5OiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHN0cmluZyxcbiAgdG9rZW5zVXNlZDogc3RyaW5nXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAobWVzc2FnZUtleSA9PT0gJ2NoYXQuZXJyb3JBY2Nlc3NEZW5pZWQnKSByZXR1cm4gdHJhbnNsYXRlKCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgaWYgKG1lc3NhZ2VLZXkgPT09ICdjaGF0LmVycm9yUHJvbXB0VG9vTG9uZycpIHJldHVybiB0cmFuc2xhdGUoJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJywgeyB1c2VkOiB0b2tlbnNVc2VkIH0pXG4gIHJldHVybiB0cmFuc2xhdGUoJ2NoYXQuZXJyb3InKVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVByZXZpb3VzQXNzaXN0YW50TWVzc2FnZUJlZm9yZVBsYWNlaG9sZGVyID0gKFxuICBtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSxcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4pOiBDaGF0TWVzc2FnZSB8IHVuZGVmaW5lZCA9PiBtZXNzYWdlcy5maWx0ZXIobWVzc2FnZSA9PiBtZXNzYWdlLmlkICE9PSBwbGFjZWhvbGRlcklkKS5hdCgtMSlcblxuZXhwb3J0IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHRTbmFwc2hvdCA9IHtcbiAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgbWVzc2FnZVRleHQ6IHN0cmluZ1xuICBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0XG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW11cbiAgdGhyZWFkSWRzOiBzdHJpbmdbXVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhpdGxFeGVjdXRpb25Db250ZXh0ID0gKFxuICBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LFxuICBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZ1xuKTogSGl0bEV4ZWN1dGlvbkNvbnRleHRTbmFwc2hvdCA9PiAoe1xuICBtZXNzYWdlSWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICBtZXNzYWdlVGV4dDogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICBhcHByb3ZhbCxcbiAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgdGhyZWFkSWRzOlxuICAgIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc1xuICAgICAgPy5tYXAoYWN0aW9uID0+IGFjdGlvbi50aHJlYWRfaWQpXG4gICAgICAuZmlsdGVyKCh0aHJlYWRJZCk6IHRocmVhZElkIGlzIHN0cmluZyA9PiBCb29sZWFuKHRocmVhZElkKSkgPz8gW10sXG59KVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNraXBwZWRIaXRsTWFudWFsQXBwcm92YWwgPSAoXG4gIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3Rcbik6IHsgdG9vbE5hbWU6IHN0cmluZzsgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgaWYgKCF0b29sTmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICBudWxsXG4gIHJldHVybiB7IHRvb2xOYW1lLCB0b29sQXJncyB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlID0gKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QpOiAnbWFudWFsJyB8ICdhdXRvJyA9PlxuICBhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPyAnbWFudWFsJyA6ICdhdXRvJ1xuXG5leHBvcnQgdHlwZSBDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudCA9IHtcbiAgYWdlbnRfdHlwZTogc3RyaW5nXG4gIGFjdGlvbl90eXBlOiBzdHJpbmdcbiAgZGVjaXNpb246ICdhY2NlcHQnXG4gIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCdcbiAgcmVzb2x1dGlvbl9zb3VyY2U/OiAnbWFudWFsJ1xuICBjcmVhdGVkX2FnZW50X2lkPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzID0gKHBhcmFtczoge1xuICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkOiBib29sZWFuXG4gIHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW11cbiAgbWFudWFsQXBwcm92YWxUb29sTmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICBhZ2VudFR5cGU6IHN0cmluZ1xuICBub3JtYWxpemVUb29sTmFtZTogKHRvb2xOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xuICBidWlsZEFjdGlvblR5cGVMaXN0OiAoYWN0aW9uczogUGVuZGluZ0FjdGlvbltdKSA9PiBzdHJpbmdcbn0pOiBDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudFtdID0+IHtcbiAgY29uc3QgZXZlbnRzOiBDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudFtdID0gW11cbiAgY29uc3QgdHJpbW1lZEFnZW50SWQgPSBwYXJhbXMuY29tcGxldGVkQWdlbnRJZD8udHJpbSgpXG4gIGNvbnN0IGlkRmllbGQgPSB0cmltbWVkQWdlbnRJZCA/IHsgY3JlYXRlZF9hZ2VudF9pZDogdHJpbW1lZEFnZW50SWQgfSA6IHt9XG5cbiAgaWYgKHBhcmFtcy53YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgZXZlbnRzLnB1c2goe1xuICAgICAgYWdlbnRfdHlwZTogcGFyYW1zLmFnZW50VHlwZSxcbiAgICAgIGFjdGlvbl90eXBlOiBwYXJhbXMuYnVpbGRBY3Rpb25UeXBlTGlzdChwYXJhbXMucGVuZGluZ0FjdGlvbnMpLFxuICAgICAgZGVjaXNpb246ICdhY2NlcHQnLFxuICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgIC4uLmlkRmllbGQsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG1hbnVhbFRvb2wgPSBwYXJhbXMubWFudWFsQXBwcm92YWxUb29sTmFtZVxuICBpZiAobWFudWFsVG9vbCAmJiBwYXJhbXMubm9ybWFsaXplVG9vbE5hbWUobWFudWFsVG9vbCkgPT09ICdjcmVhdGVfYWdlbnQnKSB7XG4gICAgZXZlbnRzLnB1c2goe1xuICAgICAgYWdlbnRfdHlwZTogcGFyYW1zLmFnZW50VHlwZSxcbiAgICAgIGFjdGlvbl90eXBlOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgIGRlY2lzaW9uOiAnYWNjZXB0JyxcbiAgICAgIHJlc29sdXRpb25fc291cmNlOiAnbWFudWFsJyxcbiAgICAgIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAuLi5pZEZpZWxkLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZXZlbnRzXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQ29udGV4dFByb2plY3RJZEZvckRhc2hib2FyZCA9IChcbiAgcHJvamVjdElkOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGxhc3RNZXNzYWdlUHJvamVjdElkOiBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IG51bWJlciB8IG51bGwgPT4ge1xuICBjb25zdCByYXcgPSBwcm9qZWN0SWQgPz8gbGFzdE1lc3NhZ2VQcm9qZWN0SWRcbiAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm4gbnVsbFxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVEYXNoYm9hcmRTeW5jZWRDb250ZW50ID0gYXN5bmMgKFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHRhc2tVcmxSZWdleDogUmVnRXhwLFxuICBzaG91bGRTeW5jRGFzaGJvYXJkOiBib29sZWFuLFxuICB0YXNrSWRzOiBudW1iZXJbXSxcbiAgZ2V0VGFiVGFza0RlZmF1bHQ6ICh0YXNrSWQ6IG51bWJlcikgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPlxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYgKCFzaG91bGRTeW5jRGFzaGJvYXJkIHx8IHRhc2tJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gY29udGVudFxuICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSByZXR1cm4gY29udGVudFxuICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCh0YXNrSWRzWzBdKVxuICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gIHJldHVybiByZXBsYWNlVGFza1VybHNXaXRoVGFiU2VnbWVudChjb250ZW50LCB0YXNrVXJsUmVnZXgsIHRhYlNlZ21lbnQpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Rlcm1pbmFsU2Vzc2lvblN0YXR1cyA9IChzdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgc3RhdHVzID09PSAnY29tcGxldGUnIHx8IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuXG5leHBvcnQgY29uc3QgYnVpbGRUZXJtaW5hbFNlc3Npb25SZWNvbmNpbGlhdGlvbktleSA9IChcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIHN0YXR1czogc3RyaW5nLFxuICBmaW5pc2hlZEF0Pzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuKTogc3RyaW5nID0+IGAke3Nlc3Npb25JZH06JHtzdGF0dXN9OiR7ZmluaXNoZWRBdCA/PyAnJ31gXG5cbmV4cG9ydCBjb25zdCBoYXNTdGFsZVN0cmVhbWluZ1BsYWNlaG9sZGVySW5UYWlsID0gKFxuICB0YWlsOiBBcnJheTx7IGlkPzogc3RyaW5nIH0+LFxuICBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiAobWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gdGFpbC5zb21lKG1lc3NhZ2UgPT4gaXNTdHJlYW1pbmdQbGFjZWhvbGRlcihtZXNzYWdlLmlkKSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZEZvcmNlUmVsb2FkTWVzc2FnZXNPblRlcm1pbmFsU2Vzc2lvbiA9IChcbiAgc3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHRhaWw6IEFycmF5PHsgaWQ/OiBzdHJpbmcgfT4sXG4gIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXI6IChtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhblxuKTogYm9vbGVhbiA9PiBpc1Rlcm1pbmFsU2Vzc2lvblN0YXR1cyhzdGF0dXMpICYmIGhhc1N0YWxlU3RyZWFtaW5nUGxhY2Vob2xkZXJJblRhaWwodGFpbCwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcilcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lID0gKFxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBwcmV2aW91c0luaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4gIWluaXRpYWxDaGF0SWQgJiYgQm9vbGVhbihwcmV2aW91c0luaXRpYWxDaGF0SWQpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbiA9IChcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY3VycmVudENoYXRJZDogc3RyaW5nXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkKVxuXG5leHBvcnQgdHlwZSBNYW51YWxBcHByb3ZhbFNuYXBzaG90ID0geyB0b29sTmFtZTogc3RyaW5nOyB0b29sQXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB9IHwgbnVsbFxuXG5leHBvcnQgdHlwZSBTdHJlYW1GaW5pc2hBc3Npc3RhbnRDb21taXQgPSB7XG4gIGZpbmFsTWVzc2FnZUlkOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG4gIHNvdXJjZXM6IHVua25vd25cbiAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmdcbiAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IFJldHVyblR5cGU8dHlwZW9mIHJlc29sdmVDcmVhdGVBZ2VudEZvbGxvd1VwPlxuICByZWFzb25pbmc/OiBSZWFzb25pbmdUcmFjZSB8IG51bGxcbiAgY29tcGFjdGlvbj86IENvbnRleHRDb21wYWN0aW9uIHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRTdHJlYW1GaW5pc2hBc3Npc3RhbnRNZXNzYWdlID0gKHBhcmFtczogU3RyZWFtRmluaXNoQXNzaXN0YW50Q29tbWl0KTogQ2hhdE1lc3NhZ2UgPT4gKHtcbiAgaWQ6IHBhcmFtcy5maW5hbE1lc3NhZ2VJZCxcbiAgbWVzc2FnZTogcGFyYW1zLmNvbnRlbnQsXG4gIGRhdGU6IG5ldyBEYXRlKCksXG4gIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICBzb3VyY2VzOiBwYXJhbXMuc291cmNlcyxcbiAgLi4uKHBhcmFtcy5hdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50czogcGFyYW1zLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gIG1lbW9yeVNlc3Npb25JZDogcGFyYW1zLm1lbW9yeVNlc3Npb25JZCxcbiAgc3VnZ2VzdGlvbnM6IHBhcmFtcy5zdWdnZXN0aW9ucyB8fCBbXSxcbiAgLi4uKHBhcmFtcy5jcmVhdGVBZ2VudEZvbGxvd1VwID8geyBjcmVhdGVBZ2VudEZvbGxvd1VwOiBwYXJhbXMuY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICByZWFzb25pbmc6IHBhcmFtcy5yZWFzb25pbmcsXG4gIGNvbXBhY3Rpb246IHBhcmFtcy5jb21wYWN0aW9uLFxufSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZE1hcmtDaGF0UmVhZEFmdGVyU3RyZWFtRmluaXNoID0gKGlzQWN0aXZlOiBib29sZWFuLCBpc0NoYXRWaWV3VmlzaWJsZTogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgaXNBY3RpdmUgJiYgaXNDaGF0Vmlld1Zpc2libGVcblxuZXhwb3J0IGNvbnN0IHNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaCA9IChmaXJzdFRpbWU6IGJvb2xlYW4pOiBib29sZWFuID0+IGZpcnN0VGltZVxuXG5leHBvcnQgdHlwZSBBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nUmVzdWx0ID0ge1xuICBjb250ZW50VG9BZGQ6IHN0cmluZ1xuICBjcmVhdGVBZ2VudEZvbGxvd1VwOiBSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcD5cbiAgZWRpdEFnZW50Rm9sbG93VXA6IFJldHVyblR5cGU8dHlwZW9mIHJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcD5cbiAgaG91cnNDaGFyZ2VUb29sczogUmV0dXJuVHlwZTx0eXBlb2YgcmVzb2x2ZUhvdXJzQ2hhcmdlVG9vbHNPblN0cmVhbUZpbmlzaD5cbiAgYWZmZWN0ZWRUYXNrSWRzOiBzdHJpbmdbXVxuICBtYW51YWxXYXNUYXNrRWRpdDogYm9vbGVhblxuICBtYW51YWxXYXNUYXNrRGVsZXRlOiBib29sZWFuXG4gIHdhc1Rhc2tFZGl0OiBib29sZWFuXG4gIHdhc1Rhc2tEZWxldGU6IGJvb2xlYW5cbiAgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZDogYm9vbGVhblxuICBwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyhwYXJhbXM6IHtcbiAgY29udGVudDogc3RyaW5nXG4gIG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdXG4gIHRlbXBNZXNzYWdlSWQ6IHN0cmluZ1xuICB0YXNrVXJsUmVnZXg6IFJlZ0V4cFxuICBwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZFxuICBwYXRobmFtZTogc3RyaW5nXG4gIGdldFRhYlRhc2tEZWZhdWx0OiAodGFza0lkOiBudW1iZXIpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD5cbiAgbXVsdGlBZ2VudHNBY2Nlc3M6IGJvb2xlYW5cbiAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgbWFudWFsQXBwcm92YWw6IE1hbnVhbEFwcHJvdmFsU25hcHNob3RcbiAgYXBwbHlEYXNoYm9hcmRNdXRhdGlvbj86IChtdXRhdGlvbjogUmV0dXJuVHlwZTx0eXBlb2YgcmVzb2x2ZVByb2plY3REYXNoYm9hcmRNdXRhdGlvbj4sIHRhc2tJZHM6IG51bWJlcltdKSA9PiB2b2lkXG59KTogUHJvbWlzZTxBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nUmVzdWx0PiB7XG4gIGxldCBjb250ZW50VG9BZGQgPSBwYXJhbXMuY29udGVudFxuICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSByZXNvbHZlUHJldmlvdXNBc3Npc3RhbnRNZXNzYWdlQmVmb3JlUGxhY2Vob2xkZXIocGFyYW1zLm1lc3NhZ2VzLCBwYXJhbXMudGVtcE1lc3NhZ2VJZClcbiAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyB8fCBbXVxuICBjb25zdCB7XG4gICAgd2FzVGFza0NyZWF0aW9uLFxuICAgIHdhc1Rhc2tFZGl0LFxuICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCxcbiAgICB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkLFxuICAgIHdhc0VkaXRBZ2VudEFwcHJvdmVkLFxuICB9ID0gcmVzb2x2ZUFwcHJvdmVkUGVuZGluZ0FjdGlvbkZsYWdzKGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UsIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMsIHBlbmRpbmdBY3Rpb25zKVxuXG4gIGNvbnN0IGNyZWF0ZUFnZW50Rm9sbG93VXAgPSByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcChcbiAgICB7IHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQsIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgfSxcbiAgICBwYXJhbXMubXVsdGlBZ2VudHNBY2Nlc3MsXG4gICAgcGFyYW1zLmNvbXBsZXRlZEFnZW50SWQsXG4gICAgcGVuZGluZ0FjdGlvbnNcbiAgKVxuICBjb25zdCBlZGl0QWdlbnRGb2xsb3dVcCA9IHJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcCh3YXNFZGl0QWdlbnRBcHByb3ZlZCwgcGFyYW1zLmNvbXBsZXRlZEFnZW50SWQsIHBlbmRpbmdBY3Rpb25zKVxuICBjb25zdCB0YXNrSWRzRm9yRGFzaGJvYXJkID0gcmVzb2x2ZVRhc2tJZHNGb3JEYXNoYm9hcmQoXG4gICAgcGFyYW1zLmNvbnRlbnQsXG4gICAgcGFyYW1zLnRhc2tVcmxSZWdleCxcbiAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICB3YXNUYXNrRGVsZXRlXG4gIClcblxuICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID0gc2hvdWxkU3luY1Rhc2tEYXNoYm9hcmQoXG4gICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSxcbiAgICB3YXNUYXNrQ3JlYXRpb24sXG4gICAgd2FzVGFza0VkaXQsXG4gICAgd2FzVGFza0RlbGV0ZSxcbiAgICB0YXNrSWRzRm9yRGFzaGJvYXJkXG4gIClcblxuICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgIGNvbnRlbnRUb0FkZCA9IGF3YWl0IHJlc29sdmVEYXNoYm9hcmRTeW5jZWRDb250ZW50KFxuICAgICAgcGFyYW1zLmNvbnRlbnQsXG4gICAgICBwYXJhbXMudGFza1VybFJlZ2V4LFxuICAgICAgc2hvdWxkU3luY0Rhc2hib2FyZCxcbiAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQsXG4gICAgICBwYXJhbXMuZ2V0VGFiVGFza0RlZmF1bHRcbiAgICApXG5cbiAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcmVzb2x2ZUNvbnRleHRQcm9qZWN0SWRGb3JEYXNoYm9hcmQocGFyYW1zLnByb2plY3RJZCwgbGFzdFByb2plY3RNZXNzYWdlPy5wcm9qZWN0SWQpXG4gICAgY29uc3QgeyBpc09uUHJvamVjdFJvdXRlIH0gPSByZXNvbHZlUHJvamVjdERhc2hib2FyZFN5bmMoY29udGV4dFByb2plY3RJZCwgcGFyYW1zLnBhdGhuYW1lKVxuXG4gICAgaWYgKGlzT25Qcm9qZWN0Um91dGUgJiYgcGFyYW1zLmFwcGx5RGFzaGJvYXJkTXV0YXRpb24pIHtcbiAgICAgIHBhcmFtcy5hcHBseURhc2hib2FyZE11dGF0aW9uKFxuICAgICAgICByZXNvbHZlUHJvamVjdERhc2hib2FyZE11dGF0aW9uKHsgd2FzVGFza0NyZWF0aW9uLCB3YXNUYXNrRWRpdCwgd2FzVGFza0RlbGV0ZSB9KSxcbiAgICAgICAgdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hbnVhbFdhc1Rhc2tFZGl0ID0gaXNUYXNrRWRpdFRvb2xOYW1lKHBhcmFtcy5tYW51YWxBcHByb3ZhbD8udG9vbE5hbWUpXG4gIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSBpc1Rhc2tEZWxldGVUb29sTmFtZShwYXJhbXMubWFudWFsQXBwcm92YWw/LnRvb2xOYW1lKVxuICBjb25zdCBob3Vyc0NoYXJnZVRvb2xzID0gcmVzb2x2ZUhvdXJzQ2hhcmdlVG9vbHNPblN0cmVhbUZpbmlzaChcbiAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlLFxuICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMsXG4gICAgcGVuZGluZ0FjdGlvbnMsXG4gICAgcGFyYW1zLm1hbnVhbEFwcHJvdmFsPy50b29sTmFtZVxuICApXG4gIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IG1lcmdlQWZmZWN0ZWRUYXNrSWRzRm9yUGFuZWxSZWZldGNoKFxuICAgIHBlbmRpbmdBY3Rpb25zLFxuICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQsXG4gICAgcGFyYW1zLm1hbnVhbEFwcHJvdmFsPy50b29sTmFtZVxuICAgICAgPyB7IHRvb2xOYW1lOiBwYXJhbXMubWFudWFsQXBwcm92YWwudG9vbE5hbWUsIHRvb2xBcmdzOiBwYXJhbXMubWFudWFsQXBwcm92YWwudG9vbEFyZ3MgfVxuICAgICAgOiBudWxsXG4gIClcblxuICByZXR1cm4ge1xuICAgIGNvbnRlbnRUb0FkZCxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgIGVkaXRBZ2VudEZvbGxvd1VwLFxuICAgIGhvdXJzQ2hhcmdlVG9vbHMsXG4gICAgYWZmZWN0ZWRUYXNrSWRzLFxuICAgIG1hbnVhbFdhc1Rhc2tFZGl0LFxuICAgIG1hbnVhbFdhc1Rhc2tEZWxldGUsXG4gICAgd2FzVGFza0VkaXQsXG4gICAgd2FzVGFza0RlbGV0ZSxcbiAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLFxuICAgIHBlbmRp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
|