botframework-webchat 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 +5 -0
- package/README.md +33 -36
- package/babel.config.json +2 -2
- package/babel.sanitize-html.config.json +10 -0
- package/lib/AddFullBundle.d.ts +30 -0
- package/lib/AddFullBundle.d.ts.map +1 -0
- package/lib/AddFullBundle.js +77 -0
- package/lib/FullComposer.d.ts +8 -0
- package/lib/FullComposer.d.ts.map +1 -0
- package/lib/FullComposer.js +6 -16
- package/lib/FullReactWebChat.d.ts +8 -0
- package/lib/FullReactWebChat.d.ts.map +1 -0
- package/lib/FullReactWebChat.js +8 -23
- package/lib/adaptiveCards/AdaptiveCardsComposer.d.ts +10 -0
- package/lib/adaptiveCards/AdaptiveCardsComposer.d.ts.map +1 -0
- package/lib/adaptiveCards/AdaptiveCardsComposer.js +6 -2
- package/lib/adaptiveCards/AdaptiveCardsContext.d.ts +8 -0
- package/lib/adaptiveCards/AdaptiveCardsContext.d.ts.map +1 -0
- package/lib/adaptiveCards/AdaptiveCardsContext.js +3 -3
- package/lib/adaptiveCards/AdaptiveCardsStyleOptions.d.ts +5 -3
- package/lib/adaptiveCards/AdaptiveCardsStyleOptions.d.ts.map +1 -1
- package/lib/adaptiveCards/AdaptiveCardsStyleSet.d.ts +7 -0
- package/lib/adaptiveCards/AdaptiveCardsStyleSet.d.ts.map +1 -0
- package/lib/{FullBundleStyleOptions.js → adaptiveCards/AdaptiveCardsStyleSet.js} +0 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardAttachment.d.ts +9 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardAttachment.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardAttachment.js +1 -1
- package/lib/adaptiveCards/Attachment/AdaptiveCardBuilder.d.ts +28 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardBuilder.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardBuilder.js +4 -4
- package/lib/adaptiveCards/Attachment/AdaptiveCardContent.d.ts +9 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardContent.js +8 -4
- package/lib/adaptiveCards/Attachment/AdaptiveCardRenderer.d.ts +11 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardRenderer.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/AdaptiveCardRenderer.js +210 -49
- package/lib/adaptiveCards/Attachment/AnimationCardContent.d.ts +10 -0
- package/lib/adaptiveCards/Attachment/AnimationCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/AnimationCardContent.js +1 -1
- package/lib/adaptiveCards/Attachment/AudioCardContent.d.ts +10 -0
- package/lib/adaptiveCards/Attachment/AudioCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/AudioCardContent.js +1 -1
- package/lib/adaptiveCards/Attachment/CommonCard.js +11 -6
- package/lib/adaptiveCards/Attachment/HeroCardContent.d.ts +10 -0
- package/lib/adaptiveCards/Attachment/HeroCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/HeroCardContent.js +11 -6
- package/lib/adaptiveCards/Attachment/OAuthCardContent.d.ts +10 -0
- package/lib/adaptiveCards/Attachment/OAuthCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/OAuthCardContent.js +11 -6
- package/lib/adaptiveCards/Attachment/ReceiptCardContent.d.ts +10 -0
- package/lib/adaptiveCards/Attachment/ReceiptCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/ReceiptCardContent.js +11 -6
- package/lib/adaptiveCards/Attachment/SignInCardContent.d.ts +10 -0
- package/lib/adaptiveCards/Attachment/SignInCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/SignInCardContent.js +1 -1
- package/lib/adaptiveCards/Attachment/ThumbnailCardContent.d.ts +10 -0
- package/lib/adaptiveCards/Attachment/ThumbnailCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/ThumbnailCardContent.js +11 -6
- package/lib/adaptiveCards/Attachment/VideoCardContent.d.ts +20 -0
- package/lib/adaptiveCards/Attachment/VideoCardContent.d.ts.map +1 -0
- package/lib/adaptiveCards/Attachment/VideoCardContent.js +7 -5
- package/lib/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js +7 -3
- package/lib/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js +1 -1
- package/lib/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.d.ts +56 -0
- package/lib/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.d.ts.map +1 -0
- package/lib/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.js +1 -1
- package/lib/adaptiveCards/Styles/adaptiveCardHostConfig.d.ts +126 -0
- package/lib/adaptiveCards/Styles/adaptiveCardHostConfig.d.ts.map +1 -0
- package/lib/adaptiveCards/Styles/adaptiveCardHostConfig.js +29 -9
- package/lib/adaptiveCards/Styles/createAdaptiveCardsStyleSet.d.ts +5 -0
- package/lib/adaptiveCards/Styles/createAdaptiveCardsStyleSet.d.ts.map +1 -0
- package/lib/adaptiveCards/Styles/createAdaptiveCardsStyleSet.js +2 -2
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.d.ts +3 -0
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.d.ts.map +1 -0
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.js +5 -11
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.d.ts +3 -0
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.d.ts.map +1 -0
- package/lib/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.js +29 -39
- package/lib/adaptiveCards/defaultStyleOptions.d.ts +4 -0
- package/lib/adaptiveCards/defaultStyleOptions.d.ts.map +1 -0
- package/lib/adaptiveCards/defaultStyleOptions.js +3 -2
- package/lib/adaptiveCards/hooks/internal/useAdaptiveCardsContext.d.ts +3 -0
- package/lib/adaptiveCards/hooks/internal/useAdaptiveCardsContext.d.ts.map +1 -0
- package/lib/adaptiveCards/hooks/internal/useAdaptiveCardsContext.js +1 -1
- package/lib/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.d.ts +2 -0
- package/lib/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.d.ts.map +1 -0
- package/lib/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.js +7 -5
- package/lib/adaptiveCards/hooks/internal/useUniqueId.js +1 -1
- package/lib/adaptiveCards/hooks/useAdaptiveCardsHostConfig.d.ts +2 -0
- package/lib/adaptiveCards/hooks/useAdaptiveCardsHostConfig.d.ts.map +1 -0
- package/lib/adaptiveCards/hooks/useAdaptiveCardsHostConfig.js +3 -5
- package/lib/adaptiveCards/hooks/useAdaptiveCardsPackage.d.ts +3 -0
- package/lib/adaptiveCards/hooks/useAdaptiveCardsPackage.d.ts.map +1 -0
- package/lib/adaptiveCards/hooks/useAdaptiveCardsPackage.js +1 -1
- package/lib/adaptiveCards/normalizeStyleOptions.d.ts +3 -0
- package/lib/adaptiveCards/normalizeStyleOptions.d.ts.map +1 -0
- package/lib/adaptiveCards/normalizeStyleOptions.js +1 -1
- package/lib/addVersion.js +2 -2
- package/lib/createBrowserWebSpeechPonyfillFactory.d.ts +3 -0
- package/lib/createBrowserWebSpeechPonyfillFactory.d.ts.map +1 -0
- package/lib/createBrowserWebSpeechPonyfillFactory.js +7 -4
- package/lib/createCognitiveServicesSpeechServicesPonyfillFactory.d.ts +17 -0
- package/lib/createCognitiveServicesSpeechServicesPonyfillFactory.d.ts.map +1 -0
- package/lib/createCognitiveServicesSpeechServicesPonyfillFactory.js +17 -11
- package/lib/createDirectLine.d.ts +17 -0
- package/lib/createDirectLine.d.ts.map +1 -0
- package/lib/createDirectLine.js +3 -2
- package/lib/createDirectLineAppServiceExtension.d.ts +7 -0
- package/lib/createDirectLineAppServiceExtension.d.ts.map +1 -0
- package/lib/createDirectLineAppServiceExtension.js +1 -1
- package/lib/createDirectLineSpeechAdapters.d.ts +25 -0
- package/lib/createDirectLineSpeechAdapters.d.ts.map +1 -0
- package/lib/createDirectLineSpeechAdapters.js +57 -3
- package/lib/createFullStyleSet.d.ts +1106 -0
- package/lib/createFullStyleSet.d.ts.map +1 -0
- package/lib/createFullStyleSet.js +2 -2
- package/lib/fullBundleDefaultStyleOptions.js +4 -4
- package/lib/hooks/useStyleOptions.d.ts +3 -0
- package/lib/hooks/useStyleOptions.d.ts.map +1 -0
- package/lib/hooks/useStyleOptions.js +21 -0
- package/lib/index-es5.d.ts +24 -20
- package/lib/index-es5.d.ts.map +1 -1
- package/lib/index-es5.js +2 -2
- package/lib/index-minimal.d.ts +9 -6
- package/lib/index-minimal.d.ts.map +1 -1
- package/lib/index-minimal.js +8 -4
- package/lib/index.d.ts +154 -18
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -7
- package/lib/renderMarkdown.d.ts +6 -0
- package/lib/renderMarkdown.d.ts.map +1 -0
- package/lib/renderMarkdown.js +5 -2
- package/lib/renderWebChat.d.ts +3 -0
- package/lib/renderWebChat.d.ts.map +1 -0
- package/lib/renderWebChat.js +1 -1
- package/lib/speech/CustomAudioInputStream.d.ts +94 -0
- package/lib/speech/CustomAudioInputStream.d.ts.map +1 -0
- package/lib/speech/CustomAudioInputStream.js +416 -0
- package/lib/speech/bytesPerSample.d.ts +2 -0
- package/lib/speech/bytesPerSample.d.ts.map +1 -0
- package/lib/speech/bytesPerSample.js +12 -0
- package/lib/speech/createAudioConfig.d.ts +23 -0
- package/lib/speech/createAudioConfig.d.ts.map +1 -0
- package/lib/speech/createAudioConfig.js +84 -0
- package/lib/speech/createAudioContext.d.ts +3 -0
- package/lib/speech/createAudioContext.d.ts.map +1 -0
- package/lib/speech/createAudioContext.js +22 -0
- package/lib/speech/createMicrophoneAudioConfigAndAudioContext.d.ts +9 -0
- package/lib/speech/createMicrophoneAudioConfigAndAudioContext.d.ts.map +1 -0
- package/lib/speech/createMicrophoneAudioConfigAndAudioContext.js +161 -0
- package/lib/speech/getUserMedia.d.ts +2 -0
- package/lib/speech/getUserMedia.d.ts.map +1 -0
- package/lib/speech/getUserMedia.js +25 -0
- package/lib/types/AdaptiveCardsPackage.d.ts +13 -0
- package/lib/types/AdaptiveCardsPackage.d.ts.map +1 -0
- package/lib/types/AdaptiveCardsPackage.js +2 -0
- package/lib/types/CognitiveServicesAudioOutputFormat.d.ts +3 -0
- package/lib/types/CognitiveServicesAudioOutputFormat.d.ts.map +1 -0
- package/lib/types/CognitiveServicesAudioOutputFormat.js +2 -0
- package/lib/types/CognitiveServicesCredentials.d.ts +18 -0
- package/lib/types/CognitiveServicesCredentials.d.ts.map +1 -0
- package/lib/types/CognitiveServicesCredentials.js +2 -0
- package/lib/types/CognitiveServicesTextNormalization.d.ts +3 -0
- package/lib/types/CognitiveServicesTextNormalization.d.ts.map +1 -0
- package/lib/types/CognitiveServicesTextNormalization.js +2 -0
- package/lib/{FullBundleStyleOptions.d.ts → types/FullBundleStyleOptions.d.ts} +1 -1
- package/lib/types/FullBundleStyleOptions.d.ts.map +1 -0
- package/lib/types/FullBundleStyleOptions.js +2 -0
- package/lib/useComposerProps.d.ts +22 -0
- package/lib/useComposerProps.d.ts.map +1 -0
- package/lib/useComposerProps.js +6 -8
- package/package.json +51 -46
- package/src/AddFullBundle.tsx +94 -0
- package/src/FullComposer.tsx +38 -0
- package/src/FullReactWebChat.tsx +32 -0
- package/src/__tests__/createDirectLine.spec.js +2 -0
- package/src/__tests__/renderMarkdown.spec.js +1 -1
- package/src/__tests__/versionTag.es5.spec.js +3 -0
- package/src/__tests__/versionTag.full.spec.js +3 -0
- package/src/__tests__/versionTag.minimal.spec.js +3 -0
- package/src/adaptiveCards/{AdaptiveCardsComposer.js → AdaptiveCardsComposer.tsx} +17 -5
- package/src/adaptiveCards/AdaptiveCardsContext.ts +12 -0
- package/src/adaptiveCards/AdaptiveCardsStyleOptions.ts +5 -3
- package/src/adaptiveCards/AdaptiveCardsStyleSet.ts +7 -0
- package/src/adaptiveCards/Attachment/{AdaptiveCardAttachment.js → AdaptiveCardAttachment.tsx} +8 -2
- package/src/adaptiveCards/Attachment/AdaptiveCardBuilder.ts +21 -15
- package/src/adaptiveCards/Attachment/{AdaptiveCardContent.js → AdaptiveCardContent.tsx} +8 -2
- package/src/adaptiveCards/Attachment/{AdaptiveCardRenderer.js → AdaptiveCardRenderer.tsx} +228 -46
- package/src/adaptiveCards/Attachment/{AnimationCardContent.js → AnimationCardContent.tsx} +9 -2
- package/src/adaptiveCards/Attachment/{AudioCardContent.js → AudioCardContent.tsx} +9 -2
- package/src/adaptiveCards/Attachment/CommonCard.js +2 -1
- package/src/adaptiveCards/Attachment/{HeroCardContent.js → HeroCardContent.tsx} +12 -3
- package/src/adaptiveCards/Attachment/{OAuthCardContent.js → OAuthCardContent.tsx} +11 -3
- package/src/adaptiveCards/Attachment/{ReceiptCardContent.js → ReceiptCardContent.tsx} +58 -28
- package/src/adaptiveCards/Attachment/{SignInCardContent.js → SignInCardContent.tsx} +9 -2
- package/src/adaptiveCards/Attachment/{ThumbnailCardContent.js → ThumbnailCardContent.tsx} +12 -3
- package/src/adaptiveCards/Attachment/{VideoCardContent.js → VideoCardContent.tsx} +15 -3
- package/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts +1 -1
- package/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts +28 -8
- package/src/adaptiveCards/Styles/createAdaptiveCardsStyleSet.spec.js +2 -0
- package/src/adaptiveCards/Styles/createAdaptiveCardsStyleSet.ts +7 -4
- package/src/adaptiveCards/{createAdaptiveCardsAttachmentForScreenReaderMiddleware.js → createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx} +16 -15
- package/src/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx +45 -0
- package/src/adaptiveCards/defaultStyleOptions.ts +2 -1
- package/src/adaptiveCards/hooks/internal/{useAdaptiveCardsContext.js → useAdaptiveCardsContext.ts} +1 -1
- package/src/adaptiveCards/hooks/internal/{useParseAdaptiveCardJSON.js → useParseAdaptiveCardJSON.ts} +5 -2
- package/src/adaptiveCards/hooks/internal/{useUniqueId.js → useUniqueId.ts} +1 -1
- package/src/adaptiveCards/hooks/{useAdaptiveCardsHostConfig.js → useAdaptiveCardsHostConfig.ts} +6 -8
- package/src/adaptiveCards/hooks/{useAdaptiveCardsPackage.js → useAdaptiveCardsPackage.ts} +2 -1
- package/src/createBrowserWebSpeechPonyfillFactory.ts +21 -0
- package/src/createCognitiveServicesSpeechServicesPonyfillFactory.spec.js +37 -6
- package/src/createCognitiveServicesSpeechServicesPonyfillFactory.ts +78 -0
- package/src/createDirectLine.ts +65 -0
- package/src/createDirectLineAppServiceExtension.ts +22 -0
- package/src/createDirectLineSpeechAdapters.ts +84 -0
- package/src/createFullStyleSet.ts +2 -2
- package/src/fullBundleDefaultStyleOptions.ts +3 -3
- package/src/hooks/useStyleOptions.ts +9 -0
- package/src/index-es5.ts +0 -2
- package/src/index-minimal.ts +3 -2
- package/src/index.ts +22 -10
- package/src/{renderMarkdown.js → renderMarkdown.ts} +8 -1
- package/src/renderWebChat.tsx +6 -0
- package/src/speech/CustomAudioInputStream.ts +325 -0
- package/src/speech/bytesPerSample.ts +4 -0
- package/src/speech/createAudioConfig.spec.js +23 -0
- package/src/speech/createAudioConfig.ts +70 -0
- package/src/speech/createAudioContext.ts +16 -0
- package/src/speech/createMicrophoneAudioConfigAndAudioContext.ts +146 -0
- package/src/speech/getUserMedia.ts +14 -0
- package/src/tsconfig.json +1 -1
- package/src/types/AdaptiveCardsPackage.ts +23 -0
- package/src/types/CognitiveServicesAudioOutputFormat.ts +28 -0
- package/src/types/CognitiveServicesCredentials.ts +28 -0
- package/src/types/CognitiveServicesTextNormalization.ts +3 -0
- package/src/{FullBundleStyleOptions.ts → types/FullBundleStyleOptions.ts} +1 -1
- package/src/{useComposerProps.js → useComposerProps.ts} +21 -11
- package/webpack.config.js +46 -6
- package/lib/FullBundleStyleOptions.d.ts.map +0 -1
- package/src/FullComposer.js +0 -40
- package/src/FullReactWebChat.js +0 -47
- package/src/adaptiveCards/AdaptiveCardsContext.js +0 -5
- package/src/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.js +0 -41
- package/src/createBrowserWebSpeechPonyfillFactory.js +0 -16
- package/src/createCognitiveServicesSpeechServicesPonyfillFactory.js +0 -58
- package/src/createDirectLine.js +0 -38
- package/src/createDirectLineAppServiceExtension.js +0 -12
- package/src/createDirectLineSpeechAdapters.js +0 -5
- package/src/index-es5.tsx +0 -49
- package/src/index-minimal.tsx +0 -9
- package/src/index.tsx +0 -45
- package/src/renderWebChat.js +0 -6
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
-
|
|
5
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
7
|
Object.defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
|
9
9
|
});
|
|
@@ -25,6 +25,10 @@ var _useAdaptiveCardsHostConfig = _interopRequireDefault(require("../hooks/useAd
|
|
|
25
25
|
|
|
26
26
|
var _useAdaptiveCardsPackage = _interopRequireDefault(require("../hooks/useAdaptiveCardsPackage"));
|
|
27
27
|
|
|
28
|
+
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); }
|
|
29
|
+
|
|
30
|
+
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; }
|
|
31
|
+
|
|
28
32
|
/* eslint no-magic-numbers: ["error", { "ignore": [-1, 0, 2] }] */
|
|
29
33
|
var ErrorBox = _botframeworkWebchatComponent.Components.ErrorBox;
|
|
30
34
|
var useDisabled = _botframeworkWebchatComponent.hooks.useDisabled,
|
|
@@ -34,7 +38,7 @@ var useDisabled = _botframeworkWebchatComponent.hooks.useDisabled,
|
|
|
34
38
|
useScrollToEnd = _botframeworkWebchatComponent.hooks.useScrollToEnd,
|
|
35
39
|
useStyleSet = _botframeworkWebchatComponent.hooks.useStyleSet; // eslint-disable-next-line no-undef
|
|
36
40
|
|
|
37
|
-
var node_env =
|
|
41
|
+
var node_env = undefined || "production";
|
|
38
42
|
|
|
39
43
|
function addClass(element, className) {
|
|
40
44
|
var classNames = new Set(element.className.split(' '));
|
|
@@ -171,7 +175,7 @@ function disableInputElementsWithUndo(element) {
|
|
|
171
175
|
var observer = new MutationObserver(function (mutations) {
|
|
172
176
|
return mutations.forEach(function (_ref) {
|
|
173
177
|
var addedNodes = _ref.addedNodes;
|
|
174
|
-
return undoStack.push.apply(undoStack, (0, _toConsumableArray2.default)(
|
|
178
|
+
return undoStack.push.apply(undoStack, (0, _toConsumableArray2.default)([].map.call(addedNodes, function (addedNode) {
|
|
175
179
|
return disableInputElementsWithUndo(addedNode, false);
|
|
176
180
|
})));
|
|
177
181
|
});
|
|
@@ -191,6 +195,163 @@ function disableInputElementsWithUndo(element) {
|
|
|
191
195
|
});
|
|
192
196
|
};
|
|
193
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Checks if an element contains a class.
|
|
200
|
+
*
|
|
201
|
+
* @param {HTMLElement} element - The element to check for the class.
|
|
202
|
+
* @param {string} className - The name of the class to check for.
|
|
203
|
+
* @returns {boolean} `true` if the element contains the class, otherwise, `false`.
|
|
204
|
+
*/
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
function containsClassName(element, className) {
|
|
208
|
+
return (element.className || '').split(' ').includes(className);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Gets the value of an attribute from an element.
|
|
212
|
+
*
|
|
213
|
+
* @returns {false | string} The value of the attribute. `false` if the attribute was not set.
|
|
214
|
+
*/
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
function getAttribute(element, qualifiedName) {
|
|
218
|
+
return element.hasAttribute(qualifiedName) && element.getAttribute(qualifiedName);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Sets or removes an attribute from an element.
|
|
222
|
+
*
|
|
223
|
+
* @param {HTMLElement} element - The element to set or remove attribute from.
|
|
224
|
+
* @param {string} qualifiedName - The name of the attribute.
|
|
225
|
+
* @param {false | string} value - The value of the attribute. When passing `false`, remove the attribute.
|
|
226
|
+
*/
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
function setOrRemoveAttribute(element, qualifiedName, value) {
|
|
230
|
+
if (value === false) {
|
|
231
|
+
element.removeAttribute(qualifiedName);
|
|
232
|
+
} else {
|
|
233
|
+
element.setAttribute(qualifiedName, value);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Sets or removes an attribute from an element with an undo function.
|
|
238
|
+
*
|
|
239
|
+
* @param {HTMLElement} element - The element to set or remove attribute from.
|
|
240
|
+
* @param {string} qualifiedName - The name of the attribute.
|
|
241
|
+
* @param {false | string} value - The value of the attribute. When passing `false`, remove the attribute.
|
|
242
|
+
*
|
|
243
|
+
* @returns {() => void} The undo function, when called, will undo all manipulations by restoring values recorded at the time of the function call.
|
|
244
|
+
*/
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
function setOrRemoveAttributeWithUndo(element, qualifiedName, value) {
|
|
248
|
+
var prevValue = getAttribute(element, qualifiedName);
|
|
249
|
+
setOrRemoveAttribute(element, qualifiedName, value);
|
|
250
|
+
return function () {
|
|
251
|
+
return setOrRemoveAttribute(element, qualifiedName, prevValue);
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Finds the first ancestor that fulfill the predicate.
|
|
256
|
+
*
|
|
257
|
+
* @param {HTMLElement} element - The starting element. This element will not be checked against the predicate.
|
|
258
|
+
* @param {(ancestor: HTMLElement) => boolean} predicate - The predicate to fulfill.
|
|
259
|
+
*
|
|
260
|
+
* @returns {HTMLElement | undefined} The first ancestor that fulfill the predicate, otherwise, `undefined`.
|
|
261
|
+
*/
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
function findAncestor(element, predicate) {
|
|
265
|
+
var current = element.parentElement;
|
|
266
|
+
|
|
267
|
+
while (current) {
|
|
268
|
+
if (predicate.call(element, current)) {
|
|
269
|
+
return current;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
current = current.parentElement;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Indicates the action selected by performing a series of manipulations, with undo:
|
|
277
|
+
*
|
|
278
|
+
* - Accessibility: set `aria-pressed` to `true`
|
|
279
|
+
* - Applies `styleOptions.actionPerformedClassName`
|
|
280
|
+
*
|
|
281
|
+
* @param {HTMLElement[]} selectedActionElements - An array of elements that are representing the action and is selected.
|
|
282
|
+
* @param {string?} actionPerformedClassName - The name of the class to apply to all elements.
|
|
283
|
+
*
|
|
284
|
+
* @returns {() => void} The undo function, when called, will undo all manipulations by restoring values recorded at the time of the function call.
|
|
285
|
+
*/
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
function indicateActionSelectionWithUndo(selectedActionElements, actionPerformedClassName) {
|
|
289
|
+
if (!selectedActionElements.length) {
|
|
290
|
+
return;
|
|
291
|
+
} // Verify all input elements are "ac-pushButton", could belongs to ActionSet or "card actions".
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
if (selectedActionElements.some(function (actionElement) {
|
|
295
|
+
return !containsClassName(actionElement, 'ac-pushButton');
|
|
296
|
+
})) {
|
|
297
|
+
console.warn('botframework-webchat: Cannot mark selected action in the card, some elements are not an "ac-pushButton".');
|
|
298
|
+
return;
|
|
299
|
+
} // A distinct set of action set containers which has selections, excluding containers without actions.
|
|
300
|
+
// Multiple submission in an Adaptive Card is still a vague area and TBD.
|
|
301
|
+
// We might want to disable the whole card, just buttons in same container, or do nothing (today).
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
var actionSetElements = new Set();
|
|
305
|
+
selectedActionElements.forEach(function (selectedActionElement) {
|
|
306
|
+
var actionSetElement = findAncestor(selectedActionElement, function (ancestor) {
|
|
307
|
+
return ancestor.getAttribute('role') === 'menubar';
|
|
308
|
+
});
|
|
309
|
+
actionSetElement && actionSetElements.add(actionSetElement);
|
|
310
|
+
});
|
|
311
|
+
var undoStack = [];
|
|
312
|
+
actionSetElements.forEach(function (actionSetElement) {
|
|
313
|
+
// Remove "role" from every "ac-actionSet" container.
|
|
314
|
+
undoStack.push(setOrRemoveAttributeWithUndo(actionSetElement, 'role', false)); // Modify "role" of every actions in the container.
|
|
315
|
+
|
|
316
|
+
Array.from(actionSetElement.querySelectorAll('.ac-pushButton')).forEach(function (actionElement) {
|
|
317
|
+
if (selectedActionElements.includes(actionElement)) {
|
|
318
|
+
// Add "aria-pressed" and set "role" attribute to "button" (which is required by "aria-pressed").
|
|
319
|
+
undoStack.push(setOrRemoveAttributeWithUndo(actionElement, 'aria-pressed', 'true'));
|
|
320
|
+
undoStack.push(setOrRemoveAttributeWithUndo(actionElement, 'role', 'button')); // Highlight actions by applying `styleOptions.actionPerformedClassName`.
|
|
321
|
+
|
|
322
|
+
actionPerformedClassName && undoStack.push(addPersistentClassWithUndo(actionElement, actionPerformedClassName));
|
|
323
|
+
} else {
|
|
324
|
+
// We removed "role=menubar" from the container, we must remove "role=menuitem" from unselected actions.
|
|
325
|
+
undoStack.push(setOrRemoveAttributeWithUndo(actionElement, 'role', false));
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
return function () {
|
|
330
|
+
return undoStack.forEach(function (undo) {
|
|
331
|
+
return undo();
|
|
332
|
+
});
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Fixes accessibility issues from Adaptive Card, with undo.
|
|
337
|
+
*
|
|
338
|
+
* @returns {() => void} The undo function, when called, will undo all manipulations by restoring values recorded at the time of the function call.
|
|
339
|
+
*/
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
function fixAccessibilityIssuesWithUndo(element) {
|
|
343
|
+
// These hacks should be done in Adaptive Cards library instead.
|
|
344
|
+
var undoStack = []; // Related to #3949: All action buttons inside role="menubar" should be role="menuitem".
|
|
345
|
+
|
|
346
|
+
undoStack.push.apply(undoStack, (0, _toConsumableArray2.default)(Array.from(element.querySelectorAll('.ac-actionSet[role="menubar"] [role="button"]')).map(function (actionButton) {
|
|
347
|
+
return setAttributeWithUndo(actionButton, 'role', 'menuitem');
|
|
348
|
+
})));
|
|
349
|
+
return function () {
|
|
350
|
+
return undoStack.forEach(function (undo) {
|
|
351
|
+
return undo();
|
|
352
|
+
});
|
|
353
|
+
};
|
|
354
|
+
}
|
|
194
355
|
|
|
195
356
|
function getFocusableElements(element) {
|
|
196
357
|
return [].filter.call(element.querySelectorAll(['a', 'body', 'button', 'frame', 'iframe', 'img', 'input', 'isindex', 'object', 'select', 'textarea', '[tabindex]'].join(', ')), function (element) {
|
|
@@ -341,32 +502,39 @@ var AdaptiveCardRenderer = function AdaptiveCardRenderer(_ref3) {
|
|
|
341
502
|
|
|
342
503
|
addActionsPerformed(action);
|
|
343
504
|
var actionTypeName = action.getJsonTypeName();
|
|
505
|
+
var image = action.iconUrl,
|
|
506
|
+
title = action.title; // We cannot use "instanceof" check here, because web devs may bring their own version of Adaptive Cards package.
|
|
507
|
+
// We need to check using "getJsonTypeName()" instead.
|
|
344
508
|
|
|
345
509
|
if (actionTypeName === 'Action.OpenUrl') {
|
|
510
|
+
var _ref4 = action,
|
|
511
|
+
value = _ref4.url;
|
|
346
512
|
performCardAction({
|
|
513
|
+
image: image,
|
|
514
|
+
title: title,
|
|
347
515
|
type: 'openUrl',
|
|
348
|
-
value:
|
|
516
|
+
value: value
|
|
349
517
|
});
|
|
350
518
|
} else if (actionTypeName === 'Action.Submit') {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
var displayText = cardAction.displayText,
|
|
357
|
-
text = cardAction.text,
|
|
358
|
-
type = cardAction.type,
|
|
359
|
-
value = cardAction.value;
|
|
519
|
+
var _ref5 = action,
|
|
520
|
+
data = _ref5.data;
|
|
521
|
+
|
|
522
|
+
if (typeof data !== 'undefined') {
|
|
523
|
+
if (typeof data === 'string') {
|
|
360
524
|
performCardAction({
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
type:
|
|
364
|
-
value:
|
|
525
|
+
image: image,
|
|
526
|
+
title: title,
|
|
527
|
+
type: 'imBack',
|
|
528
|
+
value: data
|
|
365
529
|
});
|
|
530
|
+
} else if (data.__isBotFrameworkCardAction) {
|
|
531
|
+
performCardAction(data.cardAction);
|
|
366
532
|
} else {
|
|
367
533
|
performCardAction({
|
|
368
|
-
|
|
369
|
-
|
|
534
|
+
image: image,
|
|
535
|
+
title: title,
|
|
536
|
+
type: 'postBack',
|
|
537
|
+
value: data
|
|
370
538
|
});
|
|
371
539
|
}
|
|
372
540
|
}
|
|
@@ -407,8 +575,8 @@ var AdaptiveCardRenderer = function AdaptiveCardRenderer(_ref3) {
|
|
|
407
575
|
validationEvents = _adaptiveCard$validat.validationEvents;
|
|
408
576
|
|
|
409
577
|
if (validationEvents.length) {
|
|
410
|
-
return setErrors(validationEvents.reduce(function (items,
|
|
411
|
-
var message =
|
|
578
|
+
return setErrors(validationEvents.reduce(function (items, _ref6) {
|
|
579
|
+
var message = _ref6.message;
|
|
412
580
|
return [].concat((0, _toConsumableArray2.default)(items), [new Error(message)]);
|
|
413
581
|
}, []));
|
|
414
582
|
}
|
|
@@ -444,45 +612,33 @@ var AdaptiveCardRenderer = function AdaptiveCardRenderer(_ref3) {
|
|
|
444
612
|
// Set onExecuteAction without causing unnecessary re-render.
|
|
445
613
|
adaptiveCard.onExecuteAction = disabled ? undefined : handleExecuteAction;
|
|
446
614
|
}, [adaptiveCard, disabled, handleExecuteAction]);
|
|
615
|
+
(0, _react.useEffect)(function () {
|
|
616
|
+
return fixAccessibilityIssuesWithUndo(adaptiveCardElementRef.current);
|
|
617
|
+
}, [adaptiveCardElementRef, lastRender]);
|
|
447
618
|
(0, _react.useEffect)(function () {
|
|
448
619
|
// If the Adaptive Card get re-rendered, re-disable elements as needed.
|
|
449
620
|
if (disabled) {
|
|
450
621
|
return disableInputElementsWithUndo(adaptiveCardElementRef.current);
|
|
451
622
|
}
|
|
452
|
-
}, [disabled, lastRender]);
|
|
623
|
+
}, [adaptiveCardElementRef, disabled, lastRender]);
|
|
453
624
|
(0, _react.useEffect)(function () {
|
|
454
625
|
// If the Adaptive Card changed, reset all actions performed.
|
|
455
626
|
setActionsPerformed([]);
|
|
456
627
|
}, [adaptiveCard]);
|
|
457
628
|
(0, _react.useEffect)(function () {
|
|
458
|
-
//
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
}); // Add developers to highlight actions when they have been clicked.
|
|
467
|
-
|
|
468
|
-
if (!actionPerformedClassName) {
|
|
469
|
-
return;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
var undoStack = actionsPerformed.map(function (_ref6) {
|
|
473
|
-
var renderedElement = _ref6.renderedElement;
|
|
474
|
-
return renderedElement && adaptiveCardElementRef.current.contains(renderedElement) && addPersistentClassWithUndo(renderedElement, actionPerformedClassName);
|
|
475
|
-
});
|
|
476
|
-
return function () {
|
|
477
|
-
return undoStack.forEach(function (undo) {
|
|
478
|
-
return undo && undo();
|
|
479
|
-
});
|
|
480
|
-
};
|
|
629
|
+
return indicateActionSelectionWithUndo( // Actions that do not have "renderedElement" means it is the Adaptive Card itself, such as "selectAction" (AC) or "tapAction" (rich cards).
|
|
630
|
+
// We do not need to mark the whole card as performed.
|
|
631
|
+
actionsPerformed.map(function (_ref7) {
|
|
632
|
+
var renderedElement = _ref7.renderedElement;
|
|
633
|
+
return renderedElement;
|
|
634
|
+
}).filter(function (renderedElement) {
|
|
635
|
+
return renderedElement;
|
|
636
|
+
}), actionPerformedClassName);
|
|
481
637
|
}, [actionsPerformed, actionPerformedClassName, lastRender]);
|
|
482
|
-
return errors.length ? node_env === 'development'
|
|
638
|
+
return errors.length ? node_env === 'development' && /*#__PURE__*/_react.default.createElement(ErrorBox, {
|
|
483
639
|
error: errors[0],
|
|
484
640
|
type: localize('ADAPTIVE_CARD_ERROR_BOX_TITLE_RENDER')
|
|
485
|
-
}) :
|
|
641
|
+
}) : /*#__PURE__*/_react.default.createElement("div", {
|
|
486
642
|
className: (0, _classnames.default)(adaptiveCardRendererStyleSet + '', 'webchat__adaptive-card-renderer'),
|
|
487
643
|
onClick: handleClickAndKeyPressForTapAction,
|
|
488
644
|
onKeyPress: handleClickAndKeyPressForTapAction,
|
|
@@ -499,11 +655,16 @@ AdaptiveCardRenderer.propTypes = {
|
|
|
499
655
|
actionPerformedClassName: _propTypes.default.string,
|
|
500
656
|
adaptiveCard: _propTypes.default.any.isRequired,
|
|
501
657
|
disabled: _propTypes.default.bool,
|
|
658
|
+
// TypeScript class is not mappable to PropTypes.func
|
|
659
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
660
|
+
// @ts-ignore
|
|
502
661
|
tapAction: _propTypes.default.shape({
|
|
662
|
+
image: _propTypes.default.string,
|
|
663
|
+
title: _propTypes.default.string,
|
|
503
664
|
type: _propTypes.default.string.isRequired,
|
|
504
665
|
value: _propTypes.default.string
|
|
505
666
|
})
|
|
506
667
|
};
|
|
507
668
|
var _default = AdaptiveCardRenderer;
|
|
508
669
|
exports.default = _default;
|
|
509
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGFwdGl2ZUNhcmRzL0F0dGFjaG1lbnQvQWRhcHRpdmVDYXJkUmVuZGVyZXIuanMiXSwibmFtZXMiOlsiRXJyb3JCb3giLCJDb21wb25lbnRzIiwidXNlRGlzYWJsZWQiLCJob29rcyIsInVzZUxvY2FsaXplciIsInVzZVBlcmZvcm1DYXJkQWN0aW9uIiwidXNlUmVuZGVyTWFya2Rvd25Bc0hUTUwiLCJ1c2VTY3JvbGxUb0VuZCIsInVzZVN0eWxlU2V0Iiwibm9kZV9lbnYiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJhZGRDbGFzcyIsImVsZW1lbnQiLCJjbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiU2V0Iiwic3BsaXQiLCJoYXMiLCJhZGQiLCJBcnJheSIsImZyb20iLCJqb2luIiwiYWRkUGVyc2lzdGVudENsYXNzV2l0aFVuZG8iLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZUZpbHRlciIsImRlbGV0ZSIsImRpc2Nvbm5lY3QiLCJpc1BsYWluT2JqZWN0Iiwib2JqIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJwcm90b3R5cGUiLCJzZXRBdHRyaWJ1dGVXaXRoVW5kbyIsInF1YWxpZmllZE5hbWUiLCJuZXh0VmFsdWUiLCJ2YWx1ZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsImRpc2FibGVkSGFuZGxlciIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJhZGRFdmVudExpc3RlbmVyT25jZVdpdGhVbmRvIiwibmFtZSIsImhhbmRsZXIiLCJkZXRhY2giLCJkZXRhY2hpbmdIYW5kbGVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbmNlIiwiYWRkRXZlbnRMaXN0ZW5lcldpdGhVbmRvIiwiZGlzYWJsZUVsZW1lbnRXaXRoVW5kbyIsInVuZG9TdGFjayIsImlzQWN0aXZlIiwiZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50IiwidGFnIiwibm9kZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsInB1c2giLCJtYXAiLCJjYWxsIiwicXVlcnlTZWxlY3RvckFsbCIsIm9wdGlvbiIsImZvckVhY2giLCJ1bmRvIiwiZGlzYWJsZUlucHV0RWxlbWVudHNXaXRoVW5kbyIsIm9ic2VydmVTdWJ0cmVlIiwibXV0YXRpb25zIiwiYWRkZWROb2RlcyIsImFkZGVkTm9kZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJnZXRGb2N1c2FibGVFbGVtZW50cyIsImZpbHRlciIsInRhYkluZGV4IiwicmVzdG9yZUFjdGl2ZUVsZW1lbnRJbmRleCIsImFjdGl2ZUVsZW1lbnRJbmRleCIsImZvY3VzYWJsZSIsImZvY3VzIiwic2F2ZUFjdGl2ZUVsZW1lbnRJbmRleCIsImluZGV4T2YiLCJyZXN0b3JlSW5wdXRWYWx1ZXMiLCJpbnB1dFZhbHVlcyIsImlucHV0cyIsImlucHV0IiwiaW5kZXgiLCJ0YWdOYW1lIiwidHlwZSIsImNoZWNrZWQiLCJzYXZlSW5wdXRWYWx1ZXMiLCJBZGFwdGl2ZUNhcmRSZW5kZXJlciIsImFjdGlvblBlcmZvcm1lZENsYXNzTmFtZSIsImFkYXB0aXZlQ2FyZCIsImRpc2FibGVkRnJvbVByb3BzIiwiZGlzYWJsZWQiLCJ0YXBBY3Rpb24iLCJhZGFwdGl2ZUNhcmRSZW5kZXJlclN0eWxlU2V0IiwiYWRhcHRpdmVDYXJkUmVuZGVyZXIiLCJHbG9iYWxTZXR0aW5ncyIsIkhvc3RDb25maWciLCJhY3Rpb25zUGVyZm9ybWVkIiwic2V0QWN0aW9uc1BlcmZvcm1lZCIsImFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnIiwiZGlzYWJsZWRGcm9tQ29tcG9zZXIiLCJlcnJvcnMiLCJzZXRFcnJvcnMiLCJsYXN0UmVuZGVyIiwic2V0TGFzdFJlbmRlciIsImFjdGl2ZUVsZW1lbnRJbmRleFJlZiIsImFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYiLCJjb250ZW50UmVmIiwiaW5wdXRWYWx1ZXNSZWYiLCJsb2NhbGl6ZSIsInBlcmZvcm1DYXJkQWN0aW9uIiwicmVuZGVyTWFya2Rvd25Bc0hUTUwiLCJzY3JvbGxUb0VuZCIsImhhbmRsZUNsaWNrQW5kS2V5UHJlc3MiLCJrZXkiLCJ0YXJnZXQiLCJjdXJyZW50IiwiYWRhcHRpdmVDYXJkUm9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJjb25zb2xlIiwid2FybiIsImhhbmRsZUNsaWNrQW5kS2V5UHJlc3NGb3JUYXBBY3Rpb24iLCJ1bmRlZmluZWQiLCJhZGRBY3Rpb25zUGVyZm9ybWVkIiwiYWN0aW9uIiwiaGFuZGxlRXhlY3V0ZUFjdGlvbiIsImFjdGlvblR5cGVOYW1lIiwiZ2V0SnNvblR5cGVOYW1lIiwidXJsIiwiZGF0YSIsImFjdGlvbkRhdGEiLCJfX2lzQm90RnJhbWV3b3JrQ2FyZEFjdGlvbiIsImNhcmRBY3Rpb24iLCJkaXNwbGF5VGV4dCIsInRleHQiLCJlcnJvciIsImNvbnN0cnVjdG9yIiwib25Qcm9jZXNzTWFya2Rvd24iLCJyZXN1bHQiLCJvdXRwdXRIdG1sIiwiZGlkUHJvY2VzcyIsImhvc3RDb25maWciLCJzZXRUYWJJbmRleEF0Q2FyZFJvb3QiLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ2YWxpZGF0aW9uRXZlbnRzIiwibGVuZ3RoIiwicmVkdWNlIiwiaXRlbXMiLCJtZXNzYWdlIiwiRXJyb3IiLCJyZW5kZXIiLCJhcHBlbmRDaGlsZCIsIkRhdGUiLCJub3ciLCJyZW1vdmVDaGlsZCIsIm9uRXhlY3V0ZUFjdGlvbiIsInJlbmRlcmVkRWxlbWVudCIsImNvbnRhaW5zIiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYW55IiwiaXNSZXF1aXJlZCIsImJvb2wiLCJzaGFwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBUkE7SUFVUUEsUSxHQUFhQyx3QyxD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d0UsU0FBckIsR0FBaUM7QUFDL0J2RSxFQUFBQSx3QkFBd0IsRUFBRXdFLG1CQUFVQyxNQURMO0FBRS9CeEUsRUFBQUEsWUFBWSxFQUFFdUUsbUJBQVVFLEdBQVYsQ0FBY0MsVUFGRztBQUcvQnhFLEVBQUFBLFFBQVEsRUFBRXFFLG1CQUFVSSxJQUhXO0FBSS9CeEUsRUFBQUEsU0FBUyxFQUFFb0UsbUJBQVVLLEtBQVYsQ0FBZ0I7QUFDekJqRixJQUFBQSxJQUFJLEVBQUU0RSxtQkFBVUMsTUFBVixDQUFpQkUsVUFERTtBQUV6QnRJLElBQUFBLEtBQUssRUFBRW1JLG1CQUFVQztBQUZRLEdBQWhCO0FBSm9CLENBQWpDO2VBVWUxRSxvQiIsInNvdXJjZVJvb3QiOiJidW5kbGU6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW1hZ2ljLW51bWJlcnM6IFtcImVycm9yXCIsIHsgXCJpZ25vcmVcIjogWy0xLCAwLCAyXSB9XSAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnRzLCBnZXRUYWJJbmRleCwgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb21wb25lbnQnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHVzZUFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnIGZyb20gJy4uL2hvb2tzL3VzZUFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnJztcbmltcG9ydCB1c2VBZGFwdGl2ZUNhcmRzUGFja2FnZSBmcm9tICcuLi9ob29rcy91c2VBZGFwdGl2ZUNhcmRzUGFja2FnZSc7XG5cbmNvbnN0IHsgRXJyb3JCb3ggfSA9IENvbXBvbmVudHM7XG5jb25zdCB7IHVzZURpc2FibGVkLCB1c2VMb2NhbGl6ZXIsIHVzZVBlcmZvcm1DYXJkQWN0aW9uLCB1c2VSZW5kZXJNYXJrZG93bkFzSFRNTCwgdXNlU2Nyb2xsVG9FbmQsIHVzZVN0eWxlU2V0IH0gPSBob29rcztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5jb25zdCBub2RlX2VudiA9IHByb2Nlc3MuZW52Lm5vZGVfZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WO1xuXG5mdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IG5ldyBTZXQoZWxlbWVudC5jbGFzc05hbWUuc3BsaXQoJyAnKSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzLmhhcyhjbGFzc05hbWUpKSB7XG4gICAgY2xhc3NOYW1lcy5hZGQoY2xhc3NOYW1lKTtcblxuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQXJyYXkuZnJvbShjbGFzc05hbWVzKS5qb2luKCcgJyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYWRkUGVyc2lzdGVudENsYXNzV2l0aFVuZG8oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSB7XG4gICAgLy8gQWZ0ZXIgd2UgYWRkIHRoZSBjbGFzcywga2VlcCBvYnNlcnZpbmcgdGhlIGVsZW1lbnQgdG8gbWFrZSBzdXJlIHRoZSBjbGFzcyBpcyBub3QgcmVtb3ZlZC5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpO1xuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7IGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddIH0pO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBuZXcgU2V0KGVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KCcgJykpO1xuXG4gICAgICBjbGFzc05hbWVzLmRlbGV0ZShjbGFzc05hbWUpO1xuXG4gICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IEFycmF5LmZyb20oY2xhc3NOYW1lcykuam9pbignICcpO1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVXaXRoVW5kbyhlbGVtZW50LCBxdWFsaWZpZWROYW1lLCBuZXh0VmFsdWUpIHtcbiAgY29uc3QgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShxdWFsaWZpZWROYW1lKTtcblxuICBpZiAodmFsdWUgIT09IG5leHRWYWx1ZSkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKHF1YWxpZmllZE5hbWUsIG5leHRWYWx1ZSk7XG5cbiAgICByZXR1cm4gKCkgPT4gKHZhbHVlID8gZWxlbWVudC5zZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgdmFsdWUpIDogZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSkpO1xuICB9XG59XG5cbmNvbnN0IGRpc2FibGVkSGFuZGxlciA9IGV2ZW50ID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lck9uY2VXaXRoVW5kbyhlbGVtZW50LCBuYW1lLCBoYW5kbGVyKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgbGV0IGRldGFjaDtcbiAgY29uc3QgZGV0YWNoaW5nSGFuZGxlciA9IGV2ZW50ID0+IHtcbiAgICB0cnkge1xuICAgICAgaGFuZGxlcihldmVudCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCB7IG9uY2U6IHRydWUgfSwgc28gd2UgbmVlZCB0byBkZXRhY2ggbWFudWFsbHkuXG4gICAgICBkZXRhY2goKTtcbiAgICB9XG4gIH07XG5cbiAgZGV0YWNoID0gKCkgPT4gZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGRldGFjaGluZ0hhbmRsZXIpO1xuXG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBkZXRhY2hpbmdIYW5kbGVyLCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGRldGFjaDtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcldpdGhVbmRvKGVsZW1lbnQsIG5hbWUsIGhhbmRsZXIpIHtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xuXG4gIHJldHVybiAoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlcik7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVFbGVtZW50V2l0aFVuZG8oZWxlbWVudCkge1xuICBjb25zdCB1bmRvU3RhY2sgPSBbXTtcbiAgY29uc3QgaXNBY3RpdmUgPSBlbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBjb25zdCB0YWcgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZSAqL1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgdW5kb1N0YWNrLnB1c2goc2V0QXR0cmlidXRlV2l0aFVuZG8oZWxlbWVudCwgJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpKTtcblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIHVuZG9TdGFjay5wdXNoKFxuICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXJPbmNlV2l0aFVuZG8oZWxlbWVudCwgJ2JsdXInLCAoKSA9PlxuICAgICAgICAgICAgdW5kb1N0YWNrLnB1c2goc2V0QXR0cmlidXRlV2l0aFVuZG8oZWxlbWVudCwgJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJykpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5kb1N0YWNrLnB1c2goc2V0QXR0cmlidXRlV2l0aFVuZG8oZWxlbWVudCwgJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgICB1bmRvU3RhY2sucHVzaChhZGRFdmVudExpc3RlbmVyV2l0aFVuZG8oZWxlbWVudCwgJ2NsaWNrJywgZGlzYWJsZWRIYW5kbGVyKSk7XG4gICAgICAgIHVuZG9TdGFjay5wdXNoKHNldEF0dHJpYnV0ZVdpdGhVbmRvKGVsZW1lbnQsICdyZWFkb25seScsICdyZWFkb25seScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgICB1bmRvU3RhY2sucHVzaChcbiAgICAgICAgICAuLi5bXS5tYXAuY2FsbChlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ29wdGlvbicpLCBvcHRpb24gPT5cbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZVdpdGhVbmRvKG9wdGlvbiwgJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJylcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuICgpID0+IHVuZG9TdGFjay5mb3JFYWNoKHVuZG8gPT4gdW5kbyAmJiB1bmRvKCkpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlSW5wdXRFbGVtZW50c1dpdGhVbmRvKGVsZW1lbnQsIG9ic2VydmVTdWJ0cmVlID0gdHJ1ZSkge1xuICBjb25zdCB1bmRvU3RhY2sgPSBbXS5tYXAuY2FsbChlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKSwgZWxlbWVudCA9PlxuICAgIGRpc2FibGVFbGVtZW50V2l0aFVuZG8oZWxlbWVudClcbiAgKTtcblxuICBjb25zdCB0YWcgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gT25seSBzZXQgdGFiaW5kZXg9XCItMVwiIG9uIGZvY3VzYWJsZSBlbGVtZW50LiBPdGhlcndpc2UsIHdlIHdpbGwgbWFrZSA8ZGl2PiBmb2N1c2FibGUgYnkgbW91c2UuXG4gICh0YWcgPT09ICdhJyB8fCB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJykgJiZcbiAgICB1bmRvU3RhY2sucHVzaChzZXRBdHRyaWJ1dGVXaXRoVW5kbyhlbGVtZW50LCAndGFiaW5kZXgnLCAnLTEnKSk7XG5cbiAgaWYgKG9ic2VydmVTdWJ0cmVlKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT5cbiAgICAgIG11dGF0aW9ucy5mb3JFYWNoKCh7IGFkZGVkTm9kZXMgfSkgPT5cbiAgICAgICAgdW5kb1N0YWNrLnB1c2goLi4uYWRkZWROb2Rlcy5tYXAoYWRkZWROb2RlID0+IGRpc2FibGVJbnB1dEVsZW1lbnRzV2l0aFVuZG8oYWRkZWROb2RlLCBmYWxzZSkpKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuXG4gICAgdW5kb1N0YWNrLnB1c2goKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB1bmRvU3RhY2suZm9yRWFjaCh1bmRvID0+IHVuZG8gJiYgdW5kbygpKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlRWxlbWVudHMoZWxlbWVudCkge1xuICByZXR1cm4gW10uZmlsdGVyLmNhbGwoXG4gICAgZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgW1xuICAgICAgICAnYScsXG4gICAgICAgICdib2R5JyxcbiAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICdmcmFtZScsXG4gICAgICAgICdpZnJhbWUnLFxuICAgICAgICAnaW1nJyxcbiAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgJ2lzaW5kZXgnLFxuICAgICAgICAnb2JqZWN0JyxcbiAgICAgICAgJ3NlbGVjdCcsXG4gICAgICAgICd0ZXh0YXJlYScsXG4gICAgICAgICdbdGFiaW5kZXhdJ1xuICAgICAgXS5qb2luKCcsICcpXG4gICAgKSxcbiAgICBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhYkluZGV4ID0gZ2V0VGFiSW5kZXgoZWxlbWVudCk7XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdGFiSW5kZXggPT09ICdudW1iZXInICYmIHRhYkluZGV4ID49IDA7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlQWN0aXZlRWxlbWVudEluZGV4KGVsZW1lbnQsIGFjdGl2ZUVsZW1lbnRJbmRleCkge1xuICBjb25zdCBmb2N1c2FibGUgPSBnZXRGb2N1c2FibGVFbGVtZW50cyhlbGVtZW50KVthY3RpdmVFbGVtZW50SW5kZXhdO1xuXG4gIGZvY3VzYWJsZSAmJiBmb2N1c2FibGUuZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gc2F2ZUFjdGl2ZUVsZW1lbnRJbmRleChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRGb2N1c2FibGVFbGVtZW50cyhlbGVtZW50KS5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlSW5wdXRWYWx1ZXMoZWxlbWVudCwgaW5wdXRWYWx1ZXMpIHtcbiAgY29uc3QgaW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpO1xuXG4gIFtdLmZvckVhY2guY2FsbChpbnB1dHMsIChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0VmFsdWVzW2luZGV4XTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCB7IHRhZ05hbWUsIHR5cGUgfSA9IGlucHV0O1xuXG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKSkge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVJbnB1dFZhbHVlcyhlbGVtZW50KSB7XG4gIGNvbnN0IGlucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKTtcblxuICByZXR1cm4gW10ubWFwLmNhbGwoaW5wdXRzLCAoeyBjaGVja2VkLCB0YWdOYW1lLCB0eXBlLCB2YWx1ZSB9KSA9PiB7XG4gICAgaWYgKHRhZ05hbWUgPT09ICdJTlBVVCcgJiYgKHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJykpIHtcbiAgICAgIHJldHVybiBjaGVja2VkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG59XG5cbmNvbnN0IEFkYXB0aXZlQ2FyZFJlbmRlcmVyID0gKHsgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lLCBhZGFwdGl2ZUNhcmQsIGRpc2FibGVkOiBkaXNhYmxlZEZyb21Qcm9wcywgdGFwQWN0aW9uIH0pID0+IHtcbiAgY29uc3QgW3sgYWRhcHRpdmVDYXJkUmVuZGVyZXI6IGFkYXB0aXZlQ2FyZFJlbmRlcmVyU3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICBjb25zdCBbeyBHbG9iYWxTZXR0aW5ncywgSG9zdENvbmZpZyB9XSA9IHVzZUFkYXB0aXZlQ2FyZHNQYWNrYWdlKCk7XG4gIGNvbnN0IFthY3Rpb25zUGVyZm9ybWVkLCBzZXRBY3Rpb25zUGVyZm9ybWVkXSA9IHVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW2FkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnXSA9IHVzZUFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnKCk7XG4gIGNvbnN0IFtkaXNhYmxlZEZyb21Db21wb3Nlcl0gPSB1c2VEaXNhYmxlZCgpO1xuICBjb25zdCBbZXJyb3JzLCBzZXRFcnJvcnNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbbGFzdFJlbmRlciwgc2V0TGFzdFJlbmRlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgYWN0aXZlRWxlbWVudEluZGV4UmVmID0gdXNlUmVmKC0xKTtcbiAgY29uc3QgYWRhcHRpdmVDYXJkRWxlbWVudFJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBjb250ZW50UmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGlucHV0VmFsdWVzUmVmID0gdXNlUmVmKFtdKTtcbiAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgY29uc3QgcGVyZm9ybUNhcmRBY3Rpb24gPSB1c2VQZXJmb3JtQ2FyZEFjdGlvbigpO1xuICBjb25zdCByZW5kZXJNYXJrZG93bkFzSFRNTCA9IHVzZVJlbmRlck1hcmtkb3duQXNIVE1MKCk7XG4gIGNvbnN0IHNjcm9sbFRvRW5kID0gdXNlU2Nyb2xsVG9FbmQoKTtcblxuICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkRnJvbUNvbXBvc2VyIHx8IGRpc2FibGVkRnJvbVByb3BzO1xuXG4gIC8vIFRPRE86IFtQMl0gIzMxOTkgV2Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIGBhZGFwdGl2ZUNhcmQuc2VsZWN0QWN0aW9uYCBpbnN0ZWFkLlxuICAvLyBUaGUgbnVsbCBjaGVjayBmb3IgXCJ0YXBBY3Rpb25cIiBpcyBpbiBcImhhbmRsZUNsaWNrQW5kS2V5UHJlc3NGb3JUYXBBY3Rpb25cIi5cbiAgY29uc3QgaGFuZGxlQ2xpY2tBbmRLZXlQcmVzcyA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuXG4gICAgICAvLyBTb21lIGl0ZW1zLCBlLmcuIHRhcHBhYmxlIHRleHQsIGNhbm5vdCBiZSBkaXNhYmxlZCB0aHJ1IERPTSBhdHRyaWJ1dGVzXG4gICAgICBjb25zdCB7IGN1cnJlbnQgfSA9IGNvbnRlbnRSZWY7XG4gICAgICBjb25zdCBhZGFwdGl2ZUNhcmRSb290ID0gY3VycmVudC5xdWVyeVNlbGVjdG9yKCcuYWMtYWRhcHRpdmVDYXJkW3RhYmluZGV4PVwiMFwiXScpO1xuXG4gICAgICBpZiAoIWFkYXB0aXZlQ2FyZFJvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IE5vIEFkYXB0aXZlIENhcmQgcm9vdCBjb250YWluZXIgY2FuIGJlIGZvdW5kOyB0aGUgY2FyZCBpcyBwcm9iYWJseSBvbiBhbiB1bnN1cHBvcnRlZCBBZGFwdGl2ZSBDYXJkIHZlcnNpb24uJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgXCJrZXlwcmVzc1wiIGV2ZW50LCB3ZSBvbmx5IGxpc3RlbiB0byBFTlRFUiBhbmQgU1BBQ0VCQVIga2V5LlxuICAgICAgaWYgKHR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ0VudGVyJyAmJiBrZXkgIT09ICcgJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHdpbGwgY2FsbCBwZXJmb3JtQ2FyZEFjdGlvbiBpZiBlaXRoZXI6XG4gICAgICAvLyAxLiBXZSBhcmUgb24gdGhlIHRhcmdldCwgb3JcbiAgICAgIC8vIDIuIFRoZSBldmVudC1kaXNwYXRjaGluZyBlbGVtZW50IGlzIG5vdCBpbnRlcmFjdGl2ZVxuICAgICAgaWYgKHRhcmdldCAhPT0gYWRhcHRpdmVDYXJkUm9vdCkge1xuICAgICAgICBjb25zdCB0YWJJbmRleCA9IGdldFRhYkluZGV4KHRhcmdldCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgaXMgY2xpY2tpbmcgb24gc29tZXRoaW5nIHRoYXQgaXMgYWxyZWFkeSBjbGlja2FibGUsIGRvIG5vdCBhbGxvdyB0aGVtIHRvIGNsaWNrIHRoZSBjYXJkLlxuICAgICAgICAvLyBFLmcuIGEgaGVybyBjYXJkIGNhbiBiZSB0YXBwYWJsZSwgYW5kIGltYWdlIGFuZCBidXR0b25zIGluc2lkZSB0aGUgaGVybyBjYXJkIGNhbiBhbHNvIGJlIHRhcHBhYmxlLlxuICAgICAgICBpZiAodHlwZW9mIHRhYkluZGV4ID09PSAnbnVtYmVyJyAmJiB0YWJJbmRleCA+PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBlcmZvcm1DYXJkQWN0aW9uKHRhcEFjdGlvbik7XG4gICAgICBzY3JvbGxUb0VuZCgpO1xuICAgIH0sXG4gICAgW2NvbnRlbnRSZWYsIHBlcmZvcm1DYXJkQWN0aW9uLCBzY3JvbGxUb0VuZCwgdGFwQWN0aW9uXVxuICApO1xuXG4gIC8vIE9ubHkgbGlzdGVuIHRvIGV2ZW50IGlmIGl0IGlzIG5vdCBkaXNhYmxlZCBhbmQgaGF2ZSBcInRhcEFjdGlvblwiIHByb3AuXG4gIGNvbnN0IGhhbmRsZUNsaWNrQW5kS2V5UHJlc3NGb3JUYXBBY3Rpb24gPSAhZGlzYWJsZWQgJiYgdGFwQWN0aW9uID8gaGFuZGxlQ2xpY2tBbmRLZXlQcmVzcyA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBhZGRBY3Rpb25zUGVyZm9ybWVkID0gdXNlQ2FsbGJhY2soXG4gICAgYWN0aW9uID0+ICF+YWN0aW9uc1BlcmZvcm1lZC5pbmRleE9mKGFjdGlvbikgJiYgc2V0QWN0aW9uc1BlcmZvcm1lZChbLi4uYWN0aW9uc1BlcmZvcm1lZCwgYWN0aW9uXSksXG4gICAgW2FjdGlvbnNQZXJmb3JtZWQsIHNldEFjdGlvbnNQZXJmb3JtZWRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRXhlY3V0ZUFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFjdGlvbiA9PiB7XG4gICAgICAvLyBTb21lIGl0ZW1zLCBlLmcuIHRhcHBhYmxlIGltYWdlLCBjYW5ub3QgYmUgZGlzYWJsZWQgdGhydSBET00gYXR0cmlidXRlc1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYWRkQWN0aW9uc1BlcmZvcm1lZChhY3Rpb24pO1xuXG4gICAgICBjb25zdCBhY3Rpb25UeXBlTmFtZSA9IGFjdGlvbi5nZXRKc29uVHlwZU5hbWUoKTtcblxuICAgICAgaWYgKGFjdGlvblR5cGVOYW1lID09PSAnQWN0aW9uLk9wZW5VcmwnKSB7XG4gICAgICAgIHBlcmZvcm1DYXJkQWN0aW9uKHtcbiAgICAgICAgICB0eXBlOiAnb3BlblVybCcsXG4gICAgICAgICAgdmFsdWU6IGFjdGlvbi51cmxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvblR5cGVOYW1lID09PSAnQWN0aW9uLlN1Ym1pdCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zdCB7IGRhdGE6IGFjdGlvbkRhdGEgfSA9IGFjdGlvbjtcblxuICAgICAgICAgIGlmIChhY3Rpb25EYXRhICYmIGFjdGlvbkRhdGEuX19pc0JvdEZyYW1ld29ya0NhcmRBY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2FyZEFjdGlvbiB9ID0gYWN0aW9uRGF0YTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGlzcGxheVRleHQsIHRleHQsIHR5cGUsIHZhbHVlIH0gPSBjYXJkQWN0aW9uO1xuXG4gICAgICAgICAgICBwZXJmb3JtQ2FyZEFjdGlvbih7IGRpc3BsYXlUZXh0LCB0ZXh0LCB0eXBlLCB2YWx1ZSB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVyZm9ybUNhcmRBY3Rpb24oe1xuICAgICAgICAgICAgICB0eXBlOiB0eXBlb2YgYWN0aW9uLmRhdGEgPT09ICdzdHJpbmcnID8gJ2ltQmFjaycgOiAncG9zdEJhY2snLFxuICAgICAgICAgICAgICB2YWx1ZTogYWN0aW9uLmRhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNjcm9sbFRvRW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBXZWIgQ2hhdDogcmVjZWl2ZWQgdW5rbm93biBhY3Rpb24gZnJvbSBBZGFwdGl2ZSBDYXJkc2ApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGFjdGlvbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkQWN0aW9uc1BlcmZvcm1lZCwgZGlzYWJsZWQsIHBlcmZvcm1DYXJkQWN0aW9uLCBzY3JvbGxUb0VuZF1cbiAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHsgY3VycmVudCB9ID0gY29udGVudFJlZjtcblxuICAgIGlmICghY3VycmVudCB8fCAhYWRhcHRpdmVDYXJkKSB7XG4gICAgICBhY3RpdmVFbGVtZW50SW5kZXhSZWYuY3VycmVudCA9IC0xO1xuICAgICAgaW5wdXRWYWx1ZXNSZWYuY3VycmVudCA9IFtdO1xuICAgIH1cblxuICAgIC8vIEN1cnJlbnRseSwgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgTWFya2Rvd24gZW5naW5lIGlzIHRvIHNldCBpdCB0aHJ1IHN0YXRpYyBtZW1iZXIgb2YgQWRhcHRpdmVDYXJkIGNsYXNzXG5cbiAgICAvLyBUT0RPOiBbUDNdIENoZWNrcyBpZiB3ZSBjb3VsZCBtYWtlIHRoZSBcInJlbmRlck1hcmtkb3duQXNIVE1MXCIgcGVyIGNhcmRcbiAgICAvLyAgICAgICBUaGlzIGNvdWxkIGJlIGxpbWl0YXRpb25zIGZyb20gQWRhcHRpdmUgQ2FyZHMgcGFja2FnZSAobm90IHN1cHBvcnRlZCBhcyBvZiAxLjIuNSlcbiAgICAvLyAgICAgICBCZWNhdXNlIHRoZXJlIGNvdWxkIGJlIHRpbWluZyBkaWZmZXJlbmNlIGJldHdlZW4gLnBhcnNlIGFuZCAucmVuZGVyLCB3ZSBjb3VsZCBiZSB1c2luZyB3cm9uZyBNYXJrZG93biBlbmdpbmVcblxuICAgIGFkYXB0aXZlQ2FyZC5jb25zdHJ1Y3Rvci5vblByb2Nlc3NNYXJrZG93biA9ICh0ZXh0LCByZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZW5kZXJNYXJrZG93bkFzSFRNTCkge1xuICAgICAgICByZXN1bHQub3V0cHV0SHRtbCA9IHJlbmRlck1hcmtkb3duQXNIVE1MKHRleHQpO1xuICAgICAgICByZXN1bHQuZGlkUHJvY2VzcyA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChhZGFwdGl2ZUNhcmRzSG9zdENvbmZpZykge1xuICAgICAgYWRhcHRpdmVDYXJkLmhvc3RDb25maWcgPSBpc1BsYWluT2JqZWN0KGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnKVxuICAgICAgICA/IG5ldyBIb3N0Q29uZmlnKGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnKVxuICAgICAgICA6IGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnO1xuICAgIH1cblxuICAgIC8vIEZvciBhY2Nlc3NpYmlsaXR5IGlzc3VlICMxMzQwLCBgdGFiaW5kZXg9XCIwXCJgIG11c3Qgbm90IGJlIHNldCBmb3IgdGhlIHJvb3QgY29udGFpbmVyIGlmIGl0IGlzIG5vdCBpbnRlcmFjdGl2ZS5cbiAgICBHbG9iYWxTZXR0aW5ncy5zZXRUYWJJbmRleEF0Q2FyZFJvb3QgPSAhIXRhcEFjdGlvbjtcblxuICAgIGNvbnN0IHsgdmFsaWRhdGlvbkV2ZW50cyB9ID0gYWRhcHRpdmVDYXJkLnZhbGlkYXRlUHJvcGVydGllcygpO1xuXG4gICAgaWYgKHZhbGlkYXRpb25FdmVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gc2V0RXJyb3JzKHZhbGlkYXRpb25FdmVudHMucmVkdWNlKChpdGVtcywgeyBtZXNzYWdlIH0pID0+IFsuLi5pdGVtcywgbmV3IEVycm9yKG1lc3NhZ2UpXSwgW10pKTtcbiAgICB9XG5cbiAgICBsZXQgZWxlbWVudDtcblxuICAgIHRyeSB7XG4gICAgICBlbGVtZW50ID0gYWRhcHRpdmVDYXJkLnJlbmRlcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gc2V0RXJyb3JzKFtlcnJvcl0pO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHNldEVycm9ycyhbbmV3IEVycm9yKCdBZGFwdGl2ZSBDYXJkIHJlbmRlcmVkIGFzIGVtcHR5IGVsZW1lbnQnKV0pO1xuICAgIH1cblxuICAgIC8vIENsZWFyIGVycm9ycyBvbiBuZXh0IHJlbmRlclxuICAgIHNldEVycm9ycyhbXSk7XG5cbiAgICByZXN0b3JlSW5wdXRWYWx1ZXMoZWxlbWVudCwgaW5wdXRWYWx1ZXNSZWYuY3VycmVudCk7XG5cbiAgICBjdXJyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIGFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG5cbiAgICAvLyBGb2N1cyBjYW4gb25seSBiZSByZXN0b3JlZCBhZnRlciB0aGUgRE9NIGlzIGF0dGFjaGVkLlxuICAgIHJlc3RvcmVBY3RpdmVFbGVtZW50SW5kZXgoZWxlbWVudCwgYWN0aXZlRWxlbWVudEluZGV4UmVmLmN1cnJlbnQpO1xuXG4gICAgc2V0TGFzdFJlbmRlcihEYXRlLm5vdygpKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmVFbGVtZW50SW5kZXhSZWYuY3VycmVudCA9IHNhdmVBY3RpdmVFbGVtZW50SW5kZXgoZWxlbWVudCk7XG4gICAgICBpbnB1dFZhbHVlc1JlZi5jdXJyZW50ID0gc2F2ZUlucHV0VmFsdWVzKGVsZW1lbnQpO1xuXG4gICAgICBjdXJyZW50LnJlbW92ZUNoaWxkKGFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYuY3VycmVudCk7XG5cbiAgICAgIGFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbXG4gICAgYWRhcHRpdmVDYXJkLFxuICAgIGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnLFxuICAgIGNvbnRlbnRSZWYsXG4gICAgR2xvYmFsU2V0dGluZ3MsXG4gICAgSG9zdENvbmZpZyxcbiAgICByZW5kZXJNYXJrZG93bkFzSFRNTCxcbiAgICBzZXRFcnJvcnMsXG4gICAgdGFwQWN0aW9uXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2V0IG9uRXhlY3V0ZUFjdGlvbiB3aXRob3V0IGNhdXNpbmcgdW5uZWNlc3NhcnkgcmUtcmVuZGVyLlxuICAgIGFkYXB0aXZlQ2FyZC5vbkV4ZWN1dGVBY3Rpb24gPSBkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGhhbmRsZUV4ZWN1dGVBY3Rpb247XG4gIH0sIFthZGFwdGl2ZUNhcmQsIGRpc2FibGVkLCBoYW5kbGVFeGVjdXRlQWN0aW9uXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBJZiB0aGUgQWRhcHRpdmUgQ2FyZCBnZXQgcmUtcmVuZGVyZWQsIHJlLWRpc2FibGUgZWxlbWVudHMgYXMgbmVlZGVkLlxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGRpc2FibGVJbnB1dEVsZW1lbnRzV2l0aFVuZG8oYWRhcHRpdmVDYXJkRWxlbWVudFJlZi5jdXJyZW50KTtcbiAgICB9XG4gIH0sIFtkaXNhYmxlZCwgbGFzdFJlbmRlcl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gSWYgdGhlIEFkYXB0aXZlIENhcmQgY2hhbmdlZCwgcmVzZXQgYWxsIGFjdGlvbnMgcGVyZm9ybWVkLlxuICAgIHNldEFjdGlvbnNQZXJmb3JtZWQoW10pO1xuICB9LCBbYWRhcHRpdmVDYXJkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBBZGQgYXJpYS1wcmVzc2VkIGFuZCByb2xlIGF0dHJpYnV0ZSB0byB0aGUgQUMgYWN0aW9uIGJ1dHRvbiBzZWxlY3RlZCBieSB0aGUgdXNlci5cbiAgICBhY3Rpb25zUGVyZm9ybWVkLmZvckVhY2goKHsgcmVuZGVyZWRFbGVtZW50IH0pID0+IHtcbiAgICAgIGlmIChyZW5kZXJlZEVsZW1lbnQgJiYgYWRhcHRpdmVDYXJkRWxlbWVudFJlZi5jdXJyZW50LmNvbnRhaW5zKHJlbmRlcmVkRWxlbWVudCkpIHtcbiAgICAgICAgc2V0QXR0cmlidXRlV2l0aFVuZG8ocmVuZGVyZWRFbGVtZW50LCAnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcbiAgICAgICAgc2V0QXR0cmlidXRlV2l0aFVuZG8ocmVuZGVyZWRFbGVtZW50LCAncm9sZScsICdidXR0b24nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCBkZXZlbG9wZXJzIHRvIGhpZ2hsaWdodCBhY3Rpb25zIHdoZW4gdGhleSBoYXZlIGJlZW4gY2xpY2tlZC5cbiAgICBpZiAoIWFjdGlvblBlcmZvcm1lZENsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVuZG9TdGFjayA9IGFjdGlvbnNQZXJmb3JtZWQubWFwKFxuICAgICAgKHsgcmVuZGVyZWRFbGVtZW50IH0pID0+XG4gICAgICAgIHJlbmRlcmVkRWxlbWVudCAmJlxuICAgICAgICBhZGFwdGl2ZUNhcmRFbGVtZW50UmVmLmN1cnJlbnQuY29udGFpbnMocmVuZGVyZWRFbGVtZW50KSAmJlxuICAgICAgICBhZGRQZXJzaXN0ZW50Q2xhc3NXaXRoVW5kbyhyZW5kZXJlZEVsZW1lbnQsIGFjdGlvblBlcmZvcm1lZENsYXNzTmFtZSlcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHVuZG9TdGFjay5mb3JFYWNoKHVuZG8gPT4gdW5kbyAmJiB1bmRvKCkpO1xuICB9LCBbYWN0aW9uc1BlcmZvcm1lZCwgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lLCBsYXN0UmVuZGVyXSk7XG5cbiAgcmV0dXJuIGVycm9ycy5sZW5ndGggPyAoXG4gICAgbm9kZV9lbnYgPT09ICdkZXZlbG9wbWVudCcgPyAoXG4gICAgICA8RXJyb3JCb3ggZXJyb3I9e2Vycm9yc1swXX0gdHlwZT17bG9jYWxpemUoJ0FEQVBUSVZFX0NBUkRfRVJST1JfQk9YX1RJVExFX1JFTkRFUicpfSAvPlxuICAgICkgOiAoXG4gICAgICBmYWxzZVxuICAgIClcbiAgKSA6IChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYWRhcHRpdmVDYXJkUmVuZGVyZXJTdHlsZVNldCArICcnLCAnd2ViY2hhdF9fYWRhcHRpdmUtY2FyZC1yZW5kZXJlcicpfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tBbmRLZXlQcmVzc0ZvclRhcEFjdGlvbn1cbiAgICAgIG9uS2V5UHJlc3M9e2hhbmRsZUNsaWNrQW5kS2V5UHJlc3NGb3JUYXBBY3Rpb259XG4gICAgICByZWY9e2NvbnRlbnRSZWZ9XG4gICAgLz5cbiAgKTtcbn07XG5cbkFkYXB0aXZlQ2FyZFJlbmRlcmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lOiAnJyxcbiAgZGlzYWJsZWQ6IHVuZGVmaW5lZCxcbiAgdGFwQWN0aW9uOiB1bmRlZmluZWRcbn07XG5cbkFkYXB0aXZlQ2FyZFJlbmRlcmVyLnByb3BUeXBlcyA9IHtcbiAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhZGFwdGl2ZUNhcmQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXBBY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBZGFwdGl2ZUNhcmRSZW5kZXJlcjtcbiJdfQ==
|
|
670
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGFwdGl2ZUNhcmRzL0F0dGFjaG1lbnQvQWRhcHRpdmVDYXJkUmVuZGVyZXIudHN4Il0sIm5hbWVzIjpbIkVycm9yQm94IiwiQ29tcG9uZW50cyIsInVzZURpc2FibGVkIiwiaG9va3MiLCJ1c2VMb2NhbGl6ZXIiLCJ1c2VQZXJmb3JtQ2FyZEFjdGlvbiIsInVzZVJlbmRlck1hcmtkb3duQXNIVE1MIiwidXNlU2Nyb2xsVG9FbmQiLCJ1c2VTdHlsZVNldCIsIm5vZGVfZW52IiwiYWRkQ2xhc3MiLCJlbGVtZW50IiwiY2xhc3NOYW1lIiwiY2xhc3NOYW1lcyIsIlNldCIsInNwbGl0IiwiaGFzIiwiYWRkIiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImFkZFBlcnNpc3RlbnRDbGFzc1dpdGhVbmRvIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJkZWxldGUiLCJkaXNjb25uZWN0IiwiaXNQbGFpbk9iamVjdCIsIm9iaiIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwic2V0QXR0cmlidXRlV2l0aFVuZG8iLCJxdWFsaWZpZWROYW1lIiwibmV4dFZhbHVlIiwidmFsdWUiLCJnZXRBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJkaXNhYmxlZEhhbmRsZXIiLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwiYWRkRXZlbnRMaXN0ZW5lck9uY2VXaXRoVW5kbyIsIm5hbWUiLCJoYW5kbGVyIiwiZGV0YWNoIiwiZGV0YWNoaW5nSGFuZGxlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib25jZSIsImFkZEV2ZW50TGlzdGVuZXJXaXRoVW5kbyIsImRpc2FibGVFbGVtZW50V2l0aFVuZG8iLCJ1bmRvU3RhY2siLCJpc0FjdGl2ZSIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsInRhZyIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwibWFwIiwiY2FsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJvcHRpb24iLCJmb3JFYWNoIiwidW5kbyIsImRpc2FibGVJbnB1dEVsZW1lbnRzV2l0aFVuZG8iLCJvYnNlcnZlU3VidHJlZSIsIm11dGF0aW9ucyIsImFkZGVkTm9kZXMiLCJhZGRlZE5vZGUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiY29udGFpbnNDbGFzc05hbWUiLCJpbmNsdWRlcyIsImhhc0F0dHJpYnV0ZSIsInNldE9yUmVtb3ZlQXR0cmlidXRlIiwic2V0T3JSZW1vdmVBdHRyaWJ1dGVXaXRoVW5kbyIsInByZXZWYWx1ZSIsImZpbmRBbmNlc3RvciIsInByZWRpY2F0ZSIsImN1cnJlbnQiLCJwYXJlbnRFbGVtZW50IiwiaW5kaWNhdGVBY3Rpb25TZWxlY3Rpb25XaXRoVW5kbyIsInNlbGVjdGVkQWN0aW9uRWxlbWVudHMiLCJhY3Rpb25QZXJmb3JtZWRDbGFzc05hbWUiLCJsZW5ndGgiLCJzb21lIiwiYWN0aW9uRWxlbWVudCIsImNvbnNvbGUiLCJ3YXJuIiwiYWN0aW9uU2V0RWxlbWVudHMiLCJzZWxlY3RlZEFjdGlvbkVsZW1lbnQiLCJhY3Rpb25TZXRFbGVtZW50IiwiYW5jZXN0b3IiLCJmaXhBY2Nlc3NpYmlsaXR5SXNzdWVzV2l0aFVuZG8iLCJhY3Rpb25CdXR0b24iLCJnZXRGb2N1c2FibGVFbGVtZW50cyIsImZpbHRlciIsInRhYkluZGV4IiwicmVzdG9yZUFjdGl2ZUVsZW1lbnRJbmRleCIsImFjdGl2ZUVsZW1lbnRJbmRleCIsImZvY3VzYWJsZSIsImZvY3VzIiwic2F2ZUFjdGl2ZUVsZW1lbnRJbmRleCIsImluZGV4T2YiLCJyZXN0b3JlSW5wdXRWYWx1ZXMiLCJpbnB1dFZhbHVlcyIsImlucHV0cyIsImlucHV0IiwiaW5kZXgiLCJ0YWdOYW1lIiwidHlwZSIsImNoZWNrZWQiLCJzYXZlSW5wdXRWYWx1ZXMiLCJBZGFwdGl2ZUNhcmRSZW5kZXJlciIsImFkYXB0aXZlQ2FyZCIsImRpc2FibGVkRnJvbVByb3BzIiwiZGlzYWJsZWQiLCJ0YXBBY3Rpb24iLCJhZGFwdGl2ZUNhcmRSZW5kZXJlclN0eWxlU2V0IiwiYWRhcHRpdmVDYXJkUmVuZGVyZXIiLCJHbG9iYWxTZXR0aW5ncyIsIkhvc3RDb25maWciLCJhY3Rpb25zUGVyZm9ybWVkIiwic2V0QWN0aW9uc1BlcmZvcm1lZCIsImFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnIiwiZGlzYWJsZWRGcm9tQ29tcG9zZXIiLCJlcnJvcnMiLCJzZXRFcnJvcnMiLCJsYXN0UmVuZGVyIiwic2V0TGFzdFJlbmRlciIsImFjdGl2ZUVsZW1lbnRJbmRleFJlZiIsImFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYiLCJjb250ZW50UmVmIiwiaW5wdXRWYWx1ZXNSZWYiLCJsb2NhbGl6ZSIsInBlcmZvcm1DYXJkQWN0aW9uIiwicmVuZGVyTWFya2Rvd25Bc0hUTUwiLCJzY3JvbGxUb0VuZCIsImhhbmRsZUNsaWNrQW5kS2V5UHJlc3MiLCJrZXkiLCJ0YXJnZXQiLCJhZGFwdGl2ZUNhcmRSb290IiwicXVlcnlTZWxlY3RvciIsImhhbmRsZUNsaWNrQW5kS2V5UHJlc3NGb3JUYXBBY3Rpb24iLCJ1bmRlZmluZWQiLCJhZGRBY3Rpb25zUGVyZm9ybWVkIiwiYWN0aW9uIiwiaGFuZGxlRXhlY3V0ZUFjdGlvbiIsImFjdGlvblR5cGVOYW1lIiwiZ2V0SnNvblR5cGVOYW1lIiwiaW1hZ2UiLCJpY29uVXJsIiwidGl0bGUiLCJ1cmwiLCJkYXRhIiwiX19pc0JvdEZyYW1ld29ya0NhcmRBY3Rpb24iLCJjYXJkQWN0aW9uIiwiZXJyb3IiLCJjb25zdHJ1Y3RvciIsIm9uUHJvY2Vzc01hcmtkb3duIiwidGV4dCIsInJlc3VsdCIsIm91dHB1dEh0bWwiLCJkaWRQcm9jZXNzIiwiaG9zdENvbmZpZyIsInNldFRhYkluZGV4QXRDYXJkUm9vdCIsInZhbGlkYXRlUHJvcGVydGllcyIsInZhbGlkYXRpb25FdmVudHMiLCJyZWR1Y2UiLCJpdGVtcyIsIm1lc3NhZ2UiLCJFcnJvciIsInJlbmRlciIsImFwcGVuZENoaWxkIiwiRGF0ZSIsIm5vdyIsInJlbW92ZUNoaWxkIiwib25FeGVjdXRlQWN0aW9uIiwicmVuZGVyZWRFbGVtZW50IiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYW55IiwiaXNSZXF1aXJlZCIsImJvb2wiLCJzaGFwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7OztBQVZBO0FBYUEsSUFBUUEsUUFBUixHQUFxQkMsd0NBQXJCLENBQVFELFFBQVI7QUFDQSxJQUFRRSxXQUFSLEdBQWtIQyxtQ0FBbEgsQ0FBUUQsV0FBUjtBQUFBLElBQXFCRSxZQUFyQixHQUFrSEQsbUNBQWxILENBQXFCQyxZQUFyQjtBQUFBLElBQW1DQyxvQkFBbkMsR0FBa0hGLG1DQUFsSCxDQUFtQ0Usb0JBQW5DO0FBQUEsSUFBeURDLHVCQUF6RCxHQUFrSEgsbUNBQWxILENBQXlERyx1QkFBekQ7QUFBQSxJQUFrRkMsY0FBbEYsR0FBa0hKLG1DQUFsSCxDQUFrRkksY0FBbEY7QUFBQSxJQUFrR0MsV0FBbEcsR0FBa0hMLG1DQUFsSCxDQUFrR0ssV0FBbEcsQyxDQUVBOztBQUNBLElBQU1DLFFBQVEsR0FBRyx5QkFBakI7O0FBRUEsU0FBU0MsUUFBVCxDQUFrQkMsT0FBbEIsRUFBMkJDLFNBQTNCLEVBQXNDO0FBQ3BDLE1BQU1DLFVBQVUsR0FBRyxJQUFJQyxHQUFKLENBQVFILE9BQU8sQ0FBQ0MsU0FBUixDQUFrQkcsS0FBbEIsQ0FBd0IsR0FBeEIsQ0FBUixDQUFuQjs7QUFFQSxNQUFJLENBQUNGLFVBQVUsQ0FBQ0csR0FBWCxDQUFlSixTQUFmLENBQUwsRUFBZ0M7QUFDOUJDLElBQUFBLFVBQVUsQ0FBQ0ksR0FBWCxDQUFlTCxTQUFmO0FBRUFELElBQUFB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LE1BRlE7QUFHekJ4RSxJQUFBQSxJQUFJLEVBQUV1RSxtQkFBVUMsTUFBVixDQUFpQkUsVUFIRTtBQUl6QnpKLElBQUFBLEtBQUssRUFBRXNKLG1CQUFVQztBQUpRLEdBQWhCO0FBUm9CLENBQWpDO2VBZ0JlckUsb0IiLCJzb3VyY2VSb290IjoiYnVuZGxlOi8vLyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1tYWdpYy1udW1iZXJzOiBbXCJlcnJvclwiLCB7IFwiaWdub3JlXCI6IFstMSwgMCwgMl0gfV0gKi9cblxuaW1wb3J0IHsgQWN0aW9uLCBPcGVuVXJsQWN0aW9uLCBTdWJtaXRBY3Rpb24gfSBmcm9tICdhZGFwdGl2ZWNhcmRzJztcbmltcG9ydCB7IENvbXBvbmVudHMsIGdldFRhYkluZGV4LCBob29rcyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXJlY3RMaW5lQ2FyZEFjdGlvbiB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWNvcmUnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgVkZDIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdXNlQWRhcHRpdmVDYXJkc0hvc3RDb25maWcgZnJvbSAnLi4vaG9va3MvdXNlQWRhcHRpdmVDYXJkc0hvc3RDb25maWcnO1xuaW1wb3J0IHVzZUFkYXB0aXZlQ2FyZHNQYWNrYWdlIGZyb20gJy4uL2hvb2tzL3VzZUFkYXB0aXZlQ2FyZHNQYWNrYWdlJztcbmltcG9ydCB7IEJvdEZyYW1ld29ya0NhcmRBY3Rpb24gfSBmcm9tICcuL0FkYXB0aXZlQ2FyZEJ1aWxkZXInO1xuXG5jb25zdCB7IEVycm9yQm94IH0gPSBDb21wb25lbnRzO1xuY29uc3QgeyB1c2VEaXNhYmxlZCwgdXNlTG9jYWxpemVyLCB1c2VQZXJmb3JtQ2FyZEFjdGlvbiwgdXNlUmVuZGVyTWFya2Rvd25Bc0hUTUwsIHVzZVNjcm9sbFRvRW5kLCB1c2VTdHlsZVNldCB9ID0gaG9va3M7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuY29uc3Qgbm9kZV9lbnYgPSBwcm9jZXNzLmVudi5ub2RlX2VudiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOVjtcblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBuZXcgU2V0KGVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KCcgJykpO1xuXG4gIGlmICghY2xhc3NOYW1lcy5oYXMoY2xhc3NOYW1lKSkge1xuICAgIGNsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7XG5cbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IEFycmF5LmZyb20oY2xhc3NOYW1lcykuam9pbignICcpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFkZFBlcnNpc3RlbnRDbGFzc1dpdGhVbmRvKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkge1xuICAgIC8vIEFmdGVyIHdlIGFkZCB0aGUgY2xhc3MsIGtlZXAgb2JzZXJ2aW5nIHRoZSBlbGVtZW50IHRvIG1ha2Ugc3VyZSB0aGUgY2xhc3MgaXMgbm90IHJlbW92ZWQuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnY2xhc3MnXSB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBjbGFzc05hbWVzID0gbmV3IFNldChlbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgnICcpKTtcblxuICAgICAgY2xhc3NOYW1lcy5kZWxldGUoY2xhc3NOYW1lKTtcblxuICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBBcnJheS5mcm9tKGNsYXNzTmFtZXMpLmpvaW4oJyAnKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlV2l0aFVuZG8oZWxlbWVudCwgcXVhbGlmaWVkTmFtZSwgbmV4dFZhbHVlKSB7XG4gIGNvbnN0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG5cbiAgaWYgKHZhbHVlICE9PSBuZXh0VmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShxdWFsaWZpZWROYW1lLCBuZXh0VmFsdWUpO1xuXG4gICAgcmV0dXJuICgpID0+ICh2YWx1ZSA/IGVsZW1lbnQuc2V0QXR0cmlidXRlKHF1YWxpZmllZE5hbWUsIHZhbHVlKSA6IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWUpKTtcbiAgfVxufVxuXG5jb25zdCBkaXNhYmxlZEhhbmRsZXIgPSBldmVudCA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJPbmNlV2l0aFVuZG8oZWxlbWVudCwgbmFtZSwgaGFuZGxlcikge1xuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gIGxldCBkZXRhY2g7XG4gIGNvbnN0IGRldGFjaGluZ0hhbmRsZXIgPSBldmVudCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGhhbmRsZXIoZXZlbnQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgeyBvbmNlOiB0cnVlIH0sIHNvIHdlIG5lZWQgdG8gZGV0YWNoIG1hbnVhbGx5LlxuICAgICAgZGV0YWNoKCk7XG4gICAgfVxuICB9O1xuXG4gIGRldGFjaCA9ICgpID0+IGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBkZXRhY2hpbmdIYW5kbGVyKTtcblxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZGV0YWNoaW5nSGFuZGxlciwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gIHJldHVybiBkZXRhY2g7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJXaXRoVW5kbyhlbGVtZW50LCBuYW1lLCBoYW5kbGVyKSB7XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyKTtcblxuICByZXR1cm4gKCkgPT4gZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlRWxlbWVudFdpdGhVbmRvKGVsZW1lbnQpIHtcbiAgY29uc3QgdW5kb1N0YWNrID0gW107XG4gIGNvbnN0IGlzQWN0aXZlID0gZWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgY29uc3QgdGFnID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2UgKi9cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVuZG9TdGFjay5wdXNoKHNldEF0dHJpYnV0ZVdpdGhVbmRvKGVsZW1lbnQsICdhcmlhLWRpc2FibGVkJywgJ3RydWUnKSk7XG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICB1bmRvU3RhY2sucHVzaChcbiAgICAgICAgICBhZGRFdmVudExpc3RlbmVyT25jZVdpdGhVbmRvKGVsZW1lbnQsICdibHVyJywgKCkgPT5cbiAgICAgICAgICAgIHVuZG9TdGFjay5wdXNoKHNldEF0dHJpYnV0ZVdpdGhVbmRvKGVsZW1lbnQsICdkaXNhYmxlZCcsICdkaXNhYmxlZCcpKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVuZG9TdGFjay5wdXNoKHNldEF0dHJpYnV0ZVdpdGhVbmRvKGVsZW1lbnQsICdkaXNhYmxlZCcsICdkaXNhYmxlZCcpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgdW5kb1N0YWNrLnB1c2goYWRkRXZlbnRMaXN0ZW5lcldpdGhVbmRvKGVsZW1lbnQsICdjbGljaycsIGRpc2FibGVkSGFuZGxlcikpO1xuICAgICAgICB1bmRvU3RhY2sucHVzaChzZXRBdHRyaWJ1dGVXaXRoVW5kbyhlbGVtZW50LCAncmVhZG9ubHknLCAncmVhZG9ubHknKSk7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdW5kb1N0YWNrLnB1c2goXG4gICAgICAgICAgLi4uW10ubWFwLmNhbGwoZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdvcHRpb24nKSwgb3B0aW9uID0+XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVXaXRoVW5kbyhvcHRpb24sICdkaXNhYmxlZCcsICdkaXNhYmxlZCcpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB1bmRvU3RhY2suZm9yRWFjaCh1bmRvID0+IHVuZG8gJiYgdW5kbygpKTtcbn1cblxuZnVuY3Rpb24gZGlzYWJsZUlucHV0RWxlbWVudHNXaXRoVW5kbyhlbGVtZW50OiBIVE1MRWxlbWVudCwgb2JzZXJ2ZVN1YnRyZWUgPSB0cnVlKSB7XG4gIGNvbnN0IHVuZG9TdGFjayA9IFtdLm1hcC5jYWxsKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLCBlbGVtZW50ID0+XG4gICAgZGlzYWJsZUVsZW1lbnRXaXRoVW5kbyhlbGVtZW50KVxuICApO1xuXG4gIGNvbnN0IHRhZyA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAvLyBPbmx5IHNldCB0YWJpbmRleD1cIi0xXCIgb24gZm9jdXNhYmxlIGVsZW1lbnQuIE90aGVyd2lzZSwgd2Ugd2lsbCBtYWtlIDxkaXY+IGZvY3VzYWJsZSBieSBtb3VzZS5cbiAgKHRhZyA9PT0gJ2EnIHx8IHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSAmJlxuICAgIHVuZG9TdGFjay5wdXNoKHNldEF0dHJpYnV0ZVdpdGhVbmRvKGVsZW1lbnQsICd0YWJpbmRleCcsICctMScpKTtcblxuICBpZiAob2JzZXJ2ZVN1YnRyZWUpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PlxuICAgICAgbXV0YXRpb25zLmZvckVhY2goKHsgYWRkZWROb2RlcyB9KSA9PlxuICAgICAgICB1bmRvU3RhY2sucHVzaCguLi5bXS5tYXAuY2FsbChhZGRlZE5vZGVzLCBhZGRlZE5vZGUgPT4gZGlzYWJsZUlucHV0RWxlbWVudHNXaXRoVW5kbyhhZGRlZE5vZGUsIGZhbHNlKSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG5cbiAgICB1bmRvU3RhY2sucHVzaCgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuICB9XG5cbiAgcmV0dXJuICgpID0+IHVuZG9TdGFjay5mb3JFYWNoKHVuZG8gPT4gdW5kbyAmJiB1bmRvKCkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGNvbnRhaW5zIGEgY2xhc3MuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrIGZvciB0aGUgY2xhc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNoZWNrIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgY29udGFpbnMgdGhlIGNsYXNzLCBvdGhlcndpc2UsIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQ2xhc3NOYW1lKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKGVsZW1lbnQuY2xhc3NOYW1lIHx8ICcnKS5zcGxpdCgnICcpLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZyb20gYW4gZWxlbWVudC5cbiAqXG4gKiBAcmV0dXJucyB7ZmFsc2UgfCBzdHJpbmd9IFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLiBgZmFsc2VgIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBzZXQuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50OiBIVE1MRWxlbWVudCwgcXVhbGlmaWVkTmFtZTogc3RyaW5nKTogZmFsc2UgfCBzdHJpbmcge1xuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSkgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG59XG5cbi8qKlxuICogU2V0cyBvciByZW1vdmVzIGFuIGF0dHJpYnV0ZSBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIHNldCBvciByZW1vdmUgYXR0cmlidXRlIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVhbGlmaWVkTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuXG4gKiBAcGFyYW0ge2ZhbHNlIHwgc3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLiBXaGVuIHBhc3NpbmcgYGZhbHNlYCwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUuXG4gKi9cbmZ1bmN0aW9uIHNldE9yUmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBxdWFsaWZpZWROYW1lOiBzdHJpbmcsIHZhbHVlOiBmYWxzZSB8IHN0cmluZyk6IHZvaWQge1xuICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogU2V0cyBvciByZW1vdmVzIGFuIGF0dHJpYnV0ZSBmcm9tIGFuIGVsZW1lbnQgd2l0aCBhbiB1bmRvIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBzZXQgb3IgcmVtb3ZlIGF0dHJpYnV0ZSBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHF1YWxpZmllZE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLlxuICogQHBhcmFtIHtmYWxzZSB8IHN0cmluZ30gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4gV2hlbiBwYXNzaW5nIGBmYWxzZWAsIHJlbW92ZSB0aGUgYXR0cmlidXRlLlxuICpcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfSBUaGUgdW5kbyBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIHdpbGwgdW5kbyBhbGwgbWFuaXB1bGF0aW9ucyBieSByZXN0b3JpbmcgdmFsdWVzIHJlY29yZGVkIGF0IHRoZSB0aW1lIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuICovXG5mdW5jdGlvbiBzZXRPclJlbW92ZUF0dHJpYnV0ZVdpdGhVbmRvKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBxdWFsaWZpZWROYW1lOiBzdHJpbmcsIHZhbHVlOiBmYWxzZSB8IHN0cmluZyk6ICgpID0+IHZvaWQge1xuICBjb25zdCBwcmV2VmFsdWUgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgcXVhbGlmaWVkTmFtZSk7XG5cbiAgc2V0T3JSZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgcXVhbGlmaWVkTmFtZSwgdmFsdWUpO1xuXG4gIHJldHVybiAoKSA9PiBzZXRPclJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCBxdWFsaWZpZWROYW1lLCBwcmV2VmFsdWUpO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCBhbmNlc3RvciB0aGF0IGZ1bGZpbGwgdGhlIHByZWRpY2F0ZS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQuIFRoaXMgZWxlbWVudCB3aWxsIG5vdCBiZSBjaGVja2VkIGFnYWluc3QgdGhlIHByZWRpY2F0ZS5cbiAqIEBwYXJhbSB7KGFuY2VzdG9yOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbn0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSB0byBmdWxmaWxsLlxuICpcbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudCB8IHVuZGVmaW5lZH0gVGhlIGZpcnN0IGFuY2VzdG9yIHRoYXQgZnVsZmlsbCB0aGUgcHJlZGljYXRlLCBvdGhlcndpc2UsIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBmaW5kQW5jZXN0b3IoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByZWRpY2F0ZTogKGFuY2VzdG9yOiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBpZiAocHJlZGljYXRlLmNhbGwoZWxlbWVudCwgY3VycmVudCkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cblxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIGFjdGlvbiBzZWxlY3RlZCBieSBwZXJmb3JtaW5nIGEgc2VyaWVzIG9mIG1hbmlwdWxhdGlvbnMsIHdpdGggdW5kbzpcbiAqXG4gKiAtIEFjY2Vzc2liaWxpdHk6IHNldCBgYXJpYS1wcmVzc2VkYCB0byBgdHJ1ZWBcbiAqIC0gQXBwbGllcyBgc3R5bGVPcHRpb25zLmFjdGlvblBlcmZvcm1lZENsYXNzTmFtZWBcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50W119IHNlbGVjdGVkQWN0aW9uRWxlbWVudHMgLSBBbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IGFyZSByZXByZXNlbnRpbmcgdGhlIGFjdGlvbiBhbmQgaXMgc2VsZWN0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZz99IGFjdGlvblBlcmZvcm1lZENsYXNzTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byBhcHBseSB0byBhbGwgZWxlbWVudHMuXG4gKlxuICogQHJldHVybnMgeygpID0+IHZvaWR9IFRoZSB1bmRvIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgd2lsbCB1bmRvIGFsbCBtYW5pcHVsYXRpb25zIGJ5IHJlc3RvcmluZyB2YWx1ZXMgcmVjb3JkZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGluZGljYXRlQWN0aW9uU2VsZWN0aW9uV2l0aFVuZG8oXG4gIHNlbGVjdGVkQWN0aW9uRWxlbWVudHM6IEhUTUxFbGVtZW50W10sXG4gIGFjdGlvblBlcmZvcm1lZENsYXNzTmFtZT86IHN0cmluZ1xuKTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzZWxlY3RlZEFjdGlvbkVsZW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFZlcmlmeSBhbGwgaW5wdXQgZWxlbWVudHMgYXJlIFwiYWMtcHVzaEJ1dHRvblwiLCBjb3VsZCBiZWxvbmdzIHRvIEFjdGlvblNldCBvciBcImNhcmQgYWN0aW9uc1wiLlxuICBpZiAoc2VsZWN0ZWRBY3Rpb25FbGVtZW50cy5zb21lKGFjdGlvbkVsZW1lbnQgPT4gIWNvbnRhaW5zQ2xhc3NOYW1lKGFjdGlvbkVsZW1lbnQsICdhYy1wdXNoQnV0dG9uJykpKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBDYW5ub3QgbWFyayBzZWxlY3RlZCBhY3Rpb24gaW4gdGhlIGNhcmQsIHNvbWUgZWxlbWVudHMgYXJlIG5vdCBhbiBcImFjLXB1c2hCdXR0b25cIi4nXG4gICAgKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEEgZGlzdGluY3Qgc2V0IG9mIGFjdGlvbiBzZXQgY29udGFpbmVycyB3aGljaCBoYXMgc2VsZWN0aW9ucywgZXhjbHVkaW5nIGNvbnRhaW5lcnMgd2l0aG91dCBhY3Rpb25zLlxuICAvLyBNdWx0aXBsZSBzdWJtaXNzaW9uIGluIGFuIEFkYXB0aXZlIENhcmQgaXMgc3RpbGwgYSB2YWd1ZSBhcmVhIGFuZCBUQkQuXG4gIC8vIFdlIG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSB0aGUgd2hvbGUgY2FyZCwganVzdCBidXR0b25zIGluIHNhbWUgY29udGFpbmVyLCBvciBkbyBub3RoaW5nICh0b2RheSkuXG4gIGNvbnN0IGFjdGlvblNldEVsZW1lbnRzID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcblxuICBzZWxlY3RlZEFjdGlvbkVsZW1lbnRzLmZvckVhY2goc2VsZWN0ZWRBY3Rpb25FbGVtZW50ID0+IHtcbiAgICBjb25zdCBhY3Rpb25TZXRFbGVtZW50ID0gZmluZEFuY2VzdG9yKFxuICAgICAgc2VsZWN0ZWRBY3Rpb25FbGVtZW50LFxuICAgICAgYW5jZXN0b3IgPT4gYW5jZXN0b3IuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdtZW51YmFyJ1xuICAgICk7XG5cbiAgICBhY3Rpb25TZXRFbGVtZW50ICYmIGFjdGlvblNldEVsZW1lbnRzLmFkZChhY3Rpb25TZXRFbGVtZW50KTtcbiAgfSk7XG5cbiAgY29uc3QgdW5kb1N0YWNrOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIGFjdGlvblNldEVsZW1lbnRzLmZvckVhY2goYWN0aW9uU2V0RWxlbWVudCA9PiB7XG4gICAgLy8gUmVtb3ZlIFwicm9sZVwiIGZyb20gZXZlcnkgXCJhYy1hY3Rpb25TZXRcIiBjb250YWluZXIuXG4gICAgdW5kb1N0YWNrLnB1c2goc2V0T3JSZW1vdmVBdHRyaWJ1dGVXaXRoVW5kbyhhY3Rpb25TZXRFbGVtZW50LCAncm9sZScsIGZhbHNlKSk7XG5cbiAgICAvLyBNb2RpZnkgXCJyb2xlXCIgb2YgZXZlcnkgYWN0aW9ucyBpbiB0aGUgY29udGFpbmVyLlxuICAgIEFycmF5LmZyb20oYWN0aW9uU2V0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWMtcHVzaEJ1dHRvbicpIGFzIE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+KS5mb3JFYWNoKFxuICAgICAgYWN0aW9uRWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZEFjdGlvbkVsZW1lbnRzLmluY2x1ZGVzKGFjdGlvbkVsZW1lbnQpKSB7XG4gICAgICAgICAgLy8gQWRkIFwiYXJpYS1wcmVzc2VkXCIgYW5kIHNldCBcInJvbGVcIiBhdHRyaWJ1dGUgdG8gXCJidXR0b25cIiAod2hpY2ggaXMgcmVxdWlyZWQgYnkgXCJhcmlhLXByZXNzZWRcIikuXG4gICAgICAgICAgdW5kb1N0YWNrLnB1c2goc2V0T3JSZW1vdmVBdHRyaWJ1dGVXaXRoVW5kbyhhY3Rpb25FbGVtZW50LCAnYXJpYS1wcmVzc2VkJywgJ3RydWUnKSk7XG4gICAgICAgICAgdW5kb1N0YWNrLnB1c2goc2V0T3JSZW1vdmVBdHRyaWJ1dGVXaXRoVW5kbyhhY3Rpb25FbGVtZW50LCAncm9sZScsICdidXR0b24nKSk7XG5cbiAgICAgICAgICAvLyBIaWdobGlnaHQgYWN0aW9ucyBieSBhcHBseWluZyBgc3R5bGVPcHRpb25zLmFjdGlvblBlcmZvcm1lZENsYXNzTmFtZWAuXG4gICAgICAgICAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lICYmXG4gICAgICAgICAgICB1bmRvU3RhY2sucHVzaChhZGRQZXJzaXN0ZW50Q2xhc3NXaXRoVW5kbyhhY3Rpb25FbGVtZW50LCBhY3Rpb25QZXJmb3JtZWRDbGFzc05hbWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSByZW1vdmVkIFwicm9sZT1tZW51YmFyXCIgZnJvbSB0aGUgY29udGFpbmVyLCB3ZSBtdXN0IHJlbW92ZSBcInJvbGU9bWVudWl0ZW1cIiBmcm9tIHVuc2VsZWN0ZWQgYWN0aW9ucy5cbiAgICAgICAgICB1bmRvU3RhY2sucHVzaChzZXRPclJlbW92ZUF0dHJpYnV0ZVdpdGhVbmRvKGFjdGlvbkVsZW1lbnQsICdyb2xlJywgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIHJldHVybiAoKSA9PiB1bmRvU3RhY2suZm9yRWFjaCh1bmRvID0+IHVuZG8oKSk7XG59XG5cbi8qKlxuICogRml4ZXMgYWNjZXNzaWJpbGl0eSBpc3N1ZXMgZnJvbSBBZGFwdGl2ZSBDYXJkLCB3aXRoIHVuZG8uXG4gKlxuICogQHJldHVybnMgeygpID0+IHZvaWR9IFRoZSB1bmRvIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgd2lsbCB1bmRvIGFsbCBtYW5pcHVsYXRpb25zIGJ5IHJlc3RvcmluZyB2YWx1ZXMgcmVjb3JkZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIGZpeEFjY2Vzc2liaWxpdHlJc3N1ZXNXaXRoVW5kbyhlbGVtZW50OiBIVE1MRWxlbWVudCk6ICgpID0+IHZvaWQge1xuICAvLyBUaGVzZSBoYWNrcyBzaG91bGQgYmUgZG9uZSBpbiBBZGFwdGl2ZSBDYXJkcyBsaWJyYXJ5IGluc3RlYWQuXG4gIGNvbnN0IHVuZG9TdGFjazogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICAvLyBSZWxhdGVkIHRvICMzOTQ5OiBBbGwgYWN0aW9uIGJ1dHRvbnMgaW5zaWRlIHJvbGU9XCJtZW51YmFyXCIgc2hvdWxkIGJlIHJvbGU9XCJtZW51aXRlbVwiLlxuICB1bmRvU3RhY2sucHVzaChcbiAgICAuLi5BcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFjLWFjdGlvblNldFtyb2xlPVwibWVudWJhclwiXSBbcm9sZT1cImJ1dHRvblwiXScpKS5tYXAoYWN0aW9uQnV0dG9uID0+XG4gICAgICBzZXRBdHRyaWJ1dGVXaXRoVW5kbyhhY3Rpb25CdXR0b24sICdyb2xlJywgJ21lbnVpdGVtJylcbiAgICApXG4gICk7XG5cbiAgcmV0dXJuICgpID0+IHVuZG9TdGFjay5mb3JFYWNoKHVuZG8gPT4gdW5kbygpKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlRWxlbWVudHMoZWxlbWVudCkge1xuICByZXR1cm4gW10uZmlsdGVyLmNhbGwoXG4gICAgZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgW1xuICAgICAgICAnYScsXG4gICAgICAgICdib2R5JyxcbiAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICdmcmFtZScsXG4gICAgICAgICdpZnJhbWUnLFxuICAgICAgICAnaW1nJyxcbiAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgJ2lzaW5kZXgnLFxuICAgICAgICAnb2JqZWN0JyxcbiAgICAgICAgJ3NlbGVjdCcsXG4gICAgICAgICd0ZXh0YXJlYScsXG4gICAgICAgICdbdGFiaW5kZXhdJ1xuICAgICAgXS5qb2luKCcsICcpXG4gICAgKSxcbiAgICBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhYkluZGV4ID0gZ2V0VGFiSW5kZXgoZWxlbWVudCk7XG5cbiAgICAgIHJldHVybiB0eXBlb2YgdGFiSW5kZXggPT09ICdudW1iZXInICYmIHRhYkluZGV4ID49IDA7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlQWN0aXZlRWxlbWVudEluZGV4KGVsZW1lbnQsIGFjdGl2ZUVsZW1lbnRJbmRleCkge1xuICBjb25zdCBmb2N1c2FibGUgPSBnZXRGb2N1c2FibGVFbGVtZW50cyhlbGVtZW50KVthY3RpdmVFbGVtZW50SW5kZXhdO1xuXG4gIGZvY3VzYWJsZSAmJiBmb2N1c2FibGUuZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gc2F2ZUFjdGl2ZUVsZW1lbnRJbmRleChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRGb2N1c2FibGVFbGVtZW50cyhlbGVtZW50KS5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlSW5wdXRWYWx1ZXMoZWxlbWVudCwgaW5wdXRWYWx1ZXMpIHtcbiAgY29uc3QgaW5wdXRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpO1xuXG4gIFtdLmZvckVhY2guY2FsbChpbnB1dHMsIChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0VmFsdWVzW2luZGV4XTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCB7IHRhZ05hbWUsIHR5cGUgfSA9IGlucHV0O1xuXG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKSkge1xuICAgICAgICBpbnB1dC5jaGVja2VkID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVJbnB1dFZhbHVlcyhlbGVtZW50KSB7XG4gIGNvbnN0IGlucHV0cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKTtcblxuICByZXR1cm4gW10ubWFwLmNhbGwoaW5wdXRzLCAoeyBjaGVja2VkLCB0YWdOYW1lLCB0eXBlLCB2YWx1ZSB9KSA9PiB7XG4gICAgaWYgKHRhZ05hbWUgPT09ICdJTlBVVCcgJiYgKHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJykpIHtcbiAgICAgIHJldHVybiBjaGVja2VkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSk7XG59XG5cbnR5cGUgQWRhcHRpdmVDYXJkUmVuZGVyZXJQcm9wcyA9IHtcbiAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lPzogc3RyaW5nO1xuICBhZGFwdGl2ZUNhcmQ6IGFueTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0YXBBY3Rpb24/OiBEaXJlY3RMaW5lQ2FyZEFjdGlvbjtcbn07XG5cbmNvbnN0IEFkYXB0aXZlQ2FyZFJlbmRlcmVyOiBWRkM8QWRhcHRpdmVDYXJkUmVuZGVyZXJQcm9wcz4gPSAoe1xuICBhY3Rpb25QZXJmb3JtZWRDbGFzc05hbWUsXG4gIGFkYXB0aXZlQ2FyZCxcbiAgZGlzYWJsZWQ6IGRpc2FibGVkRnJvbVByb3BzLFxuICB0YXBBY3Rpb25cbn0pID0+IHtcbiAgY29uc3QgW3sgYWRhcHRpdmVDYXJkUmVuZGVyZXI6IGFkYXB0aXZlQ2FyZFJlbmRlcmVyU3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICBjb25zdCBbeyBHbG9iYWxTZXR0aW5ncywgSG9zdENvbmZpZyB9XSA9IHVzZUFkYXB0aXZlQ2FyZHNQYWNrYWdlKCk7XG4gIGNvbnN0IFthY3Rpb25zUGVyZm9ybWVkLCBzZXRBY3Rpb25zUGVyZm9ybWVkXSA9IHVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW2FkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnXSA9IHVzZUFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnKCk7XG4gIGNvbnN0IFtkaXNhYmxlZEZyb21Db21wb3Nlcl0gPSB1c2VEaXNhYmxlZCgpO1xuICBjb25zdCBbZXJyb3JzLCBzZXRFcnJvcnNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbbGFzdFJlbmRlciwgc2V0TGFzdFJlbmRlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgYWN0aXZlRWxlbWVudEluZGV4UmVmID0gdXNlUmVmKC0xKTtcbiAgY29uc3QgYWRhcHRpdmVDYXJkRWxlbWVudFJlZiA9IHVzZVJlZjxIVE1MRWxlbWVudD4oKTtcbiAgY29uc3QgY29udGVudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgY29uc3QgaW5wdXRWYWx1ZXNSZWYgPSB1c2VSZWYoW10pO1xuICBjb25zdCBsb2NhbGl6ZSA9IHVzZUxvY2FsaXplcigpO1xuICBjb25zdCBwZXJmb3JtQ2FyZEFjdGlvbiA9IHVzZVBlcmZvcm1DYXJkQWN0aW9uKCk7XG4gIGNvbnN0IHJlbmRlck1hcmtkb3duQXNIVE1MID0gdXNlUmVuZGVyTWFya2Rvd25Bc0hUTUwoKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gIGNvbnN0IGRpc2FibGVkID0gZGlzYWJsZWRGcm9tQ29tcG9zZXIgfHwgZGlzYWJsZWRGcm9tUHJvcHM7XG5cbiAgLy8gVE9ETzogW1AyXSAjMzE5OSBXZSBzaG91bGQgY29uc2lkZXIgdXNpbmcgYGFkYXB0aXZlQ2FyZC5zZWxlY3RBY3Rpb25gIGluc3RlYWQuXG4gIC8vIFRoZSBudWxsIGNoZWNrIGZvciBcInRhcEFjdGlvblwiIGlzIGluIFwiaGFuZGxlQ2xpY2tBbmRLZXlQcmVzc0ZvclRhcEFjdGlvblwiLlxuICBjb25zdCBoYW5kbGVDbGlja0FuZEtleVByZXNzID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgdHlwZSB9ID0gZXZlbnQ7XG5cbiAgICAgIC8vIFNvbWUgaXRlbXMsIGUuZy4gdGFwcGFibGUgdGV4dCwgY2Fubm90IGJlIGRpc2FibGVkIHRocnUgRE9NIGF0dHJpYnV0ZXNcbiAgICAgIGNvbnN0IHsgY3VycmVudCB9ID0gY29udGVudFJlZjtcbiAgICAgIGNvbnN0IGFkYXB0aXZlQ2FyZFJvb3QgPSBjdXJyZW50LnF1ZXJ5U2VsZWN0b3IoJy5hYy1hZGFwdGl2ZUNhcmRbdGFiaW5kZXg9XCIwXCJdJyk7XG5cbiAgICAgIGlmICghYWRhcHRpdmVDYXJkUm9vdCkge1xuICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKFxuICAgICAgICAgICdib3RmcmFtZXdvcmstd2ViY2hhdDogTm8gQWRhcHRpdmUgQ2FyZCByb290IGNvbnRhaW5lciBjYW4gYmUgZm91bmQ7IHRoZSBjYXJkIGlzIHByb2JhYmx5IG9uIGFuIHVuc3VwcG9ydGVkIEFkYXB0aXZlIENhcmQgdmVyc2lvbi4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBcImtleXByZXNzXCIgZXZlbnQsIHdlIG9ubHkgbGlzdGVuIHRvIEVOVEVSIGFuZCBTUEFDRUJBUiBrZXkuXG4gICAgICBpZiAodHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgICBpZiAoa2V5ICE9PSAnRW50ZXInICYmIGtleSAhPT0gJyAnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugd2lsbCBjYWxsIHBlcmZvcm1DYXJkQWN0aW9uIGlmIGVpdGhlcjpcbiAgICAgIC8vIDEuIFdlIGFyZSBvbiB0aGUgdGFyZ2V0LCBvclxuICAgICAgLy8gMi4gVGhlIGV2ZW50LWRpc3BhdGNoaW5nIGVsZW1lbnQgaXMgbm90IGludGVyYWN0aXZlXG4gICAgICBpZiAodGFyZ2V0ICE9PSBhZGFwdGl2ZUNhcmRSb290KSB7XG4gICAgICAgIGNvbnN0IHRhYkluZGV4ID0gZ2V0VGFiSW5kZXgodGFyZ2V0KTtcblxuICAgICAgICAvLyBJZiB0aGUgdXNlciBpcyBjbGlja2luZyBvbiBzb21ldGhpbmcgdGhhdCBpcyBhbHJlYWR5IGNsaWNrYWJsZSwgZG8gbm90IGFsbG93IHRoZW0gdG8gY2xpY2sgdGhlIGNhcmQuXG4gICAgICAgIC8vIEUuZy4gYSBoZXJvIGNhcmQgY2FuIGJlIHRhcHBhYmxlLCBhbmQgaW1hZ2UgYW5kIGJ1dHRvbnMgaW5zaWRlIHRoZSBoZXJvIGNhcmQgY2FuIGFsc28gYmUgdGFwcGFibGUuXG4gICAgICAgIGlmICh0eXBlb2YgdGFiSW5kZXggPT09ICdudW1iZXInICYmIHRhYkluZGV4ID49IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGVyZm9ybUNhcmRBY3Rpb24odGFwQWN0aW9uKTtcbiAgICAgIHNjcm9sbFRvRW5kKCk7XG4gICAgfSxcbiAgICBbY29udGVudFJlZiwgcGVyZm9ybUNhcmRBY3Rpb24sIHNjcm9sbFRvRW5kLCB0YXBBY3Rpb25dXG4gICk7XG5cbiAgLy8gT25seSBsaXN0ZW4gdG8gZXZlbnQgaWYgaXQgaXMgbm90IGRpc2FibGVkIGFuZCBoYXZlIFwidGFwQWN0aW9uXCIgcHJvcC5cbiAgY29uc3QgaGFuZGxlQ2xpY2tBbmRLZXlQcmVzc0ZvclRhcEFjdGlvbiA9ICFkaXNhYmxlZCAmJiB0YXBBY3Rpb24gPyBoYW5kbGVDbGlja0FuZEtleVByZXNzIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGFkZEFjdGlvbnNQZXJmb3JtZWQgPSB1c2VDYWxsYmFjayhcbiAgICBhY3Rpb24gPT4gIX5hY3Rpb25zUGVyZm9ybWVkLmluZGV4T2YoYWN0aW9uKSAmJiBzZXRBY3Rpb25zUGVyZm9ybWVkKFsuLi5hY3Rpb25zUGVyZm9ybWVkLCBhY3Rpb25dKSxcbiAgICBbYWN0aW9uc1BlcmZvcm1lZCwgc2V0QWN0aW9uc1BlcmZvcm1lZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFeGVjdXRlQWN0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKGFjdGlvbjogQWN0aW9uKSA9PiB7XG4gICAgICAvLyBTb21lIGl0ZW1zLCBlLmcuIHRhcHBhYmxlIGltYWdlLCBjYW5ub3QgYmUgZGlzYWJsZWQgdGhydSBET00gYXR0cmlidXRlc1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYWRkQWN0aW9uc1BlcmZvcm1lZChhY3Rpb24pO1xuXG4gICAgICBjb25zdCBhY3Rpb25UeXBlTmFtZSA9IGFjdGlvbi5nZXRKc29uVHlwZU5hbWUoKTtcbiAgICAgIGNvbnN0IHsgaWNvblVybDogaW1hZ2UsIHRpdGxlIH0gPSBhY3Rpb247XG5cbiAgICAgIC8vIFdlIGNhbm5vdCB1c2UgXCJpbnN0YW5jZW9mXCIgY2hlY2sgaGVyZSwgYmVjYXVzZSB3ZWIgZGV2cyBtYXkgYnJpbmcgdGhlaXIgb3duIHZlcnNpb24gb2YgQWRhcHRpdmUgQ2FyZHMgcGFja2FnZS5cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgdXNpbmcgXCJnZXRKc29uVHlwZU5hbWUoKVwiIGluc3RlYWQuXG4gICAgICBpZiAoYWN0aW9uVHlwZU5hbWUgPT09ICdBY3Rpb24uT3BlblVybCcpIHtcbiAgICAgICAgY29uc3QgeyB1cmw6IHZhbHVlIH0gPSBhY3Rpb24gYXMgT3BlblVybEFjdGlvbjtcblxuICAgICAgICBwZXJmb3JtQ2FyZEFjdGlvbih7XG4gICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgdHlwZTogJ29wZW5VcmwnLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb25UeXBlTmFtZSA9PT0gJ0FjdGlvbi5TdWJtaXQnKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYWN0aW9uIGFzIFN1Ym1pdEFjdGlvbiBhcyB7XG4gICAgICAgICAgZGF0YTogc3RyaW5nIHwgQm90RnJhbWV3b3JrQ2FyZEFjdGlvbjtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGVyZm9ybUNhcmRBY3Rpb24oe1xuICAgICAgICAgICAgICBpbWFnZSxcbiAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdpbUJhY2snLFxuICAgICAgICAgICAgICB2YWx1ZTogZGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLl9faXNCb3RGcmFtZXdvcmtDYXJkQWN0aW9uKSB7XG4gICAgICAgICAgICBwZXJmb3JtQ2FyZEFjdGlvbihkYXRhLmNhcmRBY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZXJmb3JtQ2FyZEFjdGlvbih7XG4gICAgICAgICAgICAgIGltYWdlLFxuICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgdHlwZTogJ3Bvc3RCYWNrJyxcbiAgICAgICAgICAgICAgdmFsdWU6IGRhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNjcm9sbFRvRW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBXZWIgQ2hhdDogcmVjZWl2ZWQgdW5rbm93biBhY3Rpb24gZnJvbSBBZGFwdGl2ZSBDYXJkc2ApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGFjdGlvbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkQWN0aW9uc1BlcmZvcm1lZCwgZGlzYWJsZWQsIHBlcmZvcm1DYXJkQWN0aW9uLCBzY3JvbGxUb0VuZF1cbiAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHsgY3VycmVudCB9ID0gY29udGVudFJlZjtcblxuICAgIGlmICghY3VycmVudCB8fCAhYWRhcHRpdmVDYXJkKSB7XG4gICAgICBhY3RpdmVFbGVtZW50SW5kZXhSZWYuY3VycmVudCA9IC0xO1xuICAgICAgaW5wdXRWYWx1ZXNSZWYuY3VycmVudCA9IFtdO1xuICAgIH1cblxuICAgIC8vIEN1cnJlbnRseSwgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgTWFya2Rvd24gZW5naW5lIGlzIHRvIHNldCBpdCB0aHJ1IHN0YXRpYyBtZW1iZXIgb2YgQWRhcHRpdmVDYXJkIGNsYXNzXG5cbiAgICAvLyBUT0RPOiBbUDNdIENoZWNrcyBpZiB3ZSBjb3VsZCBtYWtlIHRoZSBcInJlbmRlck1hcmtkb3duQXNIVE1MXCIgcGVyIGNhcmRcbiAgICAvLyAgICAgICBUaGlzIGNvdWxkIGJlIGxpbWl0YXRpb25zIGZyb20gQWRhcHRpdmUgQ2FyZHMgcGFja2FnZSAobm90IHN1cHBvcnRlZCBhcyBvZiAxLjIuNSlcbiAgICAvLyAgICAgICBCZWNhdXNlIHRoZXJlIGNvdWxkIGJlIHRpbWluZyBkaWZmZXJlbmNlIGJldHdlZW4gLnBhcnNlIGFuZCAucmVuZGVyLCB3ZSBjb3VsZCBiZSB1c2luZyB3cm9uZyBNYXJrZG93biBlbmdpbmVcblxuICAgIGFkYXB0aXZlQ2FyZC5jb25zdHJ1Y3Rvci5vblByb2Nlc3NNYXJrZG93biA9ICh0ZXh0LCByZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZW5kZXJNYXJrZG93bkFzSFRNTCkge1xuICAgICAgICByZXN1bHQub3V0cHV0SHRtbCA9IHJlbmRlck1hcmtkb3duQXNIVE1MKHRleHQpO1xuICAgICAgICByZXN1bHQuZGlkUHJvY2VzcyA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChhZGFwdGl2ZUNhcmRzSG9zdENvbmZpZykge1xuICAgICAgYWRhcHRpdmVDYXJkLmhvc3RDb25maWcgPSBpc1BsYWluT2JqZWN0KGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnKVxuICAgICAgICA/IG5ldyBIb3N0Q29uZmlnKGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnKVxuICAgICAgICA6IGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnO1xuICAgIH1cblxuICAgIC8vIEZvciBhY2Nlc3NpYmlsaXR5IGlzc3VlICMxMzQwLCBgdGFiaW5kZXg9XCIwXCJgIG11c3Qgbm90IGJlIHNldCBmb3IgdGhlIHJvb3QgY29udGFpbmVyIGlmIGl0IGlzIG5vdCBpbnRlcmFjdGl2ZS5cbiAgICBHbG9iYWxTZXR0aW5ncy5zZXRUYWJJbmRleEF0Q2FyZFJvb3QgPSAhIXRhcEFjdGlvbjtcblxuICAgIGNvbnN0IHsgdmFsaWRhdGlvbkV2ZW50cyB9ID0gYWRhcHRpdmVDYXJkLnZhbGlkYXRlUHJvcGVydGllcygpO1xuXG4gICAgaWYgKHZhbGlkYXRpb25FdmVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gc2V0RXJyb3JzKHZhbGlkYXRpb25FdmVudHMucmVkdWNlKChpdGVtcywgeyBtZXNzYWdlIH0pID0+IFsuLi5pdGVtcywgbmV3IEVycm9yKG1lc3NhZ2UpXSwgW10pKTtcbiAgICB9XG5cbiAgICBsZXQgZWxlbWVudDtcblxuICAgIHRyeSB7XG4gICAgICBlbGVtZW50ID0gYWRhcHRpdmVDYXJkLnJlbmRlcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gc2V0RXJyb3JzKFtlcnJvcl0pO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHNldEVycm9ycyhbbmV3IEVycm9yKCdBZGFwdGl2ZSBDYXJkIHJlbmRlcmVkIGFzIGVtcHR5IGVsZW1lbnQnKV0pO1xuICAgIH1cblxuICAgIC8vIENsZWFyIGVycm9ycyBvbiBuZXh0IHJlbmRlclxuICAgIHNldEVycm9ycyhbXSk7XG5cbiAgICByZXN0b3JlSW5wdXRWYWx1ZXMoZWxlbWVudCwgaW5wdXRWYWx1ZXNSZWYuY3VycmVudCk7XG5cbiAgICBjdXJyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIGFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG5cbiAgICAvLyBGb2N1cyBjYW4gb25seSBiZSByZXN0b3JlZCBhZnRlciB0aGUgRE9NIGlzIGF0dGFjaGVkLlxuICAgIHJlc3RvcmVBY3RpdmVFbGVtZW50SW5kZXgoZWxlbWVudCwgYWN0aXZlRWxlbWVudEluZGV4UmVmLmN1cnJlbnQpO1xuXG4gICAgc2V0TGFzdFJlbmRlcihEYXRlLm5vdygpKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBhY3RpdmVFbGVtZW50SW5kZXhSZWYuY3VycmVudCA9IHNhdmVBY3RpdmVFbGVtZW50SW5kZXgoZWxlbWVudCk7XG4gICAgICBpbnB1dFZhbHVlc1JlZi5jdXJyZW50ID0gc2F2ZUlucHV0VmFsdWVzKGVsZW1lbnQpO1xuXG4gICAgICBjdXJyZW50LnJlbW92ZUNoaWxkKGFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYuY3VycmVudCk7XG5cbiAgICAgIGFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbXG4gICAgYWRhcHRpdmVDYXJkLFxuICAgIGFkYXB0aXZlQ2FyZHNIb3N0Q29uZmlnLFxuICAgIGNvbnRlbnRSZWYsXG4gICAgR2xvYmFsU2V0dGluZ3MsXG4gICAgSG9zdENvbmZpZyxcbiAgICByZW5kZXJNYXJrZG93bkFzSFRNTCxcbiAgICBzZXRFcnJvcnMsXG4gICAgdGFwQWN0aW9uXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2V0IG9uRXhlY3V0ZUFjdGlvbiB3aXRob3V0IGNhdXNpbmcgdW5uZWNlc3NhcnkgcmUtcmVuZGVyLlxuICAgIGFkYXB0aXZlQ2FyZC5vbkV4ZWN1dGVBY3Rpb24gPSBkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGhhbmRsZUV4ZWN1dGVBY3Rpb247XG4gIH0sIFthZGFwdGl2ZUNhcmQsIGRpc2FibGVkLCBoYW5kbGVFeGVjdXRlQWN0aW9uXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IGZpeEFjY2Vzc2liaWxpdHlJc3N1ZXNXaXRoVW5kbyhhZGFwdGl2ZUNhcmRFbGVtZW50UmVmLmN1cnJlbnQpLCBbYWRhcHRpdmVDYXJkRWxlbWVudFJlZiwgbGFzdFJlbmRlcl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gSWYgdGhlIEFkYXB0aXZlIENhcmQgZ2V0IHJlLXJlbmRlcmVkLCByZS1kaXNhYmxlIGVsZW1lbnRzIGFzIG5lZWRlZC5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBkaXNhYmxlSW5wdXRFbGVtZW50c1dpdGhVbmRvKGFkYXB0aXZlQ2FyZEVsZW1lbnRSZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbYWRhcHRpdmVDYXJkRWxlbWVudFJlZiwgZGlzYWJsZWQsIGxhc3RSZW5kZXJdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIElmIHRoZSBBZGFwdGl2ZSBDYXJkIGNoYW5nZWQsIHJlc2V0IGFsbCBhY3Rpb25zIHBlcmZvcm1lZC5cbiAgICBzZXRBY3Rpb25zUGVyZm9ybWVkKFtdKTtcbiAgfSwgW2FkYXB0aXZlQ2FyZF0pO1xuXG4gIHVzZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgaW5kaWNhdGVBY3Rpb25TZWxlY3Rpb25XaXRoVW5kbyhcbiAgICAgICAgLy8gQWN0aW9ucyB0aGF0IGRvIG5vdCBoYXZlIFwicmVuZGVyZWRFbGVtZW50XCIgbWVhbnMgaXQgaXMgdGhlIEFkYXB0aXZlIENhcmQgaXRzZWxmLCBzdWNoIGFzIFwic2VsZWN0QWN0aW9uXCIgKEFDKSBvciBcInRhcEFjdGlvblwiIChyaWNoIGNhcmRzKS5cbiAgICAgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gbWFyayB0aGUgd2hvbGUgY2FyZCBhcyBwZXJmb3JtZWQuXG4gICAgICAgIGFjdGlvbnNQZXJmb3JtZWQubWFwKCh7IHJlbmRlcmVkRWxlbWVudCB9KSA9PiByZW5kZXJlZEVsZW1lbnQpLmZpbHRlcihyZW5kZXJlZEVsZW1lbnQgPT4gcmVuZGVyZWRFbGVtZW50KSxcbiAgICAgICAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lXG4gICAgICApLFxuICAgIFthY3Rpb25zUGVyZm9ybWVkLCBhY3Rpb25QZXJmb3JtZWRDbGFzc05hbWUsIGxhc3RSZW5kZXJdXG4gICk7XG5cbiAgcmV0dXJuIGVycm9ycy5sZW5ndGggPyAoXG4gICAgbm9kZV9lbnYgPT09ICdkZXZlbG9wbWVudCcgJiYgPEVycm9yQm94IGVycm9yPXtlcnJvcnNbMF19IHR5cGU9e2xvY2FsaXplKCdBREFQVElWRV9DQVJEX0VSUk9SX0JPWF9USVRMRV9SRU5ERVInKX0gLz5cbiAgKSA6IChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYWRhcHRpdmVDYXJkUmVuZGVyZXJTdHlsZVNldCArICcnLCAnd2ViY2hhdF9fYWRhcHRpdmUtY2FyZC1yZW5kZXJlcicpfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2tBbmRLZXlQcmVzc0ZvclRhcEFjdGlvbn1cbiAgICAgIG9uS2V5UHJlc3M9e2hhbmRsZUNsaWNrQW5kS2V5UHJlc3NGb3JUYXBBY3Rpb259XG4gICAgICByZWY9e2NvbnRlbnRSZWZ9XG4gICAgLz5cbiAgKTtcbn07XG5cbkFkYXB0aXZlQ2FyZFJlbmRlcmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lOiAnJyxcbiAgZGlzYWJsZWQ6IHVuZGVmaW5lZCxcbiAgdGFwQWN0aW9uOiB1bmRlZmluZWRcbn07XG5cbkFkYXB0aXZlQ2FyZFJlbmRlcmVyLnByb3BUeXBlcyA9IHtcbiAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhZGFwdGl2ZUNhcmQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8vIFR5cGVTY3JpcHQgY2xhc3MgaXMgbm90IG1hcHBhYmxlIHRvIFByb3BUeXBlcy5mdW5jXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0YXBBY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW1hZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBZGFwdGl2ZUNhcmRSZW5kZXJlcjtcbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DirectLineAnimationCard } from 'botframework-webchat-core';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
declare type AnimationCardContentProps = {
|
|
4
|
+
actionPerformedClassName?: string;
|
|
5
|
+
content: DirectLineAnimationCard;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
declare const AnimationCardContent: FC<AnimationCardContentProps>;
|
|
9
|
+
export default AnimationCardContent;
|
|
10
|
+
//# sourceMappingURL=AnimationCardContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnimationCardContent.d.ts","sourceRoot":"","sources":["../../../src/adaptiveCards/Attachment/AnimationCardContent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAOlC,aAAK,yBAAyB,GAAG;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,OAAO,EAAE,uBAAuB,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CAgBvD,CAAC;AAoBF,eAAe,oBAAoB,CAAC"}
|
|
@@ -73,4 +73,4 @@ AnimationCardContent.propTypes = {
|
|
|
73
73
|
};
|
|
74
74
|
var _default = AnimationCardContent;
|
|
75
75
|
exports.default = _default;
|
|
76
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGFwdGl2ZUNhcmRzL0F0dGFjaG1lbnQvQW5pbWF0aW9uQ2FyZENvbnRlbnQudHN4Il0sIm5hbWVzIjpbIkltYWdlQ29udGVudCIsIkNvbXBvbmVudHMiLCJWaWRlb0NvbnRlbnQiLCJ1c2VTdHlsZVNldCIsImhvb2tzIiwiQW5pbWF0aW9uQ2FyZENvbnRlbnQiLCJhY3Rpb25QZXJmb3JtZWRDbGFzc05hbWUiLCJjb250ZW50IiwiZGlzYWJsZWQiLCJtZWRpYSIsImFuaW1hdGlvbkNhcmRBdHRhY2htZW50U3R5bGVTZXQiLCJhbmltYXRpb25DYXJkQXR0YWNobWVudCIsIm1hcCIsImluZGV4IiwicHJvZmlsZSIsInVybCIsInRlc3QiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJzaGFwZSIsImFycmF5T2YiLCJpc1JlcXVpcmVkIiwiYm9vbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFQQTtBQVNBLElBQVFBLFlBQVIsR0FBdUNDLHdDQUF2QyxDQUFRRCxZQUFSO0FBQUEsSUFBc0JFLFlBQXRCLEdBQXVDRCx3Q0FBdkMsQ0FBc0JDLFlBQXRCO0FBQ0EsSUFBUUMsV0FBUixHQUF3QkMsbUNBQXhCLENBQVFELFdBQVI7O0FBUUEsSUFBTUUsb0JBQW1ELEdBQUcsU0FBdERBLG9CQUFzRCxPQUFxRDtBQUFBLE1BQWxEQyx3QkFBa0QsUUFBbERBLHdCQUFrRDtBQUFBLE1BQXhCQyxPQUF3QixRQUF4QkEsT0FBd0I7QUFBQSxNQUFmQyxRQUFlLFFBQWZBLFFBQWU7QUFDL0csdUJBQXVCRCxPQUF2QixDQUFRRSxLQUFSO0FBQUEsTUFBUUEsS0FBUiwrQkFBZ0IsRUFBaEI7O0FBQ0EscUJBQXVFTixXQUFXLEVBQWxGO0FBQUE7QUFBQSxNQUFrQ08sK0JBQWxDLG9CQUFTQyx1QkFBVDs7QUFFQSxzQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFFRDtBQUFoQixrQkFDRTtBQUFJLElBQUEsU0FBUyxFQUFDO0FBQWQsS0FDR0QsS0FBSyxDQUFDRyxHQUFOLENBQVUsaUJBQXdCQyxLQUF4QjtBQUFBLDhCQUFHQyxPQUFIO0FBQUEsUUFBR0EsT0FBSCw4QkFBYSxFQUFiO0FBQUEsUUFBaUJDLEdBQWpCLFNBQWlCQSxHQUFqQjtBQUFBLHdCQUNUO0FBQUksTUFBQSxHQUFHLEVBQUVGO0FBQVQsT0FDRyxVQUFXRyxJQUFYLENBQWdCRCxHQUFoQixpQkFBdUIsNkJBQUMsWUFBRDtBQUFjLE1BQUEsR0FBRyxFQUFFRCxPQUFuQjtBQUE0QixNQUFBLEdBQUcsRUFBRUM7QUFBakMsTUFBdkIsZ0JBQWtFLDZCQUFDLFlBQUQ7QUFBYyxNQUFBLEdBQUcsRUFBRUQsT0FBbkI7QUFBNEIsTUFBQSxHQUFHLEVBQUVDO0FBQWpDLE1BRHJFLENBRFM7QUFBQSxHQUFWLENBREgsQ0FERixlQVFFLDZCQUFDLG1CQUFEO0FBQVksSUFBQSx3QkFBd0IsRUFBRVQsd0JBQXRDO0FBQWdFLElBQUEsT0FBTyxFQUFFQyxPQUF6RTtBQUFrRixJQUFBLFFBQVEsRUFBRUM7QUFBNUYsSUFSRixDQURGO0FBWUQsQ0FoQkQ7O0FBa0JBSCxvQkFBb0IsQ0FBQ1ksWUFBckIsR0FBb0M7QUFDbENYLEVBQUFBLHdCQUF3QixFQUFFLEVBRFE7QUFFbENFLEVBQUFBLFFBQVEsRUFBRVU7QUFGd0IsQ0FBcEM7QUFLQWIsb0JBQW9CLENBQUNjLFNBQXJCLEdBQWlDO0FBQy9CYixFQUFBQSx3QkFBd0IsRUFBRWMsbUJBQVVDLE1BREw7QUFFL0JkLEVBQUFBLE9BQU8sRUFBRWEsbUJBQVVFLEtBQVYsQ0FBZ0I7QUFDdkJiLElBQUFBLEtBQUssRUFBRVcsbUJBQVVHLE9BQVYsQ0FDTEgsbUJBQVVFLEtBQVYsQ0FBZ0I7QUFDZFIsTUFBQUEsT0FBTyxFQUFFTSxtQkFBVUMsTUFETDtBQUVkTixNQUFBQSxHQUFHLEVBQUVLLG1CQUFVQyxNQUFWLENBQWlCRztBQUZSLEtBQWhCLENBREssRUFLTEE7QUFOcUIsR0FBaEIsRUFPTkEsVUFUNEI7QUFVL0JoQixFQUFBQSxRQUFRLEVBQUVZLG1CQUFVSztBQVZXLENBQWpDO2VBYWVwQixvQiIsInNvdXJjZVJvb3QiOiJidW5kbGU6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IHJlYWN0L25vLWFycmF5LWluZGV4LWtleTogXCJvZmZcIiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RMaW5lQW5pbWF0aW9uQ2FyZCB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWNvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50cywgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb21wb25lbnQnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBGQyB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IENvbW1vbkNhcmQgZnJvbSAnLi9Db21tb25DYXJkJztcblxuY29uc3QgeyBJbWFnZUNvbnRlbnQsIFZpZGVvQ29udGVudCB9ID0gQ29tcG9uZW50cztcbmNvbnN0IHsgdXNlU3R5bGVTZXQgfSA9IGhvb2tzO1xuXG50eXBlIEFuaW1hdGlvbkNhcmRDb250ZW50UHJvcHMgPSB7XG4gIGFjdGlvblBlcmZvcm1lZENsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGVudDogRGlyZWN0TGluZUFuaW1hdGlvbkNhcmQ7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEFuaW1hdGlvbkNhcmRDb250ZW50OiBGQzxBbmltYXRpb25DYXJkQ29udGVudFByb3BzPiA9ICh7IGFjdGlvblBlcmZvcm1lZENsYXNzTmFtZSwgY29udGVudCwgZGlzYWJsZWQgfSkgPT4ge1xuICBjb25zdCB7IG1lZGlhID0gW10gfSA9IGNvbnRlbnQ7XG4gIGNvbnN0IFt7IGFuaW1hdGlvbkNhcmRBdHRhY2htZW50OiBhbmltYXRpb25DYXJkQXR0YWNobWVudFN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXthbmltYXRpb25DYXJkQXR0YWNobWVudFN0eWxlU2V0fT5cbiAgICAgIDx1bCBjbGFzc05hbWU9XCJtZWRpYS1saXN0XCI+XG4gICAgICAgIHttZWRpYS5tYXAoKHsgcHJvZmlsZSA9ICcnLCB1cmwgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICA8bGkga2V5PXtpbmRleH0+XG4gICAgICAgICAgICB7L1xcLmdpZiQvaXUudGVzdCh1cmwpID8gPEltYWdlQ29udGVudCBhbHQ9e3Byb2ZpbGV9IHNyYz17dXJsfSAvPiA6IDxWaWRlb0NvbnRlbnQgYWx0PXtwcm9maWxlfSBzcmM9e3VybH0gLz59XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKSl9XG4gICAgICA8L3VsPlxuICAgICAgPENvbW1vbkNhcmQgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lPXthY3Rpb25QZXJmb3JtZWRDbGFzc05hbWV9IGNvbnRlbnQ9e2NvbnRlbnR9IGRpc2FibGVkPXtkaXNhYmxlZH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkFuaW1hdGlvbkNhcmRDb250ZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgYWN0aW9uUGVyZm9ybWVkQ2xhc3NOYW1lOiAnJyxcbiAgZGlzYWJsZWQ6IHVuZGVmaW5lZFxufTtcblxuQW5pbWF0aW9uQ2FyZENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBhY3Rpb25QZXJmb3JtZWRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaWE6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgcHJvZmlsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICAgIH0pXG4gICAgKS5pc1JlcXVpcmVkXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uQ2FyZENvbnRlbnQ7XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DirectLineAudioCard } from 'botframework-webchat-core';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
declare type AudioCardContentProps = {
|
|
4
|
+
actionPerformedClassName?: string;
|
|
5
|
+
content: DirectLineAudioCard;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
declare const AudioCardContent: FC<AudioCardContentProps>;
|
|
9
|
+
export default AudioCardContent;
|
|
10
|
+
//# sourceMappingURL=AudioCardContent.d.ts.map
|