botframework-webchat-api 4.13.0 → 4.14.2
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/.eslintignore +1 -9
- package/.eslintrc.yml +43 -38
- package/lib/StyleOptions.d.ts +28 -3
- package/lib/StyleOptions.d.ts.map +1 -1
- package/lib/defaultStyleOptions.d.ts +4 -0
- package/lib/defaultStyleOptions.d.ts.map +1 -0
- package/lib/defaultStyleOptions.js +7 -3
- package/lib/external/PrecompiledGlobalize.js +24 -6
- package/lib/hooks/Composer.d.ts +71 -0
- package/lib/hooks/Composer.d.ts.map +1 -0
- package/lib/hooks/Composer.js +104 -88
- package/lib/hooks/index.d.ts +64 -0
- package/lib/hooks/index.d.ts.map +1 -0
- package/lib/hooks/index.js +9 -1
- package/lib/hooks/internal/ErrorBox.js +2 -2
- package/lib/hooks/internal/Tracker.d.ts +4 -0
- package/lib/hooks/internal/Tracker.d.ts.map +1 -0
- package/lib/hooks/internal/WebChatAPIContext.d.ts +81 -0
- package/lib/hooks/internal/WebChatAPIContext.d.ts.map +1 -0
- package/lib/hooks/internal/WebChatAPIContext.js +2 -4
- package/lib/hooks/internal/useCreateActivityRendererInternal.d.ts +4 -0
- package/lib/hooks/internal/useCreateActivityRendererInternal.d.ts.map +1 -0
- package/lib/hooks/internal/useCreateActivityRendererInternal.js +1 -1
- package/lib/hooks/internal/useDebugDeps.js +2 -2
- package/lib/hooks/internal/useDownscaleImageToDataURL.js +1 -1
- package/lib/hooks/internal/useErrorBoxClass.js +1 -1
- package/lib/hooks/internal/useForceRender.js +2 -2
- package/lib/hooks/internal/useLocalizedStrings.js +1 -1
- package/lib/hooks/internal/useReadTelemetryDimensions.js +2 -2
- package/lib/hooks/internal/useTimePassed.js +2 -2
- package/lib/hooks/internal/useTracker.js +2 -2
- package/lib/hooks/middleware/UserlandBoundary.js +4 -4
- package/lib/hooks/middleware/applyMiddleware.js +6 -6
- package/lib/hooks/middleware/concatMiddleware.d.ts +6 -0
- package/lib/hooks/middleware/concatMiddleware.d.ts.map +1 -0
- package/lib/hooks/middleware/concatMiddleware.js +2 -2
- package/lib/hooks/middleware/createDefaultCardActionMiddleware.d.ts +3 -0
- package/lib/hooks/middleware/createDefaultCardActionMiddleware.d.ts.map +1 -0
- package/lib/hooks/middleware/createDefaultCardActionMiddleware.js +6 -8
- package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts +5 -0
- package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.d.ts.map +1 -0
- package/lib/hooks/middleware/createDefaultGroupActivitiesMiddleware.js +1 -1
- package/lib/hooks/useActiveTyping.d.ts +6 -0
- package/lib/hooks/useActiveTyping.d.ts.map +1 -0
- package/lib/hooks/useActiveTyping.js +4 -4
- package/lib/hooks/useActivities.d.ts +3 -0
- package/lib/hooks/useActivities.d.ts.map +1 -0
- package/lib/hooks/useActivities.js +1 -1
- package/lib/hooks/useAvatarForBot.d.ts +5 -0
- package/lib/hooks/useAvatarForBot.d.ts.map +1 -0
- package/lib/hooks/useAvatarForBot.js +2 -2
- package/lib/hooks/useAvatarForUser.d.ts +5 -0
- package/lib/hooks/useAvatarForUser.d.ts.map +1 -0
- package/lib/hooks/useAvatarForUser.js +2 -2
- package/lib/hooks/useByteFormatter.d.ts +2 -0
- package/lib/hooks/useByteFormatter.d.ts.map +1 -0
- package/lib/hooks/useByteFormatter.js +2 -2
- package/lib/hooks/useConnectivityStatus.d.ts +2 -0
- package/lib/hooks/useConnectivityStatus.d.ts.map +1 -0
- package/lib/hooks/useConnectivityStatus.js +1 -1
- package/lib/hooks/useCreateActivityRenderer.d.ts +3 -0
- package/lib/hooks/useCreateActivityRenderer.d.ts.map +1 -0
- package/lib/hooks/useCreateActivityRenderer.js +1 -2
- package/lib/hooks/useCreateActivityStatusRenderer.d.ts +9 -0
- package/lib/hooks/useCreateActivityStatusRenderer.d.ts.map +1 -0
- package/lib/hooks/useCreateActivityStatusRenderer.js +6 -4
- package/lib/hooks/useCreateAvatarRenderer.d.ts +4 -0
- package/lib/hooks/useCreateAvatarRenderer.d.ts.map +1 -0
- package/lib/hooks/useCreateAvatarRenderer.js +2 -2
- package/lib/hooks/useCreateScrollToEndButtonRenderer.d.ts +3 -0
- package/lib/hooks/useCreateScrollToEndButtonRenderer.d.ts.map +1 -0
- package/lib/hooks/useCreateScrollToEndButtonRenderer.js +15 -0
- package/lib/hooks/useDateFormatter.d.ts +2 -0
- package/lib/hooks/useDateFormatter.d.ts.map +1 -0
- package/lib/hooks/useDateFormatter.js +2 -2
- package/lib/hooks/useDebouncedNotifications.d.ts +13 -0
- package/lib/hooks/useDebouncedNotifications.d.ts.map +1 -0
- package/lib/hooks/useDebouncedNotifications.js +6 -6
- package/lib/hooks/useDictateInterims.d.ts +2 -0
- package/lib/hooks/useDictateInterims.d.ts.map +1 -0
- package/lib/hooks/useDictateInterims.js +1 -1
- package/lib/hooks/useDictateState.d.ts +2 -0
- package/lib/hooks/useDictateState.d.ts.map +1 -0
- package/lib/hooks/useDictateState.js +1 -1
- package/lib/hooks/useDirection.d.ts +2 -0
- package/lib/hooks/useDirection.d.ts.map +1 -0
- package/lib/hooks/useDirection.js +2 -2
- package/lib/hooks/useDisabled.d.ts +2 -0
- package/lib/hooks/useDisabled.d.ts.map +1 -0
- package/lib/hooks/useDisabled.js +1 -1
- package/lib/hooks/useDismissNotification.d.ts +2 -0
- package/lib/hooks/useDismissNotification.d.ts.map +1 -0
- package/lib/hooks/useDismissNotification.js +1 -1
- package/lib/hooks/useEmitTypingIndicator.d.ts +2 -0
- package/lib/hooks/useEmitTypingIndicator.d.ts.map +1 -0
- package/lib/hooks/useEmitTypingIndicator.js +1 -1
- package/lib/hooks/useGetSendTimeoutForActivity.d.ts +5 -0
- package/lib/hooks/useGetSendTimeoutForActivity.d.ts.map +1 -0
- package/lib/hooks/useGetSendTimeoutForActivity.js +2 -2
- package/lib/hooks/useGrammars.d.ts +2 -0
- package/lib/hooks/useGrammars.d.ts.map +1 -0
- package/lib/hooks/useGrammars.js +1 -1
- package/lib/hooks/useGroupActivities.d.ts +8 -0
- package/lib/hooks/useGroupActivities.d.ts.map +1 -0
- package/lib/hooks/useGroupActivities.js +1 -1
- package/lib/hooks/useGroupTimestamp.d.ts +2 -0
- package/lib/hooks/useGroupTimestamp.d.ts.map +1 -0
- package/lib/hooks/useGroupTimestamp.js +2 -2
- package/lib/hooks/useLanguage.d.ts +2 -0
- package/lib/hooks/useLanguage.d.ts.map +1 -0
- package/lib/hooks/useLanguage.js +1 -1
- package/lib/hooks/useLastTypingAt.d.ts +5 -0
- package/lib/hooks/useLastTypingAt.d.ts.map +1 -0
- package/lib/hooks/useLastTypingAt.js +2 -1
- package/lib/hooks/useLocalize.d.ts +3 -0
- package/lib/hooks/useLocalize.d.ts.map +1 -0
- package/lib/hooks/useLocalize.js +5 -2
- package/lib/hooks/useLocalizeDate.d.ts +3 -0
- package/lib/hooks/useLocalizeDate.d.ts.map +1 -0
- package/lib/hooks/useLocalizeDate.js +3 -2
- package/lib/hooks/useLocalizer.d.ts +13 -0
- package/lib/hooks/useLocalizer.d.ts.map +1 -0
- package/lib/hooks/useLocalizer.js +10 -6
- package/lib/hooks/useMarkActivityAsSpoken.d.ts +3 -0
- package/lib/hooks/useMarkActivityAsSpoken.d.ts.map +1 -0
- package/lib/hooks/useMarkActivityAsSpoken.js +1 -1
- package/lib/hooks/useNotifications.d.ts +3 -0
- package/lib/hooks/useNotifications.d.ts.map +1 -0
- package/lib/hooks/useNotifications.js +1 -1
- package/lib/hooks/usePerformCardAction.d.ts +3 -0
- package/lib/hooks/usePerformCardAction.d.ts.map +1 -0
- package/lib/hooks/usePerformCardAction.js +1 -1
- package/lib/hooks/usePostActivity.d.ts +4 -0
- package/lib/hooks/usePostActivity.d.ts.map +1 -0
- package/lib/hooks/usePostActivity.js +1 -1
- package/lib/hooks/useReferenceGrammarID.d.ts +2 -0
- package/lib/hooks/useReferenceGrammarID.d.ts.map +1 -0
- package/lib/hooks/useReferenceGrammarID.js +1 -1
- package/lib/hooks/useRelativeTimeFormatter.d.ts +2 -0
- package/lib/hooks/useRelativeTimeFormatter.d.ts.map +1 -0
- package/lib/hooks/useRelativeTimeFormatter.js +2 -2
- package/lib/hooks/useRenderActivity.js +2 -1
- package/lib/hooks/useRenderActivityStatus.js +2 -1
- package/lib/hooks/useRenderAttachment.js +1 -1
- package/lib/hooks/useRenderAvatar.js +2 -1
- package/lib/hooks/useRenderToast.d.ts +3 -0
- package/lib/hooks/useRenderToast.d.ts.map +1 -0
- package/lib/hooks/useRenderToast.js +1 -1
- package/lib/hooks/useRenderTypingIndicator.d.ts +3 -0
- package/lib/hooks/useRenderTypingIndicator.d.ts.map +1 -0
- package/lib/hooks/useRenderTypingIndicator.js +1 -1
- package/lib/hooks/useSendBoxValue.d.ts +2 -0
- package/lib/hooks/useSendBoxValue.d.ts.map +1 -0
- package/lib/hooks/useSendBoxValue.js +1 -1
- package/lib/hooks/useSendEvent.d.ts +2 -0
- package/lib/hooks/useSendEvent.d.ts.map +1 -0
- package/lib/hooks/useSendEvent.js +1 -1
- package/lib/hooks/useSendFiles.d.ts +2 -0
- package/lib/hooks/useSendFiles.d.ts.map +1 -0
- package/lib/hooks/useSendFiles.js +1 -1
- package/lib/hooks/useSendMessage.d.ts +4 -0
- package/lib/hooks/useSendMessage.d.ts.map +1 -0
- package/lib/hooks/useSendMessage.js +1 -1
- package/lib/hooks/useSendMessageBack.d.ts +2 -0
- package/lib/hooks/useSendMessageBack.d.ts.map +1 -0
- package/lib/hooks/useSendMessageBack.js +1 -1
- package/lib/hooks/useSendPostBack.d.ts +2 -0
- package/lib/hooks/useSendPostBack.d.ts.map +1 -0
- package/lib/hooks/useSendPostBack.js +1 -1
- package/lib/hooks/useSendTimeoutForActivity.d.ts +4 -0
- package/lib/hooks/useSendTimeoutForActivity.d.ts.map +1 -0
- package/lib/hooks/useSendTimeoutForActivity.js +2 -1
- package/lib/hooks/useSendTypingIndicator.d.ts +2 -0
- package/lib/hooks/useSendTypingIndicator.d.ts.map +1 -0
- package/lib/hooks/useSendTypingIndicator.js +1 -1
- package/lib/hooks/useSetNotification.d.ts +3 -0
- package/lib/hooks/useSetNotification.d.ts.map +1 -0
- package/lib/hooks/useSetNotification.js +1 -1
- package/lib/hooks/useShouldSpeakIncomingActivity.d.ts +2 -0
- package/lib/hooks/useShouldSpeakIncomingActivity.d.ts.map +1 -0
- package/lib/hooks/useShouldSpeakIncomingActivity.js +1 -1
- package/lib/hooks/useStartDictate.d.ts +2 -0
- package/lib/hooks/useStartDictate.d.ts.map +1 -0
- package/lib/hooks/useStartDictate.js +1 -1
- package/lib/hooks/useStopDictate.d.ts +2 -0
- package/lib/hooks/useStopDictate.d.ts.map +1 -0
- package/lib/hooks/useStopDictate.js +1 -1
- package/lib/hooks/useStyleOptions.d.ts +3 -0
- package/lib/hooks/useStyleOptions.d.ts.map +1 -0
- package/lib/hooks/useStyleOptions.js +1 -1
- package/lib/hooks/useSubmitSendBox.d.ts +4 -0
- package/lib/hooks/useSubmitSendBox.d.ts.map +1 -0
- package/lib/hooks/useSubmitSendBox.js +1 -1
- package/lib/hooks/useSuggestedActions.d.ts +6 -0
- package/lib/hooks/useSuggestedActions.d.ts.map +1 -0
- package/lib/hooks/useSuggestedActions.js +1 -1
- package/lib/hooks/useTimeoutForSend.d.ts +3 -0
- package/lib/hooks/useTimeoutForSend.d.ts.map +1 -0
- package/lib/hooks/useTimeoutForSend.js +2 -2
- package/lib/hooks/useTrackDimension.d.ts +2 -0
- package/lib/hooks/useTrackDimension.d.ts.map +1 -0
- package/lib/hooks/useTrackDimension.js +1 -1
- package/lib/hooks/useTrackEvent.d.ts +10 -0
- package/lib/hooks/useTrackEvent.d.ts.map +1 -0
- package/lib/hooks/useTrackEvent.js +1 -1
- package/lib/hooks/useTrackException.d.ts +2 -0
- package/lib/hooks/useTrackException.d.ts.map +1 -0
- package/lib/hooks/useTrackException.js +2 -2
- package/lib/hooks/useTrackTiming.d.ts +2 -0
- package/lib/hooks/useTrackTiming.d.ts.map +1 -0
- package/lib/hooks/useTrackTiming.js +1 -1
- package/lib/hooks/useUserID.d.ts +2 -0
- package/lib/hooks/useUserID.d.ts.map +1 -0
- package/lib/hooks/useUserID.js +1 -1
- package/lib/hooks/useUsername.d.ts +2 -0
- package/lib/hooks/useUsername.d.ts.map +1 -0
- package/lib/hooks/useUsername.js +1 -1
- package/lib/hooks/useVoiceSelector.d.ts +2 -0
- package/lib/hooks/useVoiceSelector.d.ts.map +1 -0
- package/lib/hooks/useVoiceSelector.js +1 -1
- package/lib/hooks/utils/ErrorBoundary.js +3 -3
- package/lib/hooks/utils/observableToPromise.d.ts +3 -0
- package/lib/hooks/utils/observableToPromise.d.ts.map +1 -0
- package/lib/hooks/utils/observableToPromise.js +1 -1
- package/lib/index.d.ts +20 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -3
- package/lib/localization/Localize.d.ts +10 -0
- package/lib/localization/Localize.d.ts.map +1 -0
- package/lib/localization/Localize.js +7 -7
- package/lib/localization/ar-SA.json +1 -0
- package/lib/localization/bg-BG.json +1 -0
- package/lib/localization/ca-ES.json +1 -0
- package/lib/localization/cs-CZ.json +1 -0
- package/lib/localization/da-DK.json +1 -0
- package/lib/localization/de-DE.json +1 -0
- package/lib/localization/el-GR.json +1 -0
- package/lib/localization/en-US.json +1 -0
- package/lib/localization/es-ES.json +1 -0
- package/lib/localization/et-EE.json +1 -0
- package/lib/localization/eu-ES.json +1 -0
- package/lib/localization/fi-FI.json +1 -0
- package/lib/localization/fr-FR.json +1 -0
- package/lib/localization/getAllLocalizedStrings.d.ts +6 -0
- package/lib/localization/getAllLocalizedStrings.d.ts.map +1 -0
- package/lib/localization/getAllLocalizedStrings.js +1 -1
- package/lib/localization/getLocaleString.d.ts +2 -0
- package/lib/localization/getLocaleString.d.ts.map +1 -0
- package/lib/localization/getLocaleString.js +3 -3
- package/lib/localization/getRTLList.d.ts +2 -0
- package/lib/localization/getRTLList.d.ts.map +1 -0
- package/lib/localization/getRTLList.js +1 -1
- package/lib/localization/gl-ES.json +1 -0
- package/lib/localization/he-IL.json +1 -0
- package/lib/localization/hi-IN.json +1 -0
- package/lib/localization/hr-HR.json +1 -0
- package/lib/localization/hu-HU.json +1 -0
- package/lib/localization/id-ID.json +1 -0
- package/lib/localization/it-IT.json +1 -0
- package/lib/localization/ja-JP.json +1 -0
- package/lib/localization/kk-KZ.json +1 -0
- package/lib/localization/ko-KR.json +1 -0
- package/lib/localization/lt-LT.json +1 -0
- package/lib/localization/lv-LV.json +1 -0
- package/lib/localization/mergeLocalizedStrings.d.ts +7 -0
- package/lib/localization/mergeLocalizedStrings.d.ts.map +1 -0
- package/lib/localization/mergeLocalizedStrings.js +4 -4
- package/lib/localization/ms-MY.json +1 -0
- package/lib/localization/nb-NO.json +1 -0
- package/lib/localization/nl-NL.json +1 -0
- package/lib/localization/pl-PL.json +1 -0
- package/lib/localization/pt-BR.json +1 -0
- package/lib/localization/pt-PT.json +1 -0
- package/lib/localization/ro-RO.json +1 -0
- package/lib/localization/ru-RU.json +1 -0
- package/lib/localization/sk-SK.json +1 -0
- package/lib/localization/sl-SI.json +1 -0
- package/lib/localization/sr-Cyrl-CS.json +1 -0
- package/lib/localization/sr-Latn-CS.json +1 -0
- package/lib/localization/sv-SE.json +1 -0
- package/lib/localization/th-TH.json +1 -0
- package/lib/localization/tr-TR.json +1 -0
- package/lib/localization/uk-UA.json +1 -0
- package/lib/localization/vi-VN.json +1 -0
- package/lib/localization/yue.json +1 -0
- package/lib/localization/zh-CN.json +1 -0
- package/lib/localization/zh-HK.json +1 -0
- package/lib/localization/zh-TW.json +1 -0
- package/lib/normalizeStyleOptions.d.ts +3 -0
- package/lib/normalizeStyleOptions.d.ts.map +1 -0
- package/lib/normalizeStyleOptions.js +40 -5
- package/lib/tsconfig.json +3 -1
- package/lib/types/ActivityMiddleware.d.ts +25 -0
- package/lib/types/ActivityMiddleware.d.ts.map +1 -0
- package/lib/types/ActivityMiddleware.js +2 -0
- package/lib/types/ActivityStatusMiddleware.d.ts +18 -0
- package/lib/types/ActivityStatusMiddleware.d.ts.map +1 -0
- package/lib/types/ActivityStatusMiddleware.js +2 -0
- package/lib/types/AttachmentForScreenReaderMiddleware.d.ts +14 -0
- package/lib/types/AttachmentForScreenReaderMiddleware.d.ts.map +1 -0
- package/lib/types/AttachmentForScreenReaderMiddleware.js +2 -0
- package/lib/types/AttachmentMiddleware.d.ts +12 -0
- package/lib/types/AttachmentMiddleware.d.ts.map +1 -0
- package/lib/types/AttachmentMiddleware.js +2 -0
- package/lib/types/AvatarMiddleware.d.ts +15 -0
- package/lib/types/AvatarMiddleware.d.ts.map +1 -0
- package/lib/types/AvatarMiddleware.js +2 -0
- package/lib/types/CardActionMiddleware.d.ts +17 -0
- package/lib/types/CardActionMiddleware.d.ts.map +1 -0
- package/lib/types/CardActionMiddleware.js +2 -0
- package/lib/types/ComponentMiddleware.d.ts +31 -0
- package/lib/types/ComponentMiddleware.d.ts.map +1 -0
- package/lib/types/ComponentMiddleware.js +2 -0
- package/lib/types/FunctionMiddleware.d.ts +6 -0
- package/lib/types/FunctionMiddleware.d.ts.map +1 -0
- package/lib/types/FunctionMiddleware.js +2 -0
- package/lib/types/GroupActivitiesMiddleware.d.ts +22 -0
- package/lib/types/GroupActivitiesMiddleware.d.ts.map +1 -0
- package/lib/types/GroupActivitiesMiddleware.js +2 -0
- package/lib/types/LocalizedStrings.d.ts +5 -0
- package/lib/types/LocalizedStrings.d.ts.map +1 -0
- package/lib/types/LocalizedStrings.js +2 -0
- package/lib/types/Notification.d.ts +10 -0
- package/lib/types/Notification.d.ts.map +1 -0
- package/lib/types/Notification.js +2 -0
- package/lib/types/PrecompiledGlobalize.d.ts +13 -0
- package/lib/types/PrecompiledGlobalize.d.ts.map +1 -0
- package/lib/types/PrecompiledGlobalize.js +2 -0
- package/lib/types/ScrollToEndButtonMiddleware.d.ts +30 -0
- package/lib/types/ScrollToEndButtonMiddleware.d.ts.map +1 -0
- package/lib/types/ScrollToEndButtonMiddleware.js +2 -0
- package/lib/types/SendState.d.ts +3 -0
- package/lib/types/SendState.d.ts.map +1 -0
- package/lib/types/SendState.js +2 -0
- package/lib/types/TelemetryMeasurementEvent.d.ts +31 -0
- package/lib/types/TelemetryMeasurementEvent.d.ts.map +1 -0
- package/lib/types/TelemetryMeasurementEvent.js +2 -0
- package/lib/types/ToastMiddleware.d.ts +11 -0
- package/lib/types/ToastMiddleware.d.ts.map +1 -0
- package/lib/types/ToastMiddleware.js +2 -0
- package/lib/types/Typing.d.ts +8 -0
- package/lib/types/Typing.d.ts.map +1 -0
- package/lib/types/Typing.js +2 -0
- package/lib/types/TypingIndicatorMiddleware.d.ts +17 -0
- package/lib/types/TypingIndicatorMiddleware.d.ts.map +1 -0
- package/lib/types/TypingIndicatorMiddleware.js +2 -0
- package/lib/types/WebSpeechPonyfill.d.ts +18 -0
- package/lib/types/WebSpeechPonyfill.d.ts.map +1 -0
- package/lib/types/WebSpeechPonyfill.js +2 -0
- package/lib/types/WebSpeechPonyfillFactory.d.ts +6 -0
- package/lib/types/WebSpeechPonyfillFactory.d.ts.map +1 -0
- package/lib/types/WebSpeechPonyfillFactory.js +2 -0
- package/lib/utils/createCustomEvent.d.ts +4 -0
- package/lib/utils/createCustomEvent.d.ts.map +1 -0
- package/lib/utils/createCustomEvent.js +2 -2
- package/lib/utils/findMin.d.ts +7 -0
- package/lib/utils/findMin.d.ts.map +1 -0
- package/lib/utils/findMin.js +2 -2
- package/lib/utils/isObject.js +1 -1
- package/lib/utils/mapMap.d.ts +6 -0
- package/lib/utils/mapMap.d.ts.map +1 -0
- package/lib/utils/mapMap.js +2 -2
- package/lib/utils/normalizeLanguage.d.ts +2 -0
- package/lib/utils/normalizeLanguage.d.ts.map +1 -0
- package/lib/utils/normalizeLanguage.js +1 -1
- package/lib/utils/randomId.d.ts +2 -0
- package/lib/utils/randomId.d.ts.map +1 -0
- package/lib/utils/randomId.js +1 -1
- package/lib/utils/warnOnce.js +17 -0
- package/package.json +32 -31
- package/scripts/createPrecompiledGlobalize.mjs +44 -0
- package/src/StyleOptions.ts +39 -3
- package/src/defaultStyleOptions.ts +4 -2
- package/src/hooks/Composer.tsx +141 -99
- package/src/hooks/{index.js → index.ts} +2 -0
- package/src/hooks/internal/WebChatAPIContext.ts +68 -3
- package/src/hooks/internal/{useCreateActivityRendererInternal.js → useCreateActivityRendererInternal.ts} +6 -2
- package/src/hooks/middleware/applyMiddleware.js +2 -3
- package/src/hooks/middleware/concatMiddleware.spec.js +4 -6
- package/src/hooks/middleware/{concatMiddleware.js → concatMiddleware.ts} +7 -1
- package/src/hooks/middleware/{createDefaultCardActionMiddleware.js → createDefaultCardActionMiddleware.ts} +8 -4
- package/src/hooks/middleware/{createDefaultGroupActivitiesMiddleware.js → createDefaultGroupActivitiesMiddleware.ts} +20 -12
- package/src/hooks/{useActiveTyping.js → useActiveTyping.ts} +13 -9
- package/src/hooks/useActivities.ts +7 -0
- package/src/hooks/{useAvatarForBot.js → useAvatarForBot.ts} +1 -1
- package/src/hooks/{useAvatarForUser.js → useAvatarForUser.ts} +1 -1
- package/src/hooks/{useByteFormatter.js → useByteFormatter.ts} +1 -1
- package/src/hooks/{useConnectivityStatus.js → useConnectivityStatus.ts} +1 -1
- package/src/hooks/{useCreateActivityRenderer.js → useCreateActivityRenderer.ts} +2 -3
- package/src/hooks/{useCreateActivityStatusRenderer.js → useCreateActivityStatusRenderer.tsx} +24 -5
- package/src/hooks/{useCreateAvatarRenderer.js → useCreateAvatarRenderer.ts} +6 -3
- package/src/hooks/useCreateScrollToEndButtonRenderer.ts +6 -0
- package/src/hooks/{useDateFormatter.js → useDateFormatter.ts} +1 -1
- package/src/hooks/useDebouncedNotifications.spec.js +2 -0
- package/src/hooks/{useDebouncedNotifications.js → useDebouncedNotifications.ts} +10 -2
- package/src/hooks/{useDictateInterims.js → useDictateInterims.ts} +1 -1
- package/src/hooks/{useDictateState.js → useDictateState.ts} +1 -1
- package/src/hooks/{useDirection.js → useDirection.ts} +1 -1
- package/src/hooks/{useDisabled.js → useDisabled.ts} +1 -1
- package/src/hooks/{useDismissNotification.js → useDismissNotification.ts} +1 -1
- package/src/hooks/{useEmitTypingIndicator.js → useEmitTypingIndicator.ts} +1 -1
- package/src/hooks/{useGetSendTimeoutForActivity.js → useGetSendTimeoutForActivity.ts} +2 -1
- package/src/hooks/{useGrammars.js → useGrammars.ts} +1 -1
- package/src/hooks/useGroupActivities.ts +14 -0
- package/src/hooks/{useGroupTimestamp.js → useGroupTimestamp.ts} +1 -1
- package/src/hooks/{useLanguage.js → useLanguage.ts} +1 -1
- package/src/hooks/{useLastTypingAt.js → useLastTypingAt.ts} +2 -1
- package/src/hooks/{useLocalize.js → useLocalize.ts} +3 -1
- package/src/hooks/{useLocalizeDate.js → useLocalizeDate.ts} +2 -1
- package/src/hooks/{useLocalizer.js → useLocalizer.ts} +19 -6
- package/src/hooks/{useMarkActivityAsSpoken.js → useMarkActivityAsSpoken.ts} +2 -1
- package/src/hooks/{useNotifications.js → useNotifications.ts} +2 -1
- package/src/hooks/usePerformCardAction.ts +7 -0
- package/src/hooks/usePostActivity.ts +8 -0
- package/src/hooks/{useReferenceGrammarID.js → useReferenceGrammarID.ts} +1 -1
- package/src/hooks/{useRelativeTimeFormatter.js → useRelativeTimeFormatter.ts} +1 -1
- package/src/hooks/useRenderActivity.js +12 -10
- package/src/hooks/useRenderActivityStatus.js +1 -0
- package/src/hooks/useRenderAvatar.js +1 -0
- package/src/hooks/{useRenderToast.js → useRenderToast.ts} +2 -1
- package/src/hooks/useRenderTypingIndicator.ts +6 -0
- package/src/hooks/{useSendBoxValue.js → useSendBoxValue.ts} +1 -1
- package/src/hooks/{useSendEvent.js → useSendEvent.ts} +1 -1
- package/src/hooks/{useSendFiles.js → useSendFiles.ts} +1 -1
- package/src/hooks/useSendMessage.ts +9 -0
- package/src/hooks/{useSendMessageBack.js → useSendMessageBack.ts} +1 -1
- package/src/hooks/{useSendPostBack.js → useSendPostBack.ts} +1 -1
- package/src/hooks/{useSendTimeoutForActivity.js → useSendTimeoutForActivity.ts} +4 -1
- package/src/hooks/{useSendTypingIndicator.js → useSendTypingIndicator.ts} +1 -1
- package/src/hooks/useSetNotification.ts +6 -0
- package/src/hooks/{useShouldSpeakIncomingActivity.js → useShouldSpeakIncomingActivity.ts} +1 -1
- package/src/hooks/{useStartDictate.js → useStartDictate.ts} +1 -1
- package/src/hooks/{useStopDictate.js → useStopDictate.ts} +1 -1
- package/src/hooks/useStyleOptions.ts +6 -0
- package/src/hooks/{useSubmitSendBox.js → useSubmitSendBox.ts} +1 -1
- package/src/hooks/{useSuggestedActions.js → useSuggestedActions.ts} +5 -1
- package/src/hooks/useTimeoutForSend.ts +9 -0
- package/src/hooks/{useTrackDimension.js → useTrackDimension.ts} +1 -1
- package/src/hooks/{useTrackEvent.js → useTrackEvent.ts} +10 -2
- package/src/hooks/{useTrackException.js → useTrackException.ts} +1 -1
- package/src/hooks/{useTrackTiming.js → useTrackTiming.ts} +4 -1
- package/src/hooks/{useUserID.js → useUserID.ts} +1 -1
- package/src/hooks/{useUsername.js → useUsername.ts} +1 -1
- package/src/hooks/{useVoiceSelector.js → useVoiceSelector.ts} +4 -1
- package/src/hooks/utils/{observableToPromise.js → observableToPromise.ts} +5 -3
- package/src/index.ts +51 -0
- package/src/localization/Localize.spec.js +2 -0
- package/src/localization/{Localize.js → Localize.ts} +6 -6
- package/src/localization/ar-SA.json +1 -0
- package/src/localization/bg-BG.json +1 -0
- package/src/localization/ca-ES.json +1 -0
- package/src/localization/cs-CZ.json +1 -0
- package/src/localization/da-DK.json +1 -0
- package/src/localization/de-DE.json +1 -0
- package/src/localization/el-GR.json +1 -0
- package/src/localization/en-US.json +1 -0
- package/src/localization/es-ES.json +1 -0
- package/src/localization/et-EE.json +1 -0
- package/src/localization/eu-ES.json +1 -0
- package/src/localization/fi-FI.json +1 -0
- package/src/localization/fr-FR.json +1 -0
- package/src/localization/getAllLocalizedStrings.spec.js +3 -1
- package/src/localization/{getAllLocalizedStrings.js → getAllLocalizedStrings.ts} +2 -1
- package/src/localization/getLocaleString.spec.js +4 -2
- package/src/localization/{getLocaleString.js → getLocaleString.ts} +2 -2
- package/src/localization/{getRTLList.js → getRTLList.ts} +1 -1
- package/src/localization/gl-ES.json +1 -0
- package/src/localization/he-IL.json +1 -0
- package/src/localization/hi-IN.json +1 -0
- package/src/localization/hr-HR.json +1 -0
- package/src/localization/hu-HU.json +1 -0
- package/src/localization/id-ID.json +1 -0
- package/src/localization/it-IT.json +1 -0
- package/src/localization/ja-JP.json +1 -0
- package/src/localization/kk-KZ.json +1 -0
- package/src/localization/ko-KR.json +1 -0
- package/src/localization/lt-LT.json +1 -0
- package/src/localization/lv-LV.json +1 -0
- package/src/localization/{mergeLocalizedStrings.js → mergeLocalizedStrings.ts} +5 -1
- package/src/localization/ms-MY.json +1 -0
- package/src/localization/nb-NO.json +1 -0
- package/src/localization/nl-NL.json +1 -0
- package/src/localization/pl-PL.json +1 -0
- package/src/localization/pt-BR.json +1 -0
- package/src/localization/pt-PT.json +1 -0
- package/src/localization/ro-RO.json +1 -0
- package/src/localization/ru-RU.json +1 -0
- package/src/localization/sk-SK.json +1 -0
- package/src/localization/sl-SI.json +1 -0
- package/src/localization/sr-Cyrl-CS.json +1 -0
- package/src/localization/sr-Latn-CS.json +1 -0
- package/src/localization/sv-SE.json +1 -0
- package/src/localization/th-TH.json +1 -0
- package/src/localization/tr-TR.json +1 -0
- package/src/localization/uk-UA.json +1 -0
- package/src/localization/vi-VN.json +1 -0
- package/src/localization/yue.json +1 -0
- package/src/localization/zh-CN.json +1 -0
- package/src/localization/zh-HK.json +1 -0
- package/src/localization/zh-TW.json +1 -0
- package/src/normalizeStyleOptions.ts +43 -2
- package/src/tsconfig.json +3 -1
- package/src/types/ActivityMiddleware.ts +38 -0
- package/src/types/ActivityStatusMiddleware.ts +28 -0
- package/src/types/AttachmentForScreenReaderMiddleware.ts +24 -0
- package/src/types/AttachmentMiddleware.ts +16 -0
- package/src/types/AvatarMiddleware.ts +20 -0
- package/src/types/CardActionMiddleware.ts +21 -0
- package/src/types/ComponentMiddleware.ts +42 -0
- package/src/types/FunctionMiddleware.ts +13 -0
- package/src/types/GroupActivitiesMiddleware.ts +24 -0
- package/src/types/LocalizedStrings.ts +5 -0
- package/src/types/Notification.ts +10 -0
- package/src/types/PrecompiledGlobalize.ts +9 -0
- package/src/types/ScrollToEndButtonMiddleware.ts +34 -0
- package/src/types/SendState.ts +3 -0
- package/src/types/TelemetryMeasurementEvent.ts +44 -0
- package/src/types/ToastMiddleware.ts +16 -0
- package/src/types/Typing.ts +8 -0
- package/src/types/TypingIndicatorMiddleware.ts +18 -0
- package/src/types/WebSpeechPonyfill.ts +24 -0
- package/src/types/WebSpeechPonyfillFactory.ts +5 -0
- package/src/utils/{createCustomEvent.js → createCustomEvent.ts} +8 -3
- package/src/utils/findMin.spec.js +2 -0
- package/src/utils/{findMin.js → findMin.ts} +3 -3
- package/src/utils/mapMap.spec.js +2 -0
- package/src/utils/{mapMap.js → mapMap.ts} +4 -1
- package/src/utils/{normalizeLanguage.js → normalizeLanguage.ts} +1 -1
- package/src/utils/{randomId.js → randomId.ts} +1 -1
- package/src/utils/warnOnce.ts +10 -0
- package/lib/hooks/utils/singleToArray.js +0 -11
- package/scripts/createPrecompiledGlobalize.js +0 -41
- package/src/hooks/useActivities.js +0 -5
- package/src/hooks/useGroupActivities.js +0 -5
- package/src/hooks/usePerformCardAction.js +0 -5
- package/src/hooks/usePostActivity.js +0 -5
- package/src/hooks/useRenderTypingIndicator.js +0 -5
- package/src/hooks/useSendMessage.js +0 -5
- package/src/hooks/useSetNotification.js +0 -5
- package/src/hooks/useStyleOptions.js +0 -5
- package/src/hooks/useTimeoutForSend.js +0 -7
- package/src/hooks/utils/singleToArray.js +0 -3
- package/src/index.js +0 -10
- package/src/index.tsx +0 -10
package/lib/hooks/Composer.js
CHANGED
|
@@ -13,19 +13,11 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _simpleUpdateIn = _interopRequireDefault(require("simple-update-in"));
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
var _ErrorBoundary = _interopRequireDefault(require("./utils/ErrorBoundary"));
|
|
19
|
-
|
|
20
|
-
var _getAllLocalizedStrings = _interopRequireDefault(require("../localization/getAllLocalizedStrings"));
|
|
21
|
-
|
|
22
|
-
var _isObject = _interopRequireDefault(require("../utils/isObject"));
|
|
23
|
-
|
|
24
|
-
var _normalizeLanguage = _interopRequireDefault(require("../utils/normalizeLanguage"));
|
|
16
|
+
var _botframeworkWebchatCore = require("botframework-webchat-core");
|
|
25
17
|
|
|
26
|
-
var
|
|
18
|
+
var _WebChatAPIContext = _interopRequireDefault(require("./internal/WebChatAPIContext"));
|
|
27
19
|
|
|
28
|
-
var
|
|
20
|
+
var _createCustomEvent = _interopRequireDefault(require("../utils/createCustomEvent"));
|
|
29
21
|
|
|
30
22
|
var _createDefaultCardActionMiddleware = _interopRequireDefault(require("./middleware/createDefaultCardActionMiddleware"));
|
|
31
23
|
|
|
@@ -33,27 +25,35 @@ var _createDefaultGroupActivitiesMiddleware = _interopRequireDefault(require("./
|
|
|
33
25
|
|
|
34
26
|
var _defaultSelectVoice = _interopRequireDefault(require("./internal/defaultSelectVoice"));
|
|
35
27
|
|
|
28
|
+
var _ErrorBoundary = _interopRequireDefault(require("./utils/ErrorBoundary"));
|
|
29
|
+
|
|
30
|
+
var _getAllLocalizedStrings = _interopRequireDefault(require("../localization/getAllLocalizedStrings"));
|
|
31
|
+
|
|
32
|
+
var _isObject = _interopRequireDefault(require("../utils/isObject"));
|
|
33
|
+
|
|
36
34
|
var _mapMap = _interopRequireDefault(require("../utils/mapMap"));
|
|
37
35
|
|
|
36
|
+
var _normalizeLanguage = _interopRequireDefault(require("../utils/normalizeLanguage"));
|
|
37
|
+
|
|
38
|
+
var _normalizeStyleOptions = _interopRequireDefault(require("../normalizeStyleOptions"));
|
|
39
|
+
|
|
38
40
|
var _observableToPromise = _interopRequireDefault(require("./utils/observableToPromise"));
|
|
39
41
|
|
|
42
|
+
var _patchStyleOptionsFromDeprecatedProps = _interopRequireDefault(require("../patchStyleOptionsFromDeprecatedProps"));
|
|
43
|
+
|
|
40
44
|
var _Tracker = _interopRequireDefault(require("./internal/Tracker"));
|
|
41
45
|
|
|
42
46
|
var _WebChatReduxContext = _interopRequireWildcard(require("./internal/WebChatReduxContext"));
|
|
43
47
|
|
|
44
|
-
var _WebChatAPIContext = _interopRequireDefault(require("./internal/WebChatAPIContext"));
|
|
45
|
-
|
|
46
48
|
var _applyMiddleware = _interopRequireWildcard(require("./middleware/applyMiddleware"));
|
|
47
49
|
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
var _patchStyleOptionsFromDeprecatedProps = _interopRequireDefault(require("../patchStyleOptionsFromDeprecatedProps"));
|
|
50
|
+
var _PrecompiledGlobalize = _interopRequireDefault(require("../external/PrecompiledGlobalize"));
|
|
51
51
|
|
|
52
|
-
var
|
|
52
|
+
var _excluded = ["internalRenderErrorBox", "onTelemetry", "store"];
|
|
53
53
|
|
|
54
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var
|
|
54
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
55
55
|
|
|
56
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
56
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
57
57
|
|
|
58
58
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
59
59
|
|
|
@@ -63,7 +63,7 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
|
|
|
63
63
|
|
|
64
64
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
65
65
|
|
|
66
|
-
function _iterableToArrayLimit(arr, i) {
|
|
66
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
67
67
|
|
|
68
68
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
69
69
|
|
|
@@ -73,7 +73,7 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
|
|
|
73
73
|
|
|
74
74
|
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
75
75
|
|
|
76
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
76
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
77
77
|
|
|
78
78
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
79
79
|
|
|
@@ -85,7 +85,7 @@ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread n
|
|
|
85
85
|
|
|
86
86
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
87
87
|
|
|
88
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator
|
|
88
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
89
89
|
|
|
90
90
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
91
91
|
|
|
@@ -120,7 +120,7 @@ function createCardActionContext(_ref) {
|
|
|
120
120
|
directLine = _ref.directLine,
|
|
121
121
|
dispatch = _ref.dispatch;
|
|
122
122
|
|
|
123
|
-
var runMiddleware = _applyMiddleware.default.apply(void 0, ['card action'].concat(_toConsumableArray((0,
|
|
123
|
+
var runMiddleware = _applyMiddleware.default.apply(void 0, ['card action'].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(cardActionMiddleware)), [(0, _createDefaultCardActionMiddleware.default)()]))({
|
|
124
124
|
dispatch: dispatch
|
|
125
125
|
});
|
|
126
126
|
|
|
@@ -158,7 +158,7 @@ function createGroupActivitiesContext(_ref3) {
|
|
|
158
158
|
var groupActivitiesMiddleware = _ref3.groupActivitiesMiddleware,
|
|
159
159
|
groupTimestamp = _ref3.groupTimestamp;
|
|
160
160
|
|
|
161
|
-
var runMiddleware = _applyMiddleware.default.apply(void 0, ['group activities'].concat(_toConsumableArray((0,
|
|
161
|
+
var runMiddleware = _applyMiddleware.default.apply(void 0, ['group activities'].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(groupActivitiesMiddleware)), [(0, _createDefaultGroupActivitiesMiddleware.default)({
|
|
162
162
|
groupTimestamp: groupTimestamp
|
|
163
163
|
})]));
|
|
164
164
|
|
|
@@ -187,7 +187,7 @@ function mergeStringsOverrides(localizedStrings, language, overrideLocalizedStri
|
|
|
187
187
|
return _objectSpread(_objectSpread({}, localizedStrings), overrideLocalizedStrings);
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
var
|
|
190
|
+
var ComposerCore = function ComposerCore(_ref4) {
|
|
191
191
|
var activityMiddleware = _ref4.activityMiddleware,
|
|
192
192
|
activityRenderer = _ref4.activityRenderer,
|
|
193
193
|
activityStatusMiddleware = _ref4.activityStatusMiddleware,
|
|
@@ -211,6 +211,7 @@ var Composer = function Composer(_ref4) {
|
|
|
211
211
|
onTelemetry = _ref4.onTelemetry,
|
|
212
212
|
overrideLocalizedStrings = _ref4.overrideLocalizedStrings,
|
|
213
213
|
renderMarkdown = _ref4.renderMarkdown,
|
|
214
|
+
scrollToEndButtonMiddleware = _ref4.scrollToEndButtonMiddleware,
|
|
214
215
|
selectVoice = _ref4.selectVoice,
|
|
215
216
|
sendTimeout = _ref4.sendTimeout,
|
|
216
217
|
sendTypingIndicator = _ref4.sendTypingIndicator,
|
|
@@ -311,7 +312,7 @@ var Composer = function Composer(_ref4) {
|
|
|
311
312
|
activityRenderer && console.warn('Web Chat: "activityRenderer" is deprecated and will be removed on 2022-06-15, please use "activityMiddleware" instead.');
|
|
312
313
|
return activityRenderer || _applyMiddleware.forRenderer.apply(void 0, ['activity', {
|
|
313
314
|
strict: false
|
|
314
|
-
}].concat(_toConsumableArray((0,
|
|
315
|
+
}].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(activityMiddleware)), [function () {
|
|
315
316
|
return function () {
|
|
316
317
|
return function (_ref6) {
|
|
317
318
|
var activity = _ref6.activity;
|
|
@@ -329,7 +330,7 @@ var Composer = function Composer(_ref4) {
|
|
|
329
330
|
activityStatusRenderer && console.warn('Web Chat: "activityStatusRenderer" is deprecated and will be removed on 2022-06-15, please use "activityStatusMiddleware" instead.');
|
|
330
331
|
return activityStatusRenderer || _applyMiddleware.forRenderer.apply(void 0, ['activity status', {
|
|
331
332
|
strict: false
|
|
332
|
-
}].concat(_toConsumableArray((0,
|
|
333
|
+
}].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(activityStatusMiddleware)), [function () {
|
|
333
334
|
return function () {
|
|
334
335
|
return function () {
|
|
335
336
|
return false;
|
|
@@ -340,7 +341,7 @@ var Composer = function Composer(_ref4) {
|
|
|
340
341
|
var patchedAttachmentForScreenReaderRenderer = (0, _react.useMemo)(function () {
|
|
341
342
|
return _applyMiddleware.forRenderer.apply(void 0, ['attachment for screen reader', {
|
|
342
343
|
strict: true
|
|
343
|
-
}].concat(_toConsumableArray((0,
|
|
344
|
+
}].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(attachmentForScreenReaderMiddleware)), [function () {
|
|
344
345
|
return function () {
|
|
345
346
|
return function (_ref7) {
|
|
346
347
|
var attachment = _ref7.attachment;
|
|
@@ -367,7 +368,7 @@ var Composer = function Composer(_ref4) {
|
|
|
367
368
|
} // Attachment renderer
|
|
368
369
|
|
|
369
370
|
|
|
370
|
-
return _applyMiddleware.forLegacyRenderer.apply(void 0, ['attachment'].concat(_toConsumableArray((0,
|
|
371
|
+
return _applyMiddleware.forLegacyRenderer.apply(void 0, ['attachment'].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(attachmentMiddleware)), [function () {
|
|
371
372
|
return function () {
|
|
372
373
|
return function (_ref8) {
|
|
373
374
|
var attachment = _ref8.attachment;
|
|
@@ -385,7 +386,7 @@ var Composer = function Composer(_ref4) {
|
|
|
385
386
|
avatarRenderer && console.warn('Web Chat: "avatarRenderer" is deprecated and will be removed on 2022-06-15, please use "avatarMiddleware" instead.');
|
|
386
387
|
return avatarRenderer || _applyMiddleware.forRenderer.apply(void 0, ['avatar', {
|
|
387
388
|
strict: false
|
|
388
|
-
}].concat(_toConsumableArray((0,
|
|
389
|
+
}].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(avatarMiddleware)), [function () {
|
|
389
390
|
return function () {
|
|
390
391
|
return function () {
|
|
391
392
|
return false;
|
|
@@ -397,7 +398,7 @@ var Composer = function Composer(_ref4) {
|
|
|
397
398
|
toastRenderer && console.warn('Web Chat: "toastRenderer" is deprecated and will be removed on 2022-06-15, please use "toastMiddleware" instead.');
|
|
398
399
|
return toastRenderer || _applyMiddleware.forRenderer.apply(void 0, ['toast', {
|
|
399
400
|
strict: false
|
|
400
|
-
}].concat(_toConsumableArray((0,
|
|
401
|
+
}].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(toastMiddleware)), [function () {
|
|
401
402
|
return function () {
|
|
402
403
|
return function (_ref9) {
|
|
403
404
|
var notification = _ref9.notification;
|
|
@@ -415,7 +416,7 @@ var Composer = function Composer(_ref4) {
|
|
|
415
416
|
typingIndicatorRenderer && console.warn('Web Chat: "typingIndicatorRenderer" is deprecated and will be removed on 2022-06-15, please use "typingIndicatorMiddleware" instead.');
|
|
416
417
|
return typingIndicatorRenderer || _applyMiddleware.forRenderer.apply(void 0, ['typing indicator', {
|
|
417
418
|
strict: false
|
|
418
|
-
}].concat(_toConsumableArray((0,
|
|
419
|
+
}].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(typingIndicatorMiddleware)), [function () {
|
|
419
420
|
return function () {
|
|
420
421
|
return function () {
|
|
421
422
|
return false;
|
|
@@ -423,6 +424,17 @@ var Composer = function Composer(_ref4) {
|
|
|
423
424
|
};
|
|
424
425
|
}]))({});
|
|
425
426
|
}, [typingIndicatorMiddleware, typingIndicatorRenderer]);
|
|
427
|
+
var scrollToEndButtonRenderer = (0, _react.useMemo)(function () {
|
|
428
|
+
return _applyMiddleware.forRenderer.apply(void 0, ['scroll to end button', {
|
|
429
|
+
strict: true
|
|
430
|
+
}].concat(_toConsumableArray((0, _botframeworkWebchatCore.singleToArray)(scrollToEndButtonMiddleware)), [function () {
|
|
431
|
+
return function () {
|
|
432
|
+
return function () {
|
|
433
|
+
return false;
|
|
434
|
+
};
|
|
435
|
+
};
|
|
436
|
+
}]))();
|
|
437
|
+
}, [scrollToEndButtonMiddleware]);
|
|
426
438
|
/**
|
|
427
439
|
* This is a heavy function, and it is expected to be only called when there is a need to recreate business logic, e.g.
|
|
428
440
|
* - User ID changed, causing all send* functions to be updated
|
|
@@ -453,6 +465,7 @@ var Composer = function Composer(_ref4) {
|
|
|
453
465
|
localizedStrings: patchedLocalizedStrings,
|
|
454
466
|
onTelemetry: onTelemetry,
|
|
455
467
|
renderMarkdown: renderMarkdown,
|
|
468
|
+
scrollToEndButtonRenderer: scrollToEndButtonRenderer,
|
|
456
469
|
selectVoice: patchedSelectVoice,
|
|
457
470
|
sendTypingIndicator: sendTypingIndicator,
|
|
458
471
|
styleOptions: patchedStyleOptions,
|
|
@@ -463,62 +476,11 @@ var Composer = function Composer(_ref4) {
|
|
|
463
476
|
userID: userID,
|
|
464
477
|
username: username
|
|
465
478
|
});
|
|
466
|
-
}, [cardActionContext, directLine, disabled, downscaleImageToDataURL, groupActivitiesContext, hoistedDispatchers, internalErrorBoxClass, locale, localizedGlobalize, onTelemetry, patchedActivityRenderer, patchedActivityStatusRenderer, patchedAttachmentForScreenReaderRenderer, patchedAttachmentRenderer, patchedAvatarRenderer, patchedDir, patchedGrammars, patchedLocalizedStrings, patchedSelectVoice, patchedStyleOptions, patchedToastRenderer, patchedTypingIndicatorRenderer, renderMarkdown, sendTypingIndicator, telemetryDimensionsRef, trackDimension, userID, username]);
|
|
479
|
+
}, [cardActionContext, directLine, disabled, downscaleImageToDataURL, groupActivitiesContext, hoistedDispatchers, internalErrorBoxClass, locale, localizedGlobalize, onTelemetry, patchedActivityRenderer, patchedActivityStatusRenderer, patchedAttachmentForScreenReaderRenderer, patchedAttachmentRenderer, patchedAvatarRenderer, patchedDir, patchedGrammars, patchedLocalizedStrings, patchedSelectVoice, patchedStyleOptions, patchedToastRenderer, patchedTypingIndicatorRenderer, renderMarkdown, scrollToEndButtonRenderer, sendTypingIndicator, telemetryDimensionsRef, trackDimension, userID, username]);
|
|
467
480
|
return /*#__PURE__*/_react.default.createElement(_WebChatAPIContext.default.Provider, {
|
|
468
481
|
value: context
|
|
469
482
|
}, typeof children === 'function' ? children(context) : children, onTelemetry && /*#__PURE__*/_react.default.createElement(_Tracker.default, null));
|
|
470
|
-
}; // We will create a Redux store if it was not passed in
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
var ComposeWithStore = function ComposeWithStore(_ref10) {
|
|
474
|
-
var internalRenderErrorBox = _ref10.internalRenderErrorBox,
|
|
475
|
-
onTelemetry = _ref10.onTelemetry,
|
|
476
|
-
store = _ref10.store,
|
|
477
|
-
props = _objectWithoutProperties(_ref10, ["internalRenderErrorBox", "onTelemetry", "store"]);
|
|
478
|
-
|
|
479
|
-
var _useState = (0, _react.useState)(),
|
|
480
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
481
|
-
error = _useState2[0],
|
|
482
|
-
setError = _useState2[1];
|
|
483
|
-
|
|
484
|
-
var handleError = (0, _react.useCallback)(function (error) {
|
|
485
|
-
console.error('botframework-webchat: Uncaught exception', {
|
|
486
|
-
error: error
|
|
487
|
-
});
|
|
488
|
-
onTelemetry && onTelemetry((0, _createCustomEvent.default)('exception', {
|
|
489
|
-
error: error,
|
|
490
|
-
fatal: true
|
|
491
|
-
}));
|
|
492
|
-
setError(error);
|
|
493
|
-
}, [onTelemetry, setError]);
|
|
494
|
-
var memoizedStore = (0, _react.useMemo)(function () {
|
|
495
|
-
return store || (0, _botframeworkWebchatCore.createStore)();
|
|
496
|
-
}, [store]);
|
|
497
|
-
return error ? !!internalRenderErrorBox && internalRenderErrorBox({
|
|
498
|
-
error: error,
|
|
499
|
-
type: 'uncaught exception'
|
|
500
|
-
}) : /*#__PURE__*/_react.default.createElement(_ErrorBoundary.default, {
|
|
501
|
-
onError: handleError
|
|
502
|
-
}, /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
|
|
503
|
-
context: _WebChatReduxContext.default,
|
|
504
|
-
store: memoizedStore
|
|
505
|
-
}, /*#__PURE__*/_react.default.createElement(Composer, _extends({
|
|
506
|
-
internalRenderErrorBox: internalRenderErrorBox,
|
|
507
|
-
onTelemetry: onTelemetry
|
|
508
|
-
}, props))));
|
|
509
483
|
};
|
|
510
|
-
|
|
511
|
-
ComposeWithStore.defaultProps = {
|
|
512
|
-
internalRenderErrorBox: undefined,
|
|
513
|
-
onTelemetry: undefined,
|
|
514
|
-
store: undefined
|
|
515
|
-
};
|
|
516
|
-
ComposeWithStore.propTypes = {
|
|
517
|
-
internalRenderErrorBox: _propTypes.default.any,
|
|
518
|
-
onTelemetry: _propTypes.default.func,
|
|
519
|
-
store: _propTypes.default.any
|
|
520
|
-
};
|
|
521
|
-
var _default = ComposeWithStore;
|
|
522
484
|
/**
|
|
523
485
|
* @todo TODO: [P3] We should consider moving some data from Redux store to props
|
|
524
486
|
* Although we use `connectToWebChat` to hide the details of accessor of Redux store,
|
|
@@ -526,8 +488,8 @@ var _default = ComposeWithStore;
|
|
|
526
488
|
* We should decide which data is needed for React but not in other environment such as CLI/VSCode
|
|
527
489
|
*/
|
|
528
490
|
|
|
529
|
-
|
|
530
|
-
|
|
491
|
+
|
|
492
|
+
ComposerCore.defaultProps = {
|
|
531
493
|
activityMiddleware: undefined,
|
|
532
494
|
activityRenderer: undefined,
|
|
533
495
|
activityStatusMiddleware: undefined,
|
|
@@ -550,6 +512,7 @@ Composer.defaultProps = {
|
|
|
550
512
|
onTelemetry: undefined,
|
|
551
513
|
overrideLocalizedStrings: undefined,
|
|
552
514
|
renderMarkdown: undefined,
|
|
515
|
+
scrollToEndButtonMiddleware: undefined,
|
|
553
516
|
selectVoice: undefined,
|
|
554
517
|
sendTimeout: undefined,
|
|
555
518
|
sendTypingIndicator: false,
|
|
@@ -561,7 +524,7 @@ Composer.defaultProps = {
|
|
|
561
524
|
userID: '',
|
|
562
525
|
username: ''
|
|
563
526
|
};
|
|
564
|
-
|
|
527
|
+
ComposerCore.propTypes = {
|
|
565
528
|
activityMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
|
|
566
529
|
activityRenderer: _propTypes.default.func,
|
|
567
530
|
activityStatusMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
|
|
@@ -598,6 +561,7 @@ Composer.propTypes = {
|
|
|
598
561
|
onTelemetry: _propTypes.default.func,
|
|
599
562
|
overrideLocalizedStrings: _propTypes.default.oneOfType([_propTypes.default.any, _propTypes.default.func]),
|
|
600
563
|
renderMarkdown: _propTypes.default.func,
|
|
564
|
+
scrollToEndButtonMiddleware: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.func), _propTypes.default.func]),
|
|
601
565
|
selectVoice: _propTypes.default.func,
|
|
602
566
|
sendTimeout: _propTypes.default.number,
|
|
603
567
|
sendTypingIndicator: _propTypes.default.bool,
|
|
@@ -609,4 +573,56 @@ Composer.propTypes = {
|
|
|
609
573
|
userID: _propTypes.default.string,
|
|
610
574
|
username: _propTypes.default.string
|
|
611
575
|
};
|
|
612
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9Db21wb3Nlci50c3giXSwibmFtZXMiOlsiRElTUEFUQ0hFUlMiLCJjbGVhclN1Z2dlc3RlZEFjdGlvbnMiLCJkaXNtaXNzTm90aWZpY2F0aW9uIiwiZW1pdFR5cGluZ0luZGljYXRvciIsIm1hcmtBY3Rpdml0eSIsInBvc3RBY3Rpdml0eSIsInNlbmRFdmVudCIsInNlbmRGaWxlcyIsInNlbmRNZXNzYWdlIiwic2VuZE1lc3NhZ2VCYWNrIiwic2VuZFBvc3RCYWNrIiwic2V0RGljdGF0ZUludGVyaW1zIiwic2V0RGljdGF0ZVN0YXRlIiwic2V0Tm90aWZpY2F0aW9uIiwic2V0U2VuZEJveCIsInNldFNlbmRUaW1lb3V0Iiwic3RhcnREaWN0YXRlIiwic3RhcnRTcGVha2luZ0FjdGl2aXR5Iiwic3RvcERpY3RhdGUiLCJzdG9wU3BlYWtpbmdBY3Rpdml0eSIsInN1Ym1pdFNlbmRCb3giLCJjcmVhdGVDYXJkQWN0aW9uQ29udGV4dCIsImNhcmRBY3Rpb25NaWRkbGV3YXJlIiwiZGlyZWN0TGluZSIsImRpc3BhdGNoIiwicnVuTWlkZGxld2FyZSIsImFwcGx5TWlkZGxld2FyZSIsIm9uQ2FyZEFjdGlvbiIsImNhcmRBY3Rpb24iLCJ0YXJnZXQiLCJnZXRTaWduSW5VcmwiLCJ0eXBlIiwidmFsdWUiLCJnZXRTZXNzaW9uSWQiLCJ0aGVuIiwic2Vzc2lvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29uc29sZSIsIndhcm4iLCJjcmVhdGVHcm91cEFjdGl2aXRpZXNDb250ZXh0IiwiZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSIsImdyb3VwVGltZXN0YW1wIiwiZ3JvdXBBY3Rpdml0aWVzIiwibWVyZ2VTdHJpbmdzT3ZlcnJpZGVzIiwibG9jYWxpemVkU3RyaW5ncyIsImxhbmd1YWdlIiwib3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzIiwibWVyZ2VkIiwiRXJyb3IiLCJDb21wb3NlciIsImFjdGl2aXR5TWlkZGxld2FyZSIsImFjdGl2aXR5UmVuZGVyZXIiLCJhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUiLCJhY3Rpdml0eVN0YXR1c1JlbmRlcmVyIiwiYXR0YWNobWVudE1pZGRsZXdhcmUiLCJhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSIsImF0dGFjaG1lbnRSZW5kZXJlciIsImF2YXRhck1pZGRsZXdhcmUiLCJhdmF0YXJSZW5kZXJlciIsImNoaWxkcmVuIiwiZGlyIiwiZGlzYWJsZWQiLCJkb3duc2NhbGVJbWFnZVRvRGF0YVVSTCIsImdyYW1tYXJzIiwiaW50ZXJuYWxFcnJvckJveENsYXNzIiwibG9jYWxlIiwib25UZWxlbWV0cnkiLCJyZW5kZXJNYXJrZG93biIsInNlbGVjdFZvaWNlIiwic2VuZFRpbWVvdXQiLCJzZW5kVHlwaW5nSW5kaWNhdG9yIiwic3R5bGVPcHRpb25zIiwidG9hc3RNaWRkbGV3YXJlIiwidG9hc3RSZW5kZXJlciIsInR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUiLCJ0eXBpbmdJbmRpY2F0b3JSZW5kZXJlciIsInVzZXJJRCIsInVzZXJuYW1lIiwidGVsZW1ldHJ5RGltZW5zaW9uc1JlZiIsInBhdGNoZWREaXIiLCJwYXRjaGVkR3JhbW1hcnMiLCJwYXRjaGVkU3R5bGVPcHRpb25zIiwiY2FyZEFjdGlvbkNvbnRleHQiLCJwYXRjaGVkU2VsZWN0Vm9pY2UiLCJkZWZhdWx0U2VsZWN0Vm9pY2UiLCJiaW5kIiwiZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCIsImhvaXN0ZWREaXNwYXRjaGVycyIsImRpc3BhdGNoZXIiLCJwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyIsImxvY2FsaXplZEdsb2JhbGl6ZSIsIkdMT0JBTElaRSIsIkdMT0JBTElaRV9MQU5HVUFHRSIsInRyYWNrRGltZW5zaW9uIiwibmFtZSIsImRhdGEiLCJjdXJyZW50IiwicGF0Y2hlZEFjdGl2aXR5UmVuZGVyZXIiLCJhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlciIsInN0cmljdCIsImFjdGl2aXR5IiwicGF0Y2hlZEFjdGl2aXR5U3RhdHVzUmVuZGVyZXIiLCJwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyIiwiYXR0YWNobWVudCIsImNvbnRlbnRUeXBlIiwicGF0Y2hlZEF0dGFjaG1lbnRSZW5kZXJlciIsImFwcGx5TWlkZGxld2FyZUZvckxlZ2FjeVJlbmRlcmVyIiwicGF0Y2hlZEF2YXRhclJlbmRlcmVyIiwicGF0Y2hlZFRvYXN0UmVuZGVyZXIiLCJub3RpZmljYXRpb24iLCJwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIiLCJjb250ZXh0IiwiYXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyIiwibG9jYWxpemVkR2xvYmFsaXplU3RhdGUiLCJDb21wb3NlV2l0aFN0b3JlIiwiaW50ZXJuYWxSZW5kZXJFcnJvckJveCIsInN0b3JlIiwicHJvcHMiLCJlcnJvciIsInNldEVycm9yIiwiaGFuZGxlRXJyb3IiLCJmYXRhbCIsIm1lbW9pemVkU3RvcmUiLCJXZWJDaGF0UmVkdXhDb250ZXh0IiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYW55IiwiZnVuYyIsIndpbmRvdyIsIm5hdmlnYXRvciIsIm9uZU9mVHlwZSIsImFycmF5T2YiLCJvbmVPZiIsInNoYXBlIiwiYWN0aXZpdHkkIiwic3Vic2NyaWJlIiwiaXNSZXF1aXJlZCIsImNvbm5lY3Rpb25TdGF0dXMkIiwiZW5kIiwicmVmZXJlbmNlR3JhbW1hcklEIiwic3RyaW5nIiwidG9rZW4iLCJib29sIiwibnVtYmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBR0E7O0FBNEJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUtBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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RUFBQUEsV0FBVyxFQUFFMEQsbUJBQVVrQixNQXJDSjtBQXNDbkIzRSxFQUFBQSxtQkFBbUIsRUFBRXlELG1CQUFVaUIsSUF0Q1o7QUF1Q25CekUsRUFBQUEsWUFBWSxFQUFFd0QsbUJBQVVDLEdBdkNMO0FBd0NuQnhELEVBQUFBLGVBQWUsRUFBRXVELG1CQUFVSyxTQUFWLENBQW9CLENBQUNMLG1CQUFVTSxPQUFWLENBQWtCTixtQkFBVUUsSUFBNUIsQ0FBRCxFQUFvQ0YsbUJBQVVFLElBQTlDLENBQXBCLENBeENFO0FBeUNuQnhELEVBQUFBLGFBQWEsRUFBRXNELG1CQUFVRSxJQXpDTjtBQTBDbkJ2RCxFQUFBQSx5QkFBeUIsRUFBRXFELG1CQUFVSyxTQUFWLENBQW9CLENBQUNMLG1CQUFVTSxPQUFWLENBQWtCTixtQkFBVUUsSUFBNUIsQ0FBRCxFQUFvQ0YsbUJBQVVFLElBQTlDLENBQXBCLENBMUNSO0FBMkNuQnRELEVBQUFBLHVCQUF1QixFQUFFb0QsbUJBQVVFLElBM0NoQjtBQTRDbkJyRCxFQUFBQSxNQUFNLEVBQUVtRCxtQkFBVWUsTUE1Q0M7QUE2Q25CakUsRUFBQUEsUUFBUSxFQUFFa0QsbUJBQVVlO0FBN0NELENBQXJCIiwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgRkMsIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1cGRhdGVJbiBmcm9tICdzaW1wbGUtdXBkYXRlLWluJztcblxuaW1wb3J0IGNyZWF0ZUN1c3RvbUV2ZW50IGZyb20gJy4uL3V0aWxzL2NyZWF0ZUN1c3RvbUV2ZW50JztcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vdXRpbHMvRXJyb3JCb3VuZGFyeSc7XG5pbXBvcnQgZ2V0QWxsTG9jYWxpemVkU3RyaW5ncyBmcm9tICcuLi9sb2NhbGl6YXRpb24vZ2V0QWxsTG9jYWxpemVkU3RyaW5ncyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi4vdXRpbHMvaXNPYmplY3QnO1xuaW1wb3J0IG5vcm1hbGl6ZUxhbmd1YWdlIGZyb20gJy4uL3V0aWxzL25vcm1hbGl6ZUxhbmd1YWdlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBQcmVjb21waWxlZEdsb2JhbGl6ZSBmcm9tICcuLi9leHRlcm5hbC9QcmVjb21waWxlZEdsb2JhbGl6ZSc7XG5pbXBvcnQgU3R5bGVPcHRpb25zIGZyb20gJy4uL1N0eWxlT3B0aW9ucyc7XG5cbmltcG9ydCB7XG4gIGNsZWFyU3VnZ2VzdGVkQWN0aW9ucyxcbiAgY29ubmVjdCBhcyBjcmVhdGVDb25uZWN0QWN0aW9uLFxuICBjcmVhdGVTdG9yZSxcbiAgZGlzY29ubmVjdCxcbiAgZGlzbWlzc05vdGlmaWNhdGlvbixcbiAgZW1pdFR5cGluZ0luZGljYXRvcixcbiAgbWFya0FjdGl2aXR5LFxuICBwb3N0QWN0aXZpdHksXG4gIHNlbmRFdmVudCxcbiAgc2VuZEZpbGVzLFxuICBzZW5kTWVzc2FnZSxcbiAgc2VuZE1lc3NhZ2VCYWNrLFxuICBzZW5kUG9zdEJhY2ssXG4gIHNldERpY3RhdGVJbnRlcmltcyxcbiAgc2V0RGljdGF0ZVN0YXRlLFxuICBzZXRMYW5ndWFnZSxcbiAgc2V0Tm90aWZpY2F0aW9uLFxuICBzZXRTZW5kQm94LFxuICBzZXRTZW5kVGltZW91dCxcbiAgc2V0U2VuZFR5cGluZ0luZGljYXRvcixcbiAgc3RhcnREaWN0YXRlLFxuICBzdGFydFNwZWFraW5nQWN0aXZpdHksXG4gIHN0b3BEaWN0YXRlLFxuICBzdG9wU3BlYWtpbmdBY3Rpdml0eSxcbiAgc3VibWl0U2VuZEJveFxufSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcblxuaW1wb3J0IGNyZWF0ZURlZmF1bHRDYXJkQWN0aW9uTWlkZGxld2FyZSBmcm9tICcuL21pZGRsZXdhcmUvY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlJztcbmltcG9ydCBjcmVhdGVEZWZhdWx0R3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSBmcm9tICcuL21pZGRsZXdhcmUvY3JlYXRlRGVmYXVsdEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RWb2ljZSBmcm9tICcuL2ludGVybmFsL2RlZmF1bHRTZWxlY3RWb2ljZSc7XG5pbXBvcnQgbWFwTWFwIGZyb20gJy4uL3V0aWxzL21hcE1hcCc7XG5pbXBvcnQgb2JzZXJ2YWJsZVRvUHJvbWlzZSBmcm9tICcuL3V0aWxzL29ic2VydmFibGVUb1Byb21pc2UnO1xuaW1wb3J0IFRyYWNrZXIgZnJvbSAnLi9pbnRlcm5hbC9UcmFja2VyJztcbmltcG9ydCBXZWJDaGF0UmVkdXhDb250ZXh0LCB7IHVzZURpc3BhdGNoIH0gZnJvbSAnLi9pbnRlcm5hbC9XZWJDaGF0UmVkdXhDb250ZXh0JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgV2ViQ2hhdEFQSUNvbnRleHQgfSBmcm9tICcuL2ludGVybmFsL1dlYkNoYXRBUElDb250ZXh0JztcblxuaW1wb3J0IGFwcGx5TWlkZGxld2FyZSwge1xuICBmb3JMZWdhY3lSZW5kZXJlciBhcyBhcHBseU1pZGRsZXdhcmVGb3JMZWdhY3lSZW5kZXJlcixcbiAgZm9yUmVuZGVyZXIgYXMgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXJcbn0gZnJvbSAnLi9taWRkbGV3YXJlL2FwcGx5TWlkZGxld2FyZSc7XG5cbmltcG9ydCBub3JtYWxpemVTdHlsZU9wdGlvbnMgZnJvbSAnLi4vbm9ybWFsaXplU3R5bGVPcHRpb25zJztcbmltcG9ydCBwYXRjaFN0eWxlT3B0aW9uc0Zyb21EZXByZWNhdGVkUHJvcHMgZnJvbSAnLi4vcGF0Y2hTdHlsZU9wdGlvbnNGcm9tRGVwcmVjYXRlZFByb3BzJztcbmltcG9ydCBzaW5nbGVUb0FycmF5IGZyb20gJy4vdXRpbHMvc2luZ2xlVG9BcnJheSc7XG5cbi8vIExpc3Qgb2YgUmVkdXggYWN0aW9ucyBmYWN0b3J5IHdlIGFyZSBob2lzdGluZyBhcyBXZWIgQ2hhdCBmdW5jdGlvbnNcbmNvbnN0IERJU1BBVENIRVJTID0ge1xuICBjbGVhclN1Z2dlc3RlZEFjdGlvbnMsXG4gIGRpc21pc3NOb3RpZmljYXRpb24sXG4gIGVtaXRUeXBpbmdJbmRpY2F0b3IsXG4gIG1hcmtBY3Rpdml0eSxcbiAgcG9zdEFjdGl2aXR5LFxuICBzZW5kRXZlbnQsXG4gIHNlbmRGaWxlcyxcbiAgc2VuZE1lc3NhZ2UsXG4gIHNlbmRNZXNzYWdlQmFjayxcbiAgc2VuZFBvc3RCYWNrLFxuICBzZXREaWN0YXRlSW50ZXJpbXMsXG4gIHNldERpY3RhdGVTdGF0ZSxcbiAgc2V0Tm90aWZpY2F0aW9uLFxuICBzZXRTZW5kQm94LFxuICBzZXRTZW5kVGltZW91dCxcbiAgc3RhcnREaWN0YXRlLFxuICBzdGFydFNwZWFraW5nQWN0aXZpdHksXG4gIHN0b3BEaWN0YXRlLFxuICBzdG9wU3BlYWtpbmdBY3Rpdml0eSxcbiAgc3VibWl0U2VuZEJveFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2FyZEFjdGlvbkNvbnRleHQoeyBjYXJkQWN0aW9uTWlkZGxld2FyZSwgZGlyZWN0TGluZSwgZGlzcGF0Y2ggfSkge1xuICBjb25zdCBydW5NaWRkbGV3YXJlID0gYXBwbHlNaWRkbGV3YXJlKFxuICAgICdjYXJkIGFjdGlvbicsXG4gICAgLi4uc2luZ2xlVG9BcnJheShjYXJkQWN0aW9uTWlkZGxld2FyZSksXG4gICAgY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlKClcbiAgKSh7IGRpc3BhdGNoIH0pO1xuXG4gIHJldHVybiB7XG4gICAgb25DYXJkQWN0aW9uOiAoY2FyZEFjdGlvbiwgeyB0YXJnZXQgfTogeyB0YXJnZXQ/OiBhbnkgfSA9IHt9KSA9PlxuICAgICAgcnVuTWlkZGxld2FyZSh7XG4gICAgICAgIGNhcmRBY3Rpb24sXG4gICAgICAgIGdldFNpZ25JblVybDpcbiAgICAgICAgICBjYXJkQWN0aW9uLnR5cGUgPT09ICdzaWduaW4nXG4gICAgICAgICAgICA/ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBjYXJkQWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdExpbmUuZ2V0U2Vzc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAqIEB0b2RvIFRPRE86IFtQM10gV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIG9uZSB0byBhc3luYy9hd2FpdC5cbiAgICAgICAgICAgICAgICAgICAqICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHRoaXMgcHJvamVjdCB0byB1c2UgYXN5bmMuXG4gICAgICAgICAgICAgICAgICAgKiAgICAgICBUaHVzLCB3ZSBuZWVkIHRvIGFkZCBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ydW50aW1lIGFuZCBAYmFiZWwvcnVudGltZS5cbiAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUb1Byb21pc2UoZGlyZWN0TGluZS5nZXRTZXNzaW9uSWQoKSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkID0+IGAke3ZhbHVlfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGAmY29kZV9jaGFsbGVuZ2U9JHtzZXNzaW9uSWR9YCl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBPQXV0aCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgRGlyZWN0IExpbmUgYWRhcHRlci4nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB0YXJnZXRcbiAgICAgIH0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyb3VwQWN0aXZpdGllc0NvbnRleHQoeyBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLCBncm91cFRpbWVzdGFtcCB9KSB7XG4gIGNvbnN0IHJ1bk1pZGRsZXdhcmUgPSBhcHBseU1pZGRsZXdhcmUoXG4gICAgJ2dyb3VwIGFjdGl2aXRpZXMnLFxuICAgIC4uLnNpbmdsZVRvQXJyYXkoZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSksXG4gICAgY3JlYXRlRGVmYXVsdEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUoeyBncm91cFRpbWVzdGFtcCB9KVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgZ3JvdXBBY3Rpdml0aWVzOiBydW5NaWRkbGV3YXJlKHt9KVxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVN0cmluZ3NPdmVycmlkZXMobG9jYWxpemVkU3RyaW5ncywgbGFuZ3VhZ2UsIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncykge1xuICBpZiAoIW92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncykge1xuICAgIHJldHVybiBsb2NhbGl6ZWRTdHJpbmdzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBtZXJnZWQgPSBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MobG9jYWxpemVkU3RyaW5ncywgbGFuZ3VhZ2UpO1xuXG4gICAgaWYgKCFpc09iamVjdChtZXJnZWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gb2JqZWN0LicpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MgbXVzdCBiZSBlaXRoZXIgYSBmdW5jdGlvbiwgYW4gb2JqZWN0LCBvciBmYWxzeS4nKTtcbiAgfVxuXG4gIHJldHVybiB7IC4uLmxvY2FsaXplZFN0cmluZ3MsIC4uLm92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyB9O1xufVxuXG50eXBlIENvbXBvc2VyUHJvcHMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZTogYW55O1xuICBhY3Rpdml0eVJlbmRlcmVyOiBhbnk7XG4gIGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZTogYW55O1xuICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyOiBhbnk7XG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlOiBhbnk7XG4gIGF0dGFjaG1lbnRNaWRkbGV3YXJlOiBhbnk7XG4gIGF0dGFjaG1lbnRSZW5kZXJlcjogYW55O1xuICBhdmF0YXJNaWRkbGV3YXJlOiBhbnk7XG4gIGF2YXRhclJlbmRlcmVyOiBhbnk7XG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlOiBhbnk7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGRpcjogc3RyaW5nO1xuICBkaXJlY3RMaW5lOiBhbnk7XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTDogYW55O1xuICBncmFtbWFyczogYW55O1xuICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlOiBhbnk7XG4gIGdyb3VwVGltZXN0YW1wOiBib29sZWFuIHwgbnVtYmVyO1xuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M6IGFueTtcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveDogYW55O1xuICBsb2NhbGU6IHN0cmluZztcbiAgb25UZWxlbWV0cnk6IGFueTtcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzOiBhbnk7XG4gIHJlbmRlck1hcmtkb3duOiBhbnk7XG4gIHNlbGVjdFZvaWNlOiBhbnk7XG4gIHNlbmRUaW1lb3V0OiBudW1iZXI7XG4gIHNlbmRUeXBpbmdJbmRpY2F0b3I6IGFueTtcbiAgc3R5bGVPcHRpb25zOiBTdHlsZU9wdGlvbnM7XG4gIHRvYXN0TWlkZGxld2FyZTogYW55O1xuICB0b2FzdFJlbmRlcmVyOiBhbnk7XG4gIHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmU6IGFueTtcbiAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXI6IGFueTtcbiAgdXNlcklEOiBzdHJpbmc7XG4gIHVzZXJuYW1lOiBzdHJpbmc7XG59O1xuXG5jb25zdCBDb21wb3NlcjogRkM8Q29tcG9zZXJQcm9wcz4gPSAoe1xuICBhY3Rpdml0eU1pZGRsZXdhcmUsXG4gIGFjdGl2aXR5UmVuZGVyZXIsXG4gIGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSxcbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcixcbiAgYXR0YWNobWVudE1pZGRsZXdhcmUsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlLFxuICBhdHRhY2htZW50UmVuZGVyZXIsXG4gIGF2YXRhck1pZGRsZXdhcmUsXG4gIGF2YXRhclJlbmRlcmVyLFxuICBjYXJkQWN0aW9uTWlkZGxld2FyZSxcbiAgY2hpbGRyZW4sXG4gIGRpcixcbiAgZGlyZWN0TGluZSxcbiAgZGlzYWJsZWQsXG4gIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMLFxuICBncmFtbWFycyxcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSxcbiAgZ3JvdXBUaW1lc3RhbXAsXG4gIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgbG9jYWxlLFxuICBvblRlbGVtZXRyeSxcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzLFxuICByZW5kZXJNYXJrZG93bixcbiAgc2VsZWN0Vm9pY2UsXG4gIHNlbmRUaW1lb3V0LFxuICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICBzdHlsZU9wdGlvbnMsXG4gIHRvYXN0TWlkZGxld2FyZSxcbiAgdG9hc3RSZW5kZXJlcixcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSxcbiAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gIHVzZXJJRCxcbiAgdXNlcm5hbWVcbn0pID0+IHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmID0gdXNlUmVmKHt9KTtcblxuICBjb25zdCBwYXRjaGVkRGlyID0gdXNlTWVtbygoKSA9PiAoZGlyID09PSAnbHRyJyB8fCBkaXIgPT09ICdydGwnID8gZGlyIDogJ2F1dG8nKSwgW2Rpcl0pO1xuICBjb25zdCBwYXRjaGVkR3JhbW1hcnMgPSB1c2VNZW1vKCgpID0+IGdyYW1tYXJzIHx8IFtdLCBbZ3JhbW1hcnNdKTtcbiAgY29uc3QgcGF0Y2hlZFN0eWxlT3B0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbm9ybWFsaXplU3R5bGVPcHRpb25zKHBhdGNoU3R5bGVPcHRpb25zRnJvbURlcHJlY2F0ZWRQcm9wcyhzdHlsZU9wdGlvbnMsIHsgZ3JvdXBUaW1lc3RhbXAsIHNlbmRUaW1lb3V0IH0pKSxcbiAgICBbZ3JvdXBUaW1lc3RhbXAsIHNlbmRUaW1lb3V0LCBzdHlsZU9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRMYW5ndWFnZShsb2NhbGUpKTtcbiAgfSwgW2Rpc3BhdGNoLCBsb2NhbGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHR5cGVvZiBzZW5kVGltZW91dCA9PT0gJ251bWJlcicgJiYgZGlzcGF0Y2goc2V0U2VuZFRpbWVvdXQoc2VuZFRpbWVvdXQpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzZW5kVGltZW91dF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0U2VuZFR5cGluZ0luZGljYXRvcighIXNlbmRUeXBpbmdJbmRpY2F0b3IpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzZW5kVHlwaW5nSW5kaWNhdG9yXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChcbiAgICAgIGNyZWF0ZUNvbm5lY3RBY3Rpb24oe1xuICAgICAgICBkaXJlY3RMaW5lLFxuICAgICAgICB1c2VySUQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBAdG9kbyBUT0RPOiBbUDNdIGRpc2Nvbm5lY3QoKSBpcyBhbiBhc3luYyBjYWxsIChwZW5kaW5nIC0+IGZ1bGZpbGxlZCksIHdlIG5lZWQgdG8gd2FpdCwgb3IgY2hhbmdlIGl0IHRvIHJlY29ubmVjdCgpXG4gICAgICAgKi9cbiAgICAgIGRpc3BhdGNoKGRpc2Nvbm5lY3QoKSk7XG4gICAgfTtcbiAgfSwgW2Rpc3BhdGNoLCBkaXJlY3RMaW5lLCB1c2VySUQsIHVzZXJuYW1lXSk7XG5cbiAgY29uc3QgY2FyZEFjdGlvbkNvbnRleHQgPSB1c2VNZW1vKCgpID0+IGNyZWF0ZUNhcmRBY3Rpb25Db250ZXh0KHsgY2FyZEFjdGlvbk1pZGRsZXdhcmUsIGRpcmVjdExpbmUsIGRpc3BhdGNoIH0pLCBbXG4gICAgY2FyZEFjdGlvbk1pZGRsZXdhcmUsXG4gICAgZGlyZWN0TGluZSxcbiAgICBkaXNwYXRjaFxuICBdKTtcblxuICBjb25zdCBwYXRjaGVkU2VsZWN0Vm9pY2UgPSB1c2VNZW1vKCgpID0+IHNlbGVjdFZvaWNlIHx8IGRlZmF1bHRTZWxlY3RWb2ljZS5iaW5kKG51bGwsIHsgbGFuZ3VhZ2U6IGxvY2FsZSB9KSwgW1xuICAgIGxvY2FsZSxcbiAgICBzZWxlY3RWb2ljZVxuICBdKTtcblxuICBjb25zdCBncm91cEFjdGl2aXRpZXNDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY3JlYXRlR3JvdXBBY3Rpdml0aWVzQ29udGV4dCh7XG4gICAgICAgIGdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUsXG4gICAgICAgIGdyb3VwVGltZXN0YW1wOiBwYXRjaGVkU3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wXG4gICAgICB9KSxcbiAgICBbZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSwgcGF0Y2hlZFN0eWxlT3B0aW9ucy5ncm91cFRpbWVzdGFtcF1cbiAgKTtcblxuICBjb25zdCBob2lzdGVkRGlzcGF0Y2hlcnMgPSB1c2VNZW1vKFxuICAgICgpID0+IG1hcE1hcChESVNQQVRDSEVSUywgZGlzcGF0Y2hlciA9PiAoLi4uYXJncykgPT4gZGlzcGF0Y2goZGlzcGF0Y2hlciguLi5hcmdzKSkpLFxuICAgIFtkaXNwYXRjaF1cbiAgKTtcblxuICBjb25zdCBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbWVyZ2VTdHJpbmdzT3ZlcnJpZGVzKGdldEFsbExvY2FsaXplZFN0cmluZ3MoKVtub3JtYWxpemVMYW5ndWFnZShsb2NhbGUpXSwgbG9jYWxlLCBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MpLFxuICAgIFtsb2NhbGUsIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5nc11cbiAgKTtcblxuICBjb25zdCBsb2NhbGl6ZWRHbG9iYWxpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB7IEdMT0JBTElaRSwgR0xPQkFMSVpFX0xBTkdVQUdFIH0gPSBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyB8fCB7fTtcblxuICAgIHJldHVybiBHTE9CQUxJWkUgfHwgKEdMT0JBTElaRV9MQU5HVUFHRSAmJiBQcmVjb21waWxlZEdsb2JhbGl6ZShHTE9CQUxJWkVfTEFOR1VBR0UpKSB8fCBQcmVjb21waWxlZEdsb2JhbGl6ZSgnZW4nKTtcbiAgfSwgW3BhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzXSk7XG5cbiAgY29uc3QgdHJhY2tEaW1lbnNpb24gPSB1c2VDYWxsYmFjayhcbiAgICAobmFtZSwgZGF0YSkgPT4ge1xuICAgICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdib3RmcmFtZXdvcmstd2ViY2hhdDogVGVsZW1ldHJ5IGRpbWVuc2lvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0YTtcblxuICAgICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBUZWxlbWV0cnkgZGltZW5zaW9uIGRhdGEgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIHRlbGVtZXRyeURpbWVuc2lvbnNSZWYuY3VycmVudCA9IHVwZGF0ZUluKFxuICAgICAgICB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmLmN1cnJlbnQsXG4gICAgICAgIFtuYW1lXSxcbiAgICAgICAgdHlwZSA9PT0gJ3VuZGVmaW5lZCcgPyBkYXRhIDogKCkgPT4gZGF0YVxuICAgICAgKTtcbiAgICB9LFxuICAgIFt0ZWxlbWV0cnlEaW1lbnNpb25zUmVmXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRBY3Rpdml0eVJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgYWN0aXZpdHlSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYWN0aXZpdHlSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwiYWN0aXZpdHlNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2aXR5UmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnYWN0aXZpdHknLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheShhY3Rpdml0eU1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PiAoKSA9PiAoeyBhY3Rpdml0eSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGFjdGl2aXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbmRlcmVyIGZvciBhY3Rpdml0eSBvZiB0eXBlIFwiJHthY3Rpdml0eS50eXBlfVwiYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWN0aXZpdHkgdG8gcmVuZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFthY3Rpdml0eU1pZGRsZXdhcmUsIGFjdGl2aXR5UmVuZGVyZXJdKTtcblxuICBjb25zdCBwYXRjaGVkQWN0aXZpdHlTdGF0dXNSZW5kZXJlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXIgJiZcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dlYiBDaGF0OiBcImFjdGl2aXR5U3RhdHVzUmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcImFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZVwiIGluc3RlYWQuJ1xuICAgICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyIHx8XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcihcbiAgICAgICAgJ2FjdGl2aXR5IHN0YXR1cycsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICgpID0+IGZhbHNlXG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFthY3Rpdml0eVN0YXR1c01pZGRsZXdhcmUsIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXJdKTtcblxuICBjb25zdCBwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdhdHRhY2htZW50IGZvciBzY3JlZW4gcmVhZGVyJyxcbiAgICAgICAgeyBzdHJpY3Q6IHRydWUgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheShhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICh7IGF0dGFjaG1lbnQgfSkgPT4ge1xuICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIHJlbmRlcmVyIGZvciBhdHRhY2htZW50IGZvciBzY3JlZW4gcmVhZGVyIG9mIHR5cGUgXCIke2F0dGFjaG1lbnQuY29udGVudFR5cGV9XCJgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAdG9kbyBUT0RPOiBbUDRdIE1pZ2h0IGJlIGFibGUgdG8gdGhyb3cgd2l0aG91dCByZXR1cm5pbmcgYSBmdW5jdGlvbiAtLSBpbnZlc3RpZ2F0ZSBhbmQgcG9zc2libHkgZml4XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXR0YWNobWVudCB0byByZW5kZXInKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApKHt9KSxcbiAgICBbYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmVdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZEF0dGFjaG1lbnRSZW5kZXJlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChhdHRhY2htZW50UmVuZGVyZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dlYiBDaGF0OiBcImF0dGFjaG1lbnRSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwiYXR0YWNobWVudE1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBhdHRhY2htZW50UmVuZGVyZXI7XG4gICAgfVxuXG4gICAgLy8gQXR0YWNobWVudCByZW5kZXJlclxuICAgIHJldHVybiBhcHBseU1pZGRsZXdhcmVGb3JMZWdhY3lSZW5kZXJlcihcbiAgICAgICdhdHRhY2htZW50JyxcbiAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYXR0YWNobWVudE1pZGRsZXdhcmUpLFxuICAgICAgKCkgPT4gKCkgPT4gKHsgYXR0YWNobWVudCB9KSA9PiB7XG4gICAgICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZW5kZXJlciBmb3IgYXR0YWNobWVudCBvZiB0eXBlIFwiJHthdHRhY2htZW50LmNvbnRlbnRUeXBlfVwiYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdHRhY2htZW50IHRvIHJlbmRlcicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKSh7fSk7XG4gIH0sIFthdHRhY2htZW50TWlkZGxld2FyZSwgYXR0YWNobWVudFJlbmRlcmVyXSk7XG5cbiAgY29uc3QgcGF0Y2hlZEF2YXRhclJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgYXZhdGFyUmVuZGVyZXIgJiZcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dlYiBDaGF0OiBcImF2YXRhclJlbmRlcmVyXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIG9uIDIwMjItMDYtMTUsIHBsZWFzZSB1c2UgXCJhdmF0YXJNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGF2YXRhclJlbmRlcmVyIHx8XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcignYXZhdGFyJywgeyBzdHJpY3Q6IGZhbHNlIH0sIC4uLnNpbmdsZVRvQXJyYXkoYXZhdGFyTWlkZGxld2FyZSksICgpID0+ICgpID0+ICgpID0+XG4gICAgICAgIGZhbHNlXG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFthdmF0YXJNaWRkbGV3YXJlLCBhdmF0YXJSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRUb2FzdFJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdG9hc3RSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwidG9hc3RSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwidG9hc3RNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRvYXN0UmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAndG9hc3QnLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfSxcbiAgICAgICAgLi4uc2luZ2xlVG9BcnJheSh0b2FzdE1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PiAoKSA9PiAoeyBub3RpZmljYXRpb24gfSkgPT4ge1xuICAgICAgICAgIGlmIChub3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVuZGVyZXIgZm9yIG5vdGlmaWNhdGlvbiBvZiB0eXBlIFwiJHtub3RpZmljYXRpb24uY29udGVudFR5cGV9XCJgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBub3RpZmljYXRpb24gdG8gcmVuZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFt0b2FzdE1pZGRsZXdhcmUsIHRvYXN0UmVuZGVyZXJdKTtcblxuICBjb25zdCBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwidHlwaW5nSW5kaWNhdG9yUmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcInR5cGluZ0luZGljYXRvck1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAndHlwaW5nIGluZGljYXRvcicsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUpLFxuICAgICAgICAoKSA9PiAoKSA9PiAoKSA9PiBmYWxzZVxuICAgICAgKSh7fSlcbiAgICApO1xuICB9LCBbdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSwgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXJdKTtcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGhlYXZ5IGZ1bmN0aW9uLCBhbmQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIG5lZWQgdG8gcmVjcmVhdGUgYnVzaW5lc3MgbG9naWMsIGUuZy5cbiAgICogLSBVc2VyIElEIGNoYW5nZWQsIGNhdXNpbmcgYWxsIHNlbmQqIGZ1bmN0aW9ucyB0byBiZSB1cGRhdGVkXG4gICAqIC0gc2VuZFxuICAgKiBAdG9kbyBUT0RPOiBbUDNdIFdlIHNob3VsZCB0aGluayBhYm91dCBpZiB3ZSBhbGxvdyB0aGUgdXNlciB0byBjaGFuZ2Ugb25TZW5kQm94VmFsdWVDaGFuZ2VkL3NlbmRCb3hWYWx1ZSwgZS5nLlxuICAgKiAxLiBUdXJucyB0ZXh0IGludG8gVVBQRVJDQVNFXG4gICAqIDIuIEZpbHRlciBvdXQgcHJvZmFuaXR5XG4gICAqIEB0b2RvIFRPRE86IFtQNF0gUmV2aXNpdCBhbGwgbWVtYmVycyBvZiBjb250ZXh0XG4gICAqICAgICAgIFRoaXMgY29udGV4dCBzaG91bGQgY29uc2lzdCBvZiBtZW1iZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgUmVkdXggc3RvcmVcbiAgICogICAgICAgaS5lLiBtZW1iZXJzIHRoYXQgYXJlIG5vdCBpbnRlcmVzdGVkIGluIG90aGVyIHR5cGVzIG9mIFVJc1xuICAgKi9cbiAgY29uc3QgY29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIC4uLmNhcmRBY3Rpb25Db250ZXh0LFxuICAgICAgLi4uZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCxcbiAgICAgIC4uLmhvaXN0ZWREaXNwYXRjaGVycyxcbiAgICAgIGFjdGl2aXR5UmVuZGVyZXI6IHBhdGNoZWRBY3Rpdml0eVJlbmRlcmVyLFxuICAgICAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcjogcGF0Y2hlZEFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gICAgICBhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXI6IHBhdGNoZWRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIsXG4gICAgICBhdHRhY2htZW50UmVuZGVyZXI6IHBhdGNoZWRBdHRhY2htZW50UmVuZGVyZXIsXG4gICAgICBhdmF0YXJSZW5kZXJlcjogcGF0Y2hlZEF2YXRhclJlbmRlcmVyLFxuICAgICAgZGlyOiBwYXRjaGVkRGlyLFxuICAgICAgZGlyZWN0TGluZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwsXG4gICAgICBncmFtbWFyczogcGF0Y2hlZEdyYW1tYXJzLFxuICAgICAgaW50ZXJuYWxFcnJvckJveENsYXNzLFxuICAgICAgbGFuZ3VhZ2U6IGxvY2FsZSxcbiAgICAgIGxvY2FsaXplZEdsb2JhbGl6ZVN0YXRlOiBbbG9jYWxpemVkR2xvYmFsaXplXSxcbiAgICAgIGxvY2FsaXplZFN0cmluZ3M6IHBhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzLFxuICAgICAgb25UZWxlbWV0cnksXG4gICAgICByZW5kZXJNYXJrZG93bixcbiAgICAgIHNlbGVjdFZvaWNlOiBwYXRjaGVkU2VsZWN0Vm9pY2UsXG4gICAgICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICAgICAgc3R5bGVPcHRpb25zOiBwYXRjaGVkU3R5bGVPcHRpb25zLFxuICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZixcbiAgICAgIHRvYXN0UmVuZGVyZXI6IHBhdGNoZWRUb2FzdFJlbmRlcmVyLFxuICAgICAgdHJhY2tEaW1lbnNpb24sXG4gICAgICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcjogcGF0Y2hlZFR5cGluZ0luZGljYXRvclJlbmRlcmVyLFxuICAgICAgdXNlcklELFxuICAgICAgdXNlcm5hbWVcbiAgICB9KSxcbiAgICBbXG4gICAgICBjYXJkQWN0aW9uQ29udGV4dCxcbiAgICAgIGRpcmVjdExpbmUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMLFxuICAgICAgZ3JvdXBBY3Rpdml0aWVzQ29udGV4dCxcbiAgICAgIGhvaXN0ZWREaXNwYXRjaGVycyxcbiAgICAgIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgICAgIGxvY2FsZSxcbiAgICAgIGxvY2FsaXplZEdsb2JhbGl6ZSxcbiAgICAgIG9uVGVsZW1ldHJ5LFxuICAgICAgcGF0Y2hlZEFjdGl2aXR5UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkQWN0aXZpdHlTdGF0dXNSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIsXG4gICAgICBwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyLFxuICAgICAgcGF0Y2hlZEF2YXRhclJlbmRlcmVyLFxuICAgICAgcGF0Y2hlZERpcixcbiAgICAgIHBhdGNoZWRHcmFtbWFycyxcbiAgICAgIHBhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzLFxuICAgICAgcGF0Y2hlZFNlbGVjdFZvaWNlLFxuICAgICAgcGF0Y2hlZFN0eWxlT3B0aW9ucyxcbiAgICAgIHBhdGNoZWRUb2FzdFJlbmRlcmVyLFxuICAgICAgcGF0Y2hlZFR5cGluZ0luZGljYXRvclJlbmRlcmVyLFxuICAgICAgcmVuZGVyTWFya2Rvd24sXG4gICAgICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZixcbiAgICAgIHRyYWNrRGltZW5zaW9uLFxuICAgICAgdXNlcklELFxuICAgICAgdXNlcm5hbWVcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8V2ViQ2hhdEFQSUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKGNvbnRleHQpIDogY2hpbGRyZW59XG4gICAgICB7b25UZWxlbWV0cnkgJiYgPFRyYWNrZXIgLz59XG4gICAgPC9XZWJDaGF0QVBJQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbi8vIFdlIHdpbGwgY3JlYXRlIGEgUmVkdXggc3RvcmUgaWYgaXQgd2FzIG5vdCBwYXNzZWQgaW5cbmNvbnN0IENvbXBvc2VXaXRoU3RvcmU6IEZDPENvbXBvc2VyUHJvcHMgJiB7IHN0b3JlOiBhbnkgfT4gPSAoe1xuICBpbnRlcm5hbFJlbmRlckVycm9yQm94LFxuICBvblRlbGVtZXRyeSxcbiAgc3RvcmUsXG4gIC4uLnByb3BzXG59KSA9PiB7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoKTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBVbmNhdWdodCBleGNlcHRpb24nLCB7IGVycm9yIH0pO1xuXG4gICAgICBvblRlbGVtZXRyeSAmJiBvblRlbGVtZXRyeShjcmVhdGVDdXN0b21FdmVudCgnZXhjZXB0aW9uJywgeyBlcnJvciwgZmF0YWw6IHRydWUgfSkpO1xuICAgICAgc2V0RXJyb3IoZXJyb3IpO1xuICAgIH0sXG4gICAgW29uVGVsZW1ldHJ5LCBzZXRFcnJvcl1cbiAgKTtcblxuICBjb25zdCBtZW1vaXplZFN0b3JlID0gdXNlTWVtbygoKSA9PiBzdG9yZSB8fCBjcmVhdGVTdG9yZSgpLCBbc3RvcmVdKTtcblxuICByZXR1cm4gZXJyb3IgPyAoXG4gICAgISFpbnRlcm5hbFJlbmRlckVycm9yQm94ICYmIGludGVybmFsUmVuZGVyRXJyb3JCb3goeyBlcnJvciwgdHlwZTogJ3VuY2F1Z2h0IGV4Y2VwdGlvbicgfSlcbiAgKSA6IChcbiAgICA8RXJyb3JCb3VuZGFyeSBvbkVycm9yPXtoYW5kbGVFcnJvcn0+XG4gICAgICA8UHJvdmlkZXIgY29udGV4dD17V2ViQ2hhdFJlZHV4Q29udGV4dH0gc3RvcmU9e21lbW9pemVkU3RvcmV9PlxuICAgICAgICA8Q29tcG9zZXIgaW50ZXJuYWxSZW5kZXJFcnJvckJveD17aW50ZXJuYWxSZW5kZXJFcnJvckJveH0gb25UZWxlbWV0cnk9e29uVGVsZW1ldHJ5fSB7Li4ucHJvcHN9IC8+XG4gICAgICA8L1Byb3ZpZGVyPlxuICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgKTtcbn07XG5cbkNvbXBvc2VXaXRoU3RvcmUuZGVmYXVsdFByb3BzID0ge1xuICBpbnRlcm5hbFJlbmRlckVycm9yQm94OiB1bmRlZmluZWQsXG4gIG9uVGVsZW1ldHJ5OiB1bmRlZmluZWQsXG4gIHN0b3JlOiB1bmRlZmluZWRcbn07XG5cbkNvbXBvc2VXaXRoU3RvcmUucHJvcFR5cGVzID0ge1xuICBpbnRlcm5hbFJlbmRlckVycm9yQm94OiBQcm9wVHlwZXMuYW55LFxuICBvblRlbGVtZXRyeTogUHJvcFR5cGVzLmZ1bmMsXG4gIHN0b3JlOiBQcm9wVHlwZXMuYW55XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb3NlV2l0aFN0b3JlO1xuXG4vKipcbiAqIEB0b2RvIFRPRE86IFtQM10gV2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBzb21lIGRhdGEgZnJvbSBSZWR1eCBzdG9yZSB0byBwcm9wc1xuICogICAgICAgQWx0aG91Z2ggd2UgdXNlIGBjb25uZWN0VG9XZWJDaGF0YCB0byBoaWRlIHRoZSBkZXRhaWxzIG9mIGFjY2Vzc29yIG9mIFJlZHV4IHN0b3JlLFxuICogICAgICAgd2Ugc2hvdWxkIGNsZWFuIHVwIHRoZSByZXNwb25zaWJpbGl0eSBiZXR3ZWVuIENvbnRleHQgYW5kIFJlZHV4IHN0b3JlXG4gKiAgICAgICBXZSBzaG91bGQgZGVjaWRlIHdoaWNoIGRhdGEgaXMgbmVlZGVkIGZvciBSZWFjdCBidXQgbm90IGluIG90aGVyIGVudmlyb25tZW50IHN1Y2ggYXMgQ0xJL1ZTQ29kZVxuICovXG5Db21wb3Nlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhY3Rpdml0eVJlbmRlcmVyOiB1bmRlZmluZWQsXG4gIGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyOiB1bmRlZmluZWQsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGF0dGFjaG1lbnRNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGF0dGFjaG1lbnRSZW5kZXJlcjogdW5kZWZpbmVkLFxuICBhdmF0YXJNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGF2YXRhclJlbmRlcmVyOiB1bmRlZmluZWQsXG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gIGRpcjogJ2F1dG8nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMOiB1bmRlZmluZWQsXG4gIGdyYW1tYXJzOiBbXSxcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBncm91cFRpbWVzdGFtcDogdW5kZWZpbmVkLFxuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M6IHVuZGVmaW5lZCxcbiAgbG9jYWxlOiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIHx8ICdlbi1VUycsXG4gIG9uVGVsZW1ldHJ5OiB1bmRlZmluZWQsXG4gIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5nczogdW5kZWZpbmVkLFxuICByZW5kZXJNYXJrZG93bjogdW5kZWZpbmVkLFxuICBzZWxlY3RWb2ljZTogdW5kZWZpbmVkLFxuICBzZW5kVGltZW91dDogdW5kZWZpbmVkLFxuICBzZW5kVHlwaW5nSW5kaWNhdG9yOiBmYWxzZSxcbiAgc3R5bGVPcHRpb25zOiB7fSxcbiAgdG9hc3RNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIHRvYXN0UmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcjogdW5kZWZpbmVkLFxuICB1c2VySUQ6ICcnLFxuICB1c2VybmFtZTogJydcbn07XG5cbkNvbXBvc2VyLnByb3BUeXBlcyA9IHtcbiAgYWN0aXZpdHlNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGFjdGl2aXR5UmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICBhY3Rpdml0eVN0YXR1c01pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGF0dGFjaG1lbnRNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGF0dGFjaG1lbnRSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGF2YXRhck1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYXZhdGFyUmVuZGVyZXI6IFByb3BUeXBlcy5mdW5jLFxuICBjYXJkQWN0aW9uTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmFueSxcbiAgZGlyOiBQcm9wVHlwZXMub25lT2YoWydhdXRvJywgJ2x0cicsICdydGwnXSksXG4gIGRpcmVjdExpbmU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYWN0aXZpdHkkOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgc3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBjb25uZWN0aW9uU3RhdHVzJDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgZW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBnZXRTZXNzaW9uSWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBvc3RBY3Rpdml0eTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZWZlcmVuY2VHcmFtbWFySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG9rZW46IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTDogUHJvcFR5cGVzLmZ1bmMsXG4gIGdyYW1tYXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBncm91cFRpbWVzdGFtcDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgaW50ZXJuYWxFcnJvckJveENsYXNzOiBQcm9wVHlwZXMuZnVuYywgLy8gVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuIFdlIGRvbid0IGFsbG93IGN1c3RvbWl6YXRpb24gb2YgZXJyb3IgYm94LlxuICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uVGVsZW1ldHJ5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LCBQcm9wVHlwZXMuZnVuY10pLFxuICByZW5kZXJNYXJrZG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIHNlbGVjdFZvaWNlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VuZFRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlbmRUeXBpbmdJbmRpY2F0b3I6IFByb3BUeXBlcy5ib29sLFxuICBzdHlsZU9wdGlvbnM6IFByb3BUeXBlcy5hbnksXG4gIHRvYXN0TWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICB0b2FzdFJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIHVzZXJJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXNlcm5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG4iXX0=
|
|
576
|
+
|
|
577
|
+
// We will create a Redux store if it was not passed in
|
|
578
|
+
var Composer = function Composer(_ref10) {
|
|
579
|
+
var internalRenderErrorBox = _ref10.internalRenderErrorBox,
|
|
580
|
+
onTelemetry = _ref10.onTelemetry,
|
|
581
|
+
store = _ref10.store,
|
|
582
|
+
props = _objectWithoutProperties(_ref10, _excluded);
|
|
583
|
+
|
|
584
|
+
var _useState = (0, _react.useState)(),
|
|
585
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
586
|
+
error = _useState2[0],
|
|
587
|
+
setError = _useState2[1];
|
|
588
|
+
|
|
589
|
+
var handleError = (0, _react.useCallback)(function (error) {
|
|
590
|
+
console.error('botframework-webchat: Uncaught exception', {
|
|
591
|
+
error: error
|
|
592
|
+
});
|
|
593
|
+
onTelemetry && onTelemetry((0, _createCustomEvent.default)('exception', {
|
|
594
|
+
error: error,
|
|
595
|
+
fatal: true
|
|
596
|
+
}));
|
|
597
|
+
setError(error);
|
|
598
|
+
}, [onTelemetry, setError]);
|
|
599
|
+
var memoizedStore = (0, _react.useMemo)(function () {
|
|
600
|
+
return store || (0, _botframeworkWebchatCore.createStore)();
|
|
601
|
+
}, [store]);
|
|
602
|
+
return error ? !!internalRenderErrorBox && internalRenderErrorBox({
|
|
603
|
+
error: error,
|
|
604
|
+
type: 'uncaught exception'
|
|
605
|
+
}) : /*#__PURE__*/_react.default.createElement(_ErrorBoundary.default, {
|
|
606
|
+
onError: handleError
|
|
607
|
+
}, /*#__PURE__*/_react.default.createElement(_reactRedux.Provider, {
|
|
608
|
+
context: _WebChatReduxContext.default,
|
|
609
|
+
store: memoizedStore
|
|
610
|
+
}, /*#__PURE__*/_react.default.createElement(ComposerCore, _extends({
|
|
611
|
+
internalRenderErrorBox: internalRenderErrorBox,
|
|
612
|
+
onTelemetry: onTelemetry
|
|
613
|
+
}, props))));
|
|
614
|
+
};
|
|
615
|
+
|
|
616
|
+
Composer.defaultProps = {
|
|
617
|
+
internalRenderErrorBox: undefined,
|
|
618
|
+
onTelemetry: undefined,
|
|
619
|
+
store: undefined
|
|
620
|
+
};
|
|
621
|
+
Composer.propTypes = {
|
|
622
|
+
internalRenderErrorBox: _propTypes.default.any,
|
|
623
|
+
onTelemetry: _propTypes.default.func,
|
|
624
|
+
store: _propTypes.default.any
|
|
625
|
+
};
|
|
626
|
+
var _default = Composer;
|
|
627
|
+
exports.default = _default;
|
|
628
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9Db21wb3Nlci50c3giXSwibmFtZXMiOlsiRElTUEFUQ0hFUlMiLCJjbGVhclN1Z2dlc3RlZEFjdGlvbnMiLCJkaXNtaXNzTm90aWZpY2F0aW9uIiwiZW1pdFR5cGluZ0luZGljYXRvciIsIm1hcmtBY3Rpdml0eSIsInBvc3RBY3Rpdml0eSIsInNlbmRFdmVudCIsInNlbmRGaWxlcyIsInNlbmRNZXNzYWdlIiwic2VuZE1lc3NhZ2VCYWNrIiwic2VuZFBvc3RCYWNrIiwic2V0RGljdGF0ZUludGVyaW1zIiwic2V0RGljdGF0ZVN0YXRlIiwic2V0Tm90aWZpY2F0aW9uIiwic2V0U2VuZEJveCIsInNldFNlbmRUaW1lb3V0Iiwic3RhcnREaWN0YXRlIiwic3RhcnRTcGVha2luZ0FjdGl2aXR5Iiwic3RvcERpY3RhdGUiLCJzdG9wU3BlYWtpbmdBY3Rpdml0eSIsInN1Ym1pdFNlbmRCb3giLCJjcmVhdGVDYXJkQWN0aW9uQ29udGV4dCIsImNhcmRBY3Rpb25NaWRkbGV3YXJlIiwiZGlyZWN0TGluZSIsImRpc3BhdGNoIiwicnVuTWlkZGxld2FyZSIsImFwcGx5TWlkZGxld2FyZSIsIm9uQ2FyZEFjdGlvbiIsImNhcmRBY3Rpb24iLCJ0YXJnZXQiLCJnZXRTaWduSW5VcmwiLCJ0eXBlIiwidmFsdWUiLCJnZXRTZXNzaW9uSWQiLCJ0aGVuIiwic2Vzc2lvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29uc29sZSIsIndhcm4iLCJjcmVhdGVHcm91cEFjdGl2aXRpZXNDb250ZXh0IiwiZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSIsImdyb3VwVGltZXN0YW1wIiwiZ3JvdXBBY3Rpdml0aWVzIiwibWVyZ2VTdHJpbmdzT3ZlcnJpZGVzIiwibG9jYWxpemVkU3RyaW5ncyIsImxhbmd1YWdlIiwib3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzIiwibWVyZ2VkIiwiRXJyb3IiLCJDb21wb3NlckNvcmUiLCJhY3Rpdml0eU1pZGRsZXdhcmUiLCJhY3Rpdml0eVJlbmRlcmVyIiwiYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlIiwiYWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsImF0dGFjaG1lbnRNaWRkbGV3YXJlIiwiYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUiLCJhdHRhY2htZW50UmVuZGVyZXIiLCJhdmF0YXJNaWRkbGV3YXJlIiwiYXZhdGFyUmVuZGVyZXIiLCJjaGlsZHJlbiIsImRpciIsImRpc2FibGVkIiwiZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwiLCJncmFtbWFycyIsImludGVybmFsRXJyb3JCb3hDbGFzcyIsImxvY2FsZSIsIm9uVGVsZW1ldHJ5IiwicmVuZGVyTWFya2Rvd24iLCJzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmUiLCJzZWxlY3RWb2ljZSIsInNlbmRUaW1lb3V0Iiwic2VuZFR5cGluZ0luZGljYXRvciIsInN0eWxlT3B0aW9ucyIsInRvYXN0TWlkZGxld2FyZSIsInRvYXN0UmVuZGVyZXIiLCJ0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlIiwidHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIiLCJ1c2VySUQiLCJ1c2VybmFtZSIsInRlbGVtZXRyeURpbWVuc2lvbnNSZWYiLCJwYXRjaGVkRGlyIiwicGF0Y2hlZEdyYW1tYXJzIiwicGF0Y2hlZFN0eWxlT3B0aW9ucyIsImNhcmRBY3Rpb25Db250ZXh0IiwicGF0Y2hlZFNlbGVjdFZvaWNlIiwiZGVmYXVsdFNlbGVjdFZvaWNlIiwiYmluZCIsImdyb3VwQWN0aXZpdGllc0NvbnRleHQiLCJob2lzdGVkRGlzcGF0Y2hlcnMiLCJkaXNwYXRjaGVyIiwicGF0Y2hlZExvY2FsaXplZFN0cmluZ3MiLCJsb2NhbGl6ZWRHbG9iYWxpemUiLCJHTE9CQUxJWkUiLCJHTE9CQUxJWkVfTEFOR1VBR0UiLCJ0cmFja0RpbWVuc2lvbiIsIm5hbWUiLCJkYXRhIiwiY3VycmVudCIsInBhdGNoZWRBY3Rpdml0eVJlbmRlcmVyIiwiYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIiLCJzdHJpY3QiLCJhY3Rpdml0eSIsInBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyIiwicGF0Y2hlZEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlciIsImF0dGFjaG1lbnQiLCJjb250ZW50VHlwZSIsInBhdGNoZWRBdHRhY2htZW50UmVuZGVyZXIiLCJhcHBseU1pZGRsZXdhcmVGb3JMZWdhY3lSZW5kZXJlciIsInBhdGNoZWRBdmF0YXJSZW5kZXJlciIsInBhdGNoZWRUb2FzdFJlbmRlcmVyIiwibm90aWZpY2F0aW9uIiwicGF0Y2hlZFR5cGluZ0luZGljYXRvclJlbmRlcmVyIiwic2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlciIsImNvbnRleHQiLCJhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIiLCJsb2NhbGl6ZWRHbG9iYWxpemVTdGF0ZSIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsIndpbmRvdyIsIm5hdmlnYXRvciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9uZU9mVHlwZSIsImFycmF5T2YiLCJmdW5jIiwiYW55Iiwib25lT2YiLCJzaGFwZSIsImFjdGl2aXR5JCIsInN1YnNjcmliZSIsImlzUmVxdWlyZWQiLCJjb25uZWN0aW9uU3RhdHVzJCIsImVuZCIsInJlZmVyZW5jZUdyYW1tYXJJRCIsInN0cmluZyIsInRva2VuIiwiYm9vbCIsIm51bWJlciIsIkNvbXBvc2VyIiwiaW50ZXJuYWxSZW5kZXJFcnJvckJveCIsInN0b3JlIiwicHJvcHMiLCJlcnJvciIsInNldEVycm9yIiwiaGFuZGxlRXJyb3IiLCJmYXRhbCIsIm1lbW9pemVkU3RvcmUiLCJXZWJDaGF0UmVkdXhDb250ZXh0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBZ0NBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQUVBOztBQUVB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QU1BcUIsUUFBUSxDQUFDbEIsU0FBVCxHQUFxQjtBQUNuQm1CLEVBQUFBLHNCQUFzQixFQUFFbEIsbUJBQVVJLEdBRGY7QUFFbkIzRCxFQUFBQSxXQUFXLEVBQUV1RCxtQkFBVUcsSUFGSjtBQUduQmdCLEVBQUFBLEtBQUssRUFBRW5CLG1CQUFVSTtBQUhFLENBQXJCO2VBTWVhLFEiLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBGQywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVwZGF0ZUluIGZyb20gJ3NpbXBsZS11cGRhdGUtaW4nO1xuXG5pbXBvcnQge1xuICBjbGVhclN1Z2dlc3RlZEFjdGlvbnMsXG4gIGNvbm5lY3QgYXMgY3JlYXRlQ29ubmVjdEFjdGlvbixcbiAgY3JlYXRlU3RvcmUsXG4gIERpcmVjdExpbmVBY3Rpdml0eSxcbiAgRGlyZWN0TGluZUpTQm90Q29ubmVjdGlvbixcbiAgZGlzY29ubmVjdCxcbiAgZGlzbWlzc05vdGlmaWNhdGlvbixcbiAgZW1pdFR5cGluZ0luZGljYXRvcixcbiAgbWFya0FjdGl2aXR5LFxuICBPbmVPck1hbnksXG4gIHBvc3RBY3Rpdml0eSxcbiAgc2VuZEV2ZW50LFxuICBzZW5kRmlsZXMsXG4gIHNlbmRNZXNzYWdlLFxuICBzZW5kTWVzc2FnZUJhY2ssXG4gIHNlbmRQb3N0QmFjayxcbiAgc2V0RGljdGF0ZUludGVyaW1zLFxuICBzZXREaWN0YXRlU3RhdGUsXG4gIHNldExhbmd1YWdlLFxuICBzZXROb3RpZmljYXRpb24sXG4gIHNldFNlbmRCb3gsXG4gIHNldFNlbmRUaW1lb3V0LFxuICBzZXRTZW5kVHlwaW5nSW5kaWNhdG9yLFxuICBzaW5nbGVUb0FycmF5LFxuICBzdGFydERpY3RhdGUsXG4gIHN0YXJ0U3BlYWtpbmdBY3Rpdml0eSxcbiAgc3RvcERpY3RhdGUsXG4gIHN0b3BTcGVha2luZ0FjdGl2aXR5LFxuICBzdWJtaXRTZW5kQm94XG59IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWNvcmUnO1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIFdlYkNoYXRBUElDb250ZXh0IH0gZnJvbSAnLi9pbnRlcm5hbC9XZWJDaGF0QVBJQ29udGV4dCc7XG5pbXBvcnQgQWN0aXZpdHlNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL0FjdGl2aXR5TWlkZGxld2FyZSc7XG5pbXBvcnQgQWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL0FjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSc7XG5pbXBvcnQgQXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvQXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmUnO1xuaW1wb3J0IEF0dGFjaG1lbnRNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL0F0dGFjaG1lbnRNaWRkbGV3YXJlJztcbmltcG9ydCBBdmF0YXJNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL0F2YXRhck1pZGRsZXdhcmUnO1xuaW1wb3J0IENhcmRBY3Rpb25NaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL0NhcmRBY3Rpb25NaWRkbGV3YXJlJztcbmltcG9ydCBjcmVhdGVDdXN0b21FdmVudCBmcm9tICcuLi91dGlscy9jcmVhdGVDdXN0b21FdmVudCc7XG5pbXBvcnQgY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlIGZyb20gJy4vbWlkZGxld2FyZS9jcmVhdGVEZWZhdWx0Q2FyZEFjdGlvbk1pZGRsZXdhcmUnO1xuaW1wb3J0IGNyZWF0ZURlZmF1bHRHcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlIGZyb20gJy4vbWlkZGxld2FyZS9jcmVhdGVEZWZhdWx0R3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSc7XG5pbXBvcnQgZGVmYXVsdFNlbGVjdFZvaWNlIGZyb20gJy4vaW50ZXJuYWwvZGVmYXVsdFNlbGVjdFZvaWNlJztcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vdXRpbHMvRXJyb3JCb3VuZGFyeSc7XG5pbXBvcnQgZ2V0QWxsTG9jYWxpemVkU3RyaW5ncyBmcm9tICcuLi9sb2NhbGl6YXRpb24vZ2V0QWxsTG9jYWxpemVkU3RyaW5ncyc7XG5pbXBvcnQgR3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSBmcm9tICcuLi90eXBlcy9Hcm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuLi91dGlscy9pc09iamVjdCc7XG5pbXBvcnQgTG9jYWxpemVkU3RyaW5ncyBmcm9tICcuLi90eXBlcy9Mb2NhbGl6ZWRTdHJpbmdzJztcbmltcG9ydCBtYXBNYXAgZnJvbSAnLi4vdXRpbHMvbWFwTWFwJztcbmltcG9ydCBub3JtYWxpemVMYW5ndWFnZSBmcm9tICcuLi91dGlscy9ub3JtYWxpemVMYW5ndWFnZSc7XG5pbXBvcnQgbm9ybWFsaXplU3R5bGVPcHRpb25zIGZyb20gJy4uL25vcm1hbGl6ZVN0eWxlT3B0aW9ucyc7XG5pbXBvcnQgb2JzZXJ2YWJsZVRvUHJvbWlzZSBmcm9tICcuL3V0aWxzL29ic2VydmFibGVUb1Byb21pc2UnO1xuaW1wb3J0IHBhdGNoU3R5bGVPcHRpb25zRnJvbURlcHJlY2F0ZWRQcm9wcyBmcm9tICcuLi9wYXRjaFN0eWxlT3B0aW9uc0Zyb21EZXByZWNhdGVkUHJvcHMnO1xuaW1wb3J0IFByZWNvbXBpbGVkR2xvYmFsaXplVHlwZSBmcm9tICcuLi90eXBlcy9QcmVjb21waWxlZEdsb2JhbGl6ZSc7XG5pbXBvcnQgU2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlLCB7IFNjcm9sbFRvRW5kQnV0dG9uQ29tcG9uZW50RmFjdG9yeSB9IGZyb20gJy4uL3R5cGVzL1Njcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSc7XG5pbXBvcnQgU3R5bGVPcHRpb25zIGZyb20gJy4uL1N0eWxlT3B0aW9ucyc7XG5pbXBvcnQgVGVsZW1ldHJ5TWVhc3VyZW1lbnRFdmVudCwgeyBUZWxlbWV0cnlFeGNlcHRpb25NZWFzdXJlbWVudEV2ZW50IH0gZnJvbSAnLi4vdHlwZXMvVGVsZW1ldHJ5TWVhc3VyZW1lbnRFdmVudCc7XG5pbXBvcnQgVG9hc3RNaWRkbGV3YXJlIGZyb20gJy4uL3R5cGVzL1RvYXN0TWlkZGxld2FyZSc7XG5pbXBvcnQgVHJhY2tlciBmcm9tICcuL2ludGVybmFsL1RyYWNrZXInO1xuaW1wb3J0IFR5cGluZ0luZGljYXRvck1pZGRsZXdhcmUgZnJvbSAnLi4vdHlwZXMvVHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSc7XG5pbXBvcnQgV2ViQ2hhdFJlZHV4Q29udGV4dCwgeyB1c2VEaXNwYXRjaCB9IGZyb20gJy4vaW50ZXJuYWwvV2ViQ2hhdFJlZHV4Q29udGV4dCc7XG5cbmltcG9ydCBhcHBseU1pZGRsZXdhcmUsIHtcbiAgZm9yTGVnYWN5UmVuZGVyZXIgYXMgYXBwbHlNaWRkbGV3YXJlRm9yTGVnYWN5UmVuZGVyZXIsXG4gIGZvclJlbmRlcmVyIGFzIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyXG59IGZyb20gJy4vbWlkZGxld2FyZS9hcHBseU1pZGRsZXdhcmUnO1xuXG4vLyBQcmVjb21waWxlR2xvYmFsaXplIGlzIGEgZ2VuZXJhdGVkIGZpbGUgYW5kIGlzIG5vdCBFUyBtb2R1bGUuIFR5cGVTY3JpcHQgZG9uJ3Qgd29yayB3aXRoIFVNRC5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBQcmVjb21waWxlZEdsb2JhbGl6ZSBmcm9tICcuLi9leHRlcm5hbC9QcmVjb21waWxlZEdsb2JhbGl6ZSc7XG5cbi8vIExpc3Qgb2YgUmVkdXggYWN0aW9ucyBmYWN0b3J5IHdlIGFyZSBob2lzdGluZyBhcyBXZWIgQ2hhdCBmdW5jdGlvbnNcbmNvbnN0IERJU1BBVENIRVJTID0ge1xuICBjbGVhclN1Z2dlc3RlZEFjdGlvbnMsXG4gIGRpc21pc3NOb3RpZmljYXRpb24sXG4gIGVtaXRUeXBpbmdJbmRpY2F0b3IsXG4gIG1hcmtBY3Rpdml0eSxcbiAgcG9zdEFjdGl2aXR5LFxuICBzZW5kRXZlbnQsXG4gIHNlbmRGaWxlcyxcbiAgc2VuZE1lc3NhZ2UsXG4gIHNlbmRNZXNzYWdlQmFjayxcbiAgc2VuZFBvc3RCYWNrLFxuICBzZXREaWN0YXRlSW50ZXJpbXMsXG4gIHNldERpY3RhdGVTdGF0ZSxcbiAgc2V0Tm90aWZpY2F0aW9uLFxuICBzZXRTZW5kQm94LFxuICBzZXRTZW5kVGltZW91dCxcbiAgc3RhcnREaWN0YXRlLFxuICBzdGFydFNwZWFraW5nQWN0aXZpdHksXG4gIHN0b3BEaWN0YXRlLFxuICBzdG9wU3BlYWtpbmdBY3Rpdml0eSxcbiAgc3VibWl0U2VuZEJveFxufTtcblxuZnVuY3Rpb24gY3JlYXRlQ2FyZEFjdGlvbkNvbnRleHQoeyBjYXJkQWN0aW9uTWlkZGxld2FyZSwgZGlyZWN0TGluZSwgZGlzcGF0Y2ggfSkge1xuICBjb25zdCBydW5NaWRkbGV3YXJlID0gYXBwbHlNaWRkbGV3YXJlKFxuICAgICdjYXJkIGFjdGlvbicsXG4gICAgLi4uc2luZ2xlVG9BcnJheShjYXJkQWN0aW9uTWlkZGxld2FyZSksXG4gICAgY3JlYXRlRGVmYXVsdENhcmRBY3Rpb25NaWRkbGV3YXJlKClcbiAgKSh7IGRpc3BhdGNoIH0pO1xuXG4gIHJldHVybiB7XG4gICAgb25DYXJkQWN0aW9uOiAoY2FyZEFjdGlvbiwgeyB0YXJnZXQgfTogeyB0YXJnZXQ/OiBhbnkgfSA9IHt9KSA9PlxuICAgICAgcnVuTWlkZGxld2FyZSh7XG4gICAgICAgIGNhcmRBY3Rpb24sXG4gICAgICAgIGdldFNpZ25JblVybDpcbiAgICAgICAgICBjYXJkQWN0aW9uLnR5cGUgPT09ICdzaWduaW4nXG4gICAgICAgICAgICA/ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBjYXJkQWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdExpbmUuZ2V0U2Vzc2lvbklkKSB7XG4gICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAqIEB0b2RvIFRPRE86IFtQM10gV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIG9uZSB0byBhc3luYy9hd2FpdC5cbiAgICAgICAgICAgICAgICAgICAqICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHRoaXMgcHJvamVjdCB0byB1c2UgYXN5bmMuXG4gICAgICAgICAgICAgICAgICAgKiAgICAgICBUaHVzLCB3ZSBuZWVkIHRvIGFkZCBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ydW50aW1lIGFuZCBAYmFiZWwvcnVudGltZS5cbiAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUb1Byb21pc2UoZGlyZWN0TGluZS5nZXRTZXNzaW9uSWQoKSkudGhlbihcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkID0+IGAke3ZhbHVlfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGAmY29kZV9jaGFsbGVuZ2U9JHtzZXNzaW9uSWR9YCl9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBPQXV0aCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgRGlyZWN0IExpbmUgYWRhcHRlci4nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB0YXJnZXRcbiAgICAgIH0pXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyb3VwQWN0aXZpdGllc0NvbnRleHQoeyBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLCBncm91cFRpbWVzdGFtcCB9KSB7XG4gIGNvbnN0IHJ1bk1pZGRsZXdhcmUgPSBhcHBseU1pZGRsZXdhcmUoXG4gICAgJ2dyb3VwIGFjdGl2aXRpZXMnLFxuICAgIC4uLnNpbmdsZVRvQXJyYXkoZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSksXG4gICAgY3JlYXRlRGVmYXVsdEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmUoeyBncm91cFRpbWVzdGFtcCB9KVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgZ3JvdXBBY3Rpdml0aWVzOiBydW5NaWRkbGV3YXJlKHt9KVxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVN0cmluZ3NPdmVycmlkZXMobG9jYWxpemVkU3RyaW5ncywgbGFuZ3VhZ2UsIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncykge1xuICBpZiAoIW92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncykge1xuICAgIHJldHVybiBsb2NhbGl6ZWRTdHJpbmdzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBtZXJnZWQgPSBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MobG9jYWxpemVkU3RyaW5ncywgbGFuZ3VhZ2UpO1xuXG4gICAgaWYgKCFpc09iamVjdChtZXJnZWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gb2JqZWN0LicpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3MgbXVzdCBiZSBlaXRoZXIgYSBmdW5jdGlvbiwgYW4gb2JqZWN0LCBvciBmYWxzeS4nKTtcbiAgfVxuXG4gIHJldHVybiB7IC4uLmxvY2FsaXplZFN0cmluZ3MsIC4uLm92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyB9O1xufVxuXG50eXBlIENvbXBvc2VyQ29yZVByb3BzID0ge1xuICBhY3Rpdml0eU1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QWN0aXZpdHlNaWRkbGV3YXJlPjtcbiAgYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlPzogT25lT3JNYW55PEFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZT47XG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlPzogT25lT3JNYW55PEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlPjtcbiAgYXR0YWNobWVudE1pZGRsZXdhcmU/OiBPbmVPck1hbnk8QXR0YWNobWVudE1pZGRsZXdhcmU+O1xuICBhdmF0YXJNaWRkbGV3YXJlPzogT25lT3JNYW55PEF2YXRhck1pZGRsZXdhcmU+O1xuICBjYXJkQWN0aW9uTWlkZGxld2FyZT86IE9uZU9yTWFueTxDYXJkQWN0aW9uTWlkZGxld2FyZT47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBkaXI/OiBzdHJpbmc7XG4gIGRpcmVjdExpbmU6IERpcmVjdExpbmVKU0JvdENvbm5lY3Rpb247XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkw/OiAoYmxvYjogQmxvYiwgbWF4V2lkdGg6IG51bWJlciwgbWF4SGVpZ2h0OiBudW1iZXIsIHR5cGU6IHN0cmluZywgcXVhbGl0eTogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIGdyYW1tYXJzPzogYW55O1xuICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlPzogT25lT3JNYW55PEdyb3VwQWN0aXZpdGllc01pZGRsZXdhcmU+O1xuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M/OiBSZWFjdC5Db21wb25lbnQgfCBGdW5jdGlvbjtcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveD86IGFueTtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICBvblRlbGVtZXRyeT86IChldmVudDogVGVsZW1ldHJ5TWVhc3VyZW1lbnRFdmVudCkgPT4gdm9pZDtcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzPzogTG9jYWxpemVkU3RyaW5ncyB8ICgoc3RyaW5nczogTG9jYWxpemVkU3RyaW5ncywgbGFuZ3VhZ2U6IHN0cmluZykgPT4gTG9jYWxpemVkU3RyaW5ncyk7XG4gIHJlbmRlck1hcmtkb3duPzogKG1hcmtkb3duOiBzdHJpbmcsIHsgbWFya2Rvd25SZXNwZWN0Q1JMRjogYm9vbGVhbiB9LCB7IGV4dGVybmFsTGlua0FsdDogc3RyaW5nIH0pID0+IHN0cmluZztcbiAgc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlPzogT25lT3JNYW55PFNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZT47XG4gIHNlbGVjdFZvaWNlPzogKHZvaWNlczogdHlwZW9mIHdpbmRvdy5TcGVlY2hTeW50aGVzaXNWb2ljZVtdLCBhY3Rpdml0eTogRGlyZWN0TGluZUFjdGl2aXR5KSA9PiB2b2lkO1xuICBzZW5kVHlwaW5nSW5kaWNhdG9yPzogYm9vbGVhbjtcbiAgc3R5bGVPcHRpb25zPzogU3R5bGVPcHRpb25zO1xuICB0b2FzdE1pZGRsZXdhcmU/OiBPbmVPck1hbnk8VG9hc3RNaWRkbGV3YXJlPjtcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZT86IE9uZU9yTWFueTxUeXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlPjtcbiAgdXNlcklEPzogc3RyaW5nO1xuICB1c2VybmFtZT86IHN0cmluZztcblxuICAvKiogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBcImFjdGl2aXR5TWlkZGxld2FyZVwiIGluc3RlYWQuICovXG4gIGFjdGl2aXR5UmVuZGVyZXI/OiBhbnk7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDYtMTUuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwiYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJhdHRhY2htZW50TWlkZGxld2FyZVwiIGluc3RlYWQuICovXG4gIGF0dGFjaG1lbnRSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJhdmF0YXJNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgYXZhdGFyUmVuZGVyZXI/OiBhbnk7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDYtMTUuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwic3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wXCIgaW5zdGVhZC4gKi9cbiAgZ3JvdXBUaW1lc3RhbXA/OiBib29sZWFuIHwgbnVtYmVyOyAvLyBUT0RPOiBbUDRdIFJlbW92ZSBvbiBvciBhZnRlciAyMDIyLTAxLTAxXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwic3R5bGVPcHRpb25zLnNlbmRUaW1lb3V0XCIgaW5zdGVhZC4gKi9cbiAgc2VuZFRpbWVvdXQ/OiBudW1iZXI7IC8vIFRPRE86IFtQNF0gUmVtb3ZlIG9uIG9yIGFmdGVyIDIwMjItMDEtMDEuXG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIFwidG9hc3RNaWRkbGV3YXJlXCIgaW5zdGVhZC4gKi9cbiAgdG9hc3RSZW5kZXJlcj86IGFueTsgLy8gVE9ETzogW1A0XSBSZW1vdmUgb24gb3IgYWZ0ZXIgMjAyMi0wNi0xNS5cbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgXCJ0eXBpbmdJbmRpY2F0b3JSZW5kZXJlclwiIGluc3RlYWQuICovXG4gIHR5cGluZ0luZGljYXRvclJlbmRlcmVyPzogYW55OyAvLyBUT0RPOiBbUDRdIFJlbW92ZSBvbiBvciBhZnRlciAyMDIyLTA2LTE1LlxufTtcblxuY29uc3QgQ29tcG9zZXJDb3JlOiBGQzxDb21wb3NlckNvcmVQcm9wcz4gPSAoe1xuICBhY3Rpdml0eU1pZGRsZXdhcmUsXG4gIGFjdGl2aXR5UmVuZGVyZXIsXG4gIGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSxcbiAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcixcbiAgYXR0YWNobWVudE1pZGRsZXdhcmUsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlLFxuICBhdHRhY2htZW50UmVuZGVyZXIsXG4gIGF2YXRhck1pZGRsZXdhcmUsXG4gIGF2YXRhclJlbmRlcmVyLFxuICBjYXJkQWN0aW9uTWlkZGxld2FyZSxcbiAgY2hpbGRyZW4sXG4gIGRpcixcbiAgZGlyZWN0TGluZSxcbiAgZGlzYWJsZWQsXG4gIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMLFxuICBncmFtbWFycyxcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSxcbiAgZ3JvdXBUaW1lc3RhbXAsXG4gIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgbG9jYWxlLFxuICBvblRlbGVtZXRyeSxcbiAgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzLFxuICByZW5kZXJNYXJrZG93bixcbiAgc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlLFxuICBzZWxlY3RWb2ljZSxcbiAgc2VuZFRpbWVvdXQsXG4gIHNlbmRUeXBpbmdJbmRpY2F0b3IsXG4gIHN0eWxlT3B0aW9ucyxcbiAgdG9hc3RNaWRkbGV3YXJlLFxuICB0b2FzdFJlbmRlcmVyLFxuICB0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlLFxuICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcixcbiAgdXNlcklELFxuICB1c2VybmFtZVxufSkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IHRlbGVtZXRyeURpbWVuc2lvbnNSZWYgPSB1c2VSZWYoe30pO1xuXG4gIGNvbnN0IHBhdGNoZWREaXIgPSB1c2VNZW1vKCgpID0+IChkaXIgPT09ICdsdHInIHx8IGRpciA9PT0gJ3J0bCcgPyBkaXIgOiAnYXV0bycpLCBbZGlyXSk7XG4gIGNvbnN0IHBhdGNoZWRHcmFtbWFycyA9IHVzZU1lbW8oKCkgPT4gZ3JhbW1hcnMgfHwgW10sIFtncmFtbWFyc10pO1xuICBjb25zdCBwYXRjaGVkU3R5bGVPcHRpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PiBub3JtYWxpemVTdHlsZU9wdGlvbnMocGF0Y2hTdHlsZU9wdGlvbnNGcm9tRGVwcmVjYXRlZFByb3BzKHN0eWxlT3B0aW9ucywgeyBncm91cFRpbWVzdGFtcCwgc2VuZFRpbWVvdXQgfSkpLFxuICAgIFtncm91cFRpbWVzdGFtcCwgc2VuZFRpbWVvdXQsIHN0eWxlT3B0aW9uc11cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldExhbmd1YWdlKGxvY2FsZSkpO1xuICB9LCBbZGlzcGF0Y2gsIGxvY2FsZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdHlwZW9mIHNlbmRUaW1lb3V0ID09PSAnbnVtYmVyJyAmJiBkaXNwYXRjaChzZXRTZW5kVGltZW91dChzZW5kVGltZW91dCkpO1xuICB9LCBbZGlzcGF0Y2gsIHNlbmRUaW1lb3V0XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChzZXRTZW5kVHlwaW5nSW5kaWNhdG9yKCEhc2VuZFR5cGluZ0luZGljYXRvcikpO1xuICB9LCBbZGlzcGF0Y2gsIHNlbmRUeXBpbmdJbmRpY2F0b3JdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKFxuICAgICAgY3JlYXRlQ29ubmVjdEFjdGlvbih7XG4gICAgICAgIGRpcmVjdExpbmUsXG4gICAgICAgIHVzZXJJRCxcbiAgICAgICAgdXNlcm5hbWVcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIEB0b2RvIFRPRE86IFtQM10gZGlzY29ubmVjdCgpIGlzIGFuIGFzeW5jIGNhbGwgKHBlbmRpbmcgLT4gZnVsZmlsbGVkKSwgd2UgbmVlZCB0byB3YWl0LCBvciBjaGFuZ2UgaXQgdG8gcmVjb25uZWN0KClcbiAgICAgICAqL1xuICAgICAgZGlzcGF0Y2goZGlzY29ubmVjdCgpKTtcbiAgICB9O1xuICB9LCBbZGlzcGF0Y2gsIGRpcmVjdExpbmUsIHVzZXJJRCwgdXNlcm5hbWVdKTtcblxuICBjb25zdCBjYXJkQWN0aW9uQ29udGV4dCA9IHVzZU1lbW8oKCkgPT4gY3JlYXRlQ2FyZEFjdGlvbkNvbnRleHQoeyBjYXJkQWN0aW9uTWlkZGxld2FyZSwgZGlyZWN0TGluZSwgZGlzcGF0Y2ggfSksIFtcbiAgICBjYXJkQWN0aW9uTWlkZGxld2FyZSxcbiAgICBkaXJlY3RMaW5lLFxuICAgIGRpc3BhdGNoXG4gIF0pO1xuXG4gIGNvbnN0IHBhdGNoZWRTZWxlY3RWb2ljZSA9IHVzZU1lbW8oKCkgPT4gc2VsZWN0Vm9pY2UgfHwgZGVmYXVsdFNlbGVjdFZvaWNlLmJpbmQobnVsbCwgeyBsYW5ndWFnZTogbG9jYWxlIH0pLCBbXG4gICAgbG9jYWxlLFxuICAgIHNlbGVjdFZvaWNlXG4gIF0pO1xuXG4gIGNvbnN0IGdyb3VwQWN0aXZpdGllc0NvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBjcmVhdGVHcm91cEFjdGl2aXRpZXNDb250ZXh0KHtcbiAgICAgICAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZSxcbiAgICAgICAgZ3JvdXBUaW1lc3RhbXA6IHBhdGNoZWRTdHlsZU9wdGlvbnMuZ3JvdXBUaW1lc3RhbXBcbiAgICAgIH0pLFxuICAgIFtncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlLCBwYXRjaGVkU3R5bGVPcHRpb25zLmdyb3VwVGltZXN0YW1wXVxuICApO1xuXG4gIGNvbnN0IGhvaXN0ZWREaXNwYXRjaGVycyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbWFwTWFwKERJU1BBVENIRVJTLCBkaXNwYXRjaGVyID0+ICguLi5hcmdzKSA9PiBkaXNwYXRjaChkaXNwYXRjaGVyKC4uLmFyZ3MpKSksXG4gICAgW2Rpc3BhdGNoXVxuICApO1xuXG4gIGNvbnN0IHBhdGNoZWRMb2NhbGl6ZWRTdHJpbmdzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBtZXJnZVN0cmluZ3NPdmVycmlkZXMoZ2V0QWxsTG9jYWxpemVkU3RyaW5ncygpW25vcm1hbGl6ZUxhbmd1YWdlKGxvY2FsZSldLCBsb2NhbGUsIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5ncyksXG4gICAgW2xvY2FsZSwgb3ZlcnJpZGVMb2NhbGl6ZWRTdHJpbmdzXVxuICApO1xuXG4gIGNvbnN0IGxvY2FsaXplZEdsb2JhbGl6ZSA9IHVzZU1lbW88UHJlY29tcGlsZWRHbG9iYWxpemVUeXBlPigoKSA9PiB7XG4gICAgY29uc3QgeyBHTE9CQUxJWkUsIEdMT0JBTElaRV9MQU5HVUFHRSB9ID0gcGF0Y2hlZExvY2FsaXplZFN0cmluZ3MgfHwge307XG5cbiAgICByZXR1cm4gR0xPQkFMSVpFIHx8IChHTE9CQUxJWkVfTEFOR1VBR0UgJiYgUHJlY29tcGlsZWRHbG9iYWxpemUoR0xPQkFMSVpFX0xBTkdVQUdFKSkgfHwgUHJlY29tcGlsZWRHbG9iYWxpemUoJ2VuJyk7XG4gIH0sIFtwYXRjaGVkTG9jYWxpemVkU3RyaW5nc10pO1xuXG4gIGNvbnN0IHRyYWNrRGltZW5zaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG5hbWU6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBUZWxlbWV0cnkgZGltZW5zaW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBkYXRhO1xuXG4gICAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IFRlbGVtZXRyeSBkaW1lbnNpb24gZGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZC4nKTtcbiAgICAgIH1cblxuICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZi5jdXJyZW50ID0gdXBkYXRlSW4oXG4gICAgICAgIHRlbGVtZXRyeURpbWVuc2lvbnNSZWYuY3VycmVudCxcbiAgICAgICAgW25hbWVdLFxuICAgICAgICB0eXBlID09PSAndW5kZWZpbmVkJyA/IGRhdGEgOiAoKSA9PiBkYXRhXG4gICAgICApO1xuICAgIH0sXG4gICAgW3RlbGVtZXRyeURpbWVuc2lvbnNSZWZdXG4gICk7XG5cbiAgY29uc3QgcGF0Y2hlZEFjdGl2aXR5UmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBhY3Rpdml0eVJlbmRlcmVyICYmXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXZWIgQ2hhdDogXCJhY3Rpdml0eVJlbmRlcmVyXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIG9uIDIwMjItMDYtMTUsIHBsZWFzZSB1c2UgXCJhY3Rpdml0eU1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYWN0aXZpdHlSZW5kZXJlciB8fFxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICdhY3Rpdml0eScsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KGFjdGl2aXR5TWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICh7IGFjdGl2aXR5IH0pID0+IHtcbiAgICAgICAgICBpZiAoYWN0aXZpdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVuZGVyZXIgZm9yIGFjdGl2aXR5IG9mIHR5cGUgXCIke2FjdGl2aXR5LnR5cGV9XCJgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhY3Rpdml0eSB0byByZW5kZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW2FjdGl2aXR5TWlkZGxld2FyZSwgYWN0aXZpdHlSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgYWN0aXZpdHlTdGF0dXNSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYWN0aXZpdHlTdGF0dXNSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwiYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlXCIgaW5zdGVhZC4nXG4gICAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnYWN0aXZpdHkgc3RhdHVzJyxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkoYWN0aXZpdHlTdGF0dXNNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKCkgPT4gZmFsc2VcbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW2FjdGl2aXR5U3RhdHVzTWlkZGxld2FyZSwgYWN0aXZpdHlTdGF0dXNSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBhcHBseU1pZGRsZXdhcmVGb3JSZW5kZXJlcihcbiAgICAgICAgJ2F0dGFjaG1lbnQgZm9yIHNjcmVlbiByZWFkZXInLFxuICAgICAgICB7IHN0cmljdDogdHJ1ZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlKSxcbiAgICAgICAgKCkgPT4gKCkgPT4gKHsgYXR0YWNobWVudCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gcmVuZGVyZXIgZm9yIGF0dGFjaG1lbnQgZm9yIHNjcmVlbiByZWFkZXIgb2YgdHlwZSBcIiR7YXR0YWNobWVudC5jb250ZW50VHlwZX1cImApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEB0b2RvIFRPRE86IFtQNF0gTWlnaHQgYmUgYWJsZSB0byB0aHJvdyB3aXRob3V0IHJldHVybmluZyBhIGZ1bmN0aW9uIC0tIGludmVzdGlnYXRlIGFuZCBwb3NzaWJseSBmaXhcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdHRhY2htZW50IHRvIHJlbmRlcicpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICkoe30pLFxuICAgIFthdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyTWlkZGxld2FyZV1cbiAgKTtcblxuICBjb25zdCBwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGF0dGFjaG1lbnRSZW5kZXJlcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYXR0YWNobWVudFJlbmRlcmVyXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIG9uIDIwMjItMDYtMTUsIHBsZWFzZSB1c2UgXCJhdHRhY2htZW50TWlkZGxld2FyZVwiIGluc3RlYWQuJ1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGF0dGFjaG1lbnRSZW5kZXJlcjtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2htZW50IHJlbmRlcmVyXG4gICAgcmV0dXJuIGFwcGx5TWlkZGxld2FyZUZvckxlZ2FjeVJlbmRlcmVyKFxuICAgICAgJ2F0dGFjaG1lbnQnLFxuICAgICAgLi4uc2luZ2xlVG9BcnJheShhdHRhY2htZW50TWlkZGxld2FyZSksXG4gICAgICAoKSA9PiAoKSA9PiAoeyBhdHRhY2htZW50IH0pID0+IHtcbiAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbmRlcmVyIGZvciBhdHRhY2htZW50IG9mIHR5cGUgXCIke2F0dGFjaG1lbnQuY29udGVudFR5cGV9XCJgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF0dGFjaG1lbnQgdG8gcmVuZGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKHt9KTtcbiAgfSwgW2F0dGFjaG1lbnRNaWRkbGV3YXJlLCBhdHRhY2htZW50UmVuZGVyZXJdKTtcblxuICBjb25zdCBwYXRjaGVkQXZhdGFyUmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBhdmF0YXJSZW5kZXJlciAmJlxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnV2ViIENoYXQ6IFwiYXZhdGFyUmVuZGVyZXJcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgb24gMjAyMi0wNi0xNSwgcGxlYXNlIHVzZSBcImF2YXRhck1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYXZhdGFyUmVuZGVyZXIgfHxcbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKCdhdmF0YXInLCB7IHN0cmljdDogZmFsc2UgfSwgLi4uc2luZ2xlVG9BcnJheShhdmF0YXJNaWRkbGV3YXJlKSwgKCkgPT4gKCkgPT4gKCkgPT5cbiAgICAgICAgZmFsc2VcbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW2F2YXRhck1pZGRsZXdhcmUsIGF2YXRhclJlbmRlcmVyXSk7XG5cbiAgY29uc3QgcGF0Y2hlZFRvYXN0UmVuZGVyZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB0b2FzdFJlbmRlcmVyICYmXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXZWIgQ2hhdDogXCJ0b2FzdFJlbmRlcmVyXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIG9uIDIwMjItMDYtMTUsIHBsZWFzZSB1c2UgXCJ0b2FzdE1pZGRsZXdhcmVcIiBpbnN0ZWFkLidcbiAgICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdG9hc3RSZW5kZXJlciB8fFxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICd0b2FzdCcsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KHRvYXN0TWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICh7IG5vdGlmaWNhdGlvbiB9KSA9PiB7XG4gICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZW5kZXJlciBmb3Igbm90aWZpY2F0aW9uIG9mIHR5cGUgXCIke25vdGlmaWNhdGlvbi5jb250ZW50VHlwZX1cImApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vdGlmaWNhdGlvbiB0byByZW5kZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICkoe30pXG4gICAgKTtcbiAgfSwgW3RvYXN0TWlkZGxld2FyZSwgdG9hc3RSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHBhdGNoZWRUeXBpbmdJbmRpY2F0b3JSZW5kZXJlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHR5cGluZ0luZGljYXRvclJlbmRlcmVyICYmXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdXZWIgQ2hhdDogXCJ0eXBpbmdJbmRpY2F0b3JSZW5kZXJlclwiIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbiAyMDIyLTA2LTE1LCBwbGVhc2UgdXNlIFwidHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZVwiIGluc3RlYWQuJ1xuICAgICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlciB8fFxuICAgICAgYXBwbHlNaWRkbGV3YXJlRm9yUmVuZGVyZXIoXG4gICAgICAgICd0eXBpbmcgaW5kaWNhdG9yJyxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH0sXG4gICAgICAgIC4uLnNpbmdsZVRvQXJyYXkodHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICgpID0+IGZhbHNlXG4gICAgICApKHt9KVxuICAgICk7XG4gIH0sIFt0eXBpbmdJbmRpY2F0b3JNaWRkbGV3YXJlLCB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcl0pO1xuXG4gIGNvbnN0IHNjcm9sbFRvRW5kQnV0dG9uUmVuZGVyZXI6IFNjcm9sbFRvRW5kQnV0dG9uQ29tcG9uZW50RmFjdG9yeSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGFwcGx5TWlkZGxld2FyZUZvclJlbmRlcmVyKFxuICAgICAgICAnc2Nyb2xsIHRvIGVuZCBidXR0b24nLFxuICAgICAgICB7IHN0cmljdDogdHJ1ZSB9LFxuICAgICAgICAuLi5zaW5nbGVUb0FycmF5KHNjcm9sbFRvRW5kQnV0dG9uTWlkZGxld2FyZSksXG4gICAgICAgICgpID0+ICgpID0+ICgpID0+IGZhbHNlXG4gICAgICApKCkgYXMgYW55LFxuICAgIFtzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmVdXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBoZWF2eSBmdW5jdGlvbiwgYW5kIGl0IGlzIGV4cGVjdGVkIHRvIGJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlcmUgaXMgYSBuZWVkIHRvIHJlY3JlYXRlIGJ1c2luZXNzIGxvZ2ljLCBlLmcuXG4gICAqIC0gVXNlciBJRCBjaGFuZ2VkLCBjYXVzaW5nIGFsbCBzZW5kKiBmdW5jdGlvbnMgdG8gYmUgdXBkYXRlZFxuICAgKiAtIHNlbmRcbiAgICogQHRvZG8gVE9ETzogW1AzXSBXZSBzaG91bGQgdGhpbmsgYWJvdXQgaWYgd2UgYWxsb3cgdGhlIHVzZXIgdG8gY2hhbmdlIG9uU2VuZEJveFZhbHVlQ2hhbmdlZC9zZW5kQm94VmFsdWUsIGUuZy5cbiAgICogMS4gVHVybnMgdGV4dCBpbnRvIFVQUEVSQ0FTRVxuICAgKiAyLiBGaWx0ZXIgb3V0IHByb2Zhbml0eVxuICAgKiBAdG9kbyBUT0RPOiBbUDRdIFJldmlzaXQgYWxsIG1lbWJlcnMgb2YgY29udGV4dFxuICAgKiAgICAgICBUaGlzIGNvbnRleHQgc2hvdWxkIGNvbnNpc3Qgb2YgbWVtYmVycyB0aGF0IGFyZSBub3QgaW4gdGhlIFJlZHV4IHN0b3JlXG4gICAqICAgICAgIGkuZS4gbWVtYmVycyB0aGF0IGFyZSBub3QgaW50ZXJlc3RlZCBpbiBvdGhlciB0eXBlcyBvZiBVSXNcbiAgICovXG4gIGNvbnN0IGNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICAuLi5jYXJkQWN0aW9uQ29udGV4dCxcbiAgICAgIC4uLmdyb3VwQWN0aXZpdGllc0NvbnRleHQsXG4gICAgICAuLi5ob2lzdGVkRGlzcGF0Y2hlcnMsXG4gICAgICBhY3Rpdml0eVJlbmRlcmVyOiBwYXRjaGVkQWN0aXZpdHlSZW5kZXJlcixcbiAgICAgIGFjdGl2aXR5U3RhdHVzUmVuZGVyZXI6IHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyOiBwYXRjaGVkQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyLFxuICAgICAgYXR0YWNobWVudFJlbmRlcmVyOiBwYXRjaGVkQXR0YWNobWVudFJlbmRlcmVyLFxuICAgICAgYXZhdGFyUmVuZGVyZXI6IHBhdGNoZWRBdmF0YXJSZW5kZXJlcixcbiAgICAgIGRpcjogcGF0Y2hlZERpcixcbiAgICAgIGRpcmVjdExpbmUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMLFxuICAgICAgZ3JhbW1hcnM6IHBhdGNoZWRHcmFtbWFycyxcbiAgICAgIGludGVybmFsRXJyb3JCb3hDbGFzcyxcbiAgICAgIGxhbmd1YWdlOiBsb2NhbGUsXG4gICAgICBsb2NhbGl6ZWRHbG9iYWxpemVTdGF0ZTogW2xvY2FsaXplZEdsb2JhbGl6ZV0sXG4gICAgICBsb2NhbGl6ZWRTdHJpbmdzOiBwYXRjaGVkTG9jYWxpemVkU3RyaW5ncyxcbiAgICAgIG9uVGVsZW1ldHJ5LFxuICAgICAgcmVuZGVyTWFya2Rvd24sXG4gICAgICBzY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICAgICAgc2VsZWN0Vm9pY2U6IHBhdGNoZWRTZWxlY3RWb2ljZSxcbiAgICAgIHNlbmRUeXBpbmdJbmRpY2F0b3IsXG4gICAgICBzdHlsZU9wdGlvbnM6IHBhdGNoZWRTdHlsZU9wdGlvbnMsXG4gICAgICB0ZWxlbWV0cnlEaW1lbnNpb25zUmVmLFxuICAgICAgdG9hc3RSZW5kZXJlcjogcGF0Y2hlZFRvYXN0UmVuZGVyZXIsXG4gICAgICB0cmFja0RpbWVuc2lvbixcbiAgICAgIHR5cGluZ0luZGljYXRvclJlbmRlcmVyOiBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gICAgICB1c2VySUQsXG4gICAgICB1c2VybmFtZVxuICAgIH0pLFxuICAgIFtcbiAgICAgIGNhcmRBY3Rpb25Db250ZXh0LFxuICAgICAgZGlyZWN0TGluZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZG93bnNjYWxlSW1hZ2VUb0RhdGFVUkwsXG4gICAgICBncm91cEFjdGl2aXRpZXNDb250ZXh0LFxuICAgICAgaG9pc3RlZERpc3BhdGNoZXJzLFxuICAgICAgaW50ZXJuYWxFcnJvckJveENsYXNzLFxuICAgICAgbG9jYWxlLFxuICAgICAgbG9jYWxpemVkR2xvYmFsaXplLFxuICAgICAgb25UZWxlbWV0cnksXG4gICAgICBwYXRjaGVkQWN0aXZpdHlSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgcGF0Y2hlZEF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcixcbiAgICAgIHBhdGNoZWRBdHRhY2htZW50UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkQXZhdGFyUmVuZGVyZXIsXG4gICAgICBwYXRjaGVkRGlyLFxuICAgICAgcGF0Y2hlZEdyYW1tYXJzLFxuICAgICAgcGF0Y2hlZExvY2FsaXplZFN0cmluZ3MsXG4gICAgICBwYXRjaGVkU2VsZWN0Vm9pY2UsXG4gICAgICBwYXRjaGVkU3R5bGVPcHRpb25zLFxuICAgICAgcGF0Y2hlZFRvYXN0UmVuZGVyZXIsXG4gICAgICBwYXRjaGVkVHlwaW5nSW5kaWNhdG9yUmVuZGVyZXIsXG4gICAgICByZW5kZXJNYXJrZG93bixcbiAgICAgIHNjcm9sbFRvRW5kQnV0dG9uUmVuZGVyZXIsXG4gICAgICBzZW5kVHlwaW5nSW5kaWNhdG9yLFxuICAgICAgdGVsZW1ldHJ5RGltZW5zaW9uc1JlZixcbiAgICAgIHRyYWNrRGltZW5zaW9uLFxuICAgICAgdXNlcklELFxuICAgICAgdXNlcm5hbWVcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8V2ViQ2hhdEFQSUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKGNvbnRleHQpIDogY2hpbGRyZW59XG4gICAgICB7b25UZWxlbWV0cnkgJiYgPFRyYWNrZXIgLz59XG4gICAgPC9XZWJDaGF0QVBJQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbi8qKlxuICogQHRvZG8gVE9ETzogW1AzXSBXZSBzaG91bGQgY29uc2lkZXIgbW92aW5nIHNvbWUgZGF0YSBmcm9tIFJlZHV4IHN0b3JlIHRvIHByb3BzXG4gKiAgICAgICBBbHRob3VnaCB3ZSB1c2UgYGNvbm5lY3RUb1dlYkNoYXRgIHRvIGhpZGUgdGhlIGRldGFpbHMgb2YgYWNjZXNzb3Igb2YgUmVkdXggc3RvcmUsXG4gKiAgICAgICB3ZSBzaG91bGQgY2xlYW4gdXAgdGhlIHJlc3BvbnNpYmlsaXR5IGJldHdlZW4gQ29udGV4dCBhbmQgUmVkdXggc3RvcmVcbiAqICAgICAgIFdlIHNob3VsZCBkZWNpZGUgd2hpY2ggZGF0YSBpcyBuZWVkZWQgZm9yIFJlYWN0IGJ1dCBub3QgaW4gb3RoZXIgZW52aXJvbm1lbnQgc3VjaCBhcyBDTEkvVlNDb2RlXG4gKi9cbkNvbXBvc2VyQ29yZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGl2aXR5TWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhY3Rpdml0eVJlbmRlcmVyOiB1bmRlZmluZWQsXG4gIGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyOiB1bmRlZmluZWQsXG4gIGF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGF0dGFjaG1lbnRNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGF0dGFjaG1lbnRSZW5kZXJlcjogdW5kZWZpbmVkLFxuICBhdmF0YXJNaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGF2YXRhclJlbmRlcmVyOiB1bmRlZmluZWQsXG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlOiB1bmRlZmluZWQsXG4gIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gIGRpcjogJ2F1dG8nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMOiB1bmRlZmluZWQsXG4gIGdyYW1tYXJzOiBbXSxcbiAgZ3JvdXBBY3Rpdml0aWVzTWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICBncm91cFRpbWVzdGFtcDogdW5kZWZpbmVkLFxuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M6IHVuZGVmaW5lZCxcbiAgbG9jYWxlOiB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIHx8ICdlbi1VUycsXG4gIG9uVGVsZW1ldHJ5OiB1bmRlZmluZWQsXG4gIG92ZXJyaWRlTG9jYWxpemVkU3RyaW5nczogdW5kZWZpbmVkLFxuICByZW5kZXJNYXJrZG93bjogdW5kZWZpbmVkLFxuICBzY3JvbGxUb0VuZEJ1dHRvbk1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgc2VsZWN0Vm9pY2U6IHVuZGVmaW5lZCxcbiAgc2VuZFRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgc2VuZFR5cGluZ0luZGljYXRvcjogZmFsc2UsXG4gIHN0eWxlT3B0aW9uczoge30sXG4gIHRvYXN0TWlkZGxld2FyZTogdW5kZWZpbmVkLFxuICB0b2FzdFJlbmRlcmVyOiB1bmRlZmluZWQsXG4gIHR5cGluZ0luZGljYXRvck1pZGRsZXdhcmU6IHVuZGVmaW5lZCxcbiAgdHlwaW5nSW5kaWNhdG9yUmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgdXNlcklEOiAnJyxcbiAgdXNlcm5hbWU6ICcnXG59O1xuXG5Db21wb3NlckNvcmUucHJvcFR5cGVzID0ge1xuICBhY3Rpdml0eU1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYWN0aXZpdHlSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGFjdGl2aXR5U3RhdHVzTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBhY3Rpdml0eVN0YXR1c1JlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgYXR0YWNobWVudEZvclNjcmVlblJlYWRlck1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYXR0YWNobWVudE1pZGRsZXdhcmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5mdW5jKSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgYXR0YWNobWVudFJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgYXZhdGFyTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICBhdmF0YXJSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNhcmRBY3Rpb25NaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuYW55LFxuICBkaXI6IFByb3BUeXBlcy5vbmVPZihbJ2F1dG8nLCAnbHRyJywgJ3J0bCddKSxcbiAgZGlyZWN0TGluZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhY3Rpdml0eSQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBzdWJzY3JpYmU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGNvbm5lY3Rpb25TdGF0dXMkOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgc3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBlbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdldFNlc3Npb25JZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcG9zdEFjdGl2aXR5OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZmVyZW5jZUdyYW1tYXJJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0b2tlbjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRvd25zY2FsZUltYWdlVG9EYXRhVVJMOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ3JhbW1hcnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICBncm91cEFjdGl2aXRpZXNNaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIGdyb3VwVGltZXN0YW1wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm51bWJlcl0pLFxuICBpbnRlcm5hbEVycm9yQm94Q2xhc3M6IFByb3BUeXBlcy5mdW5jLCAvLyBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4gV2UgZG9uJ3QgYWxsb3cgY3VzdG9taXphdGlvbiBvZiBlcnJvciBib3guXG4gIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25UZWxlbWV0cnk6IFByb3BUeXBlcy5mdW5jLFxuICBvdmVycmlkZUxvY2FsaXplZFN0cmluZ3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnksIFByb3BUeXBlcy5mdW5jXSksXG4gIHJlbmRlck1hcmtkb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2Nyb2xsVG9FbmRCdXR0b25NaWRkbGV3YXJlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyksIFByb3BUeXBlcy5mdW5jXSksXG4gIHNlbGVjdFZvaWNlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2VuZFRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlbmRUeXBpbmdJbmRpY2F0b3I6IFByb3BUeXBlcy5ib29sLFxuICBzdHlsZU9wdGlvbnM6IFByb3BUeXBlcy5hbnksXG4gIHRvYXN0TWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICB0b2FzdFJlbmRlcmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgdHlwaW5nSW5kaWNhdG9yTWlkZGxld2FyZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmZ1bmMpLCBQcm9wVHlwZXMuZnVuY10pLFxuICB0eXBpbmdJbmRpY2F0b3JSZW5kZXJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIHVzZXJJRDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXNlcm5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbnR5cGUgQ29tcG9zZXJQcm9wcyA9IENvbXBvc2VyQ29yZVByb3BzICYgeyBzdG9yZT86IGFueSB9O1xuXG4vLyBXZSB3aWxsIGNyZWF0ZSBhIFJlZHV4IHN0b3JlIGlmIGl0IHdhcyBub3QgcGFzc2VkIGluXG5jb25zdCBDb21wb3NlcjogRkM8Q29tcG9zZXJQcm9wcz4gPSAoeyBpbnRlcm5hbFJlbmRlckVycm9yQm94LCBvblRlbGVtZXRyeSwgc3RvcmUsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZSgpO1xuXG4gIGNvbnN0IGhhbmRsZUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IFVuY2F1Z2h0IGV4Y2VwdGlvbicsIHsgZXJyb3IgfSk7XG5cbiAgICAgIG9uVGVsZW1ldHJ5ICYmXG4gICAgICAgIG9uVGVsZW1ldHJ5KGNyZWF0ZUN1c3RvbUV2ZW50KCdleGNlcHRpb24nLCB7IGVycm9yLCBmYXRhbDogdHJ1ZSB9KSBhcyBUZWxlbWV0cnlFeGNlcHRpb25NZWFzdXJlbWVudEV2ZW50KTtcbiAgICAgIHNldEVycm9yKGVycm9yKTtcbiAgICB9LFxuICAgIFtvblRlbGVtZXRyeSwgc2V0RXJyb3JdXG4gICk7XG5cbiAgY29uc3QgbWVtb2l6ZWRTdG9yZSA9IHVzZU1lbW8oKCkgPT4gc3RvcmUgfHwgY3JlYXRlU3RvcmUoKSwgW3N0b3JlXSk7XG5cbiAgcmV0dXJuIGVycm9yID8gKFxuICAgICEhaW50ZXJuYWxSZW5kZXJFcnJvckJveCAmJiBpbnRlcm5hbFJlbmRlckVycm9yQm94KHsgZXJyb3IsIHR5cGU6ICd1bmNhdWdodCBleGNlcHRpb24nIH0pXG4gICkgOiAoXG4gICAgPEVycm9yQm91bmRhcnkgb25FcnJvcj17aGFuZGxlRXJyb3J9PlxuICAgICAgPFByb3ZpZGVyIGNvbnRleHQ9e1dlYkNoYXRSZWR1eENvbnRleHR9IHN0b3JlPXttZW1vaXplZFN0b3JlfT5cbiAgICAgICAgPENvbXBvc2VyQ29yZSBpbnRlcm5hbFJlbmRlckVycm9yQm94PXtpbnRlcm5hbFJlbmRlckVycm9yQm94fSBvblRlbGVtZXRyeT17b25UZWxlbWV0cnl9IHsuLi5wcm9wc30gLz5cbiAgICAgIDwvUHJvdmlkZXI+XG4gICAgPC9FcnJvckJvdW5kYXJ5PlxuICApO1xufTtcblxuQ29tcG9zZXIuZGVmYXVsdFByb3BzID0ge1xuICBpbnRlcm5hbFJlbmRlckVycm9yQm94OiB1bmRlZmluZWQsXG4gIG9uVGVsZW1ldHJ5OiB1bmRlZmluZWQsXG4gIHN0b3JlOiB1bmRlZmluZWRcbn07XG5cbkNvbXBvc2VyLnByb3BUeXBlcyA9IHtcbiAgaW50ZXJuYWxSZW5kZXJFcnJvckJveDogUHJvcFR5cGVzLmFueSxcbiAgb25UZWxlbWV0cnk6IFByb3BUeXBlcy5mdW5jLFxuICBzdG9yZTogUHJvcFR5cGVzLmFueVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zZXI7XG5cbmV4cG9ydCB0eXBlIHsgQ29tcG9zZXJQcm9wcyB9O1xuIl19
|