@projectcor/maia-components 2.50.1-2 → 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
|
@@ -52,8 +52,7 @@ import { fetchAgentDetail } from '../../../services/maia/Agents/fetchAgentDetail
|
|
|
52
52
|
import { mapCORLang } from '../../../lang/utils';
|
|
53
53
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
54
54
|
import { MAIA_OPEN_FROM_HOST_EVENT } from '../../../utils/maiaHostOpen';
|
|
55
|
-
import {
|
|
56
|
-
import { clampFloatingPanelPosition, hasAnyActiveSessionInMeta, hasBannerFaqTitle, isBannerFaqReadyToAutoSend, resolveAiChatBackDestination, resolveComputedCurrentOption, resolveInitialCurrentOption, resolveLegacyContextSession, resolveSidebarAgentsNavActive, shouldRestoreExpandedPanel, shouldSkipFloatingDragTarget, validateAccessByFeature, resolveHostTakeoverEntityState, buildHostTakeoverPersistContext, buildMaiaPanelSessionPatch, dispatchSkillMentionInsert, ensureAgentsBeforeSkillUse, resolveFloatingPanelDragPosition, resolveHostTakeoverAgentId, resolveMaiaModalI18nLang, resolveMinimizedRestoreTarget, resolveNextDragPosition, resolveUserHasAgentManagementPermissions, shouldBackClearPinnedContext, shouldBackStartNewChatPreservingContext, shouldMarkOrchestratorContextReset, shouldStartNewChatFromCatalog, resolveHasPinnedContext, resolveOrchestratorHomeNavFlags, shouldShowOrchestratorBackButton, shouldClearClientOnGoHomeFromChat, shouldClearTaskOnGoHomeFromChat, shouldResetAgentToFirstOnGoHome, shouldClearOrchestratorGlobalContextOnGoHome, shouldUseActiveChatSendHandler, shouldPrefetchAgentsForCatalogNewChat, canOpenMaiaMarketplace, shouldMarkAgentAsLegacyContext, buildLegacyContextAgent, buildLegacyContextMigrationPatch, findOrchestratorAgent, shouldSetChatViewHiddenOnMount, shouldPersistLastActiveChatId, shouldSyncPanelSessionOnPageHide, resolveCachedAgentsIfAvailable, shouldAttemptInitialAgentsFetch, findAgentForChatItem, shouldApplyClientOnHostTakeover, shouldSelectFirstAgentOnHostTakeover, shouldResetChatStateOnGoHome, shouldClearContextForCatalogOrSkillAgent, resolveOpenNewChatWithAgentContext, canContinueLegacyContextInNewChat, resolveSessionRestoreNavRoute, shouldSkipAgentsLoadOnSessionRestore, shouldFetchAgentDetailOnSessionRestore, shouldPassAgentToGetAgentsOnRestore, shouldSelectFetchedAgentAfterRestore, resolveSnapshotChipsProject, resolveChatModalSectionFlags, shouldRenderChatSidebar, resolveChatModalMainContentView, shouldShowChatModalFooter, shouldUseElevatedMaiaPanel, shouldReselectAgentAfterDelete, shouldClearDragPositionOnLayoutChange, shouldStartFloatingPanelDrag, isActiveFloatingDragPointer, shouldOpenSkillsCatalog, shouldUseDragClampFallback, resolveLayoutDragPositionUpdate, resolvePersistedDragPositionOnEnd, buildUserInitialMessageFromStartChat, shouldResetSidebarErrorOnStartChat, getMaiaHostPanelPresentation } from './ChatAIModal.helpers';
|
|
55
|
+
import { clampFloatingPanelPosition, hasAnyActiveSessionInMeta, hasBannerFaqTitle, isBannerFaqReadyToAutoSend, resolveAiChatBackDestination, resolveComputedCurrentOption, resolveInitialCurrentOption, resolveLegacyContextSession, resolveSidebarAgentsNavActive, shouldRestoreExpandedPanel, shouldSkipFloatingDragTarget, validateAccessByFeature, resolveHostTakeoverEntityState, buildHostTakeoverPersistContext, buildMaiaPanelSessionPatch, dispatchSkillMentionInsert, ensureAgentsBeforeSkillUse, resolveFloatingPanelDragPosition, resolveHostTakeoverAgentId, resolveMaiaModalI18nLang, resolveMinimizedRestoreTarget, resolveNextDragPosition, resolveUserHasAgentManagementPermissions, shouldBackClearPinnedContext, shouldBackStartNewChatPreservingContext, shouldMarkOrchestratorContextReset, shouldStartNewChatFromCatalog, resolveHasPinnedContext, resolveOrchestratorHomeNavFlags, shouldShowOrchestratorBackButton, shouldClearClientOnGoHomeFromChat, shouldClearTaskOnGoHomeFromChat, shouldResetAgentToFirstOnGoHome, shouldClearOrchestratorGlobalContextOnGoHome, shouldUseActiveChatSendHandler, shouldPrefetchAgentsForCatalogNewChat, canOpenMaiaMarketplace, shouldMarkAgentAsLegacyContext, buildLegacyContextAgent, buildLegacyContextMigrationPatch, findOrchestratorAgent, shouldSetChatViewHiddenOnMount, shouldPersistLastActiveChatId, shouldSyncPanelSessionOnPageHide, resolveCachedAgentsIfAvailable, shouldAttemptInitialAgentsFetch, findAgentForChatItem, shouldApplyClientOnHostTakeover, shouldSelectFirstAgentOnHostTakeover, shouldResetChatStateOnGoHome, shouldClearContextForCatalogOrSkillAgent, resolveOpenNewChatWithAgentContext, canContinueLegacyContextInNewChat, resolveSessionRestoreNavRoute, shouldSkipAgentsLoadOnSessionRestore, shouldFetchAgentDetailOnSessionRestore, shouldPassAgentToGetAgentsOnRestore, shouldSelectFetchedAgentAfterRestore, resolveSnapshotChipsProject, resolveChatModalSectionFlags, shouldRenderChatSidebar, resolveChatModalMainContentView, shouldShowChatModalFooter, shouldUseElevatedMaiaPanel, shouldReselectAgentAfterDelete, shouldClearDragPositionOnLayoutChange, shouldStartFloatingPanelDrag, isActiveFloatingDragPointer, shouldOpenSkillsCatalog, shouldUseDragClampFallback, resolveLayoutDragPositionUpdate, resolvePersistedDragPositionOnEnd, buildUserInitialMessageFromStartChat, shouldResetSidebarErrorOnStartChat } from './ChatAIModal.helpers';
|
|
57
56
|
|
|
58
57
|
/** Metadata de la session abierta (emitida por useChatMessages al cargar una conversación). */
|
|
59
58
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
@@ -83,10 +82,6 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
83
82
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
84
83
|
isMinimized = _useState4[0],
|
|
85
84
|
setIsMinimized = _useState4[1];
|
|
86
|
-
var isMaiaPageRoute = useIsMaiaPageRoute();
|
|
87
|
-
var _getMaiaHostPanelPres = getMaiaHostPanelPresentation(isMinimized, isMaiaPageRoute),
|
|
88
|
-
hidePanelContent = _getMaiaHostPanelPres.hidePanelContent,
|
|
89
|
-
showMinimizedPill = _getMaiaHostPanelPres.showMinimizedPill;
|
|
90
85
|
var setChatViewVisible = useChatsStore(function (state) {
|
|
91
86
|
return state.setChatViewVisible;
|
|
92
87
|
});
|
|
@@ -115,18 +110,6 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
115
110
|
}
|
|
116
111
|
}, [setChatViewVisible]);
|
|
117
112
|
|
|
118
|
-
// En /maia el chat fullscreen del sidebar reemplaza al panel flotante; no minimizamos
|
|
119
|
-
// para poder restaurar la misma vista al volver a otra sección de COR.
|
|
120
|
-
useEffect(function () {
|
|
121
|
-
if (isMaiaPageRoute) {
|
|
122
|
-
setChatViewVisible(false);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
if (!isMinimized) {
|
|
126
|
-
setChatViewVisible(true);
|
|
127
|
-
}
|
|
128
|
-
}, [isMaiaPageRoute, isMinimized, setChatViewVisible]);
|
|
129
|
-
|
|
130
113
|
// Persistimos la conversación abierta para poder volver a ella desde el pill después
|
|
131
114
|
// de navegar o refrescar. El takeover desde un host la limpia (va al Home).
|
|
132
115
|
useEffect(function () {
|
|
@@ -678,14 +661,14 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
678
661
|
setIsStreaming(streaming);
|
|
679
662
|
setIsWriting(writing);
|
|
680
663
|
}, []);
|
|
681
|
-
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
664
|
+
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
682
665
|
if (sidebarHasError) {
|
|
683
666
|
setSidebarHasError(false);
|
|
684
667
|
}
|
|
685
668
|
if (shouldUseActiveChatSendHandler(computedCurrentOption, options.chat, Boolean(sendMessageFunction))) {
|
|
686
|
-
sendMessageFunction === null || sendMessageFunction === void 0 || sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
669
|
+
sendMessageFunction === null || sendMessageFunction === void 0 || sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
687
670
|
} else {
|
|
688
|
-
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId
|
|
671
|
+
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
689
672
|
}
|
|
690
673
|
}, [sendMessageFunction, startChat, computedCurrentOption, sidebarHasError]);
|
|
691
674
|
var handleGoHome = useCallback(function () {
|
|
@@ -1512,15 +1495,15 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1512
1495
|
layoutMode: layoutMode,
|
|
1513
1496
|
dragPosition: resolvedDragPosition,
|
|
1514
1497
|
elevated: shouldUseElevatedMaiaPanel(section),
|
|
1515
|
-
$minimized:
|
|
1498
|
+
$minimized: isMinimized,
|
|
1516
1499
|
children: [/*#__PURE__*/_jsx(SCCAIMMinimizedHide, {
|
|
1517
|
-
$hidden:
|
|
1500
|
+
$hidden: isMinimized,
|
|
1518
1501
|
children: /*#__PURE__*/_jsx(FloatingPanelMotion, {
|
|
1519
1502
|
tilt: tiltMotion,
|
|
1520
1503
|
expanded: expanded,
|
|
1521
1504
|
children: contentWrapper
|
|
1522
1505
|
})
|
|
1523
|
-
}),
|
|
1506
|
+
}), isMinimized && /*#__PURE__*/_jsx(MaiaMinimizedPill, {
|
|
1524
1507
|
showNoveltyDot: showMinimizedNoveltyDot,
|
|
1525
1508
|
isStreaming: hasActiveStream,
|
|
1526
1509
|
onRestore: handleRestoreFromMinimized
|
|
@@ -1537,4 +1520,4 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1537
1520
|
}), userHasSkillsAccess && /*#__PURE__*/_jsx(AbmSkillGenerateModal, {}), /*#__PURE__*/_jsx(Snackbar, {})]
|
|
1538
1521
|
}), selector);
|
|
1539
1522
|
};
|
|
1540
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsIkFibVNraWxsR2VuZXJhdGVNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNTWluaW1pemVkSGlkZSIsIlNDQ0FJTVdyYXBwZXIiLCJNYWlhTWluaW1pemVkUGlsbCIsInVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90IiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCIsInVzZUZhcXNTdG9yZSIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFkTGFzdEFjdGl2ZUNoYXRJZCIsIndyaXRlTGFzdEFjdGl2ZUNoYXRJZCIsImNsZWFyTWFpYVBhbmVsU2Vzc2lvbiIsInBhdGNoTWFpYVBhbmVsU2Vzc2lvbiIsInJlYWRNYWlhUGFuZWxTZXNzaW9uIiwid3JpdGVNYWlhUGFuZWxTZXNzaW9uIiwidXNlU2Vzc2lvbnNTdG9yZSIsImZldGNoTWFpYSIsImZldGNoQWdlbnREZXRhaWwiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5UIiwidXNlSXNNYWlhUGFnZVJvdXRlIiwiY2xhbXBGbG9hdGluZ1BhbmVsUG9zaXRpb24iLCJoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhIiwiaGFzQmFubmVyRmFxVGl0bGUiLCJpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJyZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUluaXRpYWxDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUxlZ2FjeUNvbnRleHRTZXNzaW9uIiwicmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbCIsInNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSIsImJ1aWxkSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQiLCJidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCIsImRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0IiwiZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UiLCJyZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbiIsInJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkIiwicmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nIiwicmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQiLCJyZXNvbHZlTmV4dERyYWdQb3NpdGlvbiIsInJlc29sdmVVc2VySGFzQWdlbnRNYW5hZ2VtZW50UGVybWlzc2lvbnMiLCJzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0Iiwic2hvdWxkQmFja1N0YXJ0TmV3Q2hhdFByZXNlcnZpbmdDb250ZXh0Iiwic2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldCIsInNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwicmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQiLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzIiwic2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24iLCJzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQiLCJzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0Iiwic2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSIsInNob3VsZENsZWFyT3JjaGVzdHJhdG9yR2xvYmFsQ29udGV4dE9uR29Ib21lIiwic2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyIiwic2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCIsImNhbk9wZW5NYWlhTWFya2V0cGxhY2UiLCJzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQiLCJidWlsZExlZ2FjeUNvbnRleHRBZ2VudCIsImJ1aWxkTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoIiwiZmluZE9yY2hlc3RyYXRvckFnZW50Iiwic2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50Iiwic2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQiLCJzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZSIsInJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSIsInNob3VsZEF0dGVtcHRJbml0aWFsQWdlbnRzRmV0Y2giLCJmaW5kQWdlbnRGb3JDaGF0SXRlbSIsInNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRSZXNldENoYXRTdGF0ZU9uR29Ib21lIiwic2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCIsInJlc29sdmVPcGVuTmV3Q2hhdFdpdGhBZ2VudENvbnRleHQiLCJjYW5Db250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJyZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSIsInNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZSIsInNob3VsZEZldGNoQWdlbnREZXRhaWxPblNlc3Npb25SZXN0b3JlIiwic2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUiLCJzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUiLCJyZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QiLCJyZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzIiwic2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIiLCJyZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3Iiwic2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlciIsInNob3VsZFVzZUVsZXZhdGVkTWFpYVBhbmVsIiwic2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlIiwic2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSIsInNob3VsZFN0YXJ0RmxvYXRpbmdQYW5lbERyYWciLCJpc0FjdGl2ZUZsb2F0aW5nRHJhZ1BvaW50ZXIiLCJzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyIsInNob3VsZFVzZURyYWdDbGFtcEZhbGxiYWNrIiwicmVzb2x2ZUxheW91dERyYWdQb3NpdGlvblVwZGF0ZSIsInJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCIsImJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCIsInNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQiLCJnZXRNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsIkNoYXRBSU1vZGFsIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSMiIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjUiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI2IiwidXNlciIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiaTE4biIsImFtcGxpdHVkRXZlbnQiLCJzYXZlZFNlc3Npb25Pbk1vdW50UmVmIiwiaWQiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWQiLCJjdXJyZW50IiwicGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmIiwic2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNSZXN0b3JpbmdTZXNzaW9uIiwic2V0SXNSZXN0b3JpbmdTZXNzaW9uIiwic2lkZWJhck9wZW5SZWYiLCJzaWRlYmFyT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNNaW5pbWl6ZWQiLCJzZXRJc01pbmltaXplZCIsImlzTWFpYVBhZ2VSb3V0ZSIsIl9nZXRNYWlhSG9zdFBhbmVsUHJlcyIsImhpZGVQYW5lbENvbnRlbnQiLCJzaG93TWluaW1pemVkUGlsbCIsInNldENoYXRWaWV3VmlzaWJsZSIsInN0YXRlIiwidW5yZWFkQ291bnQiLCJzaG93TWluaW1pemVkTm92ZWx0eURvdCIsImFjdGl2ZUNoYXRJZCIsImhhc0FjdGl2ZVN0cmVhbSIsIm1ldGEiLCJnb1RvQ2hhdFJlZiIsImdvSG9tZVJlZiIsImhhbmRsZU1pbmltaXplIiwiYWlDaGF0TWluaW1pemUiLCJpc0V4cGFuZGVkIiwiZm9jdXNDaGF0SW5wdXQiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJfdXNlU3RhdGU1IiwibWVzc2FnZSIsImF0dGFjaG1lbnRzIiwiX3VzZVN0YXRlNiIsInVzZXJJbml0aWFsTWVzc2FnZSIsInNldFVzZXJJbml0aWFsTWVzc2FnZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaW5pdGlhbENoYXRJZCIsInNldEluaXRpYWxDaGF0SWQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsIm5ld0NoYXRLZXkiLCJzZXROZXdDaGF0S2V5IiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwic2Vzc2lvbk1ldGEiLCJzZXRTZXNzaW9uTWV0YSIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzZW5kTWVzc2FnZUZ1bmN0aW9uIiwic2V0U2VuZE1lc3NhZ2VGdW5jdGlvbiIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwic2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJpc1N0cmVhbWluZyIsInNldElzU3RyZWFtaW5nIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTE5IiwiX3VzZVN0YXRlMjAiLCJyZWZldGNoQ2hhdHMiLCJzZXRSZWZldGNoQ2hhdHMiLCJfdXNlU3RhdGUyMSIsInNhdmVkIiwiYWdlbnRzTmF2QWN0aXZlIiwiY3VycmVudE9wdGlvbiIsIl91c2VTdGF0ZTIyIiwic2V0Q3VycmVudE9wdGlvbiIsIl91c2VTdGF0ZTIzIiwiX3VzZVN0YXRlMjQiLCJoYXNFcnJvciIsInNldEhhc0Vycm9yIiwiX3VzZVN0YXRlMjUiLCJfdXNlU3RhdGUyNiIsImRpZFJlc2V0Q29udGV4dEluU2VjdGlvbiIsInNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbiIsInByZXZIYXNQaW5uZWRDb250ZXh0UmVmIiwiaGFuZGxlcnMiLCJfdXNlU3RhdGUyNyIsIl91c2VTdGF0ZTI4Iiwic2lkZWJhckhhc0Vycm9yIiwic2V0U2lkZWJhckhhc0Vycm9yIiwibGFuZyIsImxhbmd1YWdlIiwibG9jYWxlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsImNsZWFyQWdlbnQiLCJzZWN0aW9uIiwiYWdlbnQiLCJwcm9qZWN0IiwiY2xpZW50IiwidGFzayIsImNoaXBzUHJvamVjdCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwic2V0Q2hpcHNQcm9qZWN0Iiwic2V0Q2xpZW50Iiwic2V0UHJvamVjdCIsImJhbm5lckVudHJ5RmFxIiwic2V0VGFzayIsInRvb2x0aXBaSW5kZXgiLCJfdXNlR2V0QWdlbnRzIiwiaGFuZGxlR29Ib21lIiwiaG9tZSIsImFnZW50cyIsImxvYWRpbmciLCJsb2FkaW5nTW9yZSIsImFnZW50RXJyb3IiLCJlcnJvciIsImhhbmRsZUdldEFnZW50cyIsImxvYWRNb3JlQWdlbnRzIiwic2VhcmNoQ3VzdG9tQWdlbnRzIiwic2VhcmNoTG9hZGluZyIsImFkZEFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudCIsInVwZGF0ZUFnZW50RmF2b3JpdGUiLCJzZWxlY3RGaXJzdEFnZW50Iiwic29ydEFnZW50c0xpc3QiLCJhZ2VudHNEYXRhUmVmIiwiZGF0YSIsIl91c2VHZXRTa2lsbHMiLCJteVNraWxscyIsInNoYXJlZFNraWxscyIsImxvYWRpbmdTa2lsbHMiLCJoYW5kbGVHZXRTa2lsbHMiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJ1c2VySGFzUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsIkJvb2xlYW4iLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwidXNlckhhc1NraWxsc0FjY2VzcyIsImNvbXB1dGVkQ3VycmVudE9wdGlvbiIsIm11bHRpQWdlbnRzQWNjZXNzIiwiaXNNYWlha2VyQWdlbnRTZWxlY3RlZCIsInNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNGZXRjaGVkUmVmIiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiY29uY2F0IiwiX3VzZVN0YXRlMjkiLCJfdXNlU3RhdGUzMCIsImxheW91dE1vZGUiLCJzZXRMYXlvdXRNb2RlIiwiaGFuZGxlTGF5b3V0TW9kZUNoYW5nZSIsIm1vZGUiLCJleHBhbmRlZCIsImlzRmxvYXRpbmciLCJjb250ZW50V3JhcHBlclJlZiIsIl91c2VTdGF0ZTMxIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSMyIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjQiLCJkcmFnUG9zaXRpb24iLCJfdXNlU3RhdGUzMiIsInNldERyYWdQb3NpdGlvbiIsIl91c2VGbG9hdGluZ1BhbmVsRHJhZyIsInRpbHRNb3Rpb24iLCJzdGFydFBvaW50ZXJUcmFja2luZyIsInNhbXBsZVBvaW50ZXJNb3ZlIiwiZW5kUG9pbnRlclRyYWNraW5nIiwiZHJhZ1N0YXRlUmVmIiwiY2xhbXBEcmFnUG9zaXRpb24iLCJ4IiwieSIsImNvbnRlbnRXcmFwcGVyIiwiX2dldEJvdW5kaW5nQ2xpZW50UmVjIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJpbm5lcldpZHRoIiwiaW5uZXJIZWlnaHQiLCJwcmV2IiwicGFuZWxXaWR0aCIsInBhZCIsImhhbmRsZURyYWdFbmQiLCJldmVudCIsIl9kcmFnU3RhdGVSZWYkY3VycmVudCIsInBvaW50ZXJJZCIsImJvZHkiLCJzdHlsZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJyZWN0IiwibGVmdCIsInRvcCIsImhhbmRsZURyYWdNb3ZlIiwiZHJhZ1N0YXRlIiwiY2xpZW50WCIsImNsaWVudFkiLCJuZXh0UG9zaXRpb24iLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJlc29sdmVkRHJhZ1Bvc2l0aW9uIiwidmlld3BvcnRXaWR0aCIsImNsYW1wIiwiaGFuZGxlRHJhZ1N0YXJ0IiwiYnV0dG9uIiwidGFyZ2V0IiwiaW5pdGlhbFBvc2l0aW9uIiwicG9pbnRlck9mZnNldFgiLCJwb2ludGVyT2Zmc2V0WSIsImN1cnJlbnRUYXJnZXQiLCJzZXRQb2ludGVyQ2FwdHVyZSIsInByZXZlbnREZWZhdWx0IiwiYWlDaGF0RHJhZ2dhYmxlIiwic3RhcnRDaGF0IiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiY29udGV4dERhdGEiLCJjaGF0IiwiYmFubmVyRmFxQXV0b1NlbnRSZWYiLCJiYW5uZXJGYXEiLCJmYXFUaXRsZSIsImFscmVhZHlTZW50IiwiYWdlbnRJZCIsInByb2plY3RJZCIsImNsaWVudElkIiwidW5kZWZpbmVkIiwiZW50aXR5IiwiZ29Ub0NoYXQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsInNldEFjdGl2ZUNoYXRJZCIsImRldGFpbCIsInNlbGVjdGVkQWdlbnQiLCJoYW5kbGVTaWRlYmFyT3BlbkNoYW5nZSIsIm9wZW4iLCJzeW5jUGFuZWxTZXNzaW9uIiwiX2FnZW50JGlkIiwicGF0Y2giLCJob3N0Q29udGV4dCIsImVuc3VyZUFnZW50c0xvYWRlZCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2FjaGVkQWdlbnRzIiwibG9hZGVkQWdlbnRzIiwibG9hZGVkRnJvbUZldGNoIiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsImFicnVwdCIsImxlbmd0aCIsInNlbnQiLCJzdG9wIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJvblBhZ2VIaWRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJjaGF0cyIsImxhc3RBY3RpdmVDaGF0SWQiLCJfZ29Ub0NoYXRSZWYkY3VycmVudCIsImNhbGwiLCJfZ29Ib21lUmVmJGN1cnJlbnQiLCJhaUNoYXRPcGVuIiwib3B0aW9uIiwidGhlbiIsImFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIiLCJlbnRpdHlTdGF0ZSIsImdldFN0YXRlIiwiY2xlYXJGYXFzIiwiY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0IiwibmV4dExheW91dCIsImZhcSIsIl9hZ2VudCRpZDIiLCJyZXNvbHZlZEFnZW50SWQiLCJoYW5kbGVTZW5kTWVzc2FnZVJlYWR5Iiwic2VuZE1lc3NhZ2UiLCJzdG9wR2VuZXJhdGlvbiIsInN0cmVhbWluZyIsIndyaXRpbmciLCJoYW5kbGVTZW5kTWVzc2FnZSIsInR5cGUiLCJzdGFydE5ld0NoYXRGcm9tQ2F0YWxvZyIsIl9jYWxsZWUyIiwiYWdlbnRzTGlzdCIsImZpcnN0QWdlbnQiLCJfdCIsIl9jb250ZXh0MiIsIm15QWdlbnRzIiwiaGFuZGxlU3RhcnROZXdDaGF0IiwiaGFuZGxlUmVzZXRDaGF0IiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJoYW5kbGVCYWNrIiwidG8iLCJhaUNoYXRCYWNrIiwicGlubmVkIiwidGFza0lkIiwiY2hpcHNQcm9qZWN0SWQiLCJ3YXNQaW5uZWQiLCJvbk1lcmdlQ3JlYXRlZEFnZW50IiwiZXZ0IiwiX3JlZjQiLCJuZXh0QWdlbnQiLCJuYXZpZ2F0ZUhvbWUiLCJvblN5bmNFZGl0ZWRBZ2VudCIsIl9yZWY1Iiwib3BlbkNoYXRWaWV3Iiwib3BlbkhvbWUiLCJvcGVuRnJvbUhvc3QiLCJfcmVmNiIsIm9wZW5OZXdDaGF0V2l0aEFnZW50IiwiX3JlZjciLCJjb250ZXh0UGF0Y2giLCJzaG91bGRTZXRUYXNrIiwiX2NvbnRleHRQYXRjaCR0YXNrIiwiYXBwbHlTa2lsbFVzZUZsb3ciLCJfcmVmOCIsIl9jYWxsZWU0Iiwic2tpbGwiLCJ1c2VGaXJzdEFnZW50IiwiX2NvbnRleHQ0IiwiX3giLCJfeDIiLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlIiwiX3JlZjkiLCJfcmVmOSR1c2VGaXJzdEFnZW50Iiwib25TZXNzaW9uTWV0YSIsIl9yZWYwIiwibGVnYWN5Q29udGV4dFNlc3Npb24iLCJoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJfYnVpbGRMZWdhY3lDb250ZXh0TWkiLCJvcmNoZXN0cmF0b3IiLCJhZ2VudEVudGl0eSIsInBJZCIsInBOYW1lIiwicHJvamVjdE5hbWUiLCJjSWQiLCJjTmFtZSIsImNsaWVudE5hbWUiLCJ0SWQiLCJ0TmFtZSIsInRhc2tOYW1lIiwibWlncmF0aW9uUGF0Y2giLCJfdXNlTWVtbyIsInNob3dOZXdDaGF0IiwiaXNNeUFnZW50c1NlY3Rpb24iLCJpc015U2tpbGxzU2VjdGlvbiIsImlzTWFpYWtlckNyZWF0b3JIb21lIiwiaGFzQ2hhdEFjY2VzcyIsIm1haW5Db250ZW50VmlldyIsInNob3dNb2RhbEZvb3RlciIsImhvbWVPcHRpb24iLCJjaGF0T3B0aW9uIiwiYWdlbnRzQ291bnQiLCJoYXNBY2Nlc3MiLCJzaG93U2lkZWJhciIsImhhc1Bpbm5lZENvbnRleHQiLCJfcmVzb2x2ZU9yY2hlc3RyYXRvckgiLCJpc0NoYXRWaWV3IiwiaXNIZWFkZXJIb21lU3RlcDIiLCJpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiIsInNob3dCYWNrQnV0dG9uIiwiYWdlbnRUeXBlIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJoYW5kbGVPcGVuU2tpbGxzIiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlNiIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QyIiwiX2NvbnRleHQ2IiwiZmluZCIsImEiLCJwYXRoIiwibWV0aG9kIiwianNvbiIsImxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSIsIl9yZWYxMSIsIl9jYWxsZWU3Iiwic25hcHNob3QiLCJhZ2VudFRvU2VsZWN0IiwiX3QzIiwiX2NvbnRleHQ3IiwiX3gzIiwiYXBwbHlTZXNzaW9uUmVzdG9yZSIsIl9yZWYxMiIsIl9jYWxsZWU4IiwiY2hpcHNQcm9qZWN0RnJvbVNuYXBzaG90IiwicmVzdG9yZVJvdXRlIiwiX3NuYXBzaG90JGFjdGl2ZUNoYXRJIiwiX3NuYXBzaG90JGFjdGl2ZUNoYXRJMiIsIl9jb250ZXh0OCIsIl94NCIsInJ1blJlc3RvcmUiLCJfcmVmMTMiLCJfY2FsbGVlOSIsIl9jb250ZXh0OSIsImZpbmlzaCIsImhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzIiwibW9kYWxQYW5lbCIsImNoaWxkcmVuIiwib25Hb1RvQ2hhdCIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsIm9uT3Blbk1haWFrZXJDcmVhdG9yIiwiaXNMZWdhY3lDb250ZXh0U2Vzc2lvbiIsImluaXRpYWxPcGVuIiwib25PcGVuQ2hhbmdlIiwiZmxvYXRpbmciLCJvbkxheW91dE1vZGVDaGFuZ2UiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYXNNb3JlIiwiaGFzX21vcmUiLCJvbkFnZW50VXBkYXRlIiwiaXNNYWlha2VyU2VjdGlvbiIsIm9uQmFjayIsIl9vYmplY3RTcHJlYWQiLCJyZWZzIiwib25TZW5kTWVzc2FnZVJlYWR5IiwibG9hZGluZ0FnZW50cyIsIm9uRGVsZXRlQWdlbnQiLCJvbkZhdm9yaXRlQWdlbnRVcGRhdGUiLCJoYXNNb3JlQWdlbnRzIiwibG9hZGluZ01vcmVBZ2VudHMiLCJvbkxvYWRNb3JlQWdlbnRzIiwib25Hb1RvTWFpYWtlciIsIm9uRGVsZXRlU2tpbGwiLCJvblNlYXJjaEFnZW50cyIsInNlYXJjaExvYWRpbmdBZ2VudHMiLCJvblJlc3RhcnRTdW1tYXJ5IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJjaGF0SWQiLCJvbkNvbnRpbnVlSW5OZXdDaGF0IiwicmVmIiwiY3JlYXRlUG9ydGFsIiwiZWxldmF0ZWQiLCIkbWluaW1pemVkIiwiJGhpZGRlbiIsInRpbHQiLCJzaG93Tm92ZWx0eURvdCIsIm9uUmVzdG9yZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9DaGF0QUlNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICBQb2ludGVyRXZlbnQgYXMgUmVhY3RQb2ludGVyRXZlbnQsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBjYW5BY2Nlc3NUb1NraWxscyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9wZXJtaXNzaW9ucydcbmltcG9ydCB7IE1BSUFFcnJvciB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFFcnJvcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuXG5pbXBvcnQgeyBDaGF0QUlDb250ZW50IH0gZnJvbSAnLi4vQ2hhdEFJQ29udGVudCdcbmltcG9ydCB7IGJ1aWxkSGFuZGxlcnMsIG9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICcuLi9TaWRlYmFyJ1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRzJ1xuaW1wb3J0IHsgdXNlR2V0U2tpbGxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZ2V0U2tpbGxzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCwgdHlwZSBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IENoYXRBSU1vZGFsSGVhZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL0NoYXRBaU1vZGFsSGVhZGVyL0NoYXRBaU1vZGFsSGVhZGVyJ1xuaW1wb3J0IHsgU25hY2tiYXIgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvU25hY2tCYXIvU25hY2tiYXInXG5pbXBvcnQgeyBQcm9qZWN0U3VtbWFyeUNvbnRlbnQgfSBmcm9tICcuLi9Qcm9qZWN0U3VtbWFyeUNvbnRlbnQnXG5pbXBvcnQgeyBBYm1BZ2VudE1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibUFnZW50TW9kYWwvQWJtQWdlbnRNb2RhbCdcbmltcG9ydCB7IEFibVNraWxsTW9kYWwsIFNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5UIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsTW9kYWwvQWJtU2tpbGxNb2RhbCdcbmltcG9ydCB7IEFibVNraWxsR2VuZXJhdGVNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgU0NDQUlNQ29udGVudCwgU0NDQUlNQ29udGVudFdyYXBwZXIsIFNDQ0FJTU1pbmltaXplZEhpZGUsIFNDQ0FJTVdyYXBwZXIgfSBmcm9tICcuL0NoYXRBSU1vZGFsLnN0eWxlcydcbmltcG9ydCB7IE1haWFNaW5pbWl6ZWRQaWxsIH0gZnJvbSAnLi9jb21wb25lbnRzL01haWFNaW5pbWl6ZWRQaWxsJ1xuaW1wb3J0IHsgdXNlTWluaW1pemVkUGlsbE5vdmVsdHlEb3QgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdCdcbmltcG9ydCB7XG4gIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCxcbiAgTWFpYUNoYXRNb2RhbExheW91dE1vZGUsXG4gIHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlLFxuICBzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUsXG59IGZyb20gJy4vbGF5b3V0J1xuaW1wb3J0IHsgRmxvYXRpbmdQYW5lbE1vdGlvbiwgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IH0gZnJvbSAnLi9mbG9hdGluZ1BhbmVsTW90aW9uJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxGb290ZXInXG5pbXBvcnQgeyBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHR5cGUgeyBDaGF0TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9jaGF0c1N0b3JlLnR5cGVzJ1xuaW1wb3J0IHsgcmVhZExhc3RBY3RpdmVDaGF0SWQsIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFMYXN0Q2hhdFBlcnNpc3RlbmNlJ1xuaW1wb3J0IHtcbiAgY2xlYXJNYWlhUGFuZWxTZXNzaW9uLFxuICBwYXRjaE1haWFQYW5lbFNlc3Npb24sXG4gIHJlYWRNYWlhUGFuZWxTZXNzaW9uLFxuICB0eXBlIE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCxcbiAgd3JpdGVNYWlhUGFuZWxTZXNzaW9uLFxufSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhUGFuZWxTZXNzaW9uUGVyc2lzdGVuY2UnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIHR5cGUgTWFpYUhvc3RPcGVuRGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbWFpYUhvc3RPcGVuJ1xuaW1wb3J0IHsgdXNlSXNNYWlhUGFnZVJvdXRlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlSXNNYWlhUGFnZVJvdXRlJ1xuaW1wb3J0IHtcbiAgY2xhbXBGbG9hdGluZ1BhbmVsUG9zaXRpb24sXG4gIGhhc0FueUFjdGl2ZVNlc3Npb25Jbk1ldGEsXG4gIGhhc0Jhbm5lckZhcVRpdGxlLFxuICBpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCxcbiAgcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbixcbiAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgcmVzb2x2ZUluaXRpYWxDdXJyZW50T3B0aW9uLFxuICByZXNvbHZlTGVnYWN5Q29udGV4dFNlc3Npb24sXG4gIHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICBzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbCxcbiAgc2hvdWxkU2tpcEZsb2F0aW5nRHJhZ1RhcmdldCxcbiAgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUsXG4gIHJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSxcbiAgYnVpbGRIb3N0VGFrZW92ZXJQZXJzaXN0Q29udGV4dCxcbiAgYnVpbGRNYWlhUGFuZWxTZXNzaW9uUGF0Y2gsXG4gIGRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0LFxuICBlbnN1cmVBZ2VudHNCZWZvcmVTa2lsbFVzZSxcbiAgcmVzb2x2ZUZsb2F0aW5nUGFuZWxEcmFnUG9zaXRpb24sXG4gIHJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkLFxuICByZXNvbHZlTWFpYU1vZGFsSTE4bkxhbmcsXG4gIHJlc29sdmVNaW5pbWl6ZWRSZXN0b3JlVGFyZ2V0LFxuICByZXNvbHZlTmV4dERyYWdQb3NpdGlvbixcbiAgcmVzb2x2ZVVzZXJIYXNBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyxcbiAgc2hvdWxkQmFja0NsZWFyUGlubmVkQ29udGV4dCxcbiAgc2hvdWxkQmFja1N0YXJ0TmV3Q2hhdFByZXNlcnZpbmdDb250ZXh0LFxuICBzaG91bGRNYXJrT3JjaGVzdHJhdG9yQ29udGV4dFJlc2V0LFxuICBzaG91bGRTdGFydE5ld0NoYXRGcm9tQ2F0YWxvZyxcbiAgcmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQsXG4gIHJlc29sdmVPcmNoZXN0cmF0b3JIb21lTmF2RmxhZ3MsXG4gIHNob3VsZFNob3dPcmNoZXN0cmF0b3JCYWNrQnV0dG9uLFxuICBzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQsXG4gIHNob3VsZENsZWFyVGFza09uR29Ib21lRnJvbUNoYXQsXG4gIHNob3VsZFJlc2V0QWdlbnRUb0ZpcnN0T25Hb0hvbWUsXG4gIHNob3VsZENsZWFyT3JjaGVzdHJhdG9yR2xvYmFsQ29udGV4dE9uR29Ib21lLFxuICBzaG91bGRVc2VBY3RpdmVDaGF0U2VuZEhhbmRsZXIsXG4gIHNob3VsZFByZWZldGNoQWdlbnRzRm9yQ2F0YWxvZ05ld0NoYXQsXG4gIGNhbk9wZW5NYWlhTWFya2V0cGxhY2UsXG4gIHNob3VsZE1hcmtBZ2VudEFzTGVnYWN5Q29udGV4dCxcbiAgYnVpbGRMZWdhY3lDb250ZXh0QWdlbnQsXG4gIGJ1aWxkTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoLFxuICBmaW5kT3JjaGVzdHJhdG9yQWdlbnQsXG4gIHNob3VsZFNldENoYXRWaWV3SGlkZGVuT25Nb3VudCxcbiAgc2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQsXG4gIHNob3VsZFN5bmNQYW5lbFNlc3Npb25PblBhZ2VIaWRlLFxuICByZXNvbHZlQ2FjaGVkQWdlbnRzSWZBdmFpbGFibGUsXG4gIHNob3VsZEF0dGVtcHRJbml0aWFsQWdlbnRzRmV0Y2gsXG4gIGZpbmRBZ2VudEZvckNoYXRJdGVtLFxuICBzaG91bGRBcHBseUNsaWVudE9uSG9zdFRha2VvdmVyLFxuICBzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIsXG4gIHNob3VsZFJlc2V0Q2hhdFN0YXRlT25Hb0hvbWUsXG4gIHNob3VsZENsZWFyQ29udGV4dEZvckNhdGFsb2dPclNraWxsQWdlbnQsXG4gIHJlc29sdmVPcGVuTmV3Q2hhdFdpdGhBZ2VudENvbnRleHQsXG4gIGNhbkNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCxcbiAgcmVzb2x2ZVNlc3Npb25SZXN0b3JlTmF2Um91dGUsXG4gIHNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZSxcbiAgc2hvdWxkRmV0Y2hBZ2VudERldGFpbE9uU2Vzc2lvblJlc3RvcmUsXG4gIHNob3VsZFBhc3NBZ2VudFRvR2V0QWdlbnRzT25SZXN0b3JlLFxuICBzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUsXG4gIHJlc29sdmVTbmFwc2hvdENoaXBzUHJvamVjdCxcbiAgcmVzb2x2ZUNoYXRNb2RhbFNlY3Rpb25GbGFncyxcbiAgc2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIsXG4gIHJlc29sdmVDaGF0TW9kYWxNYWluQ29udGVudFZpZXcsXG4gIHNob3VsZFNob3dDaGF0TW9kYWxGb290ZXIsXG4gIHNob3VsZFVzZUVsZXZhdGVkTWFpYVBhbmVsLFxuICBzaG91bGRSZXNlbGVjdEFnZW50QWZ0ZXJEZWxldGUsXG4gIHNob3VsZENsZWFyRHJhZ1Bvc2l0aW9uT25MYXlvdXRDaGFuZ2UsXG4gIHNob3VsZFN0YXJ0RmxvYXRpbmdQYW5lbERyYWcsXG4gIGlzQWN0aXZlRmxvYXRpbmdEcmFnUG9pbnRlcixcbiAgc2hvdWxkT3BlblNraWxsc0NhdGFsb2csXG4gIHNob3VsZFVzZURyYWdDbGFtcEZhbGxiYWNrLFxuICByZXNvbHZlTGF5b3V0RHJhZ1Bvc2l0aW9uVXBkYXRlLFxuICByZXNvbHZlUGVyc2lzdGVkRHJhZ1Bvc2l0aW9uT25FbmQsXG4gIGJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCxcbiAgc2hvdWxkUmVzZXRTaWRlYmFyRXJyb3JPblN0YXJ0Q2hhdCxcbiAgZ2V0TWFpYUhvc3RQYW5lbFByZXNlbnRhdGlvbixcbiAgdHlwZSBMZWdhY3lTZXNzaW9uTWV0YSxcbn0gZnJvbSAnLi9DaGF0QUlNb2RhbC5oZWxwZXJzJ1xuXG4vKiogTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMgYWwgY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuKS4gKi9cbnR5cGUgU2Vzc2lvbk1ldGEgPSBMZWdhY3lTZXNzaW9uTWV0YSAmIHtcbiAgY2hhdElkOiBzdHJpbmdcbiAgcHJvamVjdElkPzogbnVtYmVyXG4gIGNsaWVudElkPzogbnVtYmVyXG4gIHRhc2tJZD86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgSURfTU9EQUxfQ0hBVF9BR0VOVCA9ICdtb2RhbHMtcG9ydGFsLW1haWEtY2hhdC1hZ2VudCdcblxuZXhwb3J0IGNvbnN0IENoYXRBSU1vZGFsID0gKCkgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmFibUFnZW50XSlcbiAgY29uc3QgYW1wbGl0dWRFdmVudCA9IHVzZUV2ZW50KClcblxuICBjb25zdCBzYXZlZFNlc3Npb25Pbk1vdW50UmVmID0gdXNlUmVmPE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCB8IG51bGw+KHJlYWRNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQpKVxuICBjb25zdCBzaG91bGRSZXN0b3JlRXhwYW5kZWQgPSBzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbChzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQpXG4gIGNvbnN0IHBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZiA9IHVzZVJlZjxNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QgfCBudWxsPihcbiAgICBzaG91bGRSZXN0b3JlRXhwYW5kZWQgPyBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQgOiBudWxsXG4gIClcbiAgY29uc3Qgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbaXNSZXN0b3JpbmdTZXNzaW9uLCBzZXRJc1Jlc3RvcmluZ1Nlc3Npb25dID0gdXNlU3RhdGUoKCkgPT4gcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgIT0gbnVsbClcbiAgY29uc3Qgc2lkZWJhck9wZW5SZWYgPSB1c2VSZWYoc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5zaWRlYmFyT3BlbiA/PyBmYWxzZSlcblxuICAvLyBUcmFzIG5hdmVnYXIgZW4gZWwgaG9zdCAoZnVsbCBwYWdlIHJlbG9hZCksIHJlc3RhdXJhbW9zIGVsIHBhbmVsIHNpIGVzdGFiYSBhYmllcnRvLlxuICBjb25zdCBbaXNNaW5pbWl6ZWQsIHNldElzTWluaW1pemVkXSA9IHVzZVN0YXRlKCgpID0+ICFzaG91bGRSZXN0b3JlRXhwYW5kZWQpXG4gIGNvbnN0IGlzTWFpYVBhZ2VSb3V0ZSA9IHVzZUlzTWFpYVBhZ2VSb3V0ZSgpXG4gIGNvbnN0IHsgaGlkZVBhbmVsQ29udGVudCwgc2hvd01pbmltaXplZFBpbGwgfSA9IGdldE1haWFIb3N0UGFuZWxQcmVzZW50YXRpb24oaXNNaW5pbWl6ZWQsIGlzTWFpYVBhZ2VSb3V0ZSlcbiAgY29uc3Qgc2V0Q2hhdFZpZXdWaXNpYmxlID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRDaGF0Vmlld1Zpc2libGUpXG4gIGNvbnN0IHVucmVhZENvdW50ID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS51bnJlYWRDb3VudClcbiAgY29uc3Qgc2hvd01pbmltaXplZE5vdmVsdHlEb3QgPSB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdChpc01pbmltaXplZCwgdW5yZWFkQ291bnQpXG4gIGNvbnN0IGFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuYWN0aXZlQ2hhdElkKVxuICAvLyBMb3MgXCIuLi5cIiBkZWwgcGlsbCBzYWxlbiBkZWwgbW90b3IsIG5vIGRlIGlzU3RyZWFtaW5nL2lzV3JpdGluZzogZXNvcyByZWZsZWphblxuICAvLyBsYSBzZXNpw7NuIGFjdGl2YSB5IHF1ZWRhbiBzdGFsZSBjdWFuZG8gdW5hIHJlc3B1ZXN0YSB0ZXJtaW5hIGVuIGJhY2tncm91bmQuXG4gIGNvbnN0IGhhc0FjdGl2ZVN0cmVhbSA9IHVzZVNlc3Npb25zU3RvcmUoc3RhdGUgPT4gaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YShzdGF0ZS5tZXRhKSlcblxuICAvKiogZ29Ub0NoYXQgLyBoYW5kbGVHb0hvbWUgc2UgZGVmaW5lbiBtw6FzIGFiYWpvOyBsb3MgcmVmcyBldml0YW4gZGVwZW5kZXIgZGVsIG9yZGVuIGRlIGRlY2xhcmFjacOzbi4gKi9cbiAgY29uc3QgZ29Ub0NoYXRSZWYgPSB1c2VSZWY8KChjaGF0OiBDaGF0TGlzdEl0ZW0pID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ29Ib21lUmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTW9udGEgY2VycmFkYSBzYWx2byByZXN0YXVyYWNpw7NuIGRlIHNlc2nDs246IHNpIGVsIHBhbmVsIG5vIGVzdMOhIHZpc2libGUsIGxhcyByZXNwdWVzdGFzXG4gIC8vIG51ZXZhcyBxdWVkYW4gY29tbyBubyBsZcOtZGFzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRTZXRDaGF0Vmlld0hpZGRlbk9uTW91bnQocGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB9XG4gIH0sIFtzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIEVuIC9tYWlhIGVsIGNoYXQgZnVsbHNjcmVlbiBkZWwgc2lkZWJhciByZWVtcGxhemEgYWwgcGFuZWwgZmxvdGFudGU7IG5vIG1pbmltaXphbW9zXG4gIC8vIHBhcmEgcG9kZXIgcmVzdGF1cmFyIGxhIG1pc21hIHZpc3RhIGFsIHZvbHZlciBhIG90cmEgc2VjY2nDs24gZGUgQ09SLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01haWFQYWdlUm91dGUpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWlzTWluaW1pemVkKSB7XG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICB9XG4gIH0sIFtpc01haWFQYWdlUm91dGUsIGlzTWluaW1pemVkLCBzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIFBlcnNpc3RpbW9zIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSBwYXJhIHBvZGVyIHZvbHZlciBhIGVsbGEgZGVzZGUgZWwgcGlsbCBkZXNwdcOpc1xuICAvLyBkZSBuYXZlZ2FyIG8gcmVmcmVzY2FyLiBFbCB0YWtlb3ZlciBkZXNkZSB1biBob3N0IGxhIGxpbXBpYSAodmEgYWwgSG9tZSkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFBlcnNpc3RMYXN0QWN0aXZlQ2hhdElkKGFjdGl2ZUNoYXRJZCkpIHtcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBhY3RpdmVDaGF0SWQpXG4gICAgfVxuICB9LCBbYWN0aXZlQ2hhdElkLCB1c2VyLmlkXSlcblxuICBjb25zdCBoYW5kbGVNaW5pbWl6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRNaW5pbWl6ZSlcbiAgICBzZXRJc01pbmltaXplZCh0cnVlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB3cml0ZU1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBpc0V4cGFuZGVkOiBmYWxzZSB9KVxuICB9LCBbYW1wbGl0dWRFdmVudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICBjb25zdCBmb2N1c0NoYXRJbnB1dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnB1dC1yZWZvY3VzJykpXG4gICAgfSwgMTAwKVxuICB9LCBbXSlcblxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfT4oe1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgfSlcbiAgY29uc3QgW2luaXRpYWxDaGF0SWQsIHNldEluaXRpYWxDaGF0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW25ld0NoYXRLZXksIHNldE5ld0NoYXRLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Nlc3Npb25NZXRhLCBzZXRTZXNzaW9uTWV0YV0gPSB1c2VTdGF0ZTxTZXNzaW9uTWV0YSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uXSA9IHVzZVN0YXRlPFxuICAgIHwgKChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKSA9PiB2b2lkKVxuICAgIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlPG9wdGlvbnM+KCgpID0+IHtcbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudFxuICAgIHJldHVybiByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24oc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSwgc2F2ZWQ/LmN1cnJlbnRPcHRpb24sIHVzZXIpXG4gIH0pXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBsYW5nID0gcmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nKGkxOG4ubGFuZ3VhZ2UpXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IGFnZW50c0RhdGFSZWYgPSB1c2VSZWYoYWdlbnRzLmRhdGEpXG4gIGFnZW50c0RhdGFSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhXG5cbiAgY29uc3Qge1xuICAgIG15U2tpbGxzLFxuICAgIHNoYXJlZFNraWxscyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLFxuICAgIGhhbmRsZUdldFNraWxscyxcbiAgICBhZGRTa2lsbCxcbiAgICB1cGRhdGVTa2lsbEluTGlzdCxcbiAgICByZW1vdmVTa2lsbCxcbiAgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID0gcmVzb2x2ZVVzZXJIYXNBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyhcbiAgICB1c2VyPy5wZXJtaXNzaW9ucyxcbiAgICBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKVxuICApXG5cbiAgY29uc3QgdXNlckhhc1NraWxsc0FjY2VzcyA9IGNhbkFjY2Vzc1RvU2tpbGxzKHVzZXIpXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbih7XG4gICAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICAgIGFnZW50LFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgIH0pLFxuICAgIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGFnZW50LCB1c2VyXVxuICApXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmIChzaG91bGRVc2VEcmFnQ2xhbXBGYWxsYmFjayhjb250ZW50V3JhcHBlcikpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgcmV0dXJuIGNsYW1wRmxvYXRpbmdQYW5lbFBvc2l0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQpXG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZENsZWFyRHJhZ1Bvc2l0aW9uT25MYXlvdXRDaGFuZ2UobGF5b3V0TW9kZSkpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT5cbiAgICAgIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUobGF5b3V0TW9kZSwgcHJldiwgY2xhbXBEcmFnUG9zaXRpb24sIHtcbiAgICAgICAgaW5uZXJXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIHBhbmVsV2lkdGg6IGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpLFxuICAgICAgICBwYWQ6IDE2LFxuICAgICAgfSkhXG4gICAgKVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmICghaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoY29udGVudFdyYXBwZXIgJiYgcmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kKGxheW91dE1vZGUsIGNvbnRlbnRXcmFwcGVyKSkge1xuICAgICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgZHJhZ1Bvc2l0aW9uOiB7IHg6IHJlY3QubGVmdCwgeTogcmVjdC50b3AgfSB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZywgbGF5b3V0TW9kZSwgdXNlci5pZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCAhaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZS5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiByZXNvbHZlTmV4dERyYWdQb3NpdGlvbihwcmV2LCBuZXh0UG9zaXRpb24pKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUZsb2F0aW5nUGFuZWxEcmFnUG9zaXRpb24oe1xuICAgICAgICBsYXlvdXRNb2RlLFxuICAgICAgICBkcmFnUG9zaXRpb24sXG4gICAgICAgIHZpZXdwb3J0V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAwLFxuICAgICAgICBwYW5lbFdpZHRoOiBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSxcbiAgICAgICAgY2xhbXA6IGNsYW1wRHJhZ1Bvc2l0aW9uLFxuICAgICAgfSksXG4gICAgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnKGlzRmxvYXRpbmcsIGV2ZW50LmJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQoc2lkZWJhckhhc0Vycm9yKSkge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoXG4gICAgICAgIGJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCh7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBmYXFJZCxcbiAgICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICAgICAgICBtZW50aW9ucyxcbiAgICAgICAgICBmdWFJZCxcbiAgICAgICAgICBzY0lkLFxuICAgICAgICAgIGNvbnRleHREYXRhLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYmFubmVyRmFxID0gYmFubmVyRW50cnlGYXFcbiAgICBpZiAoIWJhbm5lckZhcSB8fCAhaGFzQmFubmVyRmFxVGl0bGUoYmFubmVyRmFxLmZhcVRpdGxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kKHtcbiAgICAgICAgZmFxVGl0bGU6IGJhbm5lckZhcS5mYXFUaXRsZSxcbiAgICAgICAgYWxyZWFkeVNlbnQ6IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgc2VjdGlvbixcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJGYXEuZmFxVGl0bGUsXG4gICAgICBbXSxcbiAgICAgIGJhbm5lckZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgYXMgc3RyaW5nXG5cbiAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2lkZWJhci1zZWxlY3Qtc2Vzc2lvbicsIHsgZGV0YWlsOiB7IHNlc3Npb25JZCB9IH0pKVxuXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKHNlc3Npb25JZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBmaW5kQWdlbnRGb3JDaGF0SXRlbShhZ2VudHMuZGF0YSwgY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIGNvbnN0IGhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIHNpZGViYXJPcGVuUmVmLmN1cnJlbnQgPSBvcGVuXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBzaWRlYmFyT3Blbjogb3BlbiB9KVxuICAgIH0sXG4gICAgW3VzZXIuaWRdXG4gIClcblxuICBjb25zdCBzeW5jUGFuZWxTZXNzaW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHBhdGNoID0gYnVpbGRNYWlhUGFuZWxTZXNzaW9uUGF0Y2goe1xuICAgICAgaXNNaW5pbWl6ZWQsXG4gICAgICBjdXJyZW50T3B0aW9uLFxuICAgICAgYWdlbnRzTmF2QWN0aXZlOiBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICAgICAgYWN0aXZlQ2hhdElkLFxuICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkID8/IG51bGwsXG4gICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgIGxheW91dE1vZGUsXG4gICAgICBkcmFnUG9zaXRpb24sXG4gICAgICBob3N0Q29udGV4dDoge1xuICAgICAgICBzZWN0aW9uLFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHRhc2ssXG4gICAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBpZiAoIXBhdGNoKSByZXR1cm5cbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgcGF0Y2gpXG4gIH0sIFtcbiAgICBhY3RpdmVDaGF0SWQsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBkcmFnUG9zaXRpb24sXG4gICAgaXNNaW5pbWl6ZWQsXG4gICAgbGF5b3V0TW9kZSxcbiAgICBwcm9qZWN0LFxuICAgIHNlY3Rpb24sXG4gICAgc2lkZWJhckFnZW50c05hdkFjdGl2ZSxcbiAgICB0YXNrLFxuICAgIHVzZXIuaWQsXG4gIF0pXG5cbiAgLyoqIExvcyBhZ2VudGVzIHNlIHBpZGVuIHJlY2nDqW4gYWwgYWJyaXIgZWwgcGFuZWw6IGVuIG1vZG8gcGlsbCBubyBoYWNlIGZhbHRhIG5pbmd1bmEgcmVxdWVzdC4gKi9cbiAgY29uc3QgZW5zdXJlQWdlbnRzTG9hZGVkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8QWdlbnRbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZShhZ2VudHNEYXRhUmVmLmN1cnJlbnQpXG4gICAgaWYgKGNhY2hlZEFnZW50cykge1xuICAgICAgcmV0dXJuIGNhY2hlZEFnZW50c1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBdHRlbXB0SW5pdGlhbEFnZW50c0ZldGNoKGFnZW50c0RhdGFSZWYuY3VycmVudC5sZW5ndGgsIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IGxvYWRlZEFnZW50cyA9IGF3YWl0IGhhbmRsZUdldEFnZW50cygpXG4gICAgICBjb25zdCBsb2FkZWRGcm9tRmV0Y2ggPSByZXNvbHZlQ2FjaGVkQWdlbnRzSWZBdmFpbGFibGUobG9hZGVkQWdlbnRzKVxuICAgICAgaWYgKGxvYWRlZEZyb21GZXRjaCkge1xuICAgICAgICByZXR1cm4gbG9hZGVkRnJvbUZldGNoXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFnZW50c0RhdGFSZWYuY3VycmVudFxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc3luY1BhbmVsU2Vzc2lvbigpLCAxNTApXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpXG4gIH0sIFtpc01pbmltaXplZCwgc3luY1BhbmVsU2Vzc2lvbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblBhZ2VIaWRlID0gKCkgPT4ge1xuICAgICAgaWYgKHNob3VsZFN5bmNQYW5lbFNlc3Npb25PblBhZ2VIaWRlKGlzTWluaW1pemVkKSkge1xuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgfSwgW2lzTWluaW1pemVkLCBzeW5jUGFuZWxTZXNzaW9uXSlcblxuICBjb25zdCBoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBQcmlvcmlkYWQgYWwgcmVhYnJpcjogcHJpbWVyIGNoYXQgc2luIGxlZXIg4oaSIMO6bHRpbWEgY29udmVyc2FjacOzbiBhYmllcnRhIOKGkiBIb21lLlxuICAgIGNvbnN0IHsgY2hhdHMgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgY29uc3QgbGFzdEFjdGl2ZUNoYXRJZCA9IHJlYWRMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQpXG4gICAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQoY2hhdHMsIGxhc3RBY3RpdmVDaGF0SWQpXG5cbiAgICAvLyBOYXZlZ2FyIGFudGVzIGRlIGV4cGFuZGlyOiBzaSBlc3BlcmFtb3MgYWdlbnRlcywgZWwgcGFuZWwgbW9udGEgY29uIGxhIHNlc2nDs24gdmllamEgeSBlbCBzaWRlYmFyIHF1ZWRhIGRlc2Zhc2Fkby5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBnb1RvQ2hhdFJlZi5jdXJyZW50Py4odGFyZ2V0KVxuICAgIH0gZWxzZSB7XG4gICAgICBnb0hvbWVSZWYuY3VycmVudD8uKClcbiAgICB9XG5cbiAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuLCB7IG9wdGlvbjogJ21pbmltaXplJyB9KVxuXG4gICAgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgIC50aGVuKGxvYWRlZEFnZW50cyA9PiB7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEFnZW50ID0gZmluZEFnZW50Rm9yQ2hhdEl0ZW0obG9hZGVkQWdlbnRzLCB0YXJnZXQuYWdlbnRJZClcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRBZ2VudCkge1xuICAgICAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gIH0sIFthbXBsaXR1ZEV2ZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIGZvY3VzQ2hhdElucHV0LCBzZWxlY3RBZ2VudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICAvKipcbiAgICogVG9tYSBjb250cm9sIGRlc2RlIHVuIGhvc3QgKGhlYWRlciwgcHJveWVjdG8sIGNsaWVudGXigKYpOiBhYnJlIGVsIHBhbmVsLCBkZXNjYXJ0YSBsYVxuICAgKiBjb252ZXJzYWNpw7NuIGFiaWVydGEgeSBhcGxpY2EgZWwgY29udGV4dG8gZGVsIGhvc3QuIE5PIHZ1ZWx2ZSBhIGxhIMO6bHRpbWEgY29udmVyc2FjacOzblxuICAgKiDigJQgZXNvIHPDs2xvIGxvIGhhY2UgZWwgcGlsbCAoYGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkYCkuXG4gICAqL1xuICBjb25zdCBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGRldGFpbDogTWFpYUhvc3RPcGVuRGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlTdGF0ZSA9IHJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZShkZXRhaWwpXG5cbiAgICAgIGNsZWFyTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKVxuICAgICAgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRJc1Jlc3RvcmluZ1Nlc3Npb24oZmFsc2UpXG4gICAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgICAgd3JpdGVMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQsIG51bGwpXG5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKGZhbHNlKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQobnVsbClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuXG4gICAgICBzZXRQcm9qZWN0Py4oZW50aXR5U3RhdGUucHJvamVjdClcbiAgICAgIGlmIChzaG91bGRBcHBseUNsaWVudE9uSG9zdFRha2VvdmVyKGVudGl0eVN0YXRlLmNsaWVudCkpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4oZW50aXR5U3RhdGUuY2xpZW50KVxuICAgICAgfVxuICAgICAgc2V0VGFzaz8uKGVudGl0eVN0YXRlLnRhc2spXG5cbiAgICAgIGlmIChlbnRpdHlTdGF0ZS5jbGVhckdsb2JhbFBpbm5lZENvbnRleHQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIGNsZWFyQWdlbnQoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TGF5b3V0ID0gcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUoe1xuICAgICAgICBzZWN0aW9uOiBkZXRhaWwuc2VjdGlvbiBhcyBTZWN0aW9uLFxuICAgICAgICBiYW5uZXJFbnRyeUZhcTogZGV0YWlsLmZhcSxcbiAgICAgIH0pXG4gICAgICBzZXRMYXlvdXRNb2RlKG5leHRMYXlvdXQpXG4gICAgICBzZXREcmFnUG9zaXRpb24obnVsbClcblxuICAgICAgY29uc3QgaG9zdENvbnRleHQgPSBidWlsZEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0KGRldGFpbClcblxuICAgICAgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQWdlbnRJZCA9IHJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkKFxuICAgICAgICAgICAgZW50aXR5U3RhdGUuY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0LFxuICAgICAgICAgICAgYWdlbnRzRGF0YVJlZi5jdXJyZW50LFxuICAgICAgICAgICAgYWdlbnQ/LmlkID8/IG51bGxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHNob3VsZFNlbGVjdEZpcnN0QWdlbnRPbkhvc3RUYWtlb3ZlcihlbnRpdHlTdGF0ZS5jbGVhckdsb2JhbFBpbm5lZENvbnRleHQsIGFnZW50c0RhdGFSZWYuY3VycmVudFswXSkpIHtcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50c0RhdGFSZWYuY3VycmVudFswXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICAgICAgICAgIGFnZW50c05hdkFjdGl2ZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCxcbiAgICAgICAgICAgIHNpZGViYXJPcGVuOiBzaWRlYmFyT3BlblJlZi5jdXJyZW50LFxuICAgICAgICAgICAgZHJhZ1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgICAgaG9zdENvbnRleHQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgICB9LFxuICAgIFtcbiAgICAgIGFnZW50Py5pZCxcbiAgICAgIGNsZWFyQWdlbnQsXG4gICAgICBlbnN1cmVBZ2VudHNMb2FkZWQsXG4gICAgICBmb2N1c0NoYXRJbnB1dCxcbiAgICAgIHNlbGVjdEFnZW50LFxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlLFxuICAgICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgICAgc2V0Q2xpZW50LFxuICAgICAgc2V0UHJvamVjdCxcbiAgICAgIHNldFRhc2ssXG4gICAgICB1c2VyLmlkLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlUmVhZHkgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5jaGF0LCBCb29sZWFuKHNlbmRNZXNzYWdlRnVuY3Rpb24pKSkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uPy4obWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkLCBjb250ZXh0RGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQsIGNvbnRleHREYXRhKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHN0YXJ0Q2hhdCwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBoYW5kbGVHb0hvbWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gU2kgZXN0YW1vcyBlbiB1bmEgY29udmVyc2FjacOzbiB5IHZhbW9zIGEgaG9tZSwgcmVzZXRlYXIgaW5pdGlhbENoYXRJZCB5IGluY3JlbWVudGFyIG5ld0NoYXRLZXlcbiAgICBpZiAoc2hvdWxkUmVzZXRDaGF0U3RhdGVPbkdvSG9tZShjdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQpKSB7XG4gICAgICAvLyBObyBjb3J0YW1vcyBsYSBnZW5lcmFjacOzbjogbGEgc2VzacOzbiBzaWd1ZSByZXNwb25kaWVuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGlmIChzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQoYWdlbnQ/LmVudGl0eSkpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0KHNlY3Rpb24pKSB7XG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZShhZ2VudCwgYWdlbnRzLmRhdGEubGVuZ3RoKSkge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbMF0pXG4gICAgfVxuICAgIGlmIChzaG91bGRDbGVhck9yY2hlc3RyYXRvckdsb2JhbENvbnRleHRPbkdvSG9tZShzZWN0aW9uLCBhZ2VudD8udHlwZSkpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgfSwgW1xuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBvcHRpb25zLmNoYXQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgYWdlbnQsXG4gICAgYWdlbnRzLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBzZWN0aW9uLFxuICBdKVxuXG4gIGdvSG9tZVJlZi5jdXJyZW50ID0gaGFuZGxlR29Ib21lXG5cbiAgY29uc3Qgc3RhcnROZXdDaGF0RnJvbUNhdGFsb2cgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYWdlbnRzTGlzdCA9IHNob3VsZFByZWZldGNoQWdlbnRzRm9yQ2F0YWxvZ05ld0NoYXQoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLm15QWdlbnRzLCBvcHRpb25zLm15U2tpbGxzKVxuICAgICAgPyBhd2FpdCBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuICAgICAgOiBhZ2VudHMuZGF0YVxuICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhZ2VudHNMaXN0WzBdXG5cbiAgICBpZiAoc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudChmaXJzdEFnZW50KSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2VsZWN0QWdlbnQoZmlyc3RBZ2VudClcbiAgICB9XG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gIH0sIFtcbiAgICBhZ2VudHMuZGF0YSxcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgZW5zdXJlQWdlbnRzTG9hZGVkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldFRhc2ssXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0TmV3Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvdWxkU3RhcnROZXdDaGF0RnJvbUNhdGFsb2coY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkKSkge1xuICAgICAgc3RhcnROZXdDaGF0RnJvbUNhdGFsb2coKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBoYW5kbGVHb0hvbWUsIGlzTWFpYWtlckFnZW50U2VsZWN0ZWQsIHN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIiBkZWwgaGVhZGVyIChzb2xvIG9yY2hlc3RyYXRvcik6XG4gIC8vIC0gRGVzZGUgZWwgY2hhdCAoaGVhZGVyIG8gcHJvamVjdC9jbGllbnQvdGFzayk6IGluaWNpYSB1bmEgY29udmVyc2FjacOzbiBudWV2YSBjb25zZXJ2YW5kbyBlbFxuICAvLyAgIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgaG9tZSAocGFzbyAyIGNvbiBGQVFzL0ZVQXMpLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvKTogbGltcGlhIGVsIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgcGFzbyAxXG4gIC8vICAgKHNlbGVjdG9yIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsXG4gIC8vICAgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikuXG4gIGNvbnN0IGhhbmRsZUJhY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdG8gPSByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uKHNlY3Rpb24sIGFnZW50Py50eXBlLCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRCYWNrLCB7IHRvIH0pXG5cbiAgICAvLyBEZXNkZSBlbCBjaGF0IOKGkiBudWV2YSBjb252ZXJzYWNpw7NuIFNJTiBib3JyYXIgZWwgY29udGV4dG8gcGluZWFkbywgdm9sdmllbmRvIGFsIGhvbWUuXG4gICAgaWYgKHNob3VsZEJhY2tTdGFydE5ld0NoYXRQcmVzZXJ2aW5nQ29udGV4dChjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCkpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEhvbWUgcGFzbyAyIChjb250ZXh0byBwaW5lYWRvKSDihpIgbGltcGlhciBlbCBjb250ZXh0byB5IHZvbHZlciBhbCBwYXNvIDEgKGNvbnRleHRvcyByZWNpZW50ZXMpLlxuICAgIGlmIChzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0KGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5ob21lLCBzZWN0aW9uLCBkaWRSZXNldENvbnRleHRJblNlY3Rpb24pKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICB9XG4gIH0sIFtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudD8udHlwZSxcbiAgICBhbXBsaXR1ZEV2ZW50LFxuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBkaWRSZXNldENvbnRleHRJblNlY3Rpb24sXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIF0pXG5cbiAgLy8gRGV0ZWN0YSBlbCByZWluaWNpbyBkZSBjb250ZXh0byBlbiBwcm9qZWN0L2NsaWVudC90YXNrOiBjb250ZXh0byBwaW5lYWRvIOKGkiB2YWPDrW8gY29uIGVsXG4gIC8vIG9yY2hlc3RyYXRvciAocC4gZWouIGFsIHJlc2VsZWNjaW9uYXIgTUFJQSBlbiBlbCBsaXN0YWRvKS4gU29sbyBsYSB0cmFuc2ljacOzbiBjdWVudGEsIGFzw60gdW5hXG4gIC8vIGFwZXJ0dXJhIGZyZXNjYSAoY29udGV4dG8gcGluZWFkbyBkZXNkZSBsYSBzZWNjacOzbikgbm8gbG8gYWN0aXZhLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBpbm5lZCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICAgIHRhc2tJZDogdGFzaz8uaWQsXG4gICAgICBjaGlwc1Byb2plY3RJZDogY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsXG4gICAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQsXG4gICAgfSlcbiAgICBjb25zdCB3YXNQaW5uZWQgPSBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50XG4gICAgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudCA9IHBpbm5lZFxuICAgIGlmIChzaG91bGRNYXJrT3JjaGVzdHJhdG9yQ29udGV4dFJlc2V0KHNlY3Rpb24sIGFnZW50Py50eXBlLCB3YXNQaW5uZWQsIHBpbm5lZCkpIHtcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbih0cnVlKVxuICAgIH1cbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgY2xpZW50Py5pZCwgcHJvamVjdD8uaWQsIHNlY3Rpb24sIGFnZW50Py50eXBlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTWVyZ2VDcmVhdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmIChuZXh0QWdlbnQ/LmlkKSB7XG4gICAgICAgIGFkZEFnZW50KG5leHRBZ2VudCwgeyBuYXZpZ2F0ZUhvbWU6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFthZGRBZ2VudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblN5bmNFZGl0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFuZXh0QWdlbnQ/LmlkKSByZXR1cm5cbiAgICAgIHVwZGF0ZUFnZW50KG5leHRBZ2VudClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IG5leHRBZ2VudC5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbdXBkYXRlQWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudD8uaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkNoYXRWaWV3ID0gKCkgPT4ge1xuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuY2hhdClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEVsIMOtY29ubyBkZSBNQUlBIGRlbCBoZWFkZXIgbGxldmEgc2llbXByZSBhbCBIb21lLiBTaSBNQUlBIHlhIGVzdMOhIG1vbnRhZGEgcGVyb1xuICAgKiBtaW5pbWl6YWRhLCBlbCBob3N0IG5vIHB1ZWRlIHJlc29sdmVybG8gY2FtYmlhbmRvIGBpc09wZW5gICh5YSBlc3TDoSBlbiB0cnVlKSxcbiAgICogYXPDrSBxdWUgYXZpc2EgcG9yIGV2ZW50byB5IGFjw6EgcmVzdGF1cmFtb3MgeSB2YW1vcyBhbCBIb21lLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuSG9tZSA9ICgpID0+IHtcbiAgICAgIGFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIoe1xuICAgICAgICBzZWN0aW9uOiAnaGVhZGVyJyxcbiAgICAgICAgZW50aXR5OiB7IHByb2plY3RJZDogbnVsbCwgY2xpZW50SWQ6IG51bGwgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqXG4gICAqIE90cm8gaG9zdCAocHJveWVjdG8sIGNsaWVudGUsIGJhbm5lciwgaGVhZGVy4oCmKSBwaWRlIGFicmlyIE1BSUEgbWllbnRyYXMgeWEgaGF5IHVuYVxuICAgKiBpbnN0YW5jaWEgbW9udGFkYS4gRXhwYW5kZSBzaSBlc3RhYmEgbWluaW1pemFkbywgYXBsaWNhIGVsIGNvbnRleHRvIGRlbCBob3N0IG51ZXZvXG4gICAqIHkgdmEgYWwgaG9tZSDigJQgc2luIHJlc3RhdXJhciBsYSBjb252ZXJzYWNpw7NuIHByZXZpYSAoZXNvIGxvIGhhY2UgZWwgcGlsbCkuXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5Gcm9tSG9zdCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudCBhcyBDdXN0b21FdmVudDxNYWlhSG9zdE9wZW5EZXRhaWw+XG4gICAgICBpZiAoIWRldGFpbCkgcmV0dXJuXG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKGRldGFpbClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIG9wZW5Gcm9tSG9zdClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqIE1pc21vIGZsdWpvIHF1ZSBDaGF0QUlNeUFnZW50cy5oYW5kbGVVc2VBZ2VudCArIG9uQmFjayAoaGFuZGxlcnMuaG9tZSkuXG4gICAqICBFbCBkZXRhaWwgcHVlZGUgdHJhZXIgb3BjaW9uYWxtZW50ZSBgcHJvamVjdGAsIGBjbGllbnRgLCBgdGFza2AgcGFyYSBmbG93cyBxdWVcbiAgICogIG5lY2VzaXRhbiBwcmVzZXJ2YXIgY29udGV4dG8gKGVqLiBzZWxlY3RvciBkZSBhZ2VudGVzIGRlc2RlIHVuYSB0YXJlYSkuIFNpIG5vIHZpZW5lbixcbiAgICogIHNlIG1hbnRpZW5lIGVsIGNvbXBvcnRhbWllbnRvIG9yaWdpbmFsIGRlIGxpbXBpYXIgcHJvamVjdC9jbGllbnQuICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3Blbk5ld0NoYXRXaXRoQWdlbnQgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8e1xuICAgICAgICBhZ2VudDogQWdlbnRcbiAgICAgICAgcHJvamVjdD86IFByb2plY3QgfCBudWxsXG4gICAgICAgIGNsaWVudD86IENsaWVudCB8IG51bGxcbiAgICAgICAgdGFzaz86IFRhc2sgfCBudWxsXG4gICAgICB9PlxuICAgICAgY29uc3QgbmV4dEFnZW50ID0gZGV0YWlsPy5hZ2VudFxuICAgICAgaWYgKCFuZXh0QWdlbnQpIHJldHVyblxuXG4gICAgICBjb25zdCBjb250ZXh0UGF0Y2ggPSByZXNvbHZlT3Blbk5ld0NoYXRXaXRoQWdlbnRDb250ZXh0KGRldGFpbCA/PyB7fSlcbiAgICAgIHNldFByb2plY3QoY29udGV4dFBhdGNoLnByb2plY3QpXG4gICAgICBzZXRDbGllbnQ/Lihjb250ZXh0UGF0Y2guY2xpZW50KVxuICAgICAgaWYgKGNvbnRleHRQYXRjaC5zaG91bGRTZXRUYXNrKSB7XG4gICAgICAgIHNldFRhc2s/Lihjb250ZXh0UGF0Y2gudGFzayA/PyBudWxsKVxuICAgICAgfVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIH1cbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuXG4gIGNvbnN0IGFwcGx5U2tpbGxVc2VGbG93ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNraWxsOiBTa2lsbCwgdXNlRmlyc3RBZ2VudDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgZmlyc3RBZ2VudCA9IGF3YWl0IGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlKHtcbiAgICAgICAgdXNlRmlyc3RBZ2VudCxcbiAgICAgICAgYWdlbnRzOiBhZ2VudHNEYXRhUmVmLmN1cnJlbnQsXG4gICAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChzaG91bGRDbGVhckNvbnRleHRGb3JDYXRhbG9nT3JTa2lsbEFnZW50KGZpcnN0QWdlbnQpKSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICB9XG5cbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0KHNraWxsKVxuICAgIH0sXG4gICAgW2Vuc3VyZUFnZW50c0xvYWRlZCwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsLCB1c2VGaXJzdEFnZW50ID0gZmFsc2UgfSA9XG4gICAgICAgIChldmVudCBhcyBDdXN0b21FdmVudDx7IHNraWxsOiBTa2lsbDsgdXNlRmlyc3RBZ2VudD86IGJvb2xlYW4gfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbCkgcmV0dXJuXG5cbiAgICAgIGFwcGx5U2tpbGxVc2VGbG93KHNraWxsLCB1c2VGaXJzdEFnZW50KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIH1cbiAgfSwgW2FwcGx5U2tpbGxVc2VGbG93XSlcblxuICAvLyBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGFnZW50X3R5cGUvYWdlbnRfZW50aXR5ICsgY29udGV4dG8pLCBlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZXNzaW9uTWV0YSA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZ0IGFzIEN1c3RvbUV2ZW50PFNlc3Npb25NZXRhPlxuICAgICAgaWYgKGRldGFpbCkgc2V0U2Vzc2lvbk1ldGEoZGV0YWlsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24gbGltcGlhbW9zIGxhIG1ldGFkYXRhOyBlbCBsb2FkIGRlIGxhIG51ZXZhIHNlc3Npb24gbGEgdnVlbHZlIGEgZW1pdGlyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBDYXJ0ZWwgXCJjb250aW51YXIgZW4gdW4gY2hhdCBudWV2b1wiOiBzZSBtdWVzdHJhIGFsIGFicmlyIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeVxuICAvLyAoYWdlbnRfdHlwZSA9PT0gJ2Nsb25lJyBjb24gZW50aXR5IHByb2plY3QvdGFzay9jbGllbnQpLiBFbCBpbnB1dCBzZSByZWVtcGxhemEgcG9yIGVsIGNhcnRlbC5cbiAgY29uc3QgbGVnYWN5Q29udGV4dFNlc3Npb24gPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbihjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCwgc2Vzc2lvbk1ldGEpLFxuICAgIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNlc3Npb25NZXRhXVxuICApXG5cbiAgLy8gTWFyY2EgZWwgYWdlbnRlIGRlIGxhIGNvbnZlcnNhY2nDs24gbGVnYWN5IHBhcmEgcXVlIGhlYWRlciwgc2VsZWN0b3IgeSBhdmF0YXIgbXVlc3RyZW4gZWwgbG9nb1xuICAvLyBNQUlBIHkgZWwgbm9tYnJlIHRhY2hhZG8gKGFnZW50ZSBvYnNvbGV0byksIHNpbiBkZXBlbmRlciBkZWwgYHR5cGVgIHJlc3VlbHRvIGRlIGxhIHNlc2nDs24gdmllamEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZE1hcmtBZ2VudEFzTGVnYWN5Q29udGV4dChsZWdhY3lDb250ZXh0U2Vzc2lvbiwgYWdlbnQpKSB7XG4gICAgICBzZWxlY3RBZ2VudChidWlsZExlZ2FjeUNvbnRleHRBZ2VudChhZ2VudCkpXG4gICAgfVxuICB9LCBbbGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50LCBzZWxlY3RBZ2VudF0pXG5cbiAgLy8gQWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBvcmNoZXN0cmF0b3Igc2V0ZWFuZG8gZWwgY29udGV4dG8gZGVsIGNsb25lIGxlZ2FjeSAobWlzbW8gY3JpdGVyaW9cbiAgLy8gcXVlIGNsaWNrZWFyIHVuIGNvbnRleHRvIHJlY2llbnRlIGVuIGVsIGhvbWUg4oaSIHBhc28gMiBjb24gRkFRcy9hY2Npb25lcyBkZSBlc2UgY29udGV4dG8pLlxuICBjb25zdCBoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgb3JjaGVzdHJhdG9yID0gZmluZE9yY2hlc3RyYXRvckFnZW50KGFnZW50cy5kYXRhKVxuICAgIGlmICghY2FuQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0KHNlc3Npb25NZXRhLCBvcmNoZXN0cmF0b3IpIHx8ICFzZXNzaW9uTWV0YSB8fCAhb3JjaGVzdHJhdG9yKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0gPSBzZXNzaW9uTWV0YVxuXG4gICAgY29uc3QgbWlncmF0aW9uUGF0Y2ggPSBidWlsZExlZ2FjeUNvbnRleHRNaWdyYXRpb25QYXRjaCh7XG4gICAgICBhZ2VudEVudGl0eSxcbiAgICAgIHByb2plY3RJZDogcElkLFxuICAgICAgcHJvamVjdE5hbWU6IHBOYW1lLFxuICAgICAgY2xpZW50SWQ6IGNJZCxcbiAgICAgIGNsaWVudE5hbWU6IGNOYW1lLFxuICAgICAgdGFza0lkOiB0SWQsXG4gICAgICB0YXNrTmFtZTogdE5hbWUsXG4gICAgfSkgPz8geyB0YXNrOiBudWxsLCBwcm9qZWN0OiBudWxsLCBjbGllbnQ6IG51bGwsIGNoaXBzUHJvamVjdDogbnVsbCB9XG5cbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG5cbiAgICBzZXRUYXNrPy4obWlncmF0aW9uUGF0Y2gudGFzaylcbiAgICBzZXRQcm9qZWN0KG1pZ3JhdGlvblBhdGNoLnByb2plY3QpXG4gICAgc2V0Q2xpZW50Py4obWlncmF0aW9uUGF0Y2guY2xpZW50KVxuICAgIHNldENoaXBzUHJvamVjdChtaWdyYXRpb25QYXRjaC5jaGlwc1Byb2plY3QpXG5cbiAgICBzZWxlY3RBZ2VudChvcmNoZXN0cmF0b3IpXG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW3Nlc3Npb25NZXRhLCBhZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSlcblxuICBjb25zdCB7IHNob3dOZXdDaGF0LCBpc015QWdlbnRzU2VjdGlvbiwgaXNNeVNraWxsc1NlY3Rpb24sIGlzTWFpYWtlckNyZWF0b3JIb21lIH0gPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVDaGF0TW9kYWxTZWN0aW9uRmxhZ3MoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkKSxcbiAgICBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkXVxuICApXG5cbiAgY29uc3QgaGFzQ2hhdEFjY2VzcyA9IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpXG4gIGNvbnN0IG1haW5Db250ZW50VmlldyA9IHJlc29sdmVDaGF0TW9kYWxNYWluQ29udGVudFZpZXcoaGFzRXJyb3IsIGhhc0NoYXRBY2Nlc3MpXG4gIGNvbnN0IHNob3dNb2RhbEZvb3RlciA9IHNob3VsZFNob3dDaGF0TW9kYWxGb290ZXIoe1xuICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgICBob21lT3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgY2hhdE9wdGlvbjogb3B0aW9ucy5jaGF0LFxuICAgIGFnZW50c0NvdW50OiBhZ2VudHMuZGF0YS5sZW5ndGgsXG4gICAgaXNNYWlha2VyQ3JlYXRvckhvbWUsXG4gICAgaGFzRXJyb3IsXG4gICAgbG9hZGluZyxcbiAgICBoYXNBY2Nlc3M6IGhhc0NoYXRBY2Nlc3MsXG4gIH0pXG4gIGNvbnN0IHNob3dTaWRlYmFyID0gc2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIoaGFzQ2hhdEFjY2VzcywgaXNGbG9hdGluZylcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICB9KVxuICBjb25zdCB7IGlzQ2hhdFZpZXcsIGlzSGVhZGVySG9tZVN0ZXAyLCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiB9ID0gcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyh7XG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGhvbWVPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICBjaGF0T3B0aW9uOiBvcHRpb25zLmNoYXQsXG4gICAgaGFzUGlubmVkQ29udGV4dCxcbiAgICBzZWN0aW9uLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgfSlcbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPSBzaG91bGRTaG93T3JjaGVzdHJhdG9yQmFja0J1dHRvbih7XG4gICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIGlzQ2hhdFZpZXcsXG4gICAgaXNIZWFkZXJIb21lU3RlcDIsXG4gICAgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIsXG4gIH0pXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNhbk9wZW5NYWlhTWFya2V0cGxhY2UoQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ215QWdlbnRzJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMubXlBZ2VudHMsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICBhZ2VudElkOiBudWxsLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyh1c2VySGFzU2tpbGxzQWNjZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteVNraWxscycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15U2tpbGxzLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBoYW5kbGVHZXRTa2lsbHMsIHVzZXIuaWQsIHVzZXJIYXNTa2lsbHNBY2Nlc3NdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbWFpYWtlcicsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICBhZ2VudElkOiBtYWlha2VyQWdlbnQuaWQsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB1c2VyLmlkXSlcblxuICBjb25zdCBsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc25hcHNob3Q6IE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgYWdlbnRUb1NlbGVjdDogQWdlbnQgfCB1bmRlZmluZWRcbiAgICAgIGlmIChzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudElkLCBzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWdlbnRUb1NlbGVjdCA9IGF3YWl0IGZldGNoQWdlbnREZXRhaWwoc25hcHNob3QuYWdlbnRJZCBhcyBzdHJpbmcpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhzaG91bGRQYXNzQWdlbnRUb0dldEFnZW50c09uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpID8gYWdlbnRUb1NlbGVjdCA6IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUoYWdlbnRUb1NlbGVjdCwgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlKSkge1xuICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFRvU2VsZWN0IGFzIEFnZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUdldEFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBhcHBseVNlc3Npb25SZXN0b3JlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNuYXBzaG90OiBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QpID0+IHtcbiAgICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICAgIGNvbnN0IGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdCA9IHJlc29sdmVTbmFwc2hvdENoaXBzUHJvamVjdChzbmFwc2hvdC5ob3N0Q29udGV4dClcbiAgICAgIGlmIChjaGlwc1Byb2plY3RGcm9tU25hcHNob3QpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdClcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdG9yZVJvdXRlID0gcmVzb2x2ZVNlc3Npb25SZXN0b3JlTmF2Um91dGUoc25hcHNob3QpXG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteUFnZW50cycpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlT3Blbk1hcmtldHBsYWNlKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteVNraWxscycpIHtcbiAgICAgICAgaGFuZGxlT3BlblNraWxscygpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdG9yZVJvdXRlID09PSAnbWFpYWtlcicpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlR29Ub01haWFrZXIoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgICAgc2V0SW5pdGlhbENoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQgPz8gbnVsbClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKHNuYXBzaG90LmFjdGl2ZUNoYXRJZCA/PyBudWxsKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ3NhdmVkT3B0aW9uJyAmJiBzbmFwc2hvdC5jdXJyZW50T3B0aW9uKSB7XG4gICAgICAgIHNldEN1cnJlbnRPcHRpb24oc25hcHNob3QuY3VycmVudE9wdGlvbiBhcyBvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICB9LFxuICAgIFtcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgaGFuZGxlR29Ub01haWFrZXIsXG4gICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gICAgICBoYW5kbGVPcGVuU2tpbGxzLFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUsXG4gICAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uLFxuICAgIF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmICghc25hcHNob3QgfHwgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICBjb25zdCBydW5SZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgICAgICBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYXdhaXQgYXBwbHlTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzUmVzdG9yaW5nU2Vzc2lvbihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBydW5SZXN0b3JlKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICB9LCBbYXBwbHlTZXNzaW9uUmVzdG9yZSwgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlLCBzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgcmVtb3ZlQWdlbnQoYWdlbnRJZClcbiAgICAgIGlmIChzaG91bGRSZXNlbGVjdEFnZW50QWZ0ZXJEZWxldGUoYWdlbnQ/LmlkLCBhZ2VudElkKSkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGFnZW50SWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQ/LmlkLCByZW1vdmVBZ2VudCwgc2VsZWN0Rmlyc3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IG1vZGFsUGFuZWwgPSAoXG4gICAgPD5cbiAgICAgIHtzaG93U2lkZWJhciA/IChcbiAgICAgICAgPFNpZGViYXJcbiAgICAgICAgICBvbkdvVG9DaGF0PXtnb1RvQ2hhdH1cbiAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRTaWRlYmFySGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgaGFuZGxlR29Ub0hvbWU9e2hhbmRsZUdvSG9tZX1cbiAgICAgICAgICBoYW5kbGVTdGFydE5ld0NoYXQ9e2hhbmRsZVN0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2U9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICBzaG93TmV3Q2hhdD17c2hvd05ld0NoYXR9XG4gICAgICAgICAgcmVmZXRjaENoYXRzPXtyZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzPXtzZXRSZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFzRXJyb3I9e3NpZGViYXJIYXNFcnJvcn1cbiAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgICAgaGFuZGxlT3BlblNraWxscz17aGFuZGxlT3BlblNraWxsc31cbiAgICAgICAgICBvbk9wZW5NYWlha2VyQ3JlYXRvcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj17ISFsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICBpbml0aWFsT3Blbj17c2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5zaWRlYmFyT3BlbiA/PyBmYWxzZX1cbiAgICAgICAgICBvbk9wZW5DaGFuZ2U9e2hhbmRsZVNpZGViYXJPcGVuQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfT5cbiAgICAgICAgPENoYXRBSU1vZGFsSGVhZGVyXG4gICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICBvbkxheW91dE1vZGVDaGFuZ2U9e2hhbmRsZUxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGRyYWdnYWJsZT17aXNGbG9hdGluZ31cbiAgICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICAgIG9uRHJhZ01vdmU9e2hhbmRsZURyYWdNb3ZlfVxuICAgICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgICBoYW5kbGVNaW5pbWl6ZT17aGFuZGxlTWluaW1pemV9XG4gICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICBoYXNFcnJvcj17ISFhZ2VudEVycm9yfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgbG9hZGluZ01vcmU9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2FnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICBoYW5kbGVSZXNldENoYXQ9e2hhbmRsZVJlc2V0Q2hhdH1cbiAgICAgICAgICBvbkFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgIGxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICBzb3J0QWdlbnRzTGlzdD17c29ydEFnZW50c0xpc3R9XG4gICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb249e2lzTXlBZ2VudHNTZWN0aW9ufVxuICAgICAgICAgIGlzTXlTa2lsbHNTZWN0aW9uPXtpc015U2tpbGxzU2VjdGlvbn1cbiAgICAgICAgICBpc01haWFrZXJTZWN0aW9uPXtpc01haWFrZXJDcmVhdG9ySG9tZX1cbiAgICAgICAgICBzaG93QmFja0J1dHRvbj17c2hvd0JhY2tCdXR0b259XG4gICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxuICAgICAgICAvPlxuICAgICAgICB7bWFpbkNvbnRlbnRWaWV3ID09PSAnZXJyb3InID8gKFxuICAgICAgICAgIDxNQUlBRXJyb3IgLz5cbiAgICAgICAgKSA6IG1haW5Db250ZW50VmlldyA9PT0gJ2NoYXQnID8gKFxuICAgICAgICAgIDxDaGF0QUlDb250ZW50XG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uPXtjb21wdXRlZEN1cnJlbnRPcHRpb259XG4gICAgICAgICAgICBoYW5kbGVycz17eyAuLi5oYW5kbGVycywgY2hhdDogc3RhcnRDaGF0LCBob21lOiBoYW5kbGVycy5ob21lLCBoYW5kbGVHb0hvbWUgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldEhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgICAgcmVmcz17eyB1c2VySW5pdGlhbE1lc3NhZ2UsIGluaXRpYWxDaGF0SWQgfX1cbiAgICAgICAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeT17aGFuZGxlU2VuZE1lc3NhZ2VSZWFkeX1cbiAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIGZsb2F0aW5nPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICAgIGxvYWRpbmdBZ2VudHM9e2xvYWRpbmd9XG4gICAgICAgICAgICBvbkRlbGV0ZUFnZW50PXtoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50c31cbiAgICAgICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIGhhc01vcmVBZ2VudHM9eyEhYWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgbG9hZGluZ01vcmVBZ2VudHM9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgICAgb25Mb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgICBvbkdvVG9NYWlha2VyPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICAgIG15U2tpbGxzPXtteVNraWxsc31cbiAgICAgICAgICAgIHNoYXJlZFNraWxscz17c2hhcmVkU2tpbGxzfVxuICAgICAgICAgICAgbG9hZGluZ1NraWxscz17bG9hZGluZ1NraWxsc31cbiAgICAgICAgICAgIG9uRGVsZXRlU2tpbGw9e3JlbW92ZVNraWxsfVxuICAgICAgICAgICAgb25TZWFyY2hBZ2VudHM9e3NlYXJjaEN1c3RvbUFnZW50c31cbiAgICAgICAgICAgIHNlYXJjaExvYWRpbmdBZ2VudHM9e3NlYXJjaExvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgICAgaXNSZXN0b3JpbmdTZXNzaW9uPXtpc1Jlc3RvcmluZ1Nlc3Npb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93TW9kYWxGb290ZXIgJiYgKFxuICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2U9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc1dyaXRpbmc9e2lzV3JpdGluZ31cbiAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgIG5ld0NoYXRLZXk9e25ld0NoYXRLZXl9XG4gICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgbGVnYWN5Q29udGV4dFNlc3Npb249e2xlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAgICAgb25Db250aW51ZUluTmV3Q2hhdD17aGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0fVxuICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1Db250ZW50PlxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgY29udGVudFdyYXBwZXIgPSAoXG4gICAgPFNDQ0FJTUNvbnRlbnRXcmFwcGVyIGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9IHJlZj17Y29udGVudFdyYXBwZXJSZWZ9PlxuICAgICAge21vZGFsUGFuZWx9XG4gICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgc2VsZWN0b3IgJiZcbiAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8U0NDQUlNV3JhcHBlclxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgIGRyYWdQb3NpdGlvbj17cmVzb2x2ZWREcmFnUG9zaXRpb259XG4gICAgICAgIGVsZXZhdGVkPXtzaG91bGRVc2VFbGV2YXRlZE1haWFQYW5lbChzZWN0aW9uKX1cbiAgICAgICAgJG1pbmltaXplZD17aGlkZVBhbmVsQ29udGVudH1cbiAgICAgID5cbiAgICAgICAgPFNDQ0FJTU1pbmltaXplZEhpZGUgJGhpZGRlbj17aGlkZVBhbmVsQ29udGVudH0+XG4gICAgICAgICAgPEZsb2F0aW5nUGFuZWxNb3Rpb24gdGlsdD17dGlsdE1vdGlvbn0gZXhwYW5kZWQ9e2V4cGFuZGVkfT5cbiAgICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgICA8L0Zsb2F0aW5nUGFuZWxNb3Rpb24+XG4gICAgICAgIDwvU0NDQUlNTWluaW1pemVkSGlkZT5cbiAgICAgICAge3Nob3dNaW5pbWl6ZWRQaWxsICYmIChcbiAgICAgICAgICA8TWFpYU1pbmltaXplZFBpbGxcbiAgICAgICAgICAgIHNob3dOb3ZlbHR5RG90PXtzaG93TWluaW1pemVkTm92ZWx0eURvdH1cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtoYXNBY3RpdmVTdHJlYW19XG4gICAgICAgICAgICBvblJlc3RvcmU9e2hhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzUGVybWlzc2lvbnMgJiYgKFxuICAgICAgICAgIDxBYm1BZ2VudE1vZGFsXG4gICAgICAgICAgICBhZGRBZ2VudD17YWRkQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudD17dXBkYXRlQWdlbnR9XG4gICAgICAgICAgICByZW1vdmVBZ2VudD17cmVtb3ZlQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudD17c2VsZWN0Rmlyc3RBZ2VudH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1NraWxsc0FjY2VzcyAmJiAoXG4gICAgICAgICAgPEFibVNraWxsTW9kYWwgYWRkU2tpbGw9e2FkZFNraWxsfSB1cGRhdGVTa2lsbEluTGlzdD17dXBkYXRlU2tpbGxJbkxpc3R9IHJlbW92ZVNraWxsPXtyZW1vdmVTa2lsbH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNTa2lsbHNBY2Nlc3MgJiYgPEFibVNraWxsR2VuZXJhdGVNb2RhbCAvPn1cbiAgICAgICAgPFNuYWNrYmFyIC8+XG4gICAgICA8L1NDQ0FJTVdyYXBwZXI+LFxuICAgICAgc2VsZWN0b3JcbiAgICApXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUNFQSxXQUFXLEVBQ1hDLE9BQU8sRUFDUEMsUUFBUSxFQUNSQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsZUFBZSxRQUVWLE9BQU87QUFDZCxPQUFPQyxRQUFRLE1BQU0sV0FBVztBQUNoQyxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FB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
|
|
1523
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsIkFibVNraWxsR2VuZXJhdGVNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNTWluaW1pemVkSGlkZSIsIlNDQ0FJTVdyYXBwZXIiLCJNYWlhTWluaW1pemVkUGlsbCIsInVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90IiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCIsInVzZUZhcXNTdG9yZSIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFkTGFzdEFjdGl2ZUNoYXRJZCIsIndyaXRlTGFzdEFjdGl2ZUNoYXRJZCIsImNsZWFyTWFpYVBhbmVsU2Vzc2lvbiIsInBhdGNoTWFpYVBhbmVsU2Vzc2lvbiIsInJlYWRNYWlhUGFuZWxTZXNzaW9uIiwid3JpdGVNYWlhUGFuZWxTZXNzaW9uIiwidXNlU2Vzc2lvbnNTdG9yZSIsImZldGNoTWFpYSIsImZldGNoQWdlbnREZXRhaWwiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5UIiwiY2xhbXBGbG9hdGluZ1BhbmVsUG9zaXRpb24iLCJoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhIiwiaGFzQmFubmVyRmFxVGl0bGUiLCJpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJyZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUluaXRpYWxDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUxlZ2FjeUNvbnRleHRTZXNzaW9uIiwicmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbCIsInNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSIsImJ1aWxkSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQiLCJidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCIsImRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0IiwiZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UiLCJyZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbiIsInJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkIiwicmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nIiwicmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQiLCJyZXNvbHZlTmV4dERyYWdQb3NpdGlvbiIsInJlc29sdmVVc2VySGFzQWdlbnRNYW5hZ2VtZW50UGVybWlzc2lvbnMiLCJzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0Iiwic2hvdWxkQmFja1N0YXJ0TmV3Q2hhdFByZXNlcnZpbmdDb250ZXh0Iiwic2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldCIsInNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwicmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQiLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzIiwic2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24iLCJzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQiLCJzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0Iiwic2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSIsInNob3VsZENsZWFyT3JjaGVzdHJhdG9yR2xvYmFsQ29udGV4dE9uR29Ib21lIiwic2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyIiwic2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCIsImNhbk9wZW5NYWlhTWFya2V0cGxhY2UiLCJzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQiLCJidWlsZExlZ2FjeUNvbnRleHRBZ2VudCIsImJ1aWxkTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoIiwiZmluZE9yY2hlc3RyYXRvckFnZW50Iiwic2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50Iiwic2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQiLCJzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZSIsInJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSIsInNob3VsZEF0dGVtcHRJbml0aWFsQWdlbnRzRmV0Y2giLCJmaW5kQWdlbnRGb3JDaGF0SXRlbSIsInNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRSZXNldENoYXRTdGF0ZU9uR29Ib21lIiwic2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCIsInJlc29sdmVPcGVuTmV3Q2hhdFdpdGhBZ2VudENvbnRleHQiLCJjYW5Db250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJyZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSIsInNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZSIsInNob3VsZEZldGNoQWdlbnREZXRhaWxPblNlc3Npb25SZXN0b3JlIiwic2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUiLCJzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUiLCJyZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QiLCJyZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzIiwic2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIiLCJyZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3Iiwic2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlciIsInNob3VsZFVzZUVsZXZhdGVkTWFpYVBhbmVsIiwic2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlIiwic2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSIsInNob3VsZFN0YXJ0RmxvYXRpbmdQYW5lbERyYWciLCJpc0FjdGl2ZUZsb2F0aW5nRHJhZ1BvaW50ZXIiLCJzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyIsInNob3VsZFVzZURyYWdDbGFtcEZhbGxiYWNrIiwicmVzb2x2ZUxheW91dERyYWdQb3NpdGlvblVwZGF0ZSIsInJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCIsImJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCIsInNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJJRF9NT0RBTF9DSEFUX0FHRU5UIiwiQ2hhdEFJTW9kYWwiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIyIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNSIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjYiLCJ1c2VyIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJpMThuIiwiYW1wbGl0dWRFdmVudCIsInNhdmVkU2Vzc2lvbk9uTW91bnRSZWYiLCJpZCIsInNob3VsZFJlc3RvcmVFeHBhbmRlZCIsImN1cnJlbnQiLCJwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYiLCJzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc1Jlc3RvcmluZ1Nlc3Npb24iLCJzZXRJc1Jlc3RvcmluZ1Nlc3Npb24iLCJzaWRlYmFyT3BlblJlZiIsInNpZGViYXJPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc01pbmltaXplZCIsInNldElzTWluaW1pemVkIiwic2V0Q2hhdFZpZXdWaXNpYmxlIiwic3RhdGUiLCJ1bnJlYWRDb3VudCIsInNob3dNaW5pbWl6ZWROb3ZlbHR5RG90IiwiYWN0aXZlQ2hhdElkIiwiaGFzQWN0aXZlU3RyZWFtIiwibWV0YSIsImdvVG9DaGF0UmVmIiwiZ29Ib21lUmVmIiwiaGFuZGxlTWluaW1pemUiLCJhaUNoYXRNaW5pbWl6ZSIsImlzRXhwYW5kZWQiLCJmb2N1c0NoYXRJbnB1dCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIl91c2VTdGF0ZTUiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGU2IiwidXNlckluaXRpYWxNZXNzYWdlIiwic2V0VXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpbml0aWFsQ2hhdElkIiwic2V0SW5pdGlhbENoYXRJZCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwibmV3Q2hhdEtleSIsInNldE5ld0NoYXRLZXkiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZXNzaW9uTWV0YSIsInNldFNlc3Npb25NZXRhIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInNlbmRNZXNzYWdlRnVuY3Rpb24iLCJzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsInN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImlzU3RyZWFtaW5nIiwic2V0SXNTdHJlYW1pbmciLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlMTkiLCJfdXNlU3RhdGUyMCIsInJlZmV0Y2hDaGF0cyIsInNldFJlZmV0Y2hDaGF0cyIsIl91c2VTdGF0ZTIxIiwic2F2ZWQiLCJhZ2VudHNOYXZBY3RpdmUiLCJjdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMjIiLCJzZXRDdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMjMiLCJfdXNlU3RhdGUyNCIsImhhc0Vycm9yIiwic2V0SGFzRXJyb3IiLCJfdXNlU3RhdGUyNSIsIl91c2VTdGF0ZTI2IiwiZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uIiwic2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uIiwicHJldkhhc1Bpbm5lZENvbnRleHRSZWYiLCJoYW5kbGVycyIsIl91c2VTdGF0ZTI3IiwiX3VzZVN0YXRlMjgiLCJzaWRlYmFySGFzRXJyb3IiLCJzZXRTaWRlYmFySGFzRXJyb3IiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiY2xlYXJBZ2VudCIsInNlY3Rpb24iLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0YXNrIiwiY2hpcHNQcm9qZWN0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJob21lIiwiYWdlbnRzIiwibG9hZGluZyIsImxvYWRpbmdNb3JlIiwiYWdlbnRFcnJvciIsImVycm9yIiwiaGFuZGxlR2V0QWdlbnRzIiwibG9hZE1vcmVBZ2VudHMiLCJzZWFyY2hDdXN0b21BZ2VudHMiLCJzZWFyY2hMb2FkaW5nIiwiYWRkQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50IiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNlbGVjdEZpcnN0QWdlbnQiLCJzb3J0QWdlbnRzTGlzdCIsImFnZW50c0RhdGFSZWYiLCJkYXRhIiwiX3VzZUdldFNraWxscyIsIm15U2tpbGxzIiwic2hhcmVkU2tpbGxzIiwibG9hZGluZ1NraWxscyIsImhhbmRsZUdldFNraWxscyIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiQm9vbGVhbiIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJ1c2VySGFzU2tpbGxzQWNjZXNzIiwiY29tcHV0ZWRDdXJyZW50T3B0aW9uIiwibXVsdGlBZ2VudHNBY2Nlc3MiLCJpc01haWFrZXJBZ2VudFNlbGVjdGVkIiwic2lkZWJhckFnZW50c05hdkFjdGl2ZSIsImFnZW50c0ZldGNoZWRSZWYiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyOSIsIl91c2VTdGF0ZTMwIiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlIiwibW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMzEiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIzIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNCIsImRyYWdQb3NpdGlvbiIsIl91c2VTdGF0ZTMyIiwic2V0RHJhZ1Bvc2l0aW9uIiwiX3VzZUZsb2F0aW5nUGFuZWxEcmFnIiwidGlsdE1vdGlvbiIsInN0YXJ0UG9pbnRlclRyYWNraW5nIiwic2FtcGxlUG9pbnRlck1vdmUiLCJlbmRQb2ludGVyVHJhY2tpbmciLCJkcmFnU3RhdGVSZWYiLCJjbGFtcERyYWdQb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudFdyYXBwZXIiLCJfZ2V0Qm91bmRpbmdDbGllbnRSZWMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInByZXYiLCJwYW5lbFdpZHRoIiwicGFkIiwiaGFuZGxlRHJhZ0VuZCIsImV2ZW50IiwiX2RyYWdTdGF0ZVJlZiRjdXJyZW50IiwicG9pbnRlcklkIiwiYm9keSIsInN0eWxlIiwidXNlclNlbGVjdCIsImN1cnNvciIsInJlY3QiLCJsZWZ0IiwidG9wIiwiaGFuZGxlRHJhZ01vdmUiLCJkcmFnU3RhdGUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm5leHRQb3NpdGlvbiIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmVzb2x2ZWREcmFnUG9zaXRpb24iLCJ2aWV3cG9ydFdpZHRoIiwiY2xhbXAiLCJoYW5kbGVEcmFnU3RhcnQiLCJidXR0b24iLCJ0YXJnZXQiLCJpbml0aWFsUG9zaXRpb24iLCJwb2ludGVyT2Zmc2V0WCIsInBvaW50ZXJPZmZzZXRZIiwiY3VycmVudFRhcmdldCIsInNldFBvaW50ZXJDYXB0dXJlIiwicHJldmVudERlZmF1bHQiLCJhaUNoYXREcmFnZ2FibGUiLCJzdGFydENoYXQiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsImNoYXQiLCJiYW5uZXJGYXFBdXRvU2VudFJlZiIsImJhbm5lckZhcSIsImZhcVRpdGxlIiwiYWxyZWFkeVNlbnQiLCJhZ2VudElkIiwicHJvamVjdElkIiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJlbnRpdHkiLCJnb1RvQ2hhdCIsInNlc3Npb25JZCIsInNlc3Npb25FeHRlcm5hbElkIiwic2V0QWN0aXZlQ2hhdElkIiwiZGV0YWlsIiwic2VsZWN0ZWRBZ2VudCIsImhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlIiwib3BlbiIsInN5bmNQYW5lbFNlc3Npb24iLCJfYWdlbnQkaWQiLCJwYXRjaCIsImhvc3RDb250ZXh0IiwiZW5zdXJlQWdlbnRzTG9hZGVkIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjYWNoZWRBZ2VudHMiLCJsb2FkZWRBZ2VudHMiLCJsb2FkZWRGcm9tRmV0Y2giLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiYWJydXB0IiwibGVuZ3RoIiwic2VudCIsInN0b3AiLCJ0aW1lciIsImNsZWFyVGltZW91dCIsIm9uUGFnZUhpZGUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImNoYXRzIiwibGFzdEFjdGl2ZUNoYXRJZCIsIl9nb1RvQ2hhdFJlZiRjdXJyZW50IiwiY2FsbCIsIl9nb0hvbWVSZWYkY3VycmVudCIsImFpQ2hhdE9wZW4iLCJvcHRpb24iLCJ0aGVuIiwiYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlciIsImVudGl0eVN0YXRlIiwiZ2V0U3RhdGUiLCJjbGVhckZhcXMiLCJjbGVhckdsb2JhbFBpbm5lZENvbnRleHQiLCJuZXh0TGF5b3V0IiwiZmFxIiwiX2FnZW50JGlkMiIsInJlc29sdmVkQWdlbnRJZCIsImhhbmRsZVNlbmRNZXNzYWdlUmVhZHkiLCJzZW5kTWVzc2FnZSIsInN0b3BHZW5lcmF0aW9uIiwic3RyZWFtaW5nIiwid3JpdGluZyIsImhhbmRsZVNlbmRNZXNzYWdlIiwidHlwZSIsInN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwiX2NhbGxlZTIiLCJhZ2VudHNMaXN0IiwiZmlyc3RBZ2VudCIsIl90IiwiX2NvbnRleHQyIiwibXlBZ2VudHMiLCJoYW5kbGVTdGFydE5ld0NoYXQiLCJoYW5kbGVSZXNldENoYXQiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImhhbmRsZUJhY2siLCJ0byIsImFpQ2hhdEJhY2siLCJwaW5uZWQiLCJ0YXNrSWQiLCJjaGlwc1Byb2plY3RJZCIsIndhc1Bpbm5lZCIsIm9uTWVyZ2VDcmVhdGVkQWdlbnQiLCJldnQiLCJfcmVmNCIsIm5leHRBZ2VudCIsIm5hdmlnYXRlSG9tZSIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjUiLCJvcGVuQ2hhdFZpZXciLCJvcGVuSG9tZSIsIm9wZW5Gcm9tSG9zdCIsIl9yZWY2Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJfcmVmNyIsImNvbnRleHRQYXRjaCIsInNob3VsZFNldFRhc2siLCJfY29udGV4dFBhdGNoJHRhc2siLCJhcHBseVNraWxsVXNlRmxvdyIsIl9yZWY4IiwiX2NhbGxlZTQiLCJza2lsbCIsInVzZUZpcnN0QWdlbnQiLCJfY29udGV4dDQiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUiLCJfcmVmOSIsIl9yZWY5JHVzZUZpcnN0QWdlbnQiLCJvblNlc3Npb25NZXRhIiwiX3JlZjAiLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCIsIl9idWlsZExlZ2FjeUNvbnRleHRNaSIsIm9yY2hlc3RyYXRvciIsImFnZW50RW50aXR5IiwicElkIiwicE5hbWUiLCJwcm9qZWN0TmFtZSIsImNJZCIsImNOYW1lIiwiY2xpZW50TmFtZSIsInRJZCIsInROYW1lIiwidGFza05hbWUiLCJtaWdyYXRpb25QYXRjaCIsIl91c2VNZW1vIiwic2hvd05ld0NoYXQiLCJpc015QWdlbnRzU2VjdGlvbiIsImlzTXlTa2lsbHNTZWN0aW9uIiwiaXNNYWlha2VyQ3JlYXRvckhvbWUiLCJoYXNDaGF0QWNjZXNzIiwibWFpbkNvbnRlbnRWaWV3Iiwic2hvd01vZGFsRm9vdGVyIiwiaG9tZU9wdGlvbiIsImNoYXRPcHRpb24iLCJhZ2VudHNDb3VudCIsImhhc0FjY2VzcyIsInNob3dTaWRlYmFyIiwiaGFzUGlubmVkQ29udGV4dCIsIl9yZXNvbHZlT3JjaGVzdHJhdG9ySCIsImlzQ2hhdFZpZXciLCJpc0hlYWRlckhvbWVTdGVwMiIsImlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyIiwic2hvd0JhY2tCdXR0b24iLCJhZ2VudFR5cGUiLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsImhhbmRsZU9wZW5Ta2lsbHMiLCJoYW5kbGVHb1RvTWFpYWtlciIsIl9jYWxsZWU2IiwibWFpYWtlckFnZW50IiwicmVzcG9uc2UiLCJfdDIiLCJfY29udGV4dDYiLCJmaW5kIiwiYSIsInBhdGgiLCJtZXRob2QiLCJqc29uIiwibG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlIiwiX3JlZjExIiwiX2NhbGxlZTciLCJzbmFwc2hvdCIsImFnZW50VG9TZWxlY3QiLCJfdDMiLCJfY29udGV4dDciLCJfeDMiLCJhcHBseVNlc3Npb25SZXN0b3JlIiwiX3JlZjEyIiwiX2NhbGxlZTgiLCJjaGlwc1Byb2plY3RGcm9tU25hcHNob3QiLCJyZXN0b3JlUm91dGUiLCJfc25hcHNob3QkYWN0aXZlQ2hhdEkiLCJfc25hcHNob3QkYWN0aXZlQ2hhdEkyIiwiX2NvbnRleHQ4IiwiX3g0IiwicnVuUmVzdG9yZSIsIl9yZWYxMyIsIl9jYWxsZWU5IiwiX2NvbnRleHQ5IiwiZmluaXNoIiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJtb2RhbFBhbmVsIiwiY2hpbGRyZW4iLCJvbkdvVG9DaGF0Iiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwib25PcGVuTWFpYWtlckNyZWF0b3IiLCJpc0xlZ2FjeUNvbnRleHRTZXNzaW9uIiwiaW5pdGlhbE9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJmbG9hdGluZyIsIm9uTGF5b3V0TW9kZUNoYW5nZSIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnTW92ZSIsIm9uRHJhZ0VuZCIsImhhc01vcmUiLCJoYXNfbW9yZSIsIm9uQWdlbnRVcGRhdGUiLCJpc01haWFrZXJTZWN0aW9uIiwib25CYWNrIiwiX29iamVjdFNwcmVhZCIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJsb2FkaW5nQWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsIm9uTG9hZE1vcmVBZ2VudHMiLCJvbkdvVG9NYWlha2VyIiwib25EZWxldGVTa2lsbCIsIm9uU2VhcmNoQWdlbnRzIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsIiRtaW5pbWl6ZWQiLCIkaGlkZGVuIiwidGlsdCIsInNob3dOb3ZlbHR5RG90Iiwib25SZXN0b3JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGNhbkFjY2Vzc1RvU2tpbGxzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Blcm1pc3Npb25zJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHZXRTa2lsbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZXRTa2lsbHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxNb2RhbCwgU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNTWluaW1pemVkSGlkZSwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgTWFpYU1pbmltaXplZFBpbGwgfSBmcm9tICcuL2NvbXBvbmVudHMvTWFpYU1pbmltaXplZFBpbGwnXG5pbXBvcnQgeyB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90J1xuaW1wb3J0IHtcbiAgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LFxuICBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSxcbiAgcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUsXG4gIHNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSxcbn0gZnJvbSAnLi9sYXlvdXQnXG5pbXBvcnQgeyBGbG9hdGluZ1BhbmVsTW90aW9uLCB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQgfSBmcm9tICcuL2Zsb2F0aW5nUGFuZWxNb3Rpb24nXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEZvb3RlcidcbmltcG9ydCB7IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DbGllbnQnXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvVGFzaydcbmltcG9ydCB7IHVzZUZhcXNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUZhcXNTdG9yZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgdHlwZSB7IENoYXRMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2NoYXRzU3RvcmUudHlwZXMnXG5pbXBvcnQgeyByZWFkTGFzdEFjdGl2ZUNoYXRJZCwgd3JpdGVMYXN0QWN0aXZlQ2hhdElkIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYUxhc3RDaGF0UGVyc2lzdGVuY2UnXG5pbXBvcnQge1xuICBjbGVhck1haWFQYW5lbFNlc3Npb24sXG4gIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbixcbiAgcmVhZE1haWFQYW5lbFNlc3Npb24sXG4gIHR5cGUgTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90LFxuICB3cml0ZU1haWFQYW5lbFNlc3Npb24sXG59IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFQYW5lbFNlc3Npb25QZXJzaXN0ZW5jZSdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5pbXBvcnQge1xuICBjbGFtcEZsb2F0aW5nUGFuZWxQb3NpdGlvbixcbiAgaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YSxcbiAgaGFzQmFubmVyRmFxVGl0bGUsXG4gIGlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kLFxuICByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uLFxuICByZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24sXG4gIHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbixcbiAgcmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUsXG4gIHNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsLFxuICBzaG91bGRTa2lwRmxvYXRpbmdEcmFnVGFyZ2V0LFxuICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSxcbiAgcmVzb2x2ZUhvc3RUYWtlb3ZlckVudGl0eVN0YXRlLFxuICBidWlsZEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0LFxuICBidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCxcbiAgZGlzcGF0Y2hTa2lsbE1lbnRpb25JbnNlcnQsXG4gIGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlLFxuICByZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbixcbiAgcmVzb2x2ZUhvc3RUYWtlb3ZlckFnZW50SWQsXG4gIHJlc29sdmVNYWlhTW9kYWxJMThuTGFuZyxcbiAgcmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQsXG4gIHJlc29sdmVOZXh0RHJhZ1Bvc2l0aW9uLFxuICByZXNvbHZlVXNlckhhc0FnZW50TWFuYWdlbWVudFBlcm1pc3Npb25zLFxuICBzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0LFxuICBzaG91bGRCYWNrU3RhcnROZXdDaGF0UHJlc2VydmluZ0NvbnRleHQsXG4gIHNob3VsZE1hcmtPcmNoZXN0cmF0b3JDb250ZXh0UmVzZXQsXG4gIHNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nLFxuICByZXNvbHZlSGFzUGlubmVkQ29udGV4dCxcbiAgcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyxcbiAgc2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24sXG4gIHNob3VsZENsZWFyQ2xpZW50T25Hb0hvbWVGcm9tQ2hhdCxcbiAgc2hvdWxkQ2xlYXJUYXNrT25Hb0hvbWVGcm9tQ2hhdCxcbiAgc2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSxcbiAgc2hvdWxkQ2xlYXJPcmNoZXN0cmF0b3JHbG9iYWxDb250ZXh0T25Hb0hvbWUsXG4gIHNob3VsZFVzZUFjdGl2ZUNoYXRTZW5kSGFuZGxlcixcbiAgc2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCxcbiAgY2FuT3Blbk1haWFNYXJrZXRwbGFjZSxcbiAgc2hvdWxkTWFya0FnZW50QXNMZWdhY3lDb250ZXh0LFxuICBidWlsZExlZ2FjeUNvbnRleHRBZ2VudCxcbiAgYnVpbGRMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2gsXG4gIGZpbmRPcmNoZXN0cmF0b3JBZ2VudCxcbiAgc2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50LFxuICBzaG91bGRQZXJzaXN0TGFzdEFjdGl2ZUNoYXRJZCxcbiAgc2hvdWxkU3luY1BhbmVsU2Vzc2lvbk9uUGFnZUhpZGUsXG4gIHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSxcbiAgc2hvdWxkQXR0ZW1wdEluaXRpYWxBZ2VudHNGZXRjaCxcbiAgZmluZEFnZW50Rm9yQ2hhdEl0ZW0sXG4gIHNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIsXG4gIHNob3VsZFNlbGVjdEZpcnN0QWdlbnRPbkhvc3RUYWtlb3ZlcixcbiAgc2hvdWxkUmVzZXRDaGF0U3RhdGVPbkdvSG9tZSxcbiAgc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCxcbiAgcmVzb2x2ZU9wZW5OZXdDaGF0V2l0aEFnZW50Q29udGV4dCxcbiAgY2FuQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0LFxuICByZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSxcbiAgc2hvdWxkU2tpcEFnZW50c0xvYWRPblNlc3Npb25SZXN0b3JlLFxuICBzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZSxcbiAgc2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUsXG4gIHNob3VsZFNlbGVjdEZldGNoZWRBZ2VudEFmdGVyUmVzdG9yZSxcbiAgcmVzb2x2ZVNuYXBzaG90Q2hpcHNQcm9qZWN0LFxuICByZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzLFxuICBzaG91bGRSZW5kZXJDaGF0U2lkZWJhcixcbiAgcmVzb2x2ZUNoYXRNb2RhbE1haW5Db250ZW50VmlldyxcbiAgc2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlcixcbiAgc2hvdWxkVXNlRWxldmF0ZWRNYWlhUGFuZWwsXG4gIHNob3VsZFJlc2VsZWN0QWdlbnRBZnRlckRlbGV0ZSxcbiAgc2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSxcbiAgc2hvdWxkU3RhcnRGbG9hdGluZ1BhbmVsRHJhZyxcbiAgaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyLFxuICBzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyxcbiAgc2hvdWxkVXNlRHJhZ0NsYW1wRmFsbGJhY2ssXG4gIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUsXG4gIHJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCxcbiAgYnVpbGRVc2VySW5pdGlhbE1lc3NhZ2VGcm9tU3RhcnRDaGF0LFxuICBzaG91bGRSZXNldFNpZGViYXJFcnJvck9uU3RhcnRDaGF0LFxuICB0eXBlIExlZ2FjeVNlc3Npb25NZXRhLFxufSBmcm9tICcuL0NoYXRBSU1vZGFsLmhlbHBlcnMnXG5cbi8qKiBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcyBhbCBjYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24pLiAqL1xudHlwZSBTZXNzaW9uTWV0YSA9IExlZ2FjeVNlc3Npb25NZXRhICYge1xuICBjaGF0SWQ6IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgdGFza0lkPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBJRF9NT0RBTF9DSEFUX0FHRU5UID0gJ21vZGFscy1wb3J0YWwtbWFpYS1jaGF0LWFnZW50J1xuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYgPSB1c2VSZWY8TWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90IHwgbnVsbD4ocmVhZE1haWFQYW5lbFNlc3Npb24odXNlci5pZCkpXG4gIGNvbnN0IHNob3VsZFJlc3RvcmVFeHBhbmRlZCA9IHNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsKHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudClcbiAgY29uc3QgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmID0gdXNlUmVmPE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCB8IG51bGw+KFxuICAgIHNob3VsZFJlc3RvcmVFeHBhbmRlZCA/IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudCA6IG51bGxcbiAgKVxuICBjb25zdCBzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtpc1Jlc3RvcmluZ1Nlc3Npb24sIHNldElzUmVzdG9yaW5nU2Vzc2lvbl0gPSB1c2VTdGF0ZSgoKSA9PiBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCAhPSBudWxsKVxuICBjb25zdCBzaWRlYmFyT3BlblJlZiA9IHVzZVJlZihzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LnNpZGViYXJPcGVuID8/IGZhbHNlKVxuXG4gIC8vIFRyYXMgbmF2ZWdhciBlbiBlbCBob3N0IChmdWxsIHBhZ2UgcmVsb2FkKSwgcmVzdGF1cmFtb3MgZWwgcGFuZWwgc2kgZXN0YWJhIGFiaWVydG8uXG4gIGNvbnN0IFtpc01pbmltaXplZCwgc2V0SXNNaW5pbWl6ZWRdID0gdXNlU3RhdGUoKCkgPT4gIXNob3VsZFJlc3RvcmVFeHBhbmRlZClcbiAgY29uc3Qgc2V0Q2hhdFZpZXdWaXNpYmxlID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRDaGF0Vmlld1Zpc2libGUpXG4gIGNvbnN0IHVucmVhZENvdW50ID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS51bnJlYWRDb3VudClcbiAgY29uc3Qgc2hvd01pbmltaXplZE5vdmVsdHlEb3QgPSB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdChpc01pbmltaXplZCwgdW5yZWFkQ291bnQpXG4gIGNvbnN0IGFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuYWN0aXZlQ2hhdElkKVxuICAvLyBMb3MgXCIuLi5cIiBkZWwgcGlsbCBzYWxlbiBkZWwgbW90b3IsIG5vIGRlIGlzU3RyZWFtaW5nL2lzV3JpdGluZzogZXNvcyByZWZsZWphblxuICAvLyBsYSBzZXNpw7NuIGFjdGl2YSB5IHF1ZWRhbiBzdGFsZSBjdWFuZG8gdW5hIHJlc3B1ZXN0YSB0ZXJtaW5hIGVuIGJhY2tncm91bmQuXG4gIGNvbnN0IGhhc0FjdGl2ZVN0cmVhbSA9IHVzZVNlc3Npb25zU3RvcmUoc3RhdGUgPT4gaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YShzdGF0ZS5tZXRhKSlcblxuICAvKiogZ29Ub0NoYXQgLyBoYW5kbGVHb0hvbWUgc2UgZGVmaW5lbiBtw6FzIGFiYWpvOyBsb3MgcmVmcyBldml0YW4gZGVwZW5kZXIgZGVsIG9yZGVuIGRlIGRlY2xhcmFjacOzbi4gKi9cbiAgY29uc3QgZ29Ub0NoYXRSZWYgPSB1c2VSZWY8KChjaGF0OiBDaGF0TGlzdEl0ZW0pID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ29Ib21lUmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTW9udGEgY2VycmFkYSBzYWx2byByZXN0YXVyYWNpw7NuIGRlIHNlc2nDs246IHNpIGVsIHBhbmVsIG5vIGVzdMOhIHZpc2libGUsIGxhcyByZXNwdWVzdGFzXG4gIC8vIG51ZXZhcyBxdWVkYW4gY29tbyBubyBsZcOtZGFzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRTZXRDaGF0Vmlld0hpZGRlbk9uTW91bnQocGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB9XG4gIH0sIFtzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIFBlcnNpc3RpbW9zIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSBwYXJhIHBvZGVyIHZvbHZlciBhIGVsbGEgZGVzZGUgZWwgcGlsbCBkZXNwdcOpc1xuICAvLyBkZSBuYXZlZ2FyIG8gcmVmcmVzY2FyLiBFbCB0YWtlb3ZlciBkZXNkZSB1biBob3N0IGxhIGxpbXBpYSAodmEgYWwgSG9tZSkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFBlcnNpc3RMYXN0QWN0aXZlQ2hhdElkKGFjdGl2ZUNoYXRJZCkpIHtcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBhY3RpdmVDaGF0SWQpXG4gICAgfVxuICB9LCBbYWN0aXZlQ2hhdElkLCB1c2VyLmlkXSlcblxuICBjb25zdCBoYW5kbGVNaW5pbWl6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRNaW5pbWl6ZSlcbiAgICBzZXRJc01pbmltaXplZCh0cnVlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB3cml0ZU1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBpc0V4cGFuZGVkOiBmYWxzZSB9KVxuICB9LCBbYW1wbGl0dWRFdmVudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICBjb25zdCBmb2N1c0NoYXRJbnB1dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnB1dC1yZWZvY3VzJykpXG4gICAgfSwgMTAwKVxuICB9LCBbXSlcblxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfT4oe1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgfSlcbiAgY29uc3QgW2luaXRpYWxDaGF0SWQsIHNldEluaXRpYWxDaGF0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW25ld0NoYXRLZXksIHNldE5ld0NoYXRLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Nlc3Npb25NZXRhLCBzZXRTZXNzaW9uTWV0YV0gPSB1c2VTdGF0ZTxTZXNzaW9uTWV0YSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uXSA9IHVzZVN0YXRlPFxuICAgIHwgKChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkKVxuICAgIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlPG9wdGlvbnM+KCgpID0+IHtcbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudFxuICAgIHJldHVybiByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24oc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSwgc2F2ZWQ/LmN1cnJlbnRPcHRpb24sIHVzZXIpXG4gIH0pXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBsYW5nID0gcmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nKGkxOG4ubGFuZ3VhZ2UpXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IGFnZW50c0RhdGFSZWYgPSB1c2VSZWYoYWdlbnRzLmRhdGEpXG4gIGFnZW50c0RhdGFSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhXG5cbiAgY29uc3Qge1xuICAgIG15U2tpbGxzLFxuICAgIHNoYXJlZFNraWxscyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLFxuICAgIGhhbmRsZUdldFNraWxscyxcbiAgICBhZGRTa2lsbCxcbiAgICB1cGRhdGVTa2lsbEluTGlzdCxcbiAgICByZW1vdmVTa2lsbCxcbiAgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID0gcmVzb2x2ZVVzZXJIYXNBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyhcbiAgICB1c2VyPy5wZXJtaXNzaW9ucyxcbiAgICBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKVxuICApXG5cbiAgY29uc3QgdXNlckhhc1NraWxsc0FjY2VzcyA9IGNhbkFjY2Vzc1RvU2tpbGxzKHVzZXIpXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbih7XG4gICAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICAgIGFnZW50LFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgIH0pLFxuICAgIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGFnZW50LCB1c2VyXVxuICApXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmIChzaG91bGRVc2VEcmFnQ2xhbXBGYWxsYmFjayhjb250ZW50V3JhcHBlcikpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgcmV0dXJuIGNsYW1wRmxvYXRpbmdQYW5lbFBvc2l0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQpXG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZENsZWFyRHJhZ1Bvc2l0aW9uT25MYXlvdXRDaGFuZ2UobGF5b3V0TW9kZSkpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT5cbiAgICAgIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUobGF5b3V0TW9kZSwgcHJldiwgY2xhbXBEcmFnUG9zaXRpb24sIHtcbiAgICAgICAgaW5uZXJXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIHBhbmVsV2lkdGg6IGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpLFxuICAgICAgICBwYWQ6IDE2LFxuICAgICAgfSkhXG4gICAgKVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmICghaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoY29udGVudFdyYXBwZXIgJiYgcmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kKGxheW91dE1vZGUsIGNvbnRlbnRXcmFwcGVyKSkge1xuICAgICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgZHJhZ1Bvc2l0aW9uOiB7IHg6IHJlY3QubGVmdCwgeTogcmVjdC50b3AgfSB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZywgbGF5b3V0TW9kZSwgdXNlci5pZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCAhaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZS5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiByZXNvbHZlTmV4dERyYWdQb3NpdGlvbihwcmV2LCBuZXh0UG9zaXRpb24pKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUZsb2F0aW5nUGFuZWxEcmFnUG9zaXRpb24oe1xuICAgICAgICBsYXlvdXRNb2RlLFxuICAgICAgICBkcmFnUG9zaXRpb24sXG4gICAgICAgIHZpZXdwb3J0V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAwLFxuICAgICAgICBwYW5lbFdpZHRoOiBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSxcbiAgICAgICAgY2xhbXA6IGNsYW1wRHJhZ1Bvc2l0aW9uLFxuICAgICAgfSksXG4gICAgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnKGlzRmxvYXRpbmcsIGV2ZW50LmJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQoc2lkZWJhckhhc0Vycm9yKSkge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoXG4gICAgICAgIGJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCh7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBmYXFJZCxcbiAgICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICAgICAgICBtZW50aW9ucyxcbiAgICAgICAgICBmdWFJZCxcbiAgICAgICAgICBzY0lkLFxuICAgICAgICAgIGNvbnRleHREYXRhLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYmFubmVyRmFxID0gYmFubmVyRW50cnlGYXFcbiAgICBpZiAoIWJhbm5lckZhcSB8fCAhaGFzQmFubmVyRmFxVGl0bGUoYmFubmVyRmFxLmZhcVRpdGxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kKHtcbiAgICAgICAgZmFxVGl0bGU6IGJhbm5lckZhcS5mYXFUaXRsZSxcbiAgICAgICAgYWxyZWFkeVNlbnQ6IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgc2VjdGlvbixcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJGYXEuZmFxVGl0bGUsXG4gICAgICBbXSxcbiAgICAgIGJhbm5lckZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgYXMgc3RyaW5nXG5cbiAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2lkZWJhci1zZWxlY3Qtc2Vzc2lvbicsIHsgZGV0YWlsOiB7IHNlc3Npb25JZCB9IH0pKVxuXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKHNlc3Npb25JZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBmaW5kQWdlbnRGb3JDaGF0SXRlbShhZ2VudHMuZGF0YSwgY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIGNvbnN0IGhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIHNpZGViYXJPcGVuUmVmLmN1cnJlbnQgPSBvcGVuXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBzaWRlYmFyT3Blbjogb3BlbiB9KVxuICAgIH0sXG4gICAgW3VzZXIuaWRdXG4gIClcblxuICBjb25zdCBzeW5jUGFuZWxTZXNzaW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHBhdGNoID0gYnVpbGRNYWlhUGFuZWxTZXNzaW9uUGF0Y2goe1xuICAgICAgaXNNaW5pbWl6ZWQsXG4gICAgICBjdXJyZW50T3B0aW9uLFxuICAgICAgYWdlbnRzTmF2QWN0aXZlOiBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICAgICAgYWN0aXZlQ2hhdElkLFxuICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkID8/IG51bGwsXG4gICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgIGxheW91dE1vZGUsXG4gICAgICBkcmFnUG9zaXRpb24sXG4gICAgICBob3N0Q29udGV4dDoge1xuICAgICAgICBzZWN0aW9uLFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHRhc2ssXG4gICAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBpZiAoIXBhdGNoKSByZXR1cm5cbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgcGF0Y2gpXG4gIH0sIFtcbiAgICBhY3RpdmVDaGF0SWQsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBkcmFnUG9zaXRpb24sXG4gICAgaXNNaW5pbWl6ZWQsXG4gICAgbGF5b3V0TW9kZSxcbiAgICBwcm9qZWN0LFxuICAgIHNlY3Rpb24sXG4gICAgc2lkZWJhckFnZW50c05hdkFjdGl2ZSxcbiAgICB0YXNrLFxuICAgIHVzZXIuaWQsXG4gIF0pXG5cbiAgLyoqIExvcyBhZ2VudGVzIHNlIHBpZGVuIHJlY2nDqW4gYWwgYWJyaXIgZWwgcGFuZWw6IGVuIG1vZG8gcGlsbCBubyBoYWNlIGZhbHRhIG5pbmd1bmEgcmVxdWVzdC4gKi9cbiAgY29uc3QgZW5zdXJlQWdlbnRzTG9hZGVkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8QWdlbnRbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZShhZ2VudHNEYXRhUmVmLmN1cnJlbnQpXG4gICAgaWYgKGNhY2hlZEFnZW50cykge1xuICAgICAgcmV0dXJuIGNhY2hlZEFnZW50c1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBdHRlbXB0SW5pdGlhbEFnZW50c0ZldGNoKGFnZW50c0RhdGFSZWYuY3VycmVudC5sZW5ndGgsIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IGxvYWRlZEFnZW50cyA9IGF3YWl0IGhhbmRsZUdldEFnZW50cygpXG4gICAgICBjb25zdCBsb2FkZWRGcm9tRmV0Y2ggPSByZXNvbHZlQ2FjaGVkQWdlbnRzSWZBdmFpbGFibGUobG9hZGVkQWdlbnRzKVxuICAgICAgaWYgKGxvYWRlZEZyb21GZXRjaCkge1xuICAgICAgICByZXR1cm4gbG9hZGVkRnJvbUZldGNoXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFnZW50c0RhdGFSZWYuY3VycmVudFxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc3luY1BhbmVsU2Vzc2lvbigpLCAxNTApXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpXG4gIH0sIFtpc01pbmltaXplZCwgc3luY1BhbmVsU2Vzc2lvbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblBhZ2VIaWRlID0gKCkgPT4ge1xuICAgICAgaWYgKHNob3VsZFN5bmNQYW5lbFNlc3Npb25PblBhZ2VIaWRlKGlzTWluaW1pemVkKSkge1xuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25QYWdlSGlkZSlcbiAgfSwgW2lzTWluaW1pemVkLCBzeW5jUGFuZWxTZXNzaW9uXSlcblxuICBjb25zdCBoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBQcmlvcmlkYWQgYWwgcmVhYnJpcjogcHJpbWVyIGNoYXQgc2luIGxlZXIg4oaSIMO6bHRpbWEgY29udmVyc2FjacOzbiBhYmllcnRhIOKGkiBIb21lLlxuICAgIGNvbnN0IHsgY2hhdHMgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgY29uc3QgbGFzdEFjdGl2ZUNoYXRJZCA9IHJlYWRMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQpXG4gICAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQoY2hhdHMsIGxhc3RBY3RpdmVDaGF0SWQpXG5cbiAgICAvLyBOYXZlZ2FyIGFudGVzIGRlIGV4cGFuZGlyOiBzaSBlc3BlcmFtb3MgYWdlbnRlcywgZWwgcGFuZWwgbW9udGEgY29uIGxhIHNlc2nDs24gdmllamEgeSBlbCBzaWRlYmFyIHF1ZWRhIGRlc2Zhc2Fkby5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBnb1RvQ2hhdFJlZi5jdXJyZW50Py4odGFyZ2V0KVxuICAgIH0gZWxzZSB7XG4gICAgICBnb0hvbWVSZWYuY3VycmVudD8uKClcbiAgICB9XG5cbiAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuLCB7IG9wdGlvbjogJ21pbmltaXplJyB9KVxuXG4gICAgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgIC50aGVuKGxvYWRlZEFnZW50cyA9PiB7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEFnZW50ID0gZmluZEFnZW50Rm9yQ2hhdEl0ZW0obG9hZGVkQWdlbnRzLCB0YXJnZXQuYWdlbnRJZClcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRBZ2VudCkge1xuICAgICAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gIH0sIFthbXBsaXR1ZEV2ZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIGZvY3VzQ2hhdElucHV0LCBzZWxlY3RBZ2VudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICAvKipcbiAgICogVG9tYSBjb250cm9sIGRlc2RlIHVuIGhvc3QgKGhlYWRlciwgcHJveWVjdG8sIGNsaWVudGXigKYpOiBhYnJlIGVsIHBhbmVsLCBkZXNjYXJ0YSBsYVxuICAgKiBjb252ZXJzYWNpw7NuIGFiaWVydGEgeSBhcGxpY2EgZWwgY29udGV4dG8gZGVsIGhvc3QuIE5PIHZ1ZWx2ZSBhIGxhIMO6bHRpbWEgY29udmVyc2FjacOzblxuICAgKiDigJQgZXNvIHPDs2xvIGxvIGhhY2UgZWwgcGlsbCAoYGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkYCkuXG4gICAqL1xuICBjb25zdCBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGRldGFpbDogTWFpYUhvc3RPcGVuRGV0YWlsKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlTdGF0ZSA9IHJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZShkZXRhaWwpXG5cbiAgICAgIGNsZWFyTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKVxuICAgICAgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRJc1Jlc3RvcmluZ1Nlc3Npb24oZmFsc2UpXG4gICAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgICAgd3JpdGVMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQsIG51bGwpXG5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKGZhbHNlKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQobnVsbClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuXG4gICAgICBzZXRQcm9qZWN0Py4oZW50aXR5U3RhdGUucHJvamVjdClcbiAgICAgIGlmIChzaG91bGRBcHBseUNsaWVudE9uSG9zdFRha2VvdmVyKGVudGl0eVN0YXRlLmNsaWVudCkpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4oZW50aXR5U3RhdGUuY2xpZW50KVxuICAgICAgfVxuICAgICAgc2V0VGFzaz8uKGVudGl0eVN0YXRlLnRhc2spXG5cbiAgICAgIGlmIChlbnRpdHlTdGF0ZS5jbGVhckdsb2JhbFBpbm5lZENvbnRleHQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIGNsZWFyQWdlbnQoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TGF5b3V0ID0gcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUoe1xuICAgICAgICBzZWN0aW9uOiBkZXRhaWwuc2VjdGlvbiBhcyBTZWN0aW9uLFxuICAgICAgICBiYW5uZXJFbnRyeUZhcTogZGV0YWlsLmZhcSxcbiAgICAgIH0pXG4gICAgICBzZXRMYXlvdXRNb2RlKG5leHRMYXlvdXQpXG4gICAgICBzZXREcmFnUG9zaXRpb24obnVsbClcblxuICAgICAgY29uc3QgaG9zdENvbnRleHQgPSBidWlsZEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0KGRldGFpbClcblxuICAgICAgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQWdlbnRJZCA9IHJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkKFxuICAgICAgICAgICAgZW50aXR5U3RhdGUuY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0LFxuICAgICAgICAgICAgYWdlbnRzRGF0YVJlZi5jdXJyZW50LFxuICAgICAgICAgICAgYWdlbnQ/LmlkID8/IG51bGxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHNob3VsZFNlbGVjdEZpcnN0QWdlbnRPbkhvc3RUYWtlb3ZlcihlbnRpdHlTdGF0ZS5jbGVhckdsb2JhbFBpbm5lZENvbnRleHQsIGFnZW50c0RhdGFSZWYuY3VycmVudFswXSkpIHtcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50c0RhdGFSZWYuY3VycmVudFswXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgICAgICAgaXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICAgICAgICAgIGFnZW50c05hdkFjdGl2ZTogbnVsbCxcbiAgICAgICAgICAgIGFjdGl2ZUNoYXRJZDogbnVsbCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCxcbiAgICAgICAgICAgIHNpZGViYXJPcGVuOiBzaWRlYmFyT3BlblJlZi5jdXJyZW50LFxuICAgICAgICAgICAgZHJhZ1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgICAgaG9zdENvbnRleHQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgICB9LFxuICAgIFtcbiAgICAgIGFnZW50Py5pZCxcbiAgICAgIGNsZWFyQWdlbnQsXG4gICAgICBlbnN1cmVBZ2VudHNMb2FkZWQsXG4gICAgICBmb2N1c0NoYXRJbnB1dCxcbiAgICAgIHNlbGVjdEFnZW50LFxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlLFxuICAgICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgICAgc2V0Q2xpZW50LFxuICAgICAgc2V0UHJvamVjdCxcbiAgICAgIHNldFRhc2ssXG4gICAgICB1c2VyLmlkLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlUmVhZHkgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRVc2VBY3RpdmVDaGF0U2VuZEhhbmRsZXIoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQsIEJvb2xlYW4oc2VuZE1lc3NhZ2VGdW5jdGlvbikpKSB7XG4gICAgICAgIHNlbmRNZXNzYWdlRnVuY3Rpb24/LihtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHN0YXJ0Q2hhdCwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBoYW5kbGVHb0hvbWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gU2kgZXN0YW1vcyBlbiB1bmEgY29udmVyc2FjacOzbiB5IHZhbW9zIGEgaG9tZSwgcmVzZXRlYXIgaW5pdGlhbENoYXRJZCB5IGluY3JlbWVudGFyIG5ld0NoYXRLZXlcbiAgICBpZiAoc2hvdWxkUmVzZXRDaGF0U3RhdGVPbkdvSG9tZShjdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQpKSB7XG4gICAgICAvLyBObyBjb3J0YW1vcyBsYSBnZW5lcmFjacOzbjogbGEgc2VzacOzbiBzaWd1ZSByZXNwb25kaWVuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGlmIChzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQoYWdlbnQ/LmVudGl0eSkpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0KHNlY3Rpb24pKSB7XG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZShhZ2VudCwgYWdlbnRzLmRhdGEubGVuZ3RoKSkge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbMF0pXG4gICAgfVxuICAgIGlmIChzaG91bGRDbGVhck9yY2hlc3RyYXRvckdsb2JhbENvbnRleHRPbkdvSG9tZShzZWN0aW9uLCBhZ2VudD8udHlwZSkpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgfSwgW1xuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBvcHRpb25zLmNoYXQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgYWdlbnQsXG4gICAgYWdlbnRzLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBzZWN0aW9uLFxuICBdKVxuXG4gIGdvSG9tZVJlZi5jdXJyZW50ID0gaGFuZGxlR29Ib21lXG5cbiAgY29uc3Qgc3RhcnROZXdDaGF0RnJvbUNhdGFsb2cgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYWdlbnRzTGlzdCA9IHNob3VsZFByZWZldGNoQWdlbnRzRm9yQ2F0YWxvZ05ld0NoYXQoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLm15QWdlbnRzLCBvcHRpb25zLm15U2tpbGxzKVxuICAgICAgPyBhd2FpdCBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuICAgICAgOiBhZ2VudHMuZGF0YVxuICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhZ2VudHNMaXN0WzBdXG5cbiAgICBpZiAoc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudChmaXJzdEFnZW50KSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2VsZWN0QWdlbnQoZmlyc3RBZ2VudClcbiAgICB9XG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gIH0sIFtcbiAgICBhZ2VudHMuZGF0YSxcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgZW5zdXJlQWdlbnRzTG9hZGVkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldFRhc2ssXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0TmV3Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvdWxkU3RhcnROZXdDaGF0RnJvbUNhdGFsb2coY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkKSkge1xuICAgICAgc3RhcnROZXdDaGF0RnJvbUNhdGFsb2coKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBoYW5kbGVHb0hvbWUsIGlzTWFpYWtlckFnZW50U2VsZWN0ZWQsIHN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIiBkZWwgaGVhZGVyIChzb2xvIG9yY2hlc3RyYXRvcik6XG4gIC8vIC0gRGVzZGUgZWwgY2hhdCAoaGVhZGVyIG8gcHJvamVjdC9jbGllbnQvdGFzayk6IGluaWNpYSB1bmEgY29udmVyc2FjacOzbiBudWV2YSBjb25zZXJ2YW5kbyBlbFxuICAvLyAgIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgaG9tZSAocGFzbyAyIGNvbiBGQVFzL0ZVQXMpLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvKTogbGltcGlhIGVsIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgcGFzbyAxXG4gIC8vICAgKHNlbGVjdG9yIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsXG4gIC8vICAgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikuXG4gIGNvbnN0IGhhbmRsZUJhY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdG8gPSByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uKHNlY3Rpb24sIGFnZW50Py50eXBlLCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRCYWNrLCB7IHRvIH0pXG5cbiAgICAvLyBEZXNkZSBlbCBjaGF0IOKGkiBudWV2YSBjb252ZXJzYWNpw7NuIFNJTiBib3JyYXIgZWwgY29udGV4dG8gcGluZWFkbywgdm9sdmllbmRvIGFsIGhvbWUuXG4gICAgaWYgKHNob3VsZEJhY2tTdGFydE5ld0NoYXRQcmVzZXJ2aW5nQ29udGV4dChjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCkpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEhvbWUgcGFzbyAyIChjb250ZXh0byBwaW5lYWRvKSDihpIgbGltcGlhciBlbCBjb250ZXh0byB5IHZvbHZlciBhbCBwYXNvIDEgKGNvbnRleHRvcyByZWNpZW50ZXMpLlxuICAgIGlmIChzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0KGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5ob21lLCBzZWN0aW9uLCBkaWRSZXNldENvbnRleHRJblNlY3Rpb24pKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICB9XG4gIH0sIFtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudD8udHlwZSxcbiAgICBhbXBsaXR1ZEV2ZW50LFxuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBkaWRSZXNldENvbnRleHRJblNlY3Rpb24sXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIF0pXG5cbiAgLy8gRGV0ZWN0YSBlbCByZWluaWNpbyBkZSBjb250ZXh0byBlbiBwcm9qZWN0L2NsaWVudC90YXNrOiBjb250ZXh0byBwaW5lYWRvIOKGkiB2YWPDrW8gY29uIGVsXG4gIC8vIG9yY2hlc3RyYXRvciAocC4gZWouIGFsIHJlc2VsZWNjaW9uYXIgTUFJQSBlbiBlbCBsaXN0YWRvKS4gU29sbyBsYSB0cmFuc2ljacOzbiBjdWVudGEsIGFzw60gdW5hXG4gIC8vIGFwZXJ0dXJhIGZyZXNjYSAoY29udGV4dG8gcGluZWFkbyBkZXNkZSBsYSBzZWNjacOzbikgbm8gbG8gYWN0aXZhLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBpbm5lZCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICAgIHRhc2tJZDogdGFzaz8uaWQsXG4gICAgICBjaGlwc1Byb2plY3RJZDogY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsXG4gICAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQsXG4gICAgfSlcbiAgICBjb25zdCB3YXNQaW5uZWQgPSBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50XG4gICAgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudCA9IHBpbm5lZFxuICAgIGlmIChzaG91bGRNYXJrT3JjaGVzdHJhdG9yQ29udGV4dFJlc2V0KHNlY3Rpb24sIGFnZW50Py50eXBlLCB3YXNQaW5uZWQsIHBpbm5lZCkpIHtcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbih0cnVlKVxuICAgIH1cbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgY2xpZW50Py5pZCwgcHJvamVjdD8uaWQsIHNlY3Rpb24sIGFnZW50Py50eXBlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTWVyZ2VDcmVhdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmIChuZXh0QWdlbnQ/LmlkKSB7XG4gICAgICAgIGFkZEFnZW50KG5leHRBZ2VudCwgeyBuYXZpZ2F0ZUhvbWU6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFthZGRBZ2VudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblN5bmNFZGl0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFuZXh0QWdlbnQ/LmlkKSByZXR1cm5cbiAgICAgIHVwZGF0ZUFnZW50KG5leHRBZ2VudClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IG5leHRBZ2VudC5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbdXBkYXRlQWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudD8uaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkNoYXRWaWV3ID0gKCkgPT4ge1xuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuY2hhdClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEVsIMOtY29ubyBkZSBNQUlBIGRlbCBoZWFkZXIgbGxldmEgc2llbXByZSBhbCBIb21lLiBTaSBNQUlBIHlhIGVzdMOhIG1vbnRhZGEgcGVyb1xuICAgKiBtaW5pbWl6YWRhLCBlbCBob3N0IG5vIHB1ZWRlIHJlc29sdmVybG8gY2FtYmlhbmRvIGBpc09wZW5gICh5YSBlc3TDoSBlbiB0cnVlKSxcbiAgICogYXPDrSBxdWUgYXZpc2EgcG9yIGV2ZW50byB5IGFjw6EgcmVzdGF1cmFtb3MgeSB2YW1vcyBhbCBIb21lLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuSG9tZSA9ICgpID0+IHtcbiAgICAgIGFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIoe1xuICAgICAgICBzZWN0aW9uOiAnaGVhZGVyJyxcbiAgICAgICAgZW50aXR5OiB7IHByb2plY3RJZDogbnVsbCwgY2xpZW50SWQ6IG51bGwgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqXG4gICAqIE90cm8gaG9zdCAocHJveWVjdG8sIGNsaWVudGUsIGJhbm5lciwgaGVhZGVy4oCmKSBwaWRlIGFicmlyIE1BSUEgbWllbnRyYXMgeWEgaGF5IHVuYVxuICAgKiBpbnN0YW5jaWEgbW9udGFkYS4gRXhwYW5kZSBzaSBlc3RhYmEgbWluaW1pemFkbywgYXBsaWNhIGVsIGNvbnRleHRvIGRlbCBob3N0IG51ZXZvXG4gICAqIHkgdmEgYWwgaG9tZSDigJQgc2luIHJlc3RhdXJhciBsYSBjb252ZXJzYWNpw7NuIHByZXZpYSAoZXNvIGxvIGhhY2UgZWwgcGlsbCkuXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5Gcm9tSG9zdCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudCBhcyBDdXN0b21FdmVudDxNYWlhSG9zdE9wZW5EZXRhaWw+XG4gICAgICBpZiAoIWRldGFpbCkgcmV0dXJuXG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKGRldGFpbClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIG9wZW5Gcm9tSG9zdClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqIE1pc21vIGZsdWpvIHF1ZSBDaGF0QUlNeUFnZW50cy5oYW5kbGVVc2VBZ2VudCArIG9uQmFjayAoaGFuZGxlcnMuaG9tZSkuXG4gICAqICBFbCBkZXRhaWwgcHVlZGUgdHJhZXIgb3BjaW9uYWxtZW50ZSBgcHJvamVjdGAsIGBjbGllbnRgLCBgdGFza2AgcGFyYSBmbG93cyBxdWVcbiAgICogIG5lY2VzaXRhbiBwcmVzZXJ2YXIgY29udGV4dG8gKGVqLiBzZWxlY3RvciBkZSBhZ2VudGVzIGRlc2RlIHVuYSB0YXJlYSkuIFNpIG5vIHZpZW5lbixcbiAgICogIHNlIG1hbnRpZW5lIGVsIGNvbXBvcnRhbWllbnRvIG9yaWdpbmFsIGRlIGxpbXBpYXIgcHJvamVjdC9jbGllbnQuICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3Blbk5ld0NoYXRXaXRoQWdlbnQgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8e1xuICAgICAgICBhZ2VudDogQWdlbnRcbiAgICAgICAgcHJvamVjdD86IFByb2plY3QgfCBudWxsXG4gICAgICAgIGNsaWVudD86IENsaWVudCB8IG51bGxcbiAgICAgICAgdGFzaz86IFRhc2sgfCBudWxsXG4gICAgICB9PlxuICAgICAgY29uc3QgbmV4dEFnZW50ID0gZGV0YWlsPy5hZ2VudFxuICAgICAgaWYgKCFuZXh0QWdlbnQpIHJldHVyblxuXG4gICAgICBjb25zdCBjb250ZXh0UGF0Y2ggPSByZXNvbHZlT3Blbk5ld0NoYXRXaXRoQWdlbnRDb250ZXh0KGRldGFpbCA/PyB7fSlcbiAgICAgIHNldFByb2plY3QoY29udGV4dFBhdGNoLnByb2plY3QpXG4gICAgICBzZXRDbGllbnQ/Lihjb250ZXh0UGF0Y2guY2xpZW50KVxuICAgICAgaWYgKGNvbnRleHRQYXRjaC5zaG91bGRTZXRUYXNrKSB7XG4gICAgICAgIHNldFRhc2s/Lihjb250ZXh0UGF0Y2gudGFzayA/PyBudWxsKVxuICAgICAgfVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIH1cbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuXG4gIGNvbnN0IGFwcGx5U2tpbGxVc2VGbG93ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNraWxsOiBTa2lsbCwgdXNlRmlyc3RBZ2VudDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgZmlyc3RBZ2VudCA9IGF3YWl0IGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlKHtcbiAgICAgICAgdXNlRmlyc3RBZ2VudCxcbiAgICAgICAgYWdlbnRzOiBhZ2VudHNEYXRhUmVmLmN1cnJlbnQsXG4gICAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChzaG91bGRDbGVhckNvbnRleHRGb3JDYXRhbG9nT3JTa2lsbEFnZW50KGZpcnN0QWdlbnQpKSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICB9XG5cbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0KHNraWxsKVxuICAgIH0sXG4gICAgW2Vuc3VyZUFnZW50c0xvYWRlZCwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsLCB1c2VGaXJzdEFnZW50ID0gZmFsc2UgfSA9XG4gICAgICAgIChldmVudCBhcyBDdXN0b21FdmVudDx7IHNraWxsOiBTa2lsbDsgdXNlRmlyc3RBZ2VudD86IGJvb2xlYW4gfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbCkgcmV0dXJuXG5cbiAgICAgIGFwcGx5U2tpbGxVc2VGbG93KHNraWxsLCB1c2VGaXJzdEFnZW50KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIH1cbiAgfSwgW2FwcGx5U2tpbGxVc2VGbG93XSlcblxuICAvLyBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGFnZW50X3R5cGUvYWdlbnRfZW50aXR5ICsgY29udGV4dG8pLCBlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZXNzaW9uTWV0YSA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZ0IGFzIEN1c3RvbUV2ZW50PFNlc3Npb25NZXRhPlxuICAgICAgaWYgKGRldGFpbCkgc2V0U2Vzc2lvbk1ldGEoZGV0YWlsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24gbGltcGlhbW9zIGxhIG1ldGFkYXRhOyBlbCBsb2FkIGRlIGxhIG51ZXZhIHNlc3Npb24gbGEgdnVlbHZlIGEgZW1pdGlyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBDYXJ0ZWwgXCJjb250aW51YXIgZW4gdW4gY2hhdCBudWV2b1wiOiBzZSBtdWVzdHJhIGFsIGFicmlyIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeVxuICAvLyAoYWdlbnRfdHlwZSA9PT0gJ2Nsb25lJyBjb24gZW50aXR5IHByb2plY3QvdGFzay9jbGllbnQpLiBFbCBpbnB1dCBzZSByZWVtcGxhemEgcG9yIGVsIGNhcnRlbC5cbiAgY29uc3QgbGVnYWN5Q29udGV4dFNlc3Npb24gPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbihjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCwgc2Vzc2lvbk1ldGEpLFxuICAgIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNlc3Npb25NZXRhXVxuICApXG5cbiAgLy8gTWFyY2EgZWwgYWdlbnRlIGRlIGxhIGNvbnZlcnNhY2nDs24gbGVnYWN5IHBhcmEgcXVlIGhlYWRlciwgc2VsZWN0b3IgeSBhdmF0YXIgbXVlc3RyZW4gZWwgbG9nb1xuICAvLyBNQUlBIHkgZWwgbm9tYnJlIHRhY2hhZG8gKGFnZW50ZSBvYnNvbGV0byksIHNpbiBkZXBlbmRlciBkZWwgYHR5cGVgIHJlc3VlbHRvIGRlIGxhIHNlc2nDs24gdmllamEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZE1hcmtBZ2VudEFzTGVnYWN5Q29udGV4dChsZWdhY3lDb250ZXh0U2Vzc2lvbiwgYWdlbnQpKSB7XG4gICAgICBzZWxlY3RBZ2VudChidWlsZExlZ2FjeUNvbnRleHRBZ2VudChhZ2VudCkpXG4gICAgfVxuICB9LCBbbGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50LCBzZWxlY3RBZ2VudF0pXG5cbiAgLy8gQWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBvcmNoZXN0cmF0b3Igc2V0ZWFuZG8gZWwgY29udGV4dG8gZGVsIGNsb25lIGxlZ2FjeSAobWlzbW8gY3JpdGVyaW9cbiAgLy8gcXVlIGNsaWNrZWFyIHVuIGNvbnRleHRvIHJlY2llbnRlIGVuIGVsIGhvbWUg4oaSIHBhc28gMiBjb24gRkFRcy9hY2Npb25lcyBkZSBlc2UgY29udGV4dG8pLlxuICBjb25zdCBoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgb3JjaGVzdHJhdG9yID0gZmluZE9yY2hlc3RyYXRvckFnZW50KGFnZW50cy5kYXRhKVxuICAgIGlmICghY2FuQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0KHNlc3Npb25NZXRhLCBvcmNoZXN0cmF0b3IpIHx8ICFzZXNzaW9uTWV0YSB8fCAhb3JjaGVzdHJhdG9yKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0gPSBzZXNzaW9uTWV0YVxuXG4gICAgY29uc3QgbWlncmF0aW9uUGF0Y2ggPSBidWlsZExlZ2FjeUNvbnRleHRNaWdyYXRpb25QYXRjaCh7XG4gICAgICBhZ2VudEVudGl0eSxcbiAgICAgIHByb2plY3RJZDogcElkLFxuICAgICAgcHJvamVjdE5hbWU6IHBOYW1lLFxuICAgICAgY2xpZW50SWQ6IGNJZCxcbiAgICAgIGNsaWVudE5hbWU6IGNOYW1lLFxuICAgICAgdGFza0lkOiB0SWQsXG4gICAgICB0YXNrTmFtZTogdE5hbWUsXG4gICAgfSkgPz8geyB0YXNrOiBudWxsLCBwcm9qZWN0OiBudWxsLCBjbGllbnQ6IG51bGwsIGNoaXBzUHJvamVjdDogbnVsbCB9XG5cbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG5cbiAgICBzZXRUYXNrPy4obWlncmF0aW9uUGF0Y2gudGFzaylcbiAgICBzZXRQcm9qZWN0KG1pZ3JhdGlvblBhdGNoLnByb2plY3QpXG4gICAgc2V0Q2xpZW50Py4obWlncmF0aW9uUGF0Y2guY2xpZW50KVxuICAgIHNldENoaXBzUHJvamVjdChtaWdyYXRpb25QYXRjaC5jaGlwc1Byb2plY3QpXG5cbiAgICBzZWxlY3RBZ2VudChvcmNoZXN0cmF0b3IpXG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW3Nlc3Npb25NZXRhLCBhZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSlcblxuICBjb25zdCB7IHNob3dOZXdDaGF0LCBpc015QWdlbnRzU2VjdGlvbiwgaXNNeVNraWxsc1NlY3Rpb24sIGlzTWFpYWtlckNyZWF0b3JIb21lIH0gPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVDaGF0TW9kYWxTZWN0aW9uRmxhZ3MoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkKSxcbiAgICBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkXVxuICApXG5cbiAgY29uc3QgaGFzQ2hhdEFjY2VzcyA9IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpXG4gIGNvbnN0IG1haW5Db250ZW50VmlldyA9IHJlc29sdmVDaGF0TW9kYWxNYWluQ29udGVudFZpZXcoaGFzRXJyb3IsIGhhc0NoYXRBY2Nlc3MpXG4gIGNvbnN0IHNob3dNb2RhbEZvb3RlciA9IHNob3VsZFNob3dDaGF0TW9kYWxGb290ZXIoe1xuICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgICBob21lT3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgY2hhdE9wdGlvbjogb3B0aW9ucy5jaGF0LFxuICAgIGFnZW50c0NvdW50OiBhZ2VudHMuZGF0YS5sZW5ndGgsXG4gICAgaXNNYWlha2VyQ3JlYXRvckhvbWUsXG4gICAgaGFzRXJyb3IsXG4gICAgbG9hZGluZyxcbiAgICBoYXNBY2Nlc3M6IGhhc0NoYXRBY2Nlc3MsXG4gIH0pXG4gIGNvbnN0IHNob3dTaWRlYmFyID0gc2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIoaGFzQ2hhdEFjY2VzcywgaXNGbG9hdGluZylcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICB9KVxuICBjb25zdCB7IGlzQ2hhdFZpZXcsIGlzSGVhZGVySG9tZVN0ZXAyLCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiB9ID0gcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyh7XG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGhvbWVPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICBjaGF0T3B0aW9uOiBvcHRpb25zLmNoYXQsXG4gICAgaGFzUGlubmVkQ29udGV4dCxcbiAgICBzZWN0aW9uLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgfSlcbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPSBzaG91bGRTaG93T3JjaGVzdHJhdG9yQmFja0J1dHRvbih7XG4gICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIGlzQ2hhdFZpZXcsXG4gICAgaXNIZWFkZXJIb21lU3RlcDIsXG4gICAgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIsXG4gIH0pXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNhbk9wZW5NYWlhTWFya2V0cGxhY2UoQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ215QWdlbnRzJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMubXlBZ2VudHMsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICBhZ2VudElkOiBudWxsLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyh1c2VySGFzU2tpbGxzQWNjZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteVNraWxscycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15U2tpbGxzLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBoYW5kbGVHZXRTa2lsbHMsIHVzZXIuaWQsIHVzZXJIYXNTa2lsbHNBY2Nlc3NdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbWFpYWtlcicsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICBhZ2VudElkOiBtYWlha2VyQWdlbnQuaWQsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB1c2VyLmlkXSlcblxuICBjb25zdCBsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc25hcHNob3Q6IE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgYWdlbnRUb1NlbGVjdDogQWdlbnQgfCB1bmRlZmluZWRcbiAgICAgIGlmIChzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudElkLCBzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWdlbnRUb1NlbGVjdCA9IGF3YWl0IGZldGNoQWdlbnREZXRhaWwoc25hcHNob3QuYWdlbnRJZCBhcyBzdHJpbmcpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhzaG91bGRQYXNzQWdlbnRUb0dldEFnZW50c09uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpID8gYWdlbnRUb1NlbGVjdCA6IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUoYWdlbnRUb1NlbGVjdCwgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlKSkge1xuICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFRvU2VsZWN0IGFzIEFnZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUdldEFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBhcHBseVNlc3Npb25SZXN0b3JlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNuYXBzaG90OiBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QpID0+IHtcbiAgICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICAgIGNvbnN0IGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdCA9IHJlc29sdmVTbmFwc2hvdENoaXBzUHJvamVjdChzbmFwc2hvdC5ob3N0Q29udGV4dClcbiAgICAgIGlmIChjaGlwc1Byb2plY3RGcm9tU25hcHNob3QpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdClcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdG9yZVJvdXRlID0gcmVzb2x2ZVNlc3Npb25SZXN0b3JlTmF2Um91dGUoc25hcHNob3QpXG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteUFnZW50cycpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlT3Blbk1hcmtldHBsYWNlKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteVNraWxscycpIHtcbiAgICAgICAgaGFuZGxlT3BlblNraWxscygpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdG9yZVJvdXRlID09PSAnbWFpYWtlcicpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlR29Ub01haWFrZXIoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgICAgc2V0SW5pdGlhbENoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQgPz8gbnVsbClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKHNuYXBzaG90LmFjdGl2ZUNoYXRJZCA/PyBudWxsKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ3NhdmVkT3B0aW9uJyAmJiBzbmFwc2hvdC5jdXJyZW50T3B0aW9uKSB7XG4gICAgICAgIHNldEN1cnJlbnRPcHRpb24oc25hcHNob3QuY3VycmVudE9wdGlvbiBhcyBvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICB9LFxuICAgIFtcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgaGFuZGxlR29Ub01haWFrZXIsXG4gICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gICAgICBoYW5kbGVPcGVuU2tpbGxzLFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUsXG4gICAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uLFxuICAgIF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmICghc25hcHNob3QgfHwgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICBjb25zdCBydW5SZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgICAgICBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYXdhaXQgYXBwbHlTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzUmVzdG9yaW5nU2Vzc2lvbihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBydW5SZXN0b3JlKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICB9LCBbYXBwbHlTZXNzaW9uUmVzdG9yZSwgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlLCBzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgcmVtb3ZlQWdlbnQoYWdlbnRJZClcbiAgICAgIGlmIChzaG91bGRSZXNlbGVjdEFnZW50QWZ0ZXJEZWxldGUoYWdlbnQ/LmlkLCBhZ2VudElkKSkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGFnZW50SWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQ/LmlkLCByZW1vdmVBZ2VudCwgc2VsZWN0Rmlyc3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IG1vZGFsUGFuZWwgPSAoXG4gICAgPD5cbiAgICAgIHtzaG93U2lkZWJhciA/IChcbiAgICAgICAgPFNpZGViYXJcbiAgICAgICAgICBvbkdvVG9DaGF0PXtnb1RvQ2hhdH1cbiAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRTaWRlYmFySGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgaGFuZGxlR29Ub0hvbWU9e2hhbmRsZUdvSG9tZX1cbiAgICAgICAgICBoYW5kbGVTdGFydE5ld0NoYXQ9e2hhbmRsZVN0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2U9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICBzaG93TmV3Q2hhdD17c2hvd05ld0NoYXR9XG4gICAgICAgICAgcmVmZXRjaENoYXRzPXtyZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzPXtzZXRSZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFzRXJyb3I9e3NpZGViYXJIYXNFcnJvcn1cbiAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgICAgaGFuZGxlT3BlblNraWxscz17aGFuZGxlT3BlblNraWxsc31cbiAgICAgICAgICBvbk9wZW5NYWlha2VyQ3JlYXRvcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj17ISFsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICBpbml0aWFsT3Blbj17c2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50Py5zaWRlYmFyT3BlbiA/PyBmYWxzZX1cbiAgICAgICAgICBvbk9wZW5DaGFuZ2U9e2hhbmRsZVNpZGViYXJPcGVuQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfT5cbiAgICAgICAgPENoYXRBSU1vZGFsSGVhZGVyXG4gICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICBvbkxheW91dE1vZGVDaGFuZ2U9e2hhbmRsZUxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGRyYWdnYWJsZT17aXNGbG9hdGluZ31cbiAgICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICAgIG9uRHJhZ01vdmU9e2hhbmRsZURyYWdNb3ZlfVxuICAgICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgICBoYW5kbGVNaW5pbWl6ZT17aGFuZGxlTWluaW1pemV9XG4gICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICBoYXNFcnJvcj17ISFhZ2VudEVycm9yfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgbG9hZGluZ01vcmU9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2FnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICBoYW5kbGVSZXNldENoYXQ9e2hhbmRsZVJlc2V0Q2hhdH1cbiAgICAgICAgICBvbkFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgIGxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICBzb3J0QWdlbnRzTGlzdD17c29ydEFnZW50c0xpc3R9XG4gICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb249e2lzTXlBZ2VudHNTZWN0aW9ufVxuICAgICAgICAgIGlzTXlTa2lsbHNTZWN0aW9uPXtpc015U2tpbGxzU2VjdGlvbn1cbiAgICAgICAgICBpc01haWFrZXJTZWN0aW9uPXtpc01haWFrZXJDcmVhdG9ySG9tZX1cbiAgICAgICAgICBzaG93QmFja0J1dHRvbj17c2hvd0JhY2tCdXR0b259XG4gICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxuICAgICAgICAvPlxuICAgICAgICB7bWFpbkNvbnRlbnRWaWV3ID09PSAnZXJyb3InID8gKFxuICAgICAgICAgIDxNQUlBRXJyb3IgLz5cbiAgICAgICAgKSA6IG1haW5Db250ZW50VmlldyA9PT0gJ2NoYXQnID8gKFxuICAgICAgICAgIDxDaGF0QUlDb250ZW50XG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uPXtjb21wdXRlZEN1cnJlbnRPcHRpb259XG4gICAgICAgICAgICBoYW5kbGVycz17eyAuLi5oYW5kbGVycywgY2hhdDogc3RhcnRDaGF0LCBob21lOiBoYW5kbGVycy5ob21lLCBoYW5kbGVHb0hvbWUgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldEhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgICAgcmVmcz17eyB1c2VySW5pdGlhbE1lc3NhZ2UsIGluaXRpYWxDaGF0SWQgfX1cbiAgICAgICAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeT17aGFuZGxlU2VuZE1lc3NhZ2VSZWFkeX1cbiAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIGZsb2F0aW5nPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICAgIGxvYWRpbmdBZ2VudHM9e2xvYWRpbmd9XG4gICAgICAgICAgICBvbkRlbGV0ZUFnZW50PXtoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50c31cbiAgICAgICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIGhhc01vcmVBZ2VudHM9eyEhYWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgbG9hZGluZ01vcmVBZ2VudHM9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgICAgb25Mb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgICBvbkdvVG9NYWlha2VyPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICAgIG15U2tpbGxzPXtteVNraWxsc31cbiAgICAgICAgICAgIHNoYXJlZFNraWxscz17c2hhcmVkU2tpbGxzfVxuICAgICAgICAgICAgbG9hZGluZ1NraWxscz17bG9hZGluZ1NraWxsc31cbiAgICAgICAgICAgIG9uRGVsZXRlU2tpbGw9e3JlbW92ZVNraWxsfVxuICAgICAgICAgICAgb25TZWFyY2hBZ2VudHM9e3NlYXJjaEN1c3RvbUFnZW50c31cbiAgICAgICAgICAgIHNlYXJjaExvYWRpbmdBZ2VudHM9e3NlYXJjaExvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgICAgaXNSZXN0b3JpbmdTZXNzaW9uPXtpc1Jlc3RvcmluZ1Nlc3Npb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93TW9kYWxGb290ZXIgJiYgKFxuICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2U9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc1dyaXRpbmc9e2lzV3JpdGluZ31cbiAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgIG5ld0NoYXRLZXk9e25ld0NoYXRLZXl9XG4gICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgbGVnYWN5Q29udGV4dFNlc3Npb249e2xlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAgICAgb25Db250aW51ZUluTmV3Q2hhdD17aGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0fVxuICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1Db250ZW50PlxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgY29udGVudFdyYXBwZXIgPSAoXG4gICAgPFNDQ0FJTUNvbnRlbnRXcmFwcGVyIGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9IHJlZj17Y29udGVudFdyYXBwZXJSZWZ9PlxuICAgICAge21vZGFsUGFuZWx9XG4gICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgc2VsZWN0b3IgJiZcbiAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8U0NDQUlNV3JhcHBlclxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgIGRyYWdQb3NpdGlvbj17cmVzb2x2ZWREcmFnUG9zaXRpb259XG4gICAgICAgIGVsZXZhdGVkPXtzaG91bGRVc2VFbGV2YXRlZE1haWFQYW5lbChzZWN0aW9uKX1cbiAgICAgICAgJG1pbmltaXplZD17aXNNaW5pbWl6ZWR9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSU1NaW5pbWl6ZWRIaWRlICRoaWRkZW49e2lzTWluaW1pemVkfT5cbiAgICAgICAgICA8RmxvYXRpbmdQYW5lbE1vdGlvbiB0aWx0PXt0aWx0TW90aW9ufSBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgICAge2NvbnRlbnRXcmFwcGVyfVxuICAgICAgICAgIDwvRmxvYXRpbmdQYW5lbE1vdGlvbj5cbiAgICAgICAgPC9TQ0NBSU1NaW5pbWl6ZWRIaWRlPlxuICAgICAgICB7aXNNaW5pbWl6ZWQgJiYgKFxuICAgICAgICAgIDxNYWlhTWluaW1pemVkUGlsbFxuICAgICAgICAgICAgc2hvd05vdmVsdHlEb3Q9e3Nob3dNaW5pbWl6ZWROb3ZlbHR5RG90fVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2hhc0FjdGl2ZVN0cmVhbX1cbiAgICAgICAgICAgIG9uUmVzdG9yZT17aGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibUFnZW50TW9kYWxcbiAgICAgICAgICAgIGFkZEFnZW50PXthZGRBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50PXt1cGRhdGVBZ2VudH1cbiAgICAgICAgICAgIHJlbW92ZUFnZW50PXtyZW1vdmVBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBzZWxlY3RGaXJzdEFnZW50PXtzZWxlY3RGaXJzdEFnZW50fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzU2tpbGxzQWNjZXNzICYmIChcbiAgICAgICAgICA8QWJtU2tpbGxNb2RhbCBhZGRTa2lsbD17YWRkU2tpbGx9IHVwZGF0ZVNraWxsSW5MaXN0PXt1cGRhdGVTa2lsbEluTGlzdH0gcmVtb3ZlU2tpbGw9e3JlbW92ZVNraWxsfSAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1NraWxsc0FjY2VzcyAmJiA8QWJtU2tpbGxHZW5lcmF0ZU1vZGFsIC8+fVxuICAgICAgICA8U25hY2tiYXIgLz5cbiAgICAgIDwvU0NDQUlNV3JhcHBlcj4sXG4gICAgICBzZWxlY3RvclxuICAgIClcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLFdBQVcsRUFDWEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxlQUFlLFFBRVYsT0FBTztBQUNkLE9BQU9DLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLE9BQU9DLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MsaUJBQWlCLFFBQVEsZ0NBQWdDO0FBQ2xFLFNBQVNDLFNBQVMsUUFBUSx1QkFBdUI7QUFDakQsU0FBU0Msc0JB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QUN1UixRQUFRLEVBQUVBLFFBQVM7SUFBQzBRLFFBQVEsRUFBRXpRLFVBQVc7SUFBQ3FTLEdBQUcsRUFBRXBTLGlCQUFrQjtJQUFBK1AsUUFBQSxFQUNwRkQ7RUFBVSxDQUNTLENBQ3ZCO0VBRUQsT0FDRXpRLFFBQVEsaUJBQ1JyUyxRQUFRLENBQUNxbEIsWUFBWSxjQUNuQnJkLEtBQUEsQ0FBQ3ZHLGFBQWE7SUFDWnFSLFFBQVEsRUFBRUEsUUFBUztJQUNuQkosVUFBVSxFQUFFQSxVQUFXO0lBQ3ZCVSxZQUFZLEVBQUV3QyxvQkFBcUI7SUFDbkMwUCxRQUFRLEVBQUVwZSwwQkFBMEIsQ0FBQytILE9BQU8sQ0FBRTtJQUM5Q3NXLFVBQVUsRUFBRTFiLFdBQVk7SUFBQWtaLFFBQUEsZ0JBRXhCamIsSUFBQSxDQUFDdEcsbUJBQW1CO01BQUNna0IsT0FBTyxFQUFFM2IsV0FBWTtNQUFBa1osUUFBQSxlQUN4Q2piLElBQUEsQ0FBQy9GLG1CQUFtQjtRQUFDMGpCLElBQUksRUFBRWpTLFVBQVc7UUFBQ1YsUUFBUSxFQUFFQSxRQUFTO1FBQUFpUSxRQUFBLEVBQ3ZEL087TUFBYyxDQUNJO0lBQUMsQ0FDSCxDQUFDLEVBQ3JCbkssV0FBVyxpQkFDVi9CLElBQUEsQ0FBQ3BHLGlCQUFpQjtNQUNoQmdrQixjQUFjLEVBQUV4Yix1QkFBd0I7TUFDeEMyQyxXQUFXLEVBQUV6QyxlQUFnQjtNQUM3QnViLFNBQVMsRUFBRWpNO0lBQTJCLENBQ3ZDLENBQ0YsRUFDQS9ILGtCQUFrQixpQkFDakI3SixJQUFBLENBQUM3RyxhQUFhO01BQ1owUCxRQUFRLEVBQUVBLFFBQVM7TUFDbkJFLFdBQVcsRUFBRUEsV0FBWTtNQUN6QkQsV0FBVyxFQUFFQSxXQUFZO01BQ3pCRSxtQkFBbUIsRUFBRUEsbUJBQW9CO01BQ3pDQyxnQkFBZ0IsRUFBRUE7SUFBaUIsQ0FDcEMsQ0FDRixFQUNBZ0IsbUJBQW1CLGlCQUNsQmpLLElBQUEsQ0FBQzVHLGFBQWE7TUFBQ3NRLFFBQVEsRUFBRUEsUUFBUztNQUFDQyxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQUNDLFdBQVcsRUFBRUE7SUFBWSxDQUFFLENBQ3JHLEVBQ0FLLG1CQUFtQixpQkFBSWpLLElBQUEsQ0FBQzFHLHFCQUFxQixJQUFFLENBQUMsZUFDakQwRyxJQUFBLENBQUMvRyxRQUFRLElBQUUsQ0FBQztFQUFBLENBQ0MsQ0FBQyxFQUNoQnNSLFFBQ0YsQ0FBQztBQUVMLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|