botframework-webchat-component 4.15.0 → 4.15.2-main.20220413.d89850f
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/lib/Activity/CarouselLayout.js +3 -3
- package/lib/Activity/Speak.d.ts +2 -2
- package/lib/Activity/Speak.d.ts.map +1 -1
- package/lib/Activity/Speak.js +14 -7
- package/lib/Activity/StackedLayout.d.ts +5 -3
- package/lib/Activity/StackedLayout.d.ts.map +1 -1
- package/lib/Activity/StackedLayout.js +15 -20
- package/lib/Attachment/FileContent.js +2 -2
- package/lib/BasicSendBox.d.ts.map +1 -1
- package/lib/BasicSendBox.js +7 -8
- package/lib/BasicToast.js +1 -1
- package/lib/BasicToaster.js +1 -1
- package/lib/BasicTranscript.d.ts.map +1 -1
- package/lib/BasicTranscript.js +30 -15
- package/lib/BasicTypingIndicator.js +1 -1
- package/lib/Composer.js +3 -3
- package/lib/ConnectivityStatus/Connecting.js +1 -1
- package/lib/Dictation.js +1 -1
- package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +1 -1
- package/lib/Middleware/Activity/createCoreMiddleware.js +9 -12
- package/lib/Middleware/ActivityStatus/SendStatus/SendFailedRetry.js +1 -1
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts +2 -2
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.d.ts.map +1 -1
- package/lib/Middleware/ActivityStatus/SendStatus/SendStatus.js +4 -3
- package/lib/Middleware/ActivityStatus/Timestamp.d.ts +2 -2
- package/lib/Middleware/ActivityStatus/Timestamp.d.ts.map +1 -1
- package/lib/Middleware/ActivityStatus/Timestamp.js +4 -2
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +2 -2
- package/lib/ReactWebChat.js +2 -2
- package/lib/ScreenReaderActivity.js +1 -1
- package/lib/ScreenReaderText.js +1 -1
- package/lib/SendBox/AutoResizeTextArea.js +1 -1
- package/lib/SendBox/IconButton.js +1 -1
- package/lib/SendBox/MicrophoneButton.js +1 -1
- package/lib/SendBox/SendButton.js +1 -1
- package/lib/SendBox/SuggestedAction.js +2 -2
- package/lib/SendBox/SuggestedActions.js +2 -2
- package/lib/SendBox/TextBox.js +3 -3
- package/lib/SendBox/UploadButton.js +3 -3
- package/lib/Styles/StyleSet/Bubble.js +2 -2
- package/lib/Styles/StyleSet/CarouselFilmStrip.js +2 -2
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +2 -2
- package/lib/Styles/createStyleSet.d.ts +1 -1
- package/lib/Styles/createStyleSet.js +2 -2
- package/lib/Transcript/ActivityRow.d.ts +2 -2
- package/lib/Transcript/ActivityRow.d.ts.map +1 -1
- package/lib/Transcript/ActivityRow.js +4 -2
- package/lib/Transcript/ActivityTextAlt.js +1 -1
- package/lib/Transcript/FocusTrap.js +1 -1
- package/lib/Transcript/KeyboardHelp.js +1 -1
- package/lib/Transcript/LiveRegionTranscript.d.ts.map +1 -1
- package/lib/Transcript/LiveRegionTranscript.js +22 -7
- package/lib/Transcript/useActivityAccessibleName.d.ts +2 -2
- package/lib/Transcript/useActivityAccessibleName.d.ts.map +1 -1
- package/lib/Transcript/useActivityAccessibleName.js +2 -2
- package/lib/Transcript/useTypistNames.d.ts +3 -0
- package/lib/Transcript/useTypistNames.d.ts.map +1 -0
- package/lib/Transcript/useTypistNames.js +61 -0
- package/lib/Utils/AccessKeySink/Surface.js +1 -1
- package/lib/Utils/AccessibleButton.js +1 -1
- package/lib/Utils/AccessibleInputText.js +1 -1
- package/lib/Utils/AccessibleTextArea.js +1 -1
- package/lib/Utils/CroppedImage.js +1 -1
- package/lib/Utils/FocusRedirector.js +1 -1
- package/lib/Utils/InlineMarkdown.js +3 -3
- package/lib/Utils/TypeFocusSink/FocusBox.js +1 -1
- package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +2 -2
- package/lib/Utils/downscaleImageToDataURL/index.js +1 -1
- package/lib/Utils/getActivityUniqueId.js +1 -1
- package/lib/connectToWebChat.js +2 -2
- package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +3 -3
- package/lib/hooks/internal/useMemoize.d.ts +1 -1
- package/lib/hooks/internal/useMemoize.d.ts.map +1 -1
- package/lib/hooks/internal/useMemoize.js +1 -1
- package/lib/hooks/useObserveTranscriptFocus.d.ts +2 -2
- package/lib/hooks/useObserveTranscriptFocus.d.ts.map +1 -1
- package/lib/hooks/useObserveTranscriptFocus.js +1 -1
- package/lib/hooks/useSendFiles.d.ts.map +1 -1
- package/lib/hooks/useSendFiles.js +4 -4
- package/lib/index.d.ts +3 -3
- package/lib/index.js +5 -5
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +1 -1
- package/lib/providers/ActivityTree/ActivityTreeComposer.js +2 -2
- package/lib/providers/ActivityTree/private/types.d.ts +2 -2
- package/lib/providers/ActivityTree/private/types.d.ts.map +1 -1
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +2 -2
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +1 -1
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +1 -1
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +1 -1
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +1 -1
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +2 -0
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +1 -1
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +10 -6
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +1 -0
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +1 -1
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +22 -8
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +1 -1
- package/package.json +24 -20
- package/src/Activity/Speak.tsx +21 -18
- package/src/Activity/StackedLayout.tsx +20 -26
- package/src/Attachment/FileContent.tsx +1 -1
- package/src/BasicSendBox.tsx +3 -2
- package/src/BasicTranscript.tsx +29 -13
- package/src/Middleware/Activity/createCoreMiddleware.tsx +5 -10
- package/src/Middleware/ActivityStatus/SendStatus/SendStatus.tsx +5 -3
- package/src/Middleware/ActivityStatus/Timestamp.tsx +5 -3
- package/src/SendBox/SuggestedAction.tsx +1 -1
- package/src/SendBox/SuggestedActions.tsx +1 -1
- package/src/Transcript/ActivityRow.tsx +4 -5
- package/src/Transcript/ActivityTextAlt.tsx +2 -3
- package/src/Transcript/LiveRegionTranscript.tsx +27 -12
- package/src/Transcript/useActivityAccessibleName.ts +3 -4
- package/src/Transcript/useTypistNames.ts +37 -0
- package/src/Utils/getActivityUniqueId.ts +2 -2
- package/src/hooks/internal/useMemoize.ts +6 -6
- package/src/hooks/useObserveTranscriptFocus.ts +2 -2
- package/src/hooks/useSendFiles.ts +7 -5
- package/src/providers/ActivityTree/ActivityTreeComposer.tsx +2 -2
- package/src/providers/ActivityTree/private/types.ts +2 -2
- package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +4 -6
- package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +6 -11
- package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +10 -3
- package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +22 -6
- package/lib/Middleware/GroupActivities/createCoreMiddleware.js +0 -69
- package/src/Middleware/GroupActivities/createCoreMiddleware.js +0 -57
package/lib/BasicTranscript.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -83,9 +83,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
83
83
|
|
|
84
84
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
85
85
|
|
|
86
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
86
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
87
87
|
|
|
88
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
88
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
89
89
|
|
|
90
90
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
91
91
|
|
|
@@ -297,19 +297,23 @@ var InternalTranscript = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
|
|
|
297
297
|
if (scrollableElement && activityBoundingBoxElement) {
|
|
298
298
|
// ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
|
|
299
299
|
// eslint-disable-next-line prefer-destructuring
|
|
300
|
-
var
|
|
301
|
-
activityHeight = _activityBoundingBoxE.height,
|
|
302
|
-
activityY = _activityBoundingBoxE.y; // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
|
|
300
|
+
var activityBoundingBoxElementClientRect = activityBoundingBoxElement.getClientRects()[0]; // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
|
|
303
301
|
// eslint-disable-next-line prefer-destructuring
|
|
304
302
|
|
|
305
|
-
var
|
|
306
|
-
var activityOffsetTop = activityY + scrollableElement.scrollTop;
|
|
303
|
+
var scrollableElementClientRect = scrollableElement.getClientRects()[0]; // If either the activity or the transcript scrollable is not on DOM, we will not scroll the view.
|
|
307
304
|
|
|
308
|
-
|
|
305
|
+
if (activityBoundingBoxElementClientRect && scrollableElementClientRect) {
|
|
306
|
+
var activityHeight = activityBoundingBoxElementClientRect.height,
|
|
307
|
+
activityY = activityBoundingBoxElementClientRect.y;
|
|
308
|
+
var scrollableHeight = scrollableElementClientRect.height;
|
|
309
|
+
var activityOffsetTop = activityY + scrollableElement.scrollTop;
|
|
309
310
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
311
|
+
var _scrollTop = Math.min(activityOffsetTop, activityOffsetTop - scrollableHeight + activityHeight);
|
|
312
|
+
|
|
313
|
+
scrollToBottomScrollTo(_scrollTop, {
|
|
314
|
+
behavior: behavior
|
|
315
|
+
});
|
|
316
|
+
}
|
|
313
317
|
}
|
|
314
318
|
}
|
|
315
319
|
}, [activityElementMapRef, getKeyByActivityId, rootElementRef, scrollToBottomScrollTo]);
|
|
@@ -367,7 +371,13 @@ var InternalTranscript = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
|
|
|
367
371
|
var scrollableElement = rootElement.querySelector('.webchat__basic-transcript__scrollable'); // "getClientRects()" is not returning an array, thus, it is not destructurable.
|
|
368
372
|
// eslint-disable-next-line prefer-destructuring
|
|
369
373
|
|
|
370
|
-
var
|
|
374
|
+
var scrollableElementClientRect = scrollableElement.getClientRects()[0]; // If the scrollable is not mounted, we cannot measure which activity is in view. Thus, we will not fire any events.
|
|
375
|
+
|
|
376
|
+
if (!scrollableElementClientRect) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
var scrollableClientBottom = scrollableElementClientRect.bottom; // Find the activity just above scroll view bottom.
|
|
371
381
|
// If the scroll view is already on top, get the first activity.
|
|
372
382
|
|
|
373
383
|
var activityElements = Array.from(activityElementMapRef.current.entries());
|
|
@@ -376,7 +386,12 @@ var InternalTranscript = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref
|
|
|
376
386
|
var _ref8 = _slicedToArray(_ref7, 2),
|
|
377
387
|
element = _ref8[1];
|
|
378
388
|
|
|
379
|
-
|
|
389
|
+
// "getClientRects()" is not returning an array, thus, it is not destructurable.
|
|
390
|
+
// eslint-disable-next-line prefer-destructuring
|
|
391
|
+
var elementClientRect = element.getClientRects()[0]; // If the activity is not attached to DOM tree, we should not count it as "bottommost visible activity", as it is not visible.
|
|
392
|
+
|
|
393
|
+
// If the activity is not attached to DOM tree, we should not count it as "bottommost visible activity", as it is not visible.
|
|
394
|
+
return elementClientRect && elementClientRect.bottom < scrollableClientBottom + 1;
|
|
380
395
|
}) : activityElements[0]) === null || _ref6 === void 0 ? void 0 : _ref6[0]; // When the end-user slowly scrolling the view down, we will mark activity as read when the message fully appear on the screen.
|
|
381
396
|
|
|
382
397
|
activityKeyJustAboveScrollBottom && markActivityKeyAsRead(activityKeyJustAboveScrollBottom);
|
|
@@ -836,4 +851,4 @@ BasicTranscript.propTypes = {
|
|
|
836
851
|
};
|
|
837
852
|
var _default = BasicTranscript;
|
|
838
853
|
exports.default = _default;
|
|
839
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RyYW5zY3JpcHQudHN4Il0sIm5hbWVzIjpbInVzZUFjdGl2aXR5S2V5cyIsImhvb2tzIiwidXNlQWN0aXZpdHlLZXlzQnlSZWFkIiwidXNlQ3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsInVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyIiwidXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlciIsInVzZURpcmVjdGlvbiIsInVzZUdldEFjdGl2aXR5QnlLZXkiLCJ1c2VHZXRLZXlCeUFjdGl2aXR5IiwidXNlR2V0S2V5QnlBY3Rpdml0eUlkIiwidXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwidXNlTG9jYWxpemVyIiwidXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkIiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwidXNlU3R5bGVPcHRpb25zIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsImZsZXgiLCJvdmVyZmxvd1giLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsImxpc3RTdHlsZVR5cGUiLCJJbnRlcm5hbFRyYW5zY3JpcHQiLCJyZWYiLCJhY3Rpdml0eUVsZW1lbnRNYXBSZWYiLCJjbGFzc05hbWUiLCJiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCIsImJhc2ljVHJhbnNjcmlwdCIsImJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0IiwiYnViYmxlTnViT2Zmc2V0IiwiZ3JvdXBUaW1lc3RhbXAiLCJzaG93QXZhdGFySW5Hcm91cCIsImFjdGl2ZURlc2NlbmRhbnRJZCIsImFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSIsImRpcmVjdGlvbiIsImZvY3VzZWRBY3Rpdml0eUtleSIsImZvY3VzZWRFeHBsaWNpdGx5IiwiY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsImNyZWF0ZUF2YXRhclJlbmRlcmVyIiwiZm9jdXMiLCJmb2N1c0J5QWN0aXZpdHlLZXkiLCJmb2N1c1JlbGF0aXZlQWN0aXZpdHkiLCJnZXRBY3Rpdml0eUJ5S2V5IiwiZ2V0S2V5QnlBY3Rpdml0eSIsImdldEtleUJ5QWN0aXZpdHlJZCIsImxvY2FsaXplIiwicm9vdENsYXNzTmFtZSIsInJvb3RFbGVtZW50UmVmIiwidGVybWluYXRvckxhYmVsSWQiLCJ0ZXJtaW5hdG9yUmVmIiwiZm9jdXNlZEFjdGl2aXR5S2V5UmVmIiwiaGlkZUFsbFRpbWVzdGFtcHMiLCJ0ZXJtaW5hdG9yVGV4dCIsInRyYW5zY3JpcHRBcmlhTGFiZWwiLCJjYWxsYmFja1JlZiIsImVsZW1lbnQiLCJjdXJyZW50IiwicmVuZGVyaW5nRWxlbWVudHMiLCJ0b3BTaWRlQm90TnViIiwidG9wU2lkZVVzZXJOdWIiLCJmb3JFYWNoIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiZmlyc3RBY3Rpdml0eSIsImFjdGl2aXR5IiwicmVuZGVyQXZhdGFyIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzIiwiaW5kZXhXaXRoaW5TZW5kZXJHcm91cCIsImZpcnN0SW5TZW5kZXJHcm91cCIsImxhc3RJblNlbmRlckdyb3VwIiwibGVuZ3RoIiwiaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCIsInJlbmRlckFjdGl2aXR5IiwiZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwIiwia2V5IiwibGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJyZW5kZXJBY3Rpdml0eVN0YXR1cyIsIm5leHRWaXNpYmxlQWN0aXZpdHkiLCJ1bmRlZmluZWQiLCJ0b3BTaWRlTnViIiwiZnJvbSIsInJvbGUiLCJzaG93Q2FsbG91dCIsInB1c2giLCJhY3Rpdml0eUVsZW1lbnQiLCJzZXQiLCJkZWxldGUiLCJoaWRlVGltZXN0YW1wIiwic2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmQiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiRXJyb3IiLCJhY3Rpdml0eUlkIiwiYWN0aXZpdHlJRCIsInNjcm9sbFRvcCIsImFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZ2V0IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGFibGVFbGVtZW50IiwiZ2V0Q2xpZW50UmVjdHMiLCJhY3Rpdml0eUhlaWdodCIsImhlaWdodCIsImFjdGl2aXR5WSIsInkiLCJzY3JvbGxhYmxlSGVpZ2h0IiwiYWN0aXZpdHlPZmZzZXRUb3AiLCJNYXRoIiwibWluIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxSZWxhdGl2ZSIsImRpc3BsYWNlbWVudCIsInJvb3RFbGVtZW50Iiwic2Nyb2xsYWJsZSIsIm5leHRTY3JvbGxUb3AiLCJvZmZzZXRIZWlnaHQiLCJtYXgiLCJzY3JvbGxIZWlnaHQiLCJtYXJrQWN0aXZpdHlLZXlBc1JlYWQiLCJkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQiLCJoYW5kbGVTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGVDbGllbnRCb3R0b20iLCJib3R0b20iLCJhY3Rpdml0eUVsZW1lbnRzIiwiQXJyYXkiLCJlbnRyaWVzIiwiYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20iLCJyZXZlcnNlIiwiZmluZCIsImlkIiwiaGFuZGxlVHJhbnNjcmlwdEtleURvd24iLCJldmVudCIsInRhcmdldCIsImZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IiLCJmcm9tVHJhbnNjcmlwdCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVkIiwiSW5maW5pdHkiLCJib2R5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVUcmFuc2NyaXB0S2V5RG93bkNhcHR1cmUiLCJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsImRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSIsImhhbmRsZUZvY3VzIiwiaGFuZGxlRm9jdXNGaWxsZXIiLCJhbmRyb2lkIiwibWFwIiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic2hhcGUiLCJpbnN0YW5jZU9mIiwiTWFwIiwiaXNSZXF1aXJlZCIsInN0cmluZyIsIkludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGUiLCJjaGlsZHJlbiIsIm9uRm9jdXNGaWxsZXIiLCJhY3Rpdml0aWVzU3R5bGVTZXQiLCJhY3Rpdml0aWVzIiwiYW5pbWF0aW5nVG9FbmQiLCJhdEVuZCIsInVucmVhZEFjdGl2aXR5S2V5cyIsInN0aWNreSIsInN0eWxlT3B0aW9ucyIsIm1hcmtBbGxBc0Fja25vd2xlZGdlZCIsInByZXZTdGlja3kiLCJ0cmFuc2NyaXB0Um9sZURlc2NyaXB0aW9uIiwic3RpY2t5Q2hhbmdlZFRvVHJ1ZSIsImZsYXQiLCJmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIiLCJyZW5kZXJpbmdBY3Rpdml0eUtleXMiLCJyZW5kZXJpbmdBY3Rpdml0eUtleXNSZWYiLCJuZXh0VW5yZWFkQWN0aXZpdHlLZXlzIiwibmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZiIsInVucmVhZCIsInNvbWUiLCJpbmNsdWRlcyIsImhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2siLCJmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5IiwicmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24iLCJvbkNsaWNrIiwiUmVhY3QiLCJDaGlsZHJlbiIsImNvdW50IiwiYW55IiwiZnVuYyIsInVzZVNjcm9sbGVyIiwiYWN0aXZpdHlLZXlzIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwiYWN0aXZpdHlLZXlzUmVmIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmIiwic3R5bGVPcHRpb25zUmVmIiwiYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IiwiYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IiwiYXV0b1Njcm9sbFNuYXBPblBhZ2UiLCJhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2UiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IiwicGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IiwiYWN0aXZpdHlFbGVtZW50TWFwIiwidmFsdWVzIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXgiLCJpbmRleE9mIiwia2V5cyIsImZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCIsInNsaWNlIiwiYWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkiLCJpbmRleCIsIm50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCIsIm50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AiLCJvZmZzZXRUb3AiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50IiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wIiwiQmFzaWNUcmFuc2NyaXB0IiwiY29udGFpbmVyUmVmIiwic2Nyb2xsZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQVVBOztBQUNBOztBQUNBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFDRUEsZUFERixHQWVJQyw2QkFmSixDQUNFRCxlQURGO0FBQUEsSUFFRUUscUJBRkYsR0FlSUQsNkJBZkosQ0FFRUMscUJBRkY7QUFBQSxJQUdFQywrQkFIRixHQWVJRiw2QkFmSixDQUdFRSwrQkFIRjtBQUFBLElBSUVDLHVCQUpGLEdBZUlILDZCQWZKLENBSUVHLHVCQUpGO0FBQUEsSUFLRUMsa0NBTEYsR0FlSUosNkJBZkosQ0FLRUksa0NBTEY7QUFBQSxJQU1FQyxZQU5GLEdBZUlMLDZCQWZKLENBTUVLLFlBTkY7QUFBQSxJQU9FQyxtQkFQRixHQWVJTiw2QkFmSixDQU9FTSxtQkFQRjtBQUFBLElBUUVDLG1CQVJGLEdBZUlQLDZCQWZKLENBUUVPLG1CQVJGO0FBQUEsSUFTRUMscUJBVEYsR0FlSVIsNkJBZkosQ0FTRVEscUJBVEY7QUFBQSxJQVVFQyw4QkFWRixHQWVJVCw2QkFmSixDQVVFUyw4QkFWRjtBQUFBLElBV0VDLFlBWEYsR0FlSVYsNkJBZkosQ0FXRVUsWUFYRjtBQUFBLElBWUVDLHdCQVpGLEdBZUlYLDZCQWZKLENBWUVXLHdCQVpGO0FBQUEsSUFhRUMsd0JBYkYsR0FlSVosNkJBZkosQ0FhRVksd0JBYkY7QUFBQSxJQWNFQyxlQWRGLEdBZUliLDZCQWZKLENBY0VhLGVBZEY7QUFpQkEsSUFBTUMsVUFBVSxHQUFHO0FBQ2pCLGlDQUErQjtBQUM3QkMsSUFBQUEsT0FBTyxFQUFFLE1BRG9CO0FBRTdCQyxJQUFBQSxhQUFhLEVBQUUsUUFGYztBQUc3QkMsSUFBQUEsUUFBUSxFQUFFLFFBSG1CO0FBSTdCO0FBQ0E7QUFDQTtBQUNBQyxJQUFBQSxRQUFRLEVBQUUsVUFQbUI7QUFTN0IsNENBQXdDO0FBQ3RDQyxNQUFBQSxJQUFJLEVBQUU7QUFEZ0MsS0FUWDtBQWE3QixnREFBNEM7QUFDMUNKLE1BQUFBLE9BQU8sRUFBRSxNQURpQztBQUUxQ0MsTUFBQUEsYUFBYSxFQUFFLFFBRjJCO0FBRzFDSSxNQUFBQSxTQUFTLEVBQUUsUUFIK0I7QUFJMUNDLE1BQUFBLHVCQUF1QixFQUFFO0FBSmlCLEtBYmY7QUFvQjdCLGdEQUE0QztBQUMxQ0MsTUFBQUEsYUFBYSxFQUFFO0FBRDJCO0FBcEJmO0FBRGQsQ0FBbkI7QUFtREE7QUFDQSxJQUFNQyxrQkFBa0IsZ0JBQUcsdUJBQ3pCLGdCQUF1Q0MsR0FBdkMsRUFBK0M7QUFBQSxNQUE1Q0MscUJBQTRDLFFBQTVDQSxxQkFBNEM7QUFBQSxNQUFyQkMsU0FBcUIsUUFBckJBLFNBQXFCOztBQUM3QyxxQkFBdUQsNEJBQXZEO0FBQUE7QUFBQSxNQUEwQkMsdUJBQTFCLG9CQUFTQyxlQUFUOztBQUNBLHlCQUEwRmYsZUFBZSxFQUF6RztBQUFBO0FBQUE7QUFBQSxNQUFTZ0IsdUJBQVQsc0JBQVNBLHVCQUFUO0FBQUEsTUFBa0NDLGVBQWxDLHNCQUFrQ0EsZUFBbEM7QUFBQSxNQUFtREMsY0FBbkQsc0JBQW1EQSxjQUFuRDtBQUFBLE1BQW1FQyxpQkFBbkUsc0JBQW1FQSxpQkFBbkU7O0FBQ0EsOEJBQTZCLHFDQUE3QjtBQUFBO0FBQUEsTUFBT0Msa0JBQVA7O0FBQ0EsOEJBQW1DLDJDQUFuQztBQUFBO0FBQUEsTUFBT0Msd0JBQVA7O0FBQ0Esc0JBQW9CN0IsWUFBWSxFQUFoQztBQUFBO0FBQUEsTUFBTzhCLFNBQVA7O0FBQ0EsOEJBQTZCLHFDQUE3QjtBQUFBO0FBQUEsTUFBT0Msa0JBQVA7O0FBQ0EsOEJBQTRCLHFDQUE1QjtBQUFBO0FBQUEsTUFBT0MsaUJBQVA7O0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUdwQywrQkFBK0IsRUFBcEU7QUFDQSxNQUFNcUMsb0JBQW9CLEdBQUdwQyx1QkFBdUIsRUFBcEQ7QUFDQSxNQUFNcUMsS0FBSyxHQUFHLHdCQUFkO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcscUNBQTNCO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsd0NBQTlCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUdyQyxtQkFBbUIsRUFBNUM7QUFDQSxNQUFNc0MsZ0JBQWdCLEdBQUdyQyxtQkFBbUIsRUFBNUM7QUFDQSxNQUFNc0Msa0JBQWtCLEdBQUdyQyxxQkFBcUIsRUFBaEQ7QUFDQSxNQUFNc0MsUUFBUSxHQUFHcEMsWUFBWSxFQUE3QjtBQUNBLE1BQU1xQyxhQUFhLEdBQUcsd0NBQTBCakMsVUFBMUIsSUFBd0MsRUFBOUQ7QUFDQSxNQUFNa0MsY0FBYyxHQUFHLG9CQUF2QjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLDBCQUFZLDZDQUFaLENBQTFCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLG9CQUF0QjtBQUVBLE1BQU1DLHFCQUFxQixHQUFHLDBCQUFZZixrQkFBWixDQUE5QjtBQUNBLE1BQU1nQixpQkFBaUIsR0FBR3JCLGNBQWMsS0FBSyxLQUE3QztBQUNBLE1BQU1zQixjQUFjLEdBQUdQLFFBQVEsQ0FBQyw0QkFBRCxDQUEvQjtBQUNBLE1BQU1RLG1CQUFtQixHQUFHUixRQUFRLENBQUMsMkJBQUQsQ0FBcEM7QUFFQSxNQUFNUyxXQUFXLEdBQUcsd0JBQ2xCLFVBQUNDLE9BQUQsRUFBNkI7QUFDM0IsUUFBSSxPQUFPaEMsR0FBUCxLQUFlLFVBQW5CLEVBQStCO0FBQzdCQSxNQUFBQSxHQUFHLENBQUNnQyxPQUFELENBQUg7QUFDRCxLQUZELE1BRU87QUFDTGhDLE1BQUFBLEdBQUcsQ0FBQ2lDLE9BQUosR0FBY0QsT0FBZDtBQUNEOztBQUVEUixJQUFBQSxjQUFjLENBQUNTLE9BQWYsR0FBeUJELE9BQXpCO0FBQ0QsR0FUaUIsRUFVbEIsQ0FBQ2hDLEdBQUQsRUFBTXdCLGNBQU4sQ0FWa0IsQ0FBcEIsQ0EzQjZDLENBd0M3Qzs7QUFDQSxNQUFNVSxpQkFBaUIsR0FBRyxvQkFBUSxZQUFNO0FBQ3RDLFFBQU1BLGlCQUFxQyxHQUFHLEVBQTlDO0FBQ0EsUUFBTUMsYUFBYSxHQUFHLCtCQUFpQjdCLGVBQWpCLENBQXRCO0FBQ0EsUUFBTThCLGNBQWMsR0FBRywrQkFBaUIvQix1QkFBakIsQ0FBdkI7QUFFQUssSUFBQUEsd0JBQXdCLENBQUMyQixPQUF6QixDQUFpQyxVQUFBQyxxQkFBcUIsRUFBSTtBQUN4RCxpREFBd0NBLHFCQUF4QztBQUFBO0FBQUEsVUFBb0JDLGFBQXBCLDZCQUFVQyxRQUFWOztBQUNBLFVBQU1DLFlBQVksR0FBRzFCLG9CQUFvQixDQUFDO0FBQUV5QixRQUFBQSxRQUFRLEVBQUVEO0FBQVosT0FBRCxDQUF6QztBQUVBRCxNQUFBQSxxQkFBcUIsQ0FBQ0QsT0FBdEIsQ0FBOEIsVUFBQ0ssOEJBQUQsRUFBaUNDLHNCQUFqQyxFQUE0RDtBQUN4RixZQUFNQyxrQkFBa0IsR0FBRyxDQUFDRCxzQkFBNUI7QUFDQSxZQUFNRSxpQkFBaUIsR0FBR0Ysc0JBQXNCLEtBQUtMLHFCQUFxQixDQUFDUSxNQUF0QixHQUErQixDQUFwRjtBQUVBSixRQUFBQSw4QkFBOEIsQ0FBQ0wsT0FBL0IsQ0FBdUMsaUJBQStCVSwrQkFBL0IsRUFBbUU7QUFBQTs7QUFBQSxjQUFoRVAsUUFBZ0UsU0FBaEVBLFFBQWdFO0FBQUEsY0FBdERRLGNBQXNELFNBQXREQSxjQUFzRDtBQUN4RztBQUNBLGNBQU1DLDJCQUEyQixHQUFHLENBQUNGLCtCQUFyQztBQUNBLGNBQU1HLEdBQVcsR0FBRzlCLGdCQUFnQixDQUFDb0IsUUFBRCxDQUFwQztBQUNBLGNBQU1XLDBCQUEwQixHQUM5QkosK0JBQStCLEtBQUtMLDhCQUE4QixDQUFDSSxNQUEvQixHQUF3QyxDQUQ5RTtBQUVBLGNBQU1NLG9CQUFvQixHQUFHdEMsNEJBQTRCLENBQUM7QUFDeEQwQixZQUFBQSxRQUFRLEVBQVJBLFFBRHdEO0FBRXhEYSxZQUFBQSxtQkFBbUIsRUFBRUM7QUFGbUMsV0FBRCxDQUF6RDtBQUlBLGNBQU1DLFVBQVUsR0FBRyxtQkFBQWYsUUFBUSxDQUFDZ0IsSUFBVCxrRUFBZUMsSUFBZixNQUF3QixNQUF4QixHQUFpQ3JCLGNBQWpDLEdBQWtERCxhQUFyRTtBQUVBLGNBQUl1QixXQUFKLENBWndHLENBY3hHOztBQUNBLGNBQUlsRCxpQkFBaUIsS0FBSyxRQUExQixFQUFvQztBQUNsQyxnQkFBSStDLFVBQUosRUFBZ0I7QUFDZEcsY0FBQUEsV0FBVyxHQUFHZCxrQkFBa0IsSUFBSUssMkJBQXBDO0FBQ0QsYUFGRCxNQUVPO0FBQ0xTLGNBQUFBLFdBQVcsR0FBR2IsaUJBQWlCLElBQUlNLDBCQUFuQztBQUNEO0FBQ0YsV0FORCxNQU1PLElBQUkzQyxpQkFBaUIsS0FBSyxRQUExQixFQUFvQztBQUN6QyxnQkFBSStDLFVBQUosRUFBZ0I7QUFDZEcsY0FBQUEsV0FBVyxHQUFHVCwyQkFBZDtBQUNELGFBRkQsTUFFTztBQUNMUyxjQUFBQSxXQUFXLEdBQUdQLDBCQUFkO0FBQ0Q7QUFDRixXQU5NLE1BTUE7QUFDTE8sWUFBQUEsV0FBVyxHQUFHLElBQWQ7QUFDRDs7QUFFRHhCLFVBQUFBLGlCQUFpQixDQUFDeUIsSUFBbEIsQ0FBdUI7QUFDckJuQixZQUFBQSxRQUFRLEVBQVJBLFFBRHFCO0FBR3JCO0FBQ0FULFlBQUFBLFdBQVcsRUFBRSxxQkFBQTZCLGVBQWUsRUFBSTtBQUM5QkEsY0FBQUEsZUFBZSxHQUNYM0QscUJBQXFCLENBQUNnQyxPQUF0QixDQUE4QjRCLEdBQTlCLENBQWtDWCxHQUFsQyxFQUF1Q1UsZUFBdkMsQ0FEVyxHQUVYM0QscUJBQXFCLENBQUNnQyxPQUF0QixDQUE4QjZCLE1BQTlCLENBQXFDWixHQUFyQyxDQUZKO0FBR0QsYUFSb0I7QUFVckI7QUFDQTtBQUNBO0FBQ0FhLFlBQUFBLGFBQWEsRUFDWG5DLGlCQUFpQixJQUFJbUIsK0JBQStCLEtBQUtMLDhCQUE4QixDQUFDSSxNQUEvQixHQUF3QyxDQWQ5RTtBQWVyQkksWUFBQUEsR0FBRyxFQUFIQSxHQWZxQjtBQWdCckJGLFlBQUFBLGNBQWMsRUFBZEEsY0FoQnFCO0FBaUJyQkksWUFBQUEsb0JBQW9CLEVBQXBCQSxvQkFqQnFCO0FBa0JyQlgsWUFBQUEsWUFBWSxFQUFaQSxZQWxCcUI7QUFtQnJCaUIsWUFBQUEsV0FBVyxFQUFYQTtBQW5CcUIsV0FBdkI7QUFxQkQsU0FwREQ7QUFxREQsT0F6REQ7QUEwREQsS0E5REQ7QUFnRUEsV0FBT3hCLGlCQUFQO0FBQ0QsR0F0RXlCLEVBc0V2QixDQUNEakMscUJBREMsRUFFRFMsd0JBRkMsRUFHREwsdUJBSEMsRUFJREMsZUFKQyxFQUtEUSw0QkFMQyxFQU1EQyxvQkFOQyxFQU9ESyxnQkFQQyxFQVFEUSxpQkFSQyxFQVNEcEIsaUJBVEMsQ0F0RXVCLENBQTFCO0FBa0ZBLE1BQU13RCxzQkFBOEUsR0FBRyx1Q0FBdkY7QUFDQSxNQUFNQyx5QkFBOEQsR0FBRywwQ0FBdkU7QUFFQSxNQUFNQyxRQUFRLEdBQUcsd0JBQ2YsVUFBQ3hFLFFBQUQsRUFBNkU7QUFBQSxvRkFBUCxFQUFPO0FBQUEsK0JBQTlDeUUsUUFBOEM7QUFBQSxRQUE5Q0EsUUFBOEMsK0JBQW5DLE1BQW1DOztBQUMzRSxRQUFJLENBQUN6RSxRQUFMLEVBQWU7QUFDYixZQUFNLElBQUkwRSxLQUFKLENBQ0osK0ZBREksQ0FBTjtBQUdEOztBQUVELFFBQW9CQyxVQUFwQixHQUE4QzNFLFFBQTlDLENBQVE0RSxVQUFSO0FBQUEsUUFBZ0NDLFNBQWhDLEdBQThDN0UsUUFBOUMsQ0FBZ0M2RSxTQUFoQzs7QUFFQSxRQUFJLE9BQU9BLFNBQVAsS0FBcUIsV0FBekIsRUFBc0M7QUFDcENQLE1BQUFBLHNCQUFzQixDQUFDTyxTQUFELEVBQVk7QUFBRUosUUFBQUEsUUFBUSxFQUFSQTtBQUFGLE9BQVosQ0FBdEI7QUFDRCxLQUZELE1BRU8sSUFBSSxPQUFPRSxVQUFQLEtBQXNCLFdBQTFCLEVBQXVDO0FBQUE7O0FBQzVDLFVBQU1HLDBCQUEwQiw0QkFBR3ZFLHFCQUFxQixDQUFDZ0MsT0FBdEIsQ0FDaEN3QyxHQURnQyxDQUM1QnBELGtCQUFrQixDQUFDZ0QsVUFBRCxDQURVLENBQUgsMERBQUcsc0JBRS9CSyxhQUYrQixDQUVqQix3REFGaUIsQ0FBbkM7QUFJQSxVQUFNQyxpQkFBaUIsR0FBR25ELGNBQWMsQ0FBQ1MsT0FBZixDQUF1QnlDLGFBQXZCLENBQXFDLHdDQUFyQyxDQUExQjs7QUFFQSxVQUFJQyxpQkFBaUIsSUFBSUgsMEJBQXpCLEVBQXFEO0FBQ25EO0FBQ0E7QUFDQSxvQ0FBaURBLDBCQUEwQixDQUFDSSxjQUEzQixHQUE0QyxDQUE1QyxDQUFqRDtBQUFBLFlBQWdCQyxjQUFoQix5QkFBUUMsTUFBUjtBQUFBLFlBQW1DQyxTQUFuQyx5QkFBZ0NDLENBQWhDLENBSG1ELENBS25EO0FBQ0E7O0FBQ0EsWUFBZ0JDLGdCQUFoQixHQUFxQ04saUJBQWlCLENBQUNDLGNBQWxCLEdBQW1DLENBQW5DLENBQXJDLENBQVFFLE1BQVI7QUFDQSxZQUFNSSxpQkFBaUIsR0FBR0gsU0FBUyxHQUFHSixpQkFBaUIsQ0FBQ0osU0FBeEQ7O0FBRUEsWUFBTUEsVUFBUyxHQUFHWSxJQUFJLENBQUNDLEdBQUwsQ0FBU0YsaUJBQVQsRUFBNEJBLGlCQUFpQixHQUFHRCxnQkFBcEIsR0FBdUNKLGNBQW5FLENBQWxCOztBQUVBYixRQUFBQSxzQkFBc0IsQ0FBQ08sVUFBRCxFQUFZO0FBQUVKLFVBQUFBLFFBQVEsRUFBUkE7QUFBRixTQUFaLENBQXRCO0FBQ0Q7QUFDRjtBQUNGLEdBbENjLEVBbUNmLENBQUNsRSxxQkFBRCxFQUF3Qm9CLGtCQUF4QixFQUE0Q0csY0FBNUMsRUFBNER3QyxzQkFBNUQsQ0FuQ2UsQ0FBakI7QUFzQ0EsTUFBTXFCLFdBQVcsR0FBRyx3QkFDbEI7QUFBQSxXQUFNcEIseUJBQXlCLENBQUM7QUFBRUUsTUFBQUEsUUFBUSxFQUFFO0FBQVosS0FBRCxDQUEvQjtBQUFBLEdBRGtCLEVBRWxCLENBQUNGLHlCQUFELENBRmtCLENBQXBCO0FBS0EsTUFBTXFCLGNBQWMsR0FBRyx3QkFDckIsVUFBQzNFLFNBQUQsRUFBZ0Y7QUFBQSxvRkFBUCxFQUFPO0FBQUEsUUFBbkQ0RSxZQUFtRCxTQUFuREEsWUFBbUQ7O0FBQzlFLFFBQWlCQyxXQUFqQixHQUFpQ2hFLGNBQWpDLENBQVFTLE9BQVI7O0FBRUEsUUFBSSxDQUFDdUQsV0FBTCxFQUFrQjtBQUNoQjtBQUNEOztBQUVELFFBQU1DLFVBQXVCLEdBQUdELFdBQVcsQ0FBQ2QsYUFBWixDQUEwQix3Q0FBMUIsQ0FBaEM7QUFDQSxRQUFJZ0IsYUFBSjs7QUFFQSxRQUFJLE9BQU9ILFlBQVAsS0FBd0IsUUFBNUIsRUFBc0M7QUFDcEM7QUFDQUcsTUFBQUEsYUFBYSxHQUFHRCxVQUFVLENBQUNsQixTQUFYLEdBQXVCLENBQUM1RCxTQUFTLEtBQUssTUFBZCxHQUF1QixDQUF2QixHQUEyQixDQUFDLENBQTdCLElBQWtDNEUsWUFBekU7QUFDRCxLQUhELE1BR087QUFDTDtBQUNBRyxNQUFBQSxhQUFhLEdBQUdELFVBQVUsQ0FBQ2xCLFNBQVgsR0FBdUIsQ0FBQzVELFNBQVMsS0FBSyxNQUFkLEdBQXVCLENBQXZCLEdBQTJCLENBQUMsQ0FBN0IsSUFBa0M4RSxVQUFVLENBQUNFLFlBQXBGO0FBQ0Q7O0FBRUR6QixJQUFBQSxRQUFRLENBQ047QUFDRUssTUFBQUEsU0FBUyxFQUFFWSxJQUFJLENBQUNTLEdBQUwsQ0FBUyxDQUFULEVBQVlULElBQUksQ0FBQ0MsR0FBTCxDQUFTSyxVQUFVLENBQUNJLFlBQVgsR0FBMEJKLFVBQVUsQ0FBQ0UsWUFBOUMsRUFBNERELGFBQTVELENBQVo7QUFEYixLQURNLEVBSU47QUFBRXZCLE1BQUFBLFFBQVEsRUFBRTtBQUFaLEtBSk0sQ0FBUjtBQU1ELEdBekJvQixFQTBCckIsQ0FBQzNDLGNBQUQsRUFBaUIwQyxRQUFqQixDQTFCcUIsQ0FBdkIsQ0F6SzZDLENBc003QztBQUNBOztBQUNBLG9DQUFvQkEsUUFBcEI7QUFDQSx1Q0FBdUJtQixXQUF2QjtBQUNBLDBDQUEwQkMsY0FBMUI7QUFFQSxNQUFNUSxxQkFBcUIsR0FBRzNHLHdCQUF3QixFQUF0RDtBQUVBLE1BQU00RyxvQ0FBZ0YsR0FDcEYseUNBREYsQ0E5TTZDLENBaU43QztBQUNBOztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLHdCQUMzQixpQkFBMEM7QUFBQTs7QUFBQSxRQUF2Q3pCLFNBQXVDLFNBQXZDQSxTQUF1QztBQUN4QyxRQUFpQmlCLFdBQWpCLEdBQWlDaEUsY0FBakMsQ0FBUVMsT0FBUjs7QUFFQSxRQUFJLENBQUN1RCxXQUFMLEVBQWtCO0FBQ2hCO0FBQ0Q7O0FBRUQsUUFBTWIsaUJBQWlCLEdBQUdhLFdBQVcsQ0FBQ2QsYUFBWixDQUEwQix3Q0FBMUIsQ0FBMUIsQ0FQd0MsQ0FTeEM7QUFDQTs7QUFDQSxRQUFnQnVCLHNCQUFoQixHQUEyQ3RCLGlCQUFpQixDQUFDQyxjQUFsQixHQUFtQyxDQUFuQyxDQUEzQyxDQUFRc0IsTUFBUixDQVh3QyxDQWF4QztBQUNBOztBQUNBLFFBQU1DLGdCQUFnQixHQUFHQyxLQUFLLENBQUM1QyxJQUFOLENBQVd2RCxxQkFBcUIsQ0FBQ2dDLE9BQXRCLENBQThCb0UsT0FBOUIsRUFBWCxDQUF6QjtBQUNBLFFBQU1DLGdDQUFvRCxZQUN4RDNCLGlCQUFpQixDQUFDSixTQUFsQixHQUNJNEIsZ0JBQWdCLENBQ2JJLE9BREgsR0FFRTtBQUZGLEtBR0dDLElBSEgsQ0FHUTtBQUFBO0FBQUEsVUFBSXhFLE9BQUo7O0FBQUEsYUFBaUJBLE9BQU8sQ0FBQzRDLGNBQVIsR0FBeUIsQ0FBekIsRUFBNEJzQixNQUE1QixHQUFxQ0Qsc0JBQXNCLEdBQUcsQ0FBL0U7QUFBQSxLQUhSLENBREosR0FLSUUsZ0JBQWdCLENBQUMsQ0FBRCxDQU5vQywwQ0FBRyxNQU96RCxDQVB5RCxDQUE3RCxDQWhCd0MsQ0F5QnhDOztBQUNBRyxJQUFBQSxnQ0FBZ0MsSUFBSVIscUJBQXFCLENBQUNRLGdDQUFELENBQXpEOztBQUVBLFFBQUlQLG9DQUFKLEVBQTBDO0FBQ3hDLFVBQU12RCxRQUFRLEdBQUdyQixnQkFBZ0IsQ0FBQ21GLGdDQUFELENBQWpDO0FBRUFQLE1BQUFBLG9DQUFvQyxpQ0FBT3ZELFFBQVEsR0FBRztBQUFFOEIsUUFBQUEsVUFBVSxFQUFFOUIsUUFBUSxDQUFDaUU7QUFBdkIsT0FBSCxHQUFpQyxFQUFoRDtBQUFxRGxDLFFBQUFBLFNBQVMsRUFBVEE7QUFBckQsU0FBcEM7QUFDRDtBQUNGLEdBbEMwQixFQW1DM0IsQ0FDRXRFLHFCQURGLEVBRUU4RixvQ0FGRixFQUdFNUUsZ0JBSEYsRUFJRTJFLHFCQUpGLEVBS0V0RSxjQUxGLENBbkMyQixDQUE3QjtBQTRDQSxxREFBeUJ3RSxvQkFBekI7QUFFQSxNQUFNVSx1QkFBdUIsR0FBRyx3QkFDOUIsVUFBQUMsS0FBSyxFQUFJO0FBQ1AsUUFBUUMsTUFBUixHQUFtQkQsS0FBbkIsQ0FBUUMsTUFBUjtBQUVBLFFBQU1DLDRCQUE0QixHQUFHRCxNQUFNLEtBQUtsRixhQUFhLENBQUNPLE9BQTlEO0FBQ0EsUUFBTTZFLGNBQWMsR0FBR0YsTUFBTSxLQUFLRCxLQUFLLENBQUNJLGFBQXhDOztBQUVBLFFBQUksQ0FBQ0YsNEJBQUQsSUFBaUMsQ0FBQ0MsY0FBdEMsRUFBc0Q7QUFDcEQ7QUFDRDs7QUFFRCxRQUFJRSxPQUFPLEdBQUcsSUFBZDs7QUFFQSxZQUFRTCxLQUFLLENBQUN6RCxHQUFkO0FBQ0UsV0FBSyxXQUFMO0FBQ0VoQyxRQUFBQSxxQkFBcUIsQ0FBQzJGLDRCQUE0QixHQUFHLENBQUgsR0FBTyxDQUFwQyxDQUFyQjtBQUNBOztBQUVGLFdBQUssU0FBTDtBQUNFO0FBQ0EzRixRQUFBQSxxQkFBcUIsQ0FBQzJGLDRCQUE0QixHQUFHLENBQUgsR0FBTyxDQUFDLENBQXJDLENBQXJCO0FBQ0E7O0FBRUYsV0FBSyxLQUFMO0FBQ0UzRixRQUFBQSxxQkFBcUIsQ0FBQytGLFFBQUQsQ0FBckI7QUFDQTs7QUFFRixXQUFLLE9BQUw7QUFDRTtBQUNBO0FBQ0EsWUFBSSxDQUFDSiw0QkFBTCxFQUFtQztBQUFBOztBQUNqQyxjQUFNSyxJQUFpQiw2QkFBR2pILHFCQUFxQixDQUFDZ0MsT0FBdEIsQ0FDdkJ3QyxHQUR1QixDQUNuQjlDLHFCQUFxQixDQUFDTSxPQURILENBQUgsMkRBQUcsdUJBRXRCeUMsYUFGc0IsQ0FFUiwyQ0FGUSxDQUExQjtBQUlBLCtEQUFpQndDLElBQWpCLEVBQXVCLENBQXZCLDJFQUEyQmxHLEtBQTNCO0FBQ0Q7O0FBRUQ7O0FBRUYsV0FBSyxRQUFMO0FBQ0VBLFFBQUFBLEtBQUssQ0FBQyx3QkFBRCxDQUFMO0FBQ0E7O0FBRUYsV0FBSyxNQUFMO0FBQ0VFLFFBQUFBLHFCQUFxQixDQUFDLENBQUMrRixRQUFGLENBQXJCO0FBQ0E7O0FBRUY7QUFDRUQsUUFBQUEsT0FBTyxHQUFHLEtBQVY7QUFDQTtBQXJDSjs7QUF3Q0EsUUFBSUEsT0FBSixFQUFhO0FBQ1hMLE1BQUFBLEtBQUssQ0FBQ1EsY0FBTixHQURXLENBR1g7O0FBQ0FSLE1BQUFBLEtBQUssQ0FBQ1MsZUFBTjtBQUNEO0FBQ0YsR0EzRDZCLEVBNEQ5QixDQUFDbkgscUJBQUQsRUFBd0JlLEtBQXhCLEVBQStCVyxxQkFBL0IsRUFBc0RULHFCQUF0RCxFQUE2RVEsYUFBN0UsQ0E1RDhCLENBQWhDO0FBK0RBLE1BQU0yRiw4QkFBOEIsR0FBRyx3QkFDckMsVUFBQVYsS0FBSyxFQUFJO0FBQ1AsUUFBUVcsTUFBUixHQUFrRFgsS0FBbEQsQ0FBUVcsTUFBUjtBQUFBLFFBQWdCQyxPQUFoQixHQUFrRFosS0FBbEQsQ0FBZ0JZLE9BQWhCO0FBQUEsUUFBeUJyRSxHQUF6QixHQUFrRHlELEtBQWxELENBQXlCekQsR0FBekI7QUFBQSxRQUE4QnNFLE9BQTlCLEdBQWtEYixLQUFsRCxDQUE4QmEsT0FBOUI7QUFBQSxRQUF1Q1osTUFBdkMsR0FBa0RELEtBQWxELENBQXVDQyxNQUF2Qzs7QUFFQSxRQUFJVSxNQUFNLElBQUtDLE9BQU8sSUFBSXJFLEdBQUcsS0FBSyxHQUE5QixJQUFzQ3NFLE9BQXRDLElBQWtELENBQUMsNEJBQWN0RSxHQUFkLENBQUQsSUFBdUJBLEdBQUcsS0FBSyxXQUFyRixFQUFtRztBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNELEtBUk0sQ0FVUDs7O0FBQ0EsUUFBSTBELE1BQU0sS0FBS0QsS0FBSyxDQUFDSSxhQUFqQixJQUFrQ0gsTUFBTSxLQUFLbEYsYUFBYSxDQUFDTyxPQUEvRCxFQUF3RTtBQUN0RTBFLE1BQUFBLEtBQUssQ0FBQ1MsZUFBTjtBQUVBcEcsTUFBQUEsS0FBSyxDQUFDLFNBQUQsQ0FBTDtBQUNEO0FBQ0YsR0FqQm9DLEVBa0JyQyxDQUFDQSxLQUFELENBbEJxQyxDQUF2QztBQXFCQSwyQ0FBMkIsd0JBQVk7QUFBQSxXQUFNQyxrQkFBa0IsQ0FBQ3FDLFNBQUQsQ0FBeEI7QUFBQSxHQUFaLEVBQWlELENBQUNyQyxrQkFBRCxDQUFqRCxDQUEzQixFQXJWNkMsQ0F1VjdDOztBQUNBLE1BQU13RyxvQ0FBb0MsR0FBRyx1REFBN0MsQ0F4VjZDLENBMFY3QztBQUNBOztBQUNBLHNCQUNFO0FBQUEsV0FBTUEsb0NBQW9DLENBQUM1RyxpQkFBaUIsR0FBR0Qsa0JBQUgsR0FBd0IwQyxTQUExQyxDQUExQztBQUFBLEdBREYsRUFFRSxDQUFDbUUsb0NBQUQsRUFBdUM3RyxrQkFBdkMsRUFBMkRDLGlCQUEzRCxDQUZGLEVBNVY2QyxDQWlXN0M7O0FBQ0EsTUFBTTZHLFdBQVcsR0FBRyx5QkFDbEI7QUFDQTtBQUNBO0FBQUEsUUFBR1gsYUFBSCxTQUFHQSxhQUFIO0FBQUEsUUFBa0JILE1BQWxCLFNBQWtCQSxNQUFsQjtBQUFBLFdBQStCQSxNQUFNLEtBQUtHLGFBQVgsSUFBNEI5RixrQkFBa0IsQ0FBQyxJQUFELEVBQU8sS0FBUCxDQUE3RTtBQUFBLEdBSGtCLEVBSWxCLENBQUNBLGtCQUFELENBSmtCLENBQXBCLENBbFc2QyxDQXlXN0M7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTTBHLGlCQUFpQixHQUFHLHdCQUFZO0FBQUEsV0FBTTFHLGtCQUFrQixDQUFDcUMsU0FBRCxDQUF4QjtBQUFBLEdBQVosRUFBaUQsQ0FBQ3JDLGtCQUFELENBQWpELENBQTFCLENBN1c2QyxDQStXN0M7O0FBQ0EsdUNBQ0VPLGNBREYsRUFFRSx3QkFBWTtBQUFBLFdBQU1QLGtCQUFrQixDQUFDcUMsU0FBRCxDQUF4QjtBQUFBLEdBQVosRUFBaUQsQ0FBQ3JDLGtCQUFELENBQWpELENBRkY7QUFLQSxzQkFDRTtBQUNFO0FBQ0E7QUFDQSw2QkFBdUIyRyx5QkFBVXRFLFNBQVYsR0FBc0I3QyxrQkFIL0M7QUFJRSxrQkFBWXFCLG1CQUpkO0FBS0UsSUFBQSxTQUFTLEVBQUUseUJBQ1QsMkJBRFMsRUFFVDNCLHVCQUF1QixHQUFHLEVBRmpCLEVBR1RvQixhQUhTLEVBSVQsQ0FBQ3JCLFNBQVMsSUFBSSxFQUFkLElBQW9CLEVBSlgsQ0FMYjtBQVdFLElBQUEsR0FBRyxFQUFFUyxTQVhQO0FBWUUsSUFBQSxPQUFPLEVBQUUrRyxXQVpYO0FBYUUsSUFBQSxTQUFTLEVBQUVoQix1QkFiYjtBQWNFLElBQUEsZ0JBQWdCLEVBQUVXLDhCQWRwQjtBQWVFLElBQUEsR0FBRyxFQUFFdEYsV0FmUCxDQWdCRTtBQUNBO0FBakJGO0FBa0JFLElBQUEsSUFBSSxFQUFDLE9BbEJQLENBbUJFO0FBQ0E7QUFDQTtBQXJCRjtBQXNCRSxJQUFBLFFBQVEsRUFBRTtBQXRCWixrQkF3QkUsNkJBQUMsNkJBQUQ7QUFBc0IsSUFBQSxxQkFBcUIsRUFBRTlCO0FBQTdDLElBeEJGLGVBMkJFLDZCQUFDLDRCQUFEO0FBQThCLElBQUEsYUFBYSxFQUFFMEgsaUJBQTdDO0FBQWdFLElBQUEsYUFBYSxFQUFFakc7QUFBL0UsS0FDR1EsaUJBQWlCLENBQUMyRixHQUFsQixDQUNDO0FBQUEsUUFDRXJGLFFBREYsVUFDRUEsUUFERjtBQUFBLFFBRUVULFdBRkYsVUFFRUEsV0FGRjtBQUFBLFFBR0VnQyxhQUhGLFVBR0VBLGFBSEY7QUFBQSxRQUlFYixHQUpGLFVBSUVBLEdBSkY7QUFBQSxRQUtFRixjQUxGLFVBS0VBLGNBTEY7QUFBQSxRQU1FSSxvQkFORixVQU1FQSxvQkFORjtBQUFBLFFBT0VYLFlBUEYsVUFPRUEsWUFQRjtBQUFBLFFBUUVpQixXQVJGLFVBUUVBLFdBUkY7QUFBQSx3QkFVRSw2QkFBQyxvQkFBRDtBQUFhLE1BQUEsUUFBUSxFQUFFbEIsUUFBdkI7QUFBaUMsTUFBQSxHQUFHLEVBQUVVLEdBQXRDO0FBQTJDLE1BQUEsR0FBRyxFQUFFbkI7QUFBaEQsT0FDR2lCLGNBQWMsQ0FBQztBQUNkZSxNQUFBQSxhQUFhLEVBQWJBLGFBRGM7QUFFZFgsTUFBQUEsb0JBQW9CLEVBQXBCQSxvQkFGYztBQUdkWCxNQUFBQSxZQUFZLEVBQVpBLFlBSGM7QUFJZGlCLE1BQUFBLFdBQVcsRUFBWEE7QUFKYyxLQUFELENBRGpCLENBVkY7QUFBQSxHQURELENBREgsQ0EzQkYsRUFrREcsQ0FBQyxDQUFDeEIsaUJBQWlCLENBQUNZLE1BQXBCLGlCQUNDLDZCQUFDLGVBQUQscUJBQ0UsNkJBQUMsd0JBQUQ7QUFBaUIsSUFBQSxXQUFXLEVBQUV0QjtBQUE5QixJQURGLGVBRUU7QUFDRSxtQkFBYSxJQURmO0FBRUUsdUJBQWlCQyxpQkFGbkI7QUFHRSxJQUFBLFNBQVMsRUFBQyx1Q0FIWjtBQUlFLElBQUEsR0FBRyxFQUFFQyxhQUpQO0FBS0UsSUFBQSxJQUFJLEVBQUMsTUFMUDtBQU1FLElBQUEsUUFBUSxFQUFFO0FBTlosa0JBUUU7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLGtCQUdFO0FBQUssSUFBQSxTQUFTLEVBQUMsNENBQWY7QUFBNEQsSUFBQSxFQUFFLEVBQUVEO0FBQWhFLEtBQ0dJLGNBREgsQ0FIRixDQVJGLENBRkYsQ0FuREosZUF1RUU7QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLElBdkVGLENBREY7QUEyRUQsQ0FqY3dCLENBQTNCO0FBb2NBOUIsa0JBQWtCLENBQUMrSCxZQUFuQixHQUFrQztBQUNoQzVILEVBQUFBLFNBQVMsRUFBRTtBQURxQixDQUFsQztBQUlBSCxrQkFBa0IsQ0FBQ2dJLFNBQW5CLEdBQStCO0FBQzdCO0FBQ0E7QUFDQTlILEVBQUFBLHFCQUFxQixFQUFFK0gsbUJBQVVDLEtBQVYsQ0FBZ0I7QUFDckNoRyxJQUFBQSxPQUFPLEVBQUUrRixtQkFBVUUsVUFBVixDQUFxQkMsR0FBckI7QUFENEIsR0FBaEIsRUFFcEJDLFVBTDBCO0FBTTdCbEksRUFBQUEsU0FBUyxFQUFFOEgsbUJBQVVLO0FBTlEsQ0FBL0I7O0FBZUE7QUFDQSxJQUFNQyw0QkFBbUUsR0FBRyxTQUF0RUEsNEJBQXNFLFNBSXRFO0FBQUEsTUFISkMsUUFHSSxVQUhKQSxRQUdJO0FBQUEsTUFGSkMsYUFFSSxVQUZKQSxhQUVJO0FBQUEsTUFESjlHLGFBQ0ksVUFESkEsYUFDSTs7QUFDSixzQkFBNkMsNEJBQTdDO0FBQUE7QUFBQSxNQUFxQitHLGtCQUFyQixvQkFBU0MsVUFBVDs7QUFDQSwyQkFBb0MsNkNBQXBDO0FBQUE7QUFBQSxNQUFPQyxjQUFQOztBQUNBLGtCQUEyQixvQ0FBM0I7QUFBQTtBQUFBLE1BQU9DLEtBQVA7O0FBQ0EsOEJBQStCbksscUJBQXFCLEVBQXBEO0FBQUE7QUFBQSxNQUFTb0ssa0JBQVQ7O0FBQ0EsbUJBQTRCLHFDQUE1QjtBQUFBO0FBQUEsTUFBT0MsTUFBUDs7QUFDQSwwQkFBdUJ6SixlQUFlLEVBQXRDO0FBQUE7QUFBQSxNQUFPMEosWUFBUDs7QUFDQSxNQUFNOUgsa0JBQWtCLEdBQUcscUNBQTNCO0FBQ0EsTUFBTUssUUFBUSxHQUFHcEMsWUFBWSxFQUE3QjtBQUNBLE1BQU00RyxxQkFBcUIsR0FBRzNHLHdCQUF3QixFQUF0RDtBQUNBLE1BQU02SixxQkFBcUIsR0FBRzVKLHdCQUF3QixFQUF0RDtBQUNBLE1BQU1pRyxXQUFnRCxHQUFHLDBDQUF6RDtBQUVBLE1BQU00RCxVQUFVLEdBQUcsMEJBQVlILE1BQVosQ0FBbkI7QUFDQSxNQUFNSSx5QkFBeUIsR0FBRzVILFFBQVEsQ0FBQywwQkFBRCxDQUExQztBQUVBLE1BQU02SCxtQkFBbUIsR0FBR0YsVUFBVSxLQUFLSCxNQUFmLElBQXlCQSxNQUFyRCxDQWhCSSxDQWtCSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUNFO0FBQUEsV0FDRUssbUJBQW1CLElBQ25CO0FBQ0E7QUFDQTtBQUNBSCxJQUFBQSxxQkFBcUIsRUFMdkI7QUFBQSxHQURGLEVBT0UsQ0FBQ0EscUJBQUQsRUFBd0JHLG1CQUF4QixDQVBGOztBQVVBLCtCQUE0QywwQ0FBNEI7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQVIsR0FBNUIsQ0FBNUM7QUFBQTtBQUFBLE1BQU9DLGlDQUFQOztBQUNBLE1BQU1qSSxnQkFBZ0IsR0FBR3JDLG1CQUFtQixFQUE1QztBQUVBLE1BQU11SyxxQkFBK0IsR0FBRyxvQkFDdEM7QUFBQSxXQUFNRCxpQ0FBaUMsQ0FBQ3hCLEdBQWxDLENBQXNDO0FBQUEsVUFBR3JGLFFBQUgsVUFBR0EsUUFBSDtBQUFBLGFBQWtCcEIsZ0JBQWdCLENBQUNvQixRQUFELENBQWxDO0FBQUEsS0FBdEMsQ0FBTjtBQUFBLEdBRHNDLEVBRXRDLENBQUM2RyxpQ0FBRCxFQUFvQ2pJLGdCQUFwQyxDQUZzQyxDQUF4QztBQUtBLE1BQU1tSSx3QkFBd0IsR0FBRywwQkFBWUQscUJBQVosQ0FBakMsQ0EzREksQ0E2REo7QUFDQTs7QUFDQSxNQUFNRSxzQkFBc0IsR0FBRyxvQkFBUSxZQUFNO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLFFBQUlWLE1BQU0sSUFBSUQsa0JBQWtCLENBQUMvRixNQUFqQyxFQUF5QztBQUN2Q2dELE1BQUFBLHFCQUFxQixDQUFDK0Msa0JBQWtCLENBQUNBLGtCQUFrQixDQUFDL0YsTUFBbkIsR0FBNEIsQ0FBN0IsQ0FBbkIsQ0FBckI7QUFFQSxhQUFPLEVBQVA7QUFDRDs7QUFFRCxXQUFPK0Ysa0JBQVA7QUFDRCxHQVg4QixFQVc1QixDQUFDL0MscUJBQUQsRUFBd0JnRCxNQUF4QixFQUFnQ0Qsa0JBQWhDLENBWDRCLENBQS9CO0FBYUEsTUFBTVkseUJBQXlCLEdBQUcsMEJBQVlELHNCQUFaLENBQWxDLENBNUVJLENBOEVKO0FBQ0E7QUFDQTs7QUFDQSxNQUFNRSxNQUFNLEdBQUcsb0JBQ2I7QUFBQSxXQUFNRixzQkFBc0IsQ0FBQ0csSUFBdkIsQ0FBNEIsVUFBQXpHLEdBQUc7QUFBQSxhQUFJb0cscUJBQXFCLENBQUNNLFFBQXRCLENBQStCMUcsR0FBL0IsQ0FBSjtBQUFBLEtBQS9CLENBQU47QUFBQSxHQURhLEVBRWIsQ0FBQ29HLHFCQUFELEVBQXdCRSxzQkFBeEIsQ0FGYSxDQUFmO0FBS0EsTUFBTUssNEJBQTRCLEdBQUcsd0JBQVksWUFBTTtBQUNyRHhFLElBQUFBLFdBQVcsQ0FBQztBQUFFbEIsTUFBQUEsUUFBUSxFQUFFO0FBQVosS0FBRCxDQUFYO0FBRUEsUUFBaUJtRixxQkFBakIsR0FBMkNDLHdCQUEzQyxDQUFRdEgsT0FBUixDQUhxRCxDQUtyRDs7QUFDQSxRQUFNNkgsK0JBQStCLEdBQUdMLHlCQUF5QixDQUFDeEgsT0FBMUIsQ0FBa0N1RSxJQUFsQyxDQUF1QyxVQUFBdEQsR0FBRztBQUFBLGFBQ2hGb0cscUJBQXFCLENBQUNNLFFBQXRCLENBQStCMUcsR0FBL0IsQ0FEZ0Y7QUFBQSxLQUExQyxDQUF4Qzs7QUFJQSxRQUFJNEcsK0JBQUosRUFBcUM7QUFDbkM3SSxNQUFBQSxrQkFBa0IsQ0FBQzZJLCtCQUFELENBQWxCO0FBQ0QsS0FGRCxNQUVPO0FBQUE7O0FBQ0w7QUFDQSwrQkFBQXBJLGFBQWEsQ0FBQ08sT0FBZCxnRkFBdUJqQixLQUF2QjtBQUNEO0FBQ0YsR0FoQm9DLEVBZ0JsQyxDQUFDQyxrQkFBRCxFQUFxQndJLHlCQUFyQixFQUFnREYsd0JBQWhELEVBQTBFbEUsV0FBMUUsRUFBdUYzRCxhQUF2RixDQWhCa0MsQ0FBckM7QUFrQkEsTUFBTXFJLHVCQUF1QixHQUFHbkwsa0NBQWtDLEdBQUc7QUFDbkVnSyxJQUFBQSxLQUFLLEVBQUVELGNBQWMsSUFBSUMsS0FBbEIsSUFBMkJFLE1BRGlDO0FBRW5FQyxJQUFBQSxZQUFZLEVBQVpBLFlBRm1FO0FBR25FVyxJQUFBQSxNQUFNLEVBQU5BO0FBSG1FLEdBQUgsQ0FBbEU7QUFNQSxzQkFDRSw2QkFBQyxjQUFELENBQU8sUUFBUCxRQUNHSyx1QkFBdUIsSUFBSUEsdUJBQXVCLENBQUM7QUFBRUMsSUFBQUEsT0FBTyxFQUFFSDtBQUFYLEdBQUQsQ0FEckQsRUFFRyxDQUFDLENBQUNJLGVBQU1DLFFBQU4sQ0FBZUMsS0FBZixDQUFxQjVCLFFBQXJCLENBQUYsaUJBQW9DLDZCQUFDLHdCQUFEO0FBQWlCLElBQUEsV0FBVyxFQUFFN0c7QUFBOUIsSUFGdkMsZUFHRSw2QkFBQywwQkFBRDtBQUEwQixJQUFBLFNBQVMsRUFBQztBQUFwQyxrQkFDRTtBQUFLLG1CQUFhLElBQWxCO0FBQXdCLElBQUEsU0FBUyxFQUFDLG1DQUFsQztBQUFzRSxJQUFBLE9BQU8sRUFBRThHO0FBQS9FLElBREYsZUFFRTtBQUNFLDRCQUFzQlUseUJBRHhCO0FBRUUsSUFBQSxTQUFTLEVBQUUseUJBQVdULGtCQUFrQixHQUFHLEVBQWhDLEVBQW9DLHVDQUFwQyxDQUZiO0FBR0UsSUFBQSxJQUFJLEVBQUM7QUFIUCxLQUtHRixRQUxILENBRkYsZUFTRSw2QkFBQyw2QkFBRCxPQVRGLENBSEYsQ0FERjtBQWlCRCxDQW5JRDs7QUFxSUFELDRCQUE0QixDQUFDUCxTQUE3QixHQUF5QztBQUN2Q1EsRUFBQUEsUUFBUSxFQUFFUCxtQkFBVW9DLEdBQVYsQ0FBY2hDLFVBRGU7QUFFdkNJLEVBQUFBLGFBQWEsRUFBRVIsbUJBQVVxQyxJQUFWLENBQWVqQyxVQUZTO0FBR3ZDMUcsRUFBQUEsYUFBYSxFQUFFc0csbUJBQVVvQyxHQUFWLENBQWNoQztBQUhVLENBQXpDOztBQVFBO0FBQ0EsSUFBTWtDLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNySyxxQkFBRCxFQUEyRTtBQUM3Rix5QkFBdUIxQixlQUFlLEVBQXRDO0FBQUE7QUFBQSxNQUFPZ00sWUFBUDs7QUFDQSw4QkFBc0N0TCw4QkFBOEIsRUFBcEU7QUFBQTtBQUFBLE1BQU91TCwyQkFBUDs7QUFDQSwwQkFBdUJuTCxlQUFlLEVBQXRDO0FBQUE7QUFBQSxNQUFPMEosWUFBUDs7QUFFQSxNQUFNMEIsZUFBZSxHQUFHLDBCQUFZRixZQUFaLENBQXhCO0FBQ0EsTUFBTUcsOEJBQThCLEdBQUcsMEJBQVlGLDJCQUFaLENBQXZDO0FBQ0EsTUFBTUcsZUFBZSxHQUFHLDBCQUFZNUIsWUFBWixDQUF4QjtBQUVBLFNBQU8sd0JBQ0wsa0JBQWlDO0FBQUEsUUFBOUJwRCxZQUE4QixVQUE5QkEsWUFBOEI7QUFBQSxRQUFoQnBCLFNBQWdCLFVBQWhCQSxTQUFnQjtBQUMvQixnQ0FPSW9HLGVBUEosQ0FDRTFJLE9BREY7QUFBQSxRQUVJMkksd0JBRkoseUJBRUlBLHdCQUZKO0FBQUEsUUFHSUMsOEJBSEoseUJBR0lBLDhCQUhKO0FBQUEsUUFJSUMsb0JBSkoseUJBSUlBLG9CQUpKO0FBQUEsUUFLSUMsMEJBTEoseUJBS0lBLDBCQUxKO0FBU0EsUUFBTUMsK0JBQStCLEdBQ25DLE9BQU9KLHdCQUFQLEtBQW9DLFFBQXBDLEdBQ0l6RixJQUFJLENBQUNTLEdBQUwsQ0FBUyxDQUFULEVBQVlnRix3QkFBWixDQURKLEdBRUlBLHdCQUF3QixHQUN4QixDQUR3QixHQUV4QixDQUxOO0FBTUEsUUFBTUssMkJBQTJCLEdBQy9CLE9BQU9ILG9CQUFQLEtBQWdDLFFBQWhDLEdBQ0kzRixJQUFJLENBQUNTLEdBQUwsQ0FBUyxDQUFULEVBQVlULElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWTBGLG9CQUFaLENBQVosQ0FESixHQUVJQSxvQkFBb0IsR0FDcEIsQ0FEb0IsR0FFcEIsQ0FMTjtBQU1BLFFBQU1JLHFDQUFxQyxHQUN6QyxPQUFPTCw4QkFBUCxLQUEwQyxRQUExQyxHQUFxREEsOEJBQXJELEdBQXNGLENBRHhGO0FBRUEsUUFBTU0saUNBQWlDLEdBQ3JDLE9BQU9KLDBCQUFQLEtBQXNDLFFBQXRDLEdBQWlEQSwwQkFBakQsR0FBOEUsQ0FEaEY7O0FBR0EsUUFBSUMsK0JBQStCLElBQUlDLDJCQUF2QyxFQUFvRTtBQUNsRSxVQUFpQkcsa0JBQWpCLEdBQXdDbkwscUJBQXhDLENBQVFnQyxPQUFSO0FBQ0EsVUFBaUJzSSxhQUFqQixHQUFrQ0UsZUFBbEMsQ0FBUXhJLE9BQVI7QUFDQSxVQUFpQnVJLDRCQUFqQixHQUFpREUsOEJBQWpELENBQVF6SSxPQUFSO0FBQ0EsVUFBTW9KLE1BQWdCLEdBQUcsRUFBekI7O0FBRUEsVUFBTUMsZ0NBQWdDLEdBQUdmLGFBQVksQ0FBQ2dCLE9BQWIsQ0FBcUJmLDRCQUFyQixDQUF6Qzs7QUFFQSxVQUFJLENBQUNjLGdDQUFMLEVBQXVDO0FBQ3JDO0FBQ0E7QUFDQSxZQUFNaEMscUJBQXFCLEdBQUdsRCxLQUFLLENBQUM1QyxJQUFOLENBQVc0SCxrQkFBa0IsQ0FBQ0ksSUFBbkIsRUFBWCxDQUE5QjtBQUNBLFlBQUlDLHVDQUF1QyxHQUFHLENBQUMsQ0FBL0M7O0FBSnFDLG1EQU1DbEIsYUFBWSxDQUFDbUIsS0FBYixDQUFtQixDQUFuQixFQUFzQkosZ0NBQWdDLEdBQUcsQ0FBekQsRUFBNEQvRSxPQUE1RCxFQU5EO0FBQUE7O0FBQUE7QUFNckMsOERBQTZHO0FBQUEsZ0JBQWxHb0YsdUJBQWtHO0FBQzNHLGdCQUFNQyxLQUFLLEdBQUd0QyxxQkFBcUIsQ0FBQ2lDLE9BQXRCLENBQThCSSx1QkFBOUIsQ0FBZDs7QUFFQSxnQkFBSSxDQUFDQyxLQUFMLEVBQVk7QUFDVixrQkFBSUEsS0FBSyxLQUFLdEMscUJBQXFCLENBQUN4RyxNQUF0QixHQUErQixDQUE3QyxFQUFnRDtBQUM5QzJJLGdCQUFBQSx1Q0FBdUMsR0FBR0csS0FBSyxHQUFHLENBQWxEO0FBQ0Q7O0FBRUQ7QUFDRDtBQUNGO0FBaEJvQztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWtCckMsWUFBSSxDQUFDSCx1Q0FBTCxFQUE4QztBQUM1QyxjQUFNdEYsZ0JBQWdCLEdBQUdDLEtBQUssQ0FBQzVDLElBQU4sQ0FBVzRILGtCQUFrQixDQUFDQyxNQUFuQixFQUFYLENBQXpCOztBQUVBLGNBQUlMLCtCQUFKLEVBQXFDO0FBQ25DO0FBQ0EsZ0JBQU1hLGdDQUFnQyxHQUNwQzFGLGdCQUFnQixDQUFDc0YsdUNBQXVDLEdBQUdULCtCQUExQyxHQUE0RSxDQUE3RSxDQURsQjs7QUFHQSxnQkFBSWEsZ0NBQUosRUFBc0M7QUFDcEMsa0JBQU1DLDJDQUEyQyxHQUFHRCxnQ0FBSCxhQUFHQSxnQ0FBSCx1QkFBR0EsZ0NBQWdDLENBQUVuSCxhQUFsQyxDQUNsRCx3REFEa0QsQ0FBcEQ7QUFHQSxrQkFBTXFILGtDQUFrQyxHQUN0Q0YsZ0NBQWdDLENBQUNHLFNBQWpDLEdBQTZDRiwyQ0FBMkMsQ0FBQ0UsU0FEM0Y7QUFHQVgsY0FBQUEsTUFBTSxDQUFDMUgsSUFBUCxDQUNFb0ksa0NBQWtDLEdBQ2hDRCwyQ0FBMkMsQ0FBQ25HLFlBRDlDLEdBRUVBLFlBRkYsR0FHRXBCLFNBSEYsR0FJRTJHLHFDQUxKO0FBT0Q7QUFDRjs7QUFFRCxjQUFJRCwyQkFBSixFQUFpQztBQUMvQixnQkFBTWdCLGtDQUFrQyxHQUFHOUYsZ0JBQWdCLENBQUMsQ0FBQ3NGLHVDQUFGLENBQTNEO0FBQ0EsZ0JBQU1TLDZDQUE2QyxHQUFHRCxrQ0FBa0MsQ0FBQ3ZILGFBQW5DLENBQ3BELHdEQURvRCxDQUF0RDtBQUdBLGdCQUFNeUgsb0NBQW9DLEdBQ3hDRixrQ0FBa0MsQ0FBQ0QsU0FBbkMsR0FBK0NFLDZDQUE2QyxDQUFDRixTQUQvRjtBQUdBWCxZQUFBQSxNQUFNLENBQUMxSCxJQUFQLENBQ0V3SSxvQ0FBb0MsR0FDbEM1SCxTQURGLEdBRUVvQixZQUFZLElBQUksSUFBSXNGLDJCQUFSLENBRmQsR0FHRUUsaUNBSko7QUFNRDtBQUNGO0FBQ0Y7O0FBRUQsYUFBT2hHLElBQUksQ0FBQ0MsR0FBTCxPQUFBRCxJQUFJLEVBQVFrRyxNQUFSLENBQVg7QUFDRDs7QUFFRCxXQUFPcEUsUUFBUDtBQUNELEdBckdJLEVBc0dMLENBQUNoSCxxQkFBRCxFQUF3QndLLGVBQXhCLEVBQXlDQyw4QkFBekMsRUFBeUVDLGVBQXpFLENBdEdLLENBQVA7QUF3R0QsQ0FqSEQ7O0FBdUhBLElBQU15QixlQUEwQyxHQUFHLFNBQTdDQSxlQUE2QyxTQUFtQjtBQUFBLE1BQWhCbE0sU0FBZ0IsVUFBaEJBLFNBQWdCO0FBQ3BFLE1BQU1ELHFCQUFxQixHQUFHLG1CQUEyQixJQUFJa0ksR0FBSixFQUEzQixDQUE5QjtBQUNBLE1BQU1rRSxZQUFZLEdBQUcsb0JBQXJCO0FBRUEsTUFBTUMsUUFBUSxHQUFHaEMsV0FBVyxDQUFDcksscUJBQUQsQ0FBNUI7QUFFQSxzQkFDRSw2QkFBQyxnQ0FBRDtBQUF5QixJQUFBLFlBQVksRUFBRW9NO0FBQXZDLGtCQUNFLDZCQUFDLDZCQUFEO0FBQTZCLElBQUEsUUFBUSxFQUFFQztBQUF2QyxrQkFDRSw2QkFBQyxxQkFBRCxPQURGLGVBRUUsNkJBQUMsa0JBQUQ7QUFBb0IsSUFBQSxxQkFBcUIsRUFBRXJNLHFCQUEzQztBQUFrRSxJQUFBLFNBQVMsRUFBRUMsU0FBN0U7QUFBd0YsSUFBQSxHQUFHLEVBQUVtTTtBQUE3RixJQUZGLENBREYsQ0FERjtBQVFELENBZEQ7O0FBZ0JBRCxlQUFlLENBQUN0RSxZQUFoQixHQUErQjtBQUM3QjVILEVBQUFBLFNBQVMsRUFBRTtBQURrQixDQUEvQjtBQUlBa00sZUFBZSxDQUFDckUsU0FBaEIsR0FBNEI7QUFDMUI3SCxFQUFBQSxTQUFTLEVBQUU4SCxtQkFBVUs7QUFESyxDQUE1QjtlQUllK0QsZSIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIgYXMgUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyLFxuICBQYW5lbCBhcyBSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwsXG4gIHVzZUFuaW1hdGluZ1RvRW5kLFxuICB1c2VBdEVuZCxcbiAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICB1c2VTY3JvbGxUbyxcbiAgdXNlU2Nyb2xsVG9FbmQsXG4gIHVzZVN0aWNreVxufSBmcm9tICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUNvbXBvbmVudEZhY3RvcnksIEF2YXRhckNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUVsZW1lbnRNYXAgfSBmcm9tICcuL1RyYW5zY3JpcHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBEaXJlY3RMaW5lQWN0aXZpdHkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcbmltcG9ydCB0eXBlIHsgRkMsIEtleWJvYXJkRXZlbnRIYW5kbGVyLCBNdXRhYmxlUmVmT2JqZWN0LCBSZWFjdE5vZGUsIFZGQyB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgYW5kcm9pZCB9IGZyb20gJy4vVXRpbHMvZGV0ZWN0QnJvd3Nlcic7XG5pbXBvcnQgQWN0aXZpdHlSb3cgZnJvbSAnLi9UcmFuc2NyaXB0L0FjdGl2aXR5Um93JztcbmltcG9ydCBCYXNpY1R5cGluZ0luZGljYXRvciBmcm9tICcuL0Jhc2ljVHlwaW5nSW5kaWNhdG9yJztcbmltcG9ydCBGb2N1c1JlZGlyZWN0b3IgZnJvbSAnLi9VdGlscy9Gb2N1c1JlZGlyZWN0b3InO1xuaW1wb3J0IGlucHV0dGFibGVLZXkgZnJvbSAnLi9VdGlscy9UeXBlRm9jdXNTaW5rL2lucHV0dGFibGVLZXknO1xuaW1wb3J0IGlzWmVyb09yUG9zaXRpdmUgZnJvbSAnLi9VdGlscy9pc1plcm9PclBvc2l0aXZlJztcbmltcG9ydCBLZXlib2FyZEhlbHAgZnJvbSAnLi9UcmFuc2NyaXB0L0tleWJvYXJkSGVscCc7XG5pbXBvcnQgTGl2ZVJlZ2lvblRyYW5zY3JpcHQgZnJvbSAnLi9UcmFuc2NyaXB0L0xpdmVSZWdpb25UcmFuc2NyaXB0Jztcbi8vIFRPRE86IFtQMl0gIzQxMzMgUmVuYW1lIHRvIFwiZ2V0VGFiYmFibGVFbGVtZW50c1wiLlxuaW1wb3J0IHRhYmJhYmxlRWxlbWVudHMgZnJvbSAnLi9VdGlscy90YWJiYWJsZUVsZW1lbnRzJztcbmltcG9ydCBUcmFuc2NyaXB0Rm9jdXNDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXInO1xuaW1wb3J0IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlQWN0aXZlRGVzY2VuZGFudElkJztcbmltcG9ydCB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIgZnJvbSAnLi9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL3VzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcic7XG5pbXBvcnQgdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbiBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24nO1xuaW1wb3J0IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSc7XG5pbXBvcnQgdXNlRm9jdXMgZnJvbSAnLi9ob29rcy91c2VGb2N1cyc7XG5pbXBvcnQgdXNlRm9jdXNCeUFjdGl2aXR5S2V5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c0J5QWN0aXZpdHlLZXknO1xuaW1wb3J0IHVzZUZvY3VzZWRBY3Rpdml0eUtleSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEFjdGl2aXR5S2V5JztcbmltcG9ydCB1c2VGb2N1c2VkRXhwbGljaXRseSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEV4cGxpY2l0bHknO1xuaW1wb3J0IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5JztcbmltcG9ydCB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VQcmV2aW91cyc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUnO1xuaW1wb3J0IHVzZVJlZ2lzdGVyU2Nyb2xsVG8gZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlclNjcm9sbFRvJztcbmltcG9ydCB1c2VSZWdpc3RlclNjcm9sbFRvRW5kIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VVbmlxdWVJZCc7XG5pbXBvcnQgdXNlVmFsdWVSZWYgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VWYWx1ZVJlZic7XG5cbmNvbnN0IHtcbiAgdXNlQWN0aXZpdHlLZXlzLFxuICB1c2VBY3Rpdml0eUtleXNCeVJlYWQsXG4gIHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gIHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICB1c2VEaXJlY3Rpb24sXG4gIHVzZUdldEFjdGl2aXR5QnlLZXksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHlJZCxcbiAgdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5LFxuICB1c2VMb2NhbGl6ZXIsXG4gIHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkLFxuICB1c2VTdHlsZU9wdGlvbnNcbn0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgXCJwb3NpdGlvbjogcmVsYXRpdmVcIiBoZXJlIHRvIGZvcm0gYW5vdGhlciBzdGFja2luZyBjb250ZXh0IGZvciB0aGUgc2Nyb2xsLXRvLWVuZCBidXR0b24uXG4gICAgLy8gU3RhY2tpbmcgY29udGV4dCBoZWxwIGlzb2xhdGluZyBlbGVtZW50cyB0aGF0IHVzZSBcInotaW5kZXhcIiBmcm9tIGdsb2JhbCBwb2xsdXRpb24uXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Qb3NpdGlvbmluZy9VbmRlcnN0YW5kaW5nX3pfaW5kZXgvVGhlX3N0YWNraW5nX2NvbnRleHRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19maWxsZXInOiB7XG4gICAgICBmbGV4OiAxXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3RyYW5zY3JpcHQnOiB7XG4gICAgICBsaXN0U3R5bGVUeXBlOiAnbm9uZSdcbiAgICB9XG4gIH1cbn07XG5cbnR5cGUgUmVuZGVyaW5nRWxlbWVudCA9IHtcbiAgYWN0aXZpdHk6IERpcmVjdExpbmVBY3Rpdml0eSAmIHtcbiAgICBjaGFubmVsRGF0YT86IHtcbiAgICAgIFsnd2ViY2hhdDpmYWxsYmFjay10ZXh0J106IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBjYWxsYmFja1JlZjogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xuICBoaWRlVGltZXN0YW1wOiBib29sZWFuO1xuICBrZXk6IHN0cmluZztcbiAgcmVuZGVyQWN0aXZpdHk6IEV4Y2x1ZGU8UmV0dXJuVHlwZTxBY3Rpdml0eUNvbXBvbmVudEZhY3Rvcnk+LCBmYWxzZT47XG4gIHJlbmRlckFjdGl2aXR5U3RhdHVzOiAocHJvcHM6IHsgaGlkZVRpbWVzdGFtcD86IGJvb2xlYW4gfSkgPT4gUmVhY3ROb2RlO1xuICByZW5kZXJBdmF0YXI6IEF2YXRhckNvbXBvbmVudEZhY3Rvcnk7XG4gIHNob3dDYWxsb3V0OiBib29sZWFuO1xufTtcblxudHlwZSBTY3JvbGxCZWhhdmlvciA9ICdhdXRvJyB8ICdzbW9vdGgnO1xudHlwZSBTY3JvbGxUb09wdGlvbnMgPSB7IGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfTtcbnR5cGUgU2Nyb2xsVG9Qb3NpdGlvbiA9IHsgYWN0aXZpdHlJRD86IHN0cmluZzsgc2Nyb2xsVG9wPzogbnVtYmVyIH07XG5cbnR5cGUgSW50ZXJuYWxUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogTXV0YWJsZVJlZk9iamVjdDxBY3Rpdml0eUVsZW1lbnRNYXA+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG4vLyBUT0RPOiBbUDFdICM0MTMzIEFkZCB0ZWxlbWV0cnkgZm9yIGNvbXB1dGluZyBob3cgbWFueSByZS1yZW5kZXIgZG9uZSBzbyBmYXIuXG5jb25zdCBJbnRlcm5hbFRyYW5zY3JpcHQgPSBmb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBJbnRlcm5hbFRyYW5zY3JpcHRQcm9wcz4oXG4gICh7IGFjdGl2aXR5RWxlbWVudE1hcFJlZiwgY2xhc3NOYW1lIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IFt7IGJhc2ljVHJhbnNjcmlwdDogYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICAgIGNvbnN0IFt7IGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LCBidWJibGVOdWJPZmZzZXQsIGdyb3VwVGltZXN0YW1wLCBzaG93QXZhdGFySW5Hcm91cCB9XSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICAgIGNvbnN0IFthY3RpdmVEZXNjZW5kYW50SWRdID0gdXNlQWN0aXZlRGVzY2VuZGFudElkKCk7XG4gICAgY29uc3QgW2FjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZV0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoKTtcbiAgICBjb25zdCBbZGlyZWN0aW9uXSA9IHVzZURpcmVjdGlvbigpO1xuICAgIGNvbnN0IFtmb2N1c2VkQWN0aXZpdHlLZXldID0gdXNlRm9jdXNlZEFjdGl2aXR5S2V5KCk7XG4gICAgY29uc3QgW2ZvY3VzZWRFeHBsaWNpdGx5XSA9IHVzZUZvY3VzZWRFeHBsaWNpdGx5KCk7XG4gICAgY29uc3QgY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciA9IHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIoKTtcbiAgICBjb25zdCBjcmVhdGVBdmF0YXJSZW5kZXJlciA9IHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyKCk7XG4gICAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cygpO1xuICAgIGNvbnN0IGZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZUZvY3VzQnlBY3Rpdml0eUtleSgpO1xuICAgIGNvbnN0IGZvY3VzUmVsYXRpdmVBY3Rpdml0eSA9IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSgpO1xuICAgIGNvbnN0IGdldEFjdGl2aXR5QnlLZXkgPSB1c2VHZXRBY3Rpdml0eUJ5S2V5KCk7XG4gICAgY29uc3QgZ2V0S2V5QnlBY3Rpdml0eSA9IHVzZUdldEtleUJ5QWN0aXZpdHkoKTtcbiAgICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5SWQgPSB1c2VHZXRLZXlCeUFjdGl2aXR5SWQoKTtcbiAgICBjb25zdCBsb2NhbGl6ZSA9IHVzZUxvY2FsaXplcigpO1xuICAgIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgY29uc3QgdGVybWluYXRvckxhYmVsSWQgPSB1c2VVbmlxdWVJZCgnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci1sYWJlbCcpO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBjb25zdCBmb2N1c2VkQWN0aXZpdHlLZXlSZWYgPSB1c2VWYWx1ZVJlZihmb2N1c2VkQWN0aXZpdHlLZXkpO1xuICAgIGNvbnN0IGhpZGVBbGxUaW1lc3RhbXBzID0gZ3JvdXBUaW1lc3RhbXAgPT09IGZhbHNlO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JUZXh0ID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfVEVSTUlOQVRPUl9URVhUJyk7XG4gICAgY29uc3QgdHJhbnNjcmlwdEFyaWFMYWJlbCA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfTEFCRUxfQUxUJyk7XG5cbiAgICBjb25zdCBjYWxsYmFja1JlZiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVmKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvb3RFbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgfSxcbiAgICAgIFtyZWYsIHJvb3RFbGVtZW50UmVmXVxuICAgICk7XG5cbiAgICAvLyBGbGF0dGVuIHRoZSB0cmVlIGJhY2sgaW50byBhbiBhcnJheSB3aXRoIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gcmVuZGVyaW5nLlxuICAgIGNvbnN0IHJlbmRlcmluZ0VsZW1lbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCByZW5kZXJpbmdFbGVtZW50czogUmVuZGVyaW5nRWxlbWVudFtdID0gW107XG4gICAgICBjb25zdCB0b3BTaWRlQm90TnViID0gaXNaZXJvT3JQb3NpdGl2ZShidWJibGVOdWJPZmZzZXQpO1xuICAgICAgY29uc3QgdG9wU2lkZVVzZXJOdWIgPSBpc1plcm9PclBvc2l0aXZlKGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0KTtcblxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLmZvckVhY2goZW50cmllc1dpdGhTYW1lU2VuZGVyID0+IHtcbiAgICAgICAgY29uc3QgW1t7IGFjdGl2aXR5OiBmaXJzdEFjdGl2aXR5IH1dXSA9IGVudHJpZXNXaXRoU2FtZVNlbmRlcjtcbiAgICAgICAgY29uc3QgcmVuZGVyQXZhdGFyID0gY3JlYXRlQXZhdGFyUmVuZGVyZXIoeyBhY3Rpdml0eTogZmlyc3RBY3Rpdml0eSB9KTtcblxuICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXIuZm9yRWFjaCgoZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLCBpbmRleFdpdGhpblNlbmRlckdyb3VwKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlyc3RJblNlbmRlckdyb3VwID0gIWluZGV4V2l0aGluU2VuZGVyR3JvdXA7XG4gICAgICAgICAgY29uc3QgbGFzdEluU2VuZGVyR3JvdXAgPSBpbmRleFdpdGhpblNlbmRlckdyb3VwID09PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXIubGVuZ3RoIC0gMTtcblxuICAgICAgICAgIGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5mb3JFYWNoKCh7IGFjdGl2aXR5LCByZW5kZXJBY3Rpdml0eSB9LCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwKSA9PiB7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNob3cgdGhlIHRpbWVzdGFtcCBhdCB0aGUgZW5kIG9mIHRoZSBzZW5kZXIgZ3JvdXAuIEJ1dCB3ZSBhbHdheXMgc2hvdyB0aGUgXCJTZW5kIGZhaWxlZCwgcmV0cnlcIiBwcm9tcHQuXG4gICAgICAgICAgICBjb25zdCBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPSAhaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cCA9XG4gICAgICAgICAgICAgIGluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPT09IGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyQWN0aXZpdHlTdGF0dXMgPSBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIG5leHRWaXNpYmxlQWN0aXZpdHk6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB0b3BTaWRlTnViID0gYWN0aXZpdHkuZnJvbT8ucm9sZSA9PT0gJ3VzZXInID8gdG9wU2lkZVVzZXJOdWIgOiB0b3BTaWRlQm90TnViO1xuXG4gICAgICAgICAgICBsZXQgc2hvd0NhbGxvdXQ6IGJvb2xlYW47XG5cbiAgICAgICAgICAgIC8vIERlcGVuZGluZyBvbiB0aGUgXCJzaG93QXZhdGFySW5Hcm91cFwiIHNldHRpbmcsIHRoZSBhdmF0YXIgd2lsbCByZW5kZXIgaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cbiAgICAgICAgICAgIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3NlbmRlcicpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJHcm91cCAmJiBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBsYXN0SW5TZW5kZXJHcm91cCAmJiBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaG93QXZhdGFySW5Hcm91cCA9PT0gJ3N0YXR1cycpIHtcbiAgICAgICAgICAgICAgaWYgKHRvcFNpZGVOdWIpIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGZpcnN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGxhc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlcmluZ0VsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICBhY3Rpdml0eSxcblxuICAgICAgICAgICAgICAvLyBBZnRlciB0aGUgZWxlbWVudCBpcyBtb3VudGVkLCBzZXQgaXQgdG8gYWN0aXZpdHlFbGVtZW50c1JlZi5cbiAgICAgICAgICAgICAgY2FsbGJhY2tSZWY6IGFjdGl2aXR5RWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHlFbGVtZW50XG4gICAgICAgICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LnNldChrZXksIGFjdGl2aXR5RWxlbWVudClcbiAgICAgICAgICAgICAgICAgIDogYWN0aXZpdHlFbGVtZW50TWFwUmVmLmN1cnJlbnQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgLy8gXCJoaWRlVGltZXN0YW1wXCIgaXMgYSByZW5kZXItdGltZSBwYXJhbWV0ZXIgZm9yIHJlbmRlckFjdGl2aXR5U3RhdHVzKCkuXG4gICAgICAgICAgICAgIC8vIElmIHRydWUsIGl0IHdpbGwgaGlkZSB0aGUgdGltZXN0YW1wLCBidXQgaXQgd2lsbCBjb250aW51ZSB0byBzaG93IHRoZVxuICAgICAgICAgICAgICAvLyByZXRyeSBwcm9tcHQuIEFuZCBzaG93IHRoZSBzY3JlZW4gcmVhZGVyIHZlcnNpb24gb2YgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgaGlkZVRpbWVzdGFtcDpcbiAgICAgICAgICAgICAgICBoaWRlQWxsVGltZXN0YW1wcyB8fCBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwICE9PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHlTdGF0dXMsXG4gICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgc2hvd0NhbGxvdXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVuZGVyaW5nRWxlbWVudHM7XG4gICAgfSwgW1xuICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlLFxuICAgICAgYnViYmxlRnJvbVVzZXJOdWJPZmZzZXQsXG4gICAgICBidWJibGVOdWJPZmZzZXQsXG4gICAgICBjcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyLFxuICAgICAgY3JlYXRlQXZhdGFyUmVuZGVyZXIsXG4gICAgICBnZXRLZXlCeUFjdGl2aXR5LFxuICAgICAgaGlkZUFsbFRpbWVzdGFtcHMsXG4gICAgICBzaG93QXZhdGFySW5Hcm91cFxuICAgIF0pO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUbzogKHNjcm9sbFRvcDogbnVtYmVyLCBvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG8oKTtcbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kOiAob3B0aW9ucz86IFNjcm9sbFRvT3B0aW9ucykgPT4gdm9pZCA9IHVzZVNjcm9sbFRvRW5kKCk7XG5cbiAgICBjb25zdCBzY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHBvc2l0aW9uOiBTY3JvbGxUb1Bvc2l0aW9uLCB7IGJlaGF2aW9yID0gJ2F1dG8nIH06IFNjcm9sbFRvT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IEZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVNjcm9sbFRvXCIgbXVzdCBiZSBhIFNjcm9sbFBvc2l0aW9uIG9iamVjdC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgYWN0aXZpdHlJRDogYWN0aXZpdHlJZCwgc2Nyb2xsVG9wIH0gPSBwb3NpdGlvbjtcblxuICAgICAgICBpZiAodHlwZW9mIHNjcm9sbFRvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aXZpdHlJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50XG4gICAgICAgICAgICAuZ2V0KGdldEtleUJ5QWN0aXZpdHlJZChhY3Rpdml0eUlkKSlcbiAgICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RFbGVtZW50UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcblxuICAgICAgICAgIGlmIChzY3JvbGxhYmxlRWxlbWVudCAmJiBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCkge1xuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodDogYWN0aXZpdHlIZWlnaHQsIHk6IGFjdGl2aXR5WSB9ID0gYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodDogc2Nyb2xsYWJsZUhlaWdodCB9ID0gc2Nyb2xsYWJsZUVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5T2Zmc2V0VG9wID0gYWN0aXZpdHlZICsgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBNYXRoLm1pbihhY3Rpdml0eU9mZnNldFRvcCwgYWN0aXZpdHlPZmZzZXRUb3AgLSBzY3JvbGxhYmxlSGVpZ2h0ICsgYWN0aXZpdHlIZWlnaHQpO1xuXG4gICAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBnZXRLZXlCeUFjdGl2aXR5SWQsIHJvb3RFbGVtZW50UmVmLCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxUb0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gc2Nyb2xsVG9Cb3R0b21TY3JvbGxUb0VuZCh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KSxcbiAgICAgIFtzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxSZWxhdGl2ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGRpcmVjdGlvbjogJ2Rvd24nIHwgJ3VwJywgeyBkaXNwbGFjZW1lbnQgfTogeyBkaXNwbGFjZW1lbnQ/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogcm9vdEVsZW1lbnQgfSA9IHJvb3RFbGVtZW50UmVmO1xuXG4gICAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlOiBIVE1MRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG4gICAgICAgIGxldCBuZXh0U2Nyb2xsVG9wOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwbGFjZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICBuZXh0U2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5zY3JvbGxUb3AgKyAoZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTEpICogZGlzcGxhY2VtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgbmV4dFNjcm9sbFRvcCA9IHNjcm9sbGFibGUuc2Nyb2xsVG9wICsgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xKSAqIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgc2Nyb2xsVG8oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Nyb2xsVG9wOiBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxhYmxlLnNjcm9sbEhlaWdodCAtIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0LCBuZXh0U2Nyb2xsVG9wKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgYmVoYXZpb3I6ICdzbW9vdGgnIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBbcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvXVxuICAgICk7XG5cbiAgICAvLyBTaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgPEJhc2ljVHJhbnNjcmlwdD4gaW5zaWRlIHRoZSA8Q29tcG9zZXI+LCB3aGVuIHRoZSBkZXZlbG9wZXIgY2FsbHMgYHNjcm9sbFhYWGAsIHdlIG5lZWQgdG8gY2FsbCBpdCBvbiBhbGwgaW5zdGFuY2VzLlxuICAgIC8vIFdlIGNhbGwgYHVzZVJlZ2lzdGVyU2Nyb2xsWFhYYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgYHVzZVNjcm9sbFhYWGAgd2lsbCBtdWx0aXBsZXggdGhlIGNhbGwgaW50byBlYWNoIGluc3RhbmNlIG9mIDxCYXNpY1RyYW5zY3JpcHQ+LlxuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG8oc2Nyb2xsVG8pO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG9FbmQoc2Nyb2xsVG9FbmQpO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUoc2Nyb2xsUmVsYXRpdmUpO1xuXG4gICAgY29uc3QgbWFya0FjdGl2aXR5S2V5QXNSZWFkID0gdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkKCk7XG5cbiAgICBjb25zdCBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQ6IChzY3JvbGxQb3NpdGlvbjogU2Nyb2xsVG9Qb3NpdGlvbikgPT4gdm9pZCA9XG4gICAgICB1c2VEaXNwYXRjaFNjcm9sbFBvc2l0aW9uKCk7XG5cbiAgICAvLyBUT0RPOiBbUDJdIFdlIHNob3VsZCB1c2UgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gdHJhY2sgd2hhdCBhY3Rpdml0eSBpcyBpbiB0aGUgc2Nyb2xsYWJsZS5cbiAgICAvLyAgICAgICAgICAgIEhvd2V2ZXIsIEludGVyc2VjdGlvbk9ic2VydmVyIGlzIG5vdCBhdmFpbGFibGUgb24gSUUxMSwgd2UgbmVlZCB0byBtYWtlIGEgbGltaXRlZCBwb2x5ZmlsbCBpbiBSZWFjdCBzdHlsZS5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGxQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHsgc2Nyb2xsVG9wIH06IHsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IHJvb3RFbGVtZW50IH0gPSByb290RWxlbWVudFJlZjtcblxuICAgICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSByb290RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fc2Nyb2xsYWJsZScpO1xuXG4gICAgICAgIC8vIFwiZ2V0Q2xpZW50UmVjdHMoKVwiIGlzIG5vdCByZXR1cm5pbmcgYW4gYXJyYXksIHRodXMsIGl0IGlzIG5vdCBkZXN0cnVjdHVyYWJsZS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIGNvbnN0IHsgYm90dG9tOiBzY3JvbGxhYmxlQ2xpZW50Qm90dG9tIH0gPSBzY3JvbGxhYmxlRWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGFjdGl2aXR5IGp1c3QgYWJvdmUgc2Nyb2xsIHZpZXcgYm90dG9tLlxuICAgICAgICAvLyBJZiB0aGUgc2Nyb2xsIHZpZXcgaXMgYWxyZWFkeSBvbiB0b3AsIGdldCB0aGUgZmlyc3QgYWN0aXZpdHkuXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5RWxlbWVudHMgPSBBcnJheS5mcm9tKGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LmVudHJpZXMoKSk7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoXG4gICAgICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudHNcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLy8gQWRkIHN1YnBpeGVsIHRvbGVyYW5jZVxuICAgICAgICAgICAgICAgIC5maW5kKChbLCBlbGVtZW50XSkgPT4gZWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdLmJvdHRvbSA8IHNjcm9sbGFibGVDbGllbnRCb3R0b20gKyAxKVxuICAgICAgICAgICAgOiBhY3Rpdml0eUVsZW1lbnRzWzBdXG4gICAgICAgICk/LlswXTtcblxuICAgICAgICAvLyBXaGVuIHRoZSBlbmQtdXNlciBzbG93bHkgc2Nyb2xsaW5nIHRoZSB2aWV3IGRvd24sIHdlIHdpbGwgbWFyayBhY3Rpdml0eSBhcyByZWFkIHdoZW4gdGhlIG1lc3NhZ2UgZnVsbHkgYXBwZWFyIG9uIHRoZSBzY3JlZW4uXG4gICAgICAgIGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tICYmIG1hcmtBY3Rpdml0eUtleUFzUmVhZChhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgaWYgKGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCkge1xuICAgICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gZ2V0QWN0aXZpdHlCeUtleShhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQoeyAuLi4oYWN0aXZpdHkgPyB7IGFjdGl2aXR5SUQ6IGFjdGl2aXR5LmlkIH0gOiB7fSksIHNjcm9sbFRvcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQsXG4gICAgICAgIGdldEFjdGl2aXR5QnlLZXksXG4gICAgICAgIG1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgICAgICAgcm9vdEVsZW1lbnRSZWZcbiAgICAgIF1cbiAgICApO1xuXG4gICAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uKGhhbmRsZVNjcm9sbFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+PihcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPSB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgZnJvbVRyYW5zY3JpcHQgPSB0YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgaWYgKCFmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yICYmICFmcm9tVHJhbnNjcmlwdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA/IDAgOiAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPyAwIDogLTEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KEluZmluaXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBjYXB0dXJpbmcgcGxhaW4gRU5URVIuXG4gICAgICAgICAgICAvLyBXaGVuIHNjcmVlbiByZWFkZXIgaXMgbm90IHJ1bm5pbmcsIG9yIHNjcmVlbiByZWFkZXIgaXMgcnVubmluZyBvdXRzaWRlIG9mIHNjYW4gbW9kZSwgdGhlIEVOVEVSIGtleSB3aWxsIGJlIGNhcHR1cmVkIGhlcmUuXG4gICAgICAgICAgICBpZiAoIWZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSFRNTEVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudFxuICAgICAgICAgICAgICAgIC5nZXQoZm9jdXNlZEFjdGl2aXR5S2V5UmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYm9keScpO1xuXG4gICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudHMoYm9keSlbMF0/LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgIGZvY3VzKCdzZW5kQm94V2l0aG91dEtleWJvYXJkJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KC1JbmZpbml0eSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIC8vIElmIGEgY3VzdG9tIEhUTUwgY29udHJvbCB3YW50cyB0byBoYW5kbGUgdXAvZG93biBhcnJvdywgd2Ugd2lsbCBwcmV2ZW50IHRoZW0gZnJvbSBsaXN0ZW5pbmcgdG8gdGhpcyBldmVudCB0byBwcmV2ZW50IGJ1Z3MgZHVlIHRvIGhhbmRsaW5nIGFycm93IGtleXMgdHdpY2UuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBmb2N1cywgZm9jdXNlZEFjdGl2aXR5S2V5UmVmLCBmb2N1c1JlbGF0aXZlQWN0aXZpdHksIHRlcm1pbmF0b3JSZWZdXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pj4oXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWx0S2V5LCBjdHJsS2V5LCBrZXksIG1ldGFLZXksIHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKGFsdEtleSB8fCAoY3RybEtleSAmJiBrZXkgIT09ICd2JykgfHwgbWV0YUtleSB8fCAoIWlucHV0dGFibGVLZXkoa2V5KSAmJiBrZXkgIT09ICdCYWNrc3BhY2UnKSkge1xuICAgICAgICAgIC8vIElnbm9yZSBpZiBvbmUgb2YgdGhlIHV0aWxpdHkga2V5IChleGNlcHQgU0hJRlQpIGlzIHByZXNzZWRcbiAgICAgICAgICAvLyBFLmcuIENUUkwtQyBvbiBhIGxpbmsgaW4gb25lIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBub3QganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIC8vIEUuZy4gXCJBXCIgb3IgXCJCYWNrc3BhY2VcIiBzaG91bGQganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbmQga2V5c3Ryb2tlcyB0byBzZW5kIGJveCBpZiB3ZSBhcmUgZm9jdXNpbmcgb24gdGhlIHRyYW5zY3JpcHQgb3IgdGVybWluYXRvci5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fCB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgZm9jdXMoJ3NlbmRCb3gnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtmb2N1c11cbiAgICApO1xuXG4gICAgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQodXNlQ2FsbGJhY2soKCkgPT4gZm9jdXNCeUFjdGl2aXR5S2V5KHVuZGVmaW5lZCksIFtmb2N1c0J5QWN0aXZpdHlLZXldKSk7XG5cbiAgICAvLyBXaGVuIHRoZSBmb2N1c2luZyBhY3Rpdml0eSBoYXMgY2hhbmdlZCwgZGlzcGF0Y2ggYW4gZXZlbnQgdG8gb2JzZXJ2ZXJzIG9mIFwidXNlT2JzZXJ2ZVRyYW5zY3JpcHRGb2N1c1wiLlxuICAgIGNvbnN0IGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSgpO1xuXG4gICAgLy8gRGlzcGF0Y2ggYSBcInRyYW5zY3JpcHQgZm9jdXNcIiBldmVudCBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbi5cbiAgICAvLyBXZSBzaG91bGQgbm90IGRpc3BhdGNoIFwidHJhbnNjcmlwdCBmb2N1c1wiIHdoZW4gYSBuZXcgYWN0aXZpdHkgY29tZS4gQWx0aG91Z2ggdGhlIHNlbGVjdGlvbiBjaGFuZ2UsIGl0IGlzIG5vdCBpbml0aWF0ZWQgZnJvbSB0aGUgdXNlci5cbiAgICB1c2VNZW1vKFxuICAgICAgKCkgPT4gZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5KGZvY3VzZWRFeHBsaWNpdGx5ID8gZm9jdXNlZEFjdGl2aXR5S2V5IDogdW5kZWZpbmVkKSxcbiAgICAgIFtkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXksIGZvY3VzZWRBY3Rpdml0eUtleSwgZm9jdXNlZEV4cGxpY2l0bHldXG4gICAgKTtcblxuICAgIC8vIFdoZW4gdGhlIHRyYW5zY3JpcHQgaXMgYmVpbmcgZm9jdXNlZCBvbiwgd2Ugc2hvdWxkIGRpc3BhdGNoIGEgXCJ0cmFuc2NyaXB0Zm9jdXNcIiBldmVudC5cbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUNhbGxiYWNrKFxuICAgICAgLy8gV2UgY2FsbCBcImZvY3VzQnlBY3Rpdml0eUtleVwiIHdpdGggYWN0aXZpdHkga2V5IG9mIFwidHJ1ZVwiLlxuICAgICAgLy8gSXQgbWVhbnMsIHRyaWVzIHRvIGZvY3VzIG9uIGFueXRoaW5nLlxuICAgICAgKHsgY3VycmVudFRhcmdldCwgdGFyZ2V0IH0pID0+IHRhcmdldCA9PT0gY3VycmVudFRhcmdldCAmJiBmb2N1c0J5QWN0aXZpdHlLZXkodHJ1ZSwgZmFsc2UpLFxuICAgICAgW2ZvY3VzQnlBY3Rpdml0eUtleV1cbiAgICApO1xuXG4gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBJRTExLlxuICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIGFuZCBlbXB0eSBzcGFjZSAoYS5rLmEuIGZpbGxlcikgaW4gYW4gZW1wdHkgdHJhbnNjcmlwdCwgSUUxMSBzYXlzIHRoZSBmb2N1cyBpcyBvbiB0aGUgPGRpdiBjbGFzc05hbWU9XCJmaWxsZXJcIj4sXG4gICAgLy8gZGVzcGl0ZSB0aGUgZmFjdCB0aGVyZSBhcmUgbm8gXCJ0YWJJbmRleFwiIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBmaWxsZXIuXG4gICAgLy8gV2UgbmVlZCB0byBhcnRpZmljaWFsbHkgc2VuZCB0aGUgZm9jdXMgYmFjayB0byB0aGUgdHJhbnNjcmlwdC5cbiAgICBjb25zdCBoYW5kbGVGb2N1c0ZpbGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IGZvY3VzQnlBY3Rpdml0eUtleSh1bmRlZmluZWQpLCBbZm9jdXNCeUFjdGl2aXR5S2V5XSk7XG5cbiAgICAvLyBXaGVuIGZvY3VzIGludG8gdGhlIHRyYW5zY3JpcHQgdXNpbmcgVEFCL1NISUZULVRBQiwgc2Nyb2xsIHRoZSBmb2N1c2VkIGFjdGl2aXR5IGludG8gdmlldy5cbiAgICB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlKFxuICAgICAgcm9vdEVsZW1lbnRSZWYsXG4gICAgICB1c2VDYWxsYmFjaygoKSA9PiBmb2N1c0J5QWN0aXZpdHlLZXkodW5kZWZpbmVkKSwgW2ZvY3VzQnlBY3Rpdml0eUtleV0pXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIC8vIEFsdGhvdWdoIEFuZHJvaWQgVGFsa0JhY2sgMTIuMSBkb2VzIG5vdCBzdXBwb3J0IGBhcmlhLWFjdGl2ZWRlc2NlbmRhbnRgLCB3aGVuIHVzZWQsIGl0IGJlY29tZSBidWdneSBhbmQgd2lsbCBuYXJyYXRlIGNvbnRlbnQgdHdpY2UuXG4gICAgICAgIC8vIFdlIGFyZSBkaXNhYmxpbmcgYGFyaWEtYWN0aXZlZGVzY2VuZGFudGAgZm9yIEFuZHJvaWQuIFNlZSA8QWN0aXZpdHlSb3c+IGZvciBkZXRhaWxzLlxuICAgICAgICBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9e2FuZHJvaWQgPyB1bmRlZmluZWQgOiBhY3RpdmVEZXNjZW5kYW50SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RyYW5zY3JpcHRBcmlhTGFiZWx9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCcsXG4gICAgICAgICAgYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgKyAnJyxcbiAgICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICAgIChjbGFzc05hbWUgfHwgJycpICsgJydcbiAgICAgICAgKX1cbiAgICAgICAgZGlyPXtkaXJlY3Rpb259XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZUZvY3VzfVxuICAgICAgICBvbktleURvd249e2hhbmRsZVRyYW5zY3JpcHRLZXlEb3dufVxuICAgICAgICBvbktleURvd25DYXB0dXJlPXtoYW5kbGVUcmFuc2NyaXB0S2V5RG93bkNhcHR1cmV9XG4gICAgICAgIHJlZj17Y2FsbGJhY2tSZWZ9XG4gICAgICAgIC8vIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIgd2lsbCBvbmx5IHdvcmtzIHdpdGggYSBudW1iZXIgb2Ygcm9sZXMgYW5kIGl0IG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIC8vIEZvciB1cC9kb3duIGFycm93IGtleSBuYXZpZ2F0aW9uIGFjcm9zcyBhY3Rpdml0aWVzLCB0aGlzIGNvbXBvbmVudCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSB0YWIgc2VxdWVuY2UuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiB3aWxsIG5vdCBiZSBuYXJyYXRlZCB3aGVuIHRoZSB1c2VyIHByZXNzIHVwL2Rvd24gYXJyb3cga2V5cy5cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2tiZF9mb2N1c19hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgPlxuICAgICAgICA8TGl2ZVJlZ2lvblRyYW5zY3JpcHQgYWN0aXZpdHlFbGVtZW50TWFwUmVmPXthY3Rpdml0eUVsZW1lbnRNYXBSZWZ9IC8+XG4gICAgICAgIHsvKiBUT0RPOiBbUDJdIEZpeCBFU0xpbnQgZXJyb3IgYG5vLXVzZS1iZWZvcmUtZGVmaW5lYCAqL31cbiAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi99XG4gICAgICAgIDxJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlIG9uRm9jdXNGaWxsZXI9e2hhbmRsZUZvY3VzRmlsbGVyfSB0ZXJtaW5hdG9yUmVmPXt0ZXJtaW5hdG9yUmVmfT5cbiAgICAgICAgICB7cmVuZGVyaW5nRWxlbWVudHMubWFwKFxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIGNhbGxiYWNrUmVmLFxuICAgICAgICAgICAgICBoaWRlVGltZXN0YW1wLFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgcmVuZGVyQXZhdGFyLFxuICAgICAgICAgICAgICBzaG93Q2FsbG91dFxuICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICA8QWN0aXZpdHlSb3cgYWN0aXZpdHk9e2FjdGl2aXR5fSBrZXk9e2tleX0gcmVmPXtjYWxsYmFja1JlZn0+XG4gICAgICAgICAgICAgICAge3JlbmRlckFjdGl2aXR5KHtcbiAgICAgICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvQWN0aXZpdHlSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlPlxuICAgICAgICB7ISFyZW5kZXJpbmdFbGVtZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Jvb3RFbGVtZW50UmVmfSAvPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt0ZXJtaW5hdG9yTGFiZWxJZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvclwiXG4gICAgICAgICAgICAgIHJlZj17dGVybWluYXRvclJlZn1cbiAgICAgICAgICAgICAgcm9sZT1cIm5vdGVcIlxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yLWJvZHlcIj5cbiAgICAgICAgICAgICAgICB7LyogYGlkYCBpcyByZXF1aXJlZCBmb3IgYGFyaWEtbGFiZWxsZWRieWAgKi99XG4gICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mb3JiaWQtZG9tLXByb3BzICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci10ZXh0XCIgaWQ9e3Rlcm1pbmF0b3JMYWJlbElkfT5cbiAgICAgICAgICAgICAgICAgIHt0ZXJtaW5hdG9yVGV4dH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZvY3VzLWluZGljYXRvclwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6ICcnXG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQucHJvcFR5cGVzID0ge1xuICAvLyBQcm9wVHlwZXMgY2Fubm90IHZhbGlkYXRlIHByZWNpc2VseSB3aXRoIGl0cyBUeXBlU2NyaXB0IGNvdW50ZXJwYXJ0LlxuICAvLyBAdHMtaWdub3JlXG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihNYXApXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxudHlwZSBJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBvbkZvY3VzRmlsbGVyOiAoKSA9PiB2b2lkO1xuICB0ZXJtaW5hdG9yUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbi8vIFNlcGFyYXRpbmcgaGlnaC1mcmVxdWVuY3kgaG9va3MgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cbmNvbnN0IEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGU6IEZDPEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGVQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgb25Gb2N1c0ZpbGxlcixcbiAgdGVybWluYXRvclJlZlxufSkgPT4ge1xuICBjb25zdCBbeyBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzU3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICBjb25zdCBbYW5pbWF0aW5nVG9FbmRdOiBbYm9vbGVhbl0gPSB1c2VBbmltYXRpbmdUb0VuZCgpO1xuICBjb25zdCBbYXRFbmRdOiBbYm9vbGVhbl0gPSB1c2VBdEVuZCgpO1xuICBjb25zdCBbLCB1bnJlYWRBY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzQnlSZWFkKCk7XG4gIGNvbnN0IFtzdGlja3ldOiBbYm9vbGVhbl0gPSB1c2VTdGlja3koKTtcbiAgY29uc3QgW3N0eWxlT3B0aW9uc10gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgZm9jdXNCeUFjdGl2aXR5S2V5ID0gdXNlRm9jdXNCeUFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IGxvY2FsaXplID0gdXNlTG9jYWxpemVyKCk7XG4gIGNvbnN0IG1hcmtBY3Rpdml0eUtleUFzUmVhZCA9IHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCgpO1xuICBjb25zdCBtYXJrQWxsQXNBY2tub3dsZWRnZWQgPSB1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQoKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQ6IChvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG9FbmQoKTtcblxuICBjb25zdCBwcmV2U3RpY2t5ID0gdXNlUHJldmlvdXMoc3RpY2t5KTtcbiAgY29uc3QgdHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbiA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfUk9MRV9BTFQnKTtcblxuICBjb25zdCBzdGlja3lDaGFuZ2VkVG9UcnVlID0gcHJldlN0aWNreSAhPT0gc3RpY2t5ICYmIHN0aWNreTtcblxuICAvLyBBY2tub3dsZWRnZWQgbWVhbnMgZWl0aGVyOlxuICAvLyAxLiBUaGUgdXNlciBzZW50IGEgbWVzc2FnZVxuICAvLyAgICAtIFdlIGRvbid0IG5lZWQgYSBjb25kaXRpb24gaGVyZS4gV2hlbiBXZWIgQ2hhdCBzZW5kcyB0aGUgdXNlcidzIG1lc3NhZ2UsIGl0IHdpbGwgc2Nyb2xsIHRvIGJvdHRvbSwgYW5kIGl0IHdpbGwgdHJpZ2dlciBjb25kaXRpb24gMiBiZWxvdy5cbiAgLy8gMi4gVGhlIHVzZXIgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHQsIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblxuICAvLyAgICAtIElmIHRoZSB0cmFuc2NyaXB0IGlzIGFscmVhZHkgYXQgdGhlIGJvdHRvbSwgdGhlIHVzZXIgbmVlZHMgdG8gc2Nyb2xsIHVwIGFuZCB0aGVuIGdvIGJhY2sgZG93blxuICAvLyAgICAtIFdoYXQgaGFwcGVucyBpZiB3ZSBhcmUgcmVsYXhpbmcgXCJzY3JvbGxlZCBmcm9tIGEgbm9uLWJvdHRvbSBzY3JvbGwgcG9zaXRpb25cIjpcbiAgLy8gICAgICAxLiBUaGUgY29uZGl0aW9uIHdpbGwgYmVjb21lIHNvbGVseSBcImF0IHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHRcIlxuICAvLyAgICAgIDIuIEF1dG8tc2Nyb2xsIHdpbGwgYWx3YXlzIHNjcm9sbCB0aGUgdHJhbnNjcmlwdCB0byB0aGUgYm90dG9tXG4gIC8vICAgICAgMy4gV2ViIENoYXQgd2lsbCBhbHdheXMgYWNrbm93bGVkZ2UgYWxsIGFjdGl2aXRpZXMgYXMgaXQgaXMgYXQgdGhlIGJvdHRvbVxuICAvLyAgICAgIDQuIEFja25vd2xlZGdlIGZsYWcgYmVjb21lIHVzZWxlc3NcbiAgLy8gICAgICA1LiBUaGVyZWZvcmUsIGV2ZW4gdGhlIGRldmVsb3BlciBzZXQgXCJwYXVzZSBhZnRlciAzIGFjdGl2aXRpZXNcIiwgaWYgYWN0aXZpdGllcyBhcmUgY29taW5nIGluIGF0IGEgc2xvdyBwYWNlIChub3QgYmF0Y2hlZCBpbiBhIHNpbmdsZSByZW5kZXIpXG4gIC8vICAgICAgICAgV2ViIENoYXQgd2lsbCBrZWVwIHNjcm9sbGluZyBhbmQgbm90IHNuYXBwZWQvcGF1c2VkXG5cbiAgLy8gTm90ZTogV2hlbiBXZWIgQ2hhdCBpcyBsb2FkZWQsIHRoZXJlIGFyZSBubyBhY3Rpdml0aWVzIGFja25vd2xlZGdlZC4gV2UgbmVlZCB0byBhc3N1bWUgYWxsIGFycml2aW5nIGFjdGl2aXRpZXMgYXJlIGFja25vd2xlZGdlZCB1bnRpbCBlbmQtdXNlciBzZW5kcyB0aGVpciBmaXJzdCBhY3Rpdml0eS5cbiAgLy8gICAgICAgQWN0aXZpdGllcyBsb2FkZWQgaW5pdGlhbGx5IGNvdWxkIGJlIGZyb20gY29udmVyc2F0aW9uIGhpc3RvcnkuIFdpdGhvdXQgYXNzdW1pbmcgYWNrbm93bGVkZ2VtZW50LCBXZWIgQ2hhdCB3aWxsIG5vdCBzY3JvbGwgaW5pdGlhbGx5IChhcyBldmVyeXRoaW5nIGlzIG5vdCBhY2tub3dsZWRnZWQpLlxuICAvLyAgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlIGNoYXQgYWRhcHRlciBzaG91bGQgbGV0IFdlYiBDaGF0IGtub3cgaWYgdGhlIGFjdGl2aXR5IGlzIGxvYWRlZCBmcm9tIGhpc3Rvcnkgb3Igbm90LlxuXG4gIC8vIFRPRE86IFtQMl0gIzM2NzAgTW92ZSB0aGUgXCJjb252ZXJzYXRpb24gaGlzdG9yeSBhY2tub3dsZWRnZW1lbnRcIiBsb2dpYyBtZW50aW9uZWQgYWJvdmUgdG8gcG9seWZpbGwgb2YgY2hhdCBhZGFwdGVycy5cbiAgLy8gICAgICAgMS4gQ2hhdCBhZGFwdGVyIHNob3VsZCBzZW5kIFwiYWNrbm93bGVkZ2VkXCIgYXMgcGFydCBvZiBcImNoYW5uZWxEYXRhXCJcbiAgLy8gICAgICAgMi4gSWYgXCJhY2tub3dsZWRnZWRcIiBpcyBcInVuZGVmaW5lZFwiLCB3ZSBzZXQgaXQgdG86XG4gIC8vICAgICAgICAgIGEuIHRydWUsIGlmIHRoZXJlIGFyZSBubyBlZ3Jlc3MgYWN0aXZpdGllcyB5ZXRcbiAgLy8gICAgICAgICAgYi4gT3RoZXJ3aXNlLCBmYWxzZVxuXG4gIHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHN0aWNreUNoYW5nZWRUb1RydWUgJiZcbiAgICAgIC8vIFRPRE86IFtQMl0gQm90aCBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCBhbmQgYG1hcmtBbGxBc0Fja25vd2xlZGdlZGAgaG9vayBhcmUgc2V0dGVycyBvZiB1c2VTdGF0ZS5cbiAgICAgIC8vICAgICAgIFRoaXMgbWVhbnMsIGluIGEgcmVuZGVyIGxvb3AsIHdlIHdpbGwgYmUgY2FsbGluZyBzZXR0ZXIgYW5kIHdpbGwgY2F1c2UgYW5vdGhlciByZS1yZW5kZXIuXG4gICAgICAvLyAgICAgICBUaGlzIGlzIG5vdCB0cml2aWFsIGJ1dCB3ZSBzaG91bGQgdGhpbmsgaWYgdGhlcmUgaXMgYSB3YXkgdG8gYXZvaWQgdGhpcy5cbiAgICAgIG1hcmtBbGxBc0Fja25vd2xlZGdlZCgpLFxuICAgIFttYXJrQWxsQXNBY2tub3dsZWRnZWQsIHN0aWNreUNoYW5nZWRUb1RydWVdXG4gICk7XG5cbiAgY29uc3QgW2ZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcl0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoeyBmbGF0OiB0cnVlIH0pO1xuICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5ID0gdXNlR2V0S2V5QnlBY3Rpdml0eSgpO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5czogc3RyaW5nW10gPSB1c2VNZW1vPHN0cmluZ1tdPihcbiAgICAoKSA9PiBmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIubWFwKCh7IGFjdGl2aXR5IH0pID0+IGdldEtleUJ5QWN0aXZpdHkoYWN0aXZpdHkpKSxcbiAgICBbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyLCBnZXRLZXlCeUFjdGl2aXR5XVxuICApO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiA9IHVzZVZhbHVlUmVmKHJlbmRlcmluZ0FjdGl2aXR5S2V5cyk7XG5cbiAgLy8gVG8gcHJldmVudCBmbGFzaHkgYnV0dG9uLCB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGFub3RoZXIgcmVuZGVyIGxvb3AgdG8gdXBkYXRlIHRoZSBgW3JlYWRBY3Rpdml0eUtleXMsIHVucmVhZEFjdGl2aXR5S2V5c11gIHN0YXRlLlxuICAvLyBJbnN0ZWFkLCB3ZSBhcmUgYnVpbGRpbmcgdGhlIG5leHQgb25lIGluIHRoaXMgYHVzZU1lbW9gIGNhbGwuXG4gIGNvbnN0IG5leHRVbnJlYWRBY3Rpdml0eUtleXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBUaGlzIGNvZGUgbmVlZCB0byBiZSBjYXJlZnVsIHJldmlld2VkIGFzIGl0IHdpbGwgY2F1c2UgYW5vdGhlciByZW5kZXIuIFRoZSBjb2RlIHNob3VsZCBiZSBjb252ZXJnaW5nLlxuICAgIC8vIEFmdGVyIHdlIGNhbGwgYG1hcmtBY3Rpdml0eUtleUFzUmVhZGAsIGV2ZXJ5dGhpbmcgd2lsbCBiZSByZWFkIGFuZCBub3RoaW5nIHdpbGwgYmUgdW5yZWFkLlxuICAgIC8vIFRoYXQgbWVhbnMsIGluIG5leHQgcmVuZGVyLCBgdW5yZWFkQWN0aXZpdHlLZXlzYCB3aWxsIGJlIGVtcHRpZWQgYW5kIHRoZSBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCB3aWxsIG5vdCBnZXQgY2FsbGVkIGFnYWluLlxuICAgIGlmIChzdGlja3kgJiYgdW5yZWFkQWN0aXZpdHlLZXlzLmxlbmd0aCkge1xuICAgICAgbWFya0FjdGl2aXR5S2V5QXNSZWFkKHVucmVhZEFjdGl2aXR5S2V5c1t1bnJlYWRBY3Rpdml0eUtleXMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHVucmVhZEFjdGl2aXR5S2V5cztcbiAgfSwgW21hcmtBY3Rpdml0eUtleUFzUmVhZCwgc3RpY2t5LCB1bnJlYWRBY3Rpdml0eUtleXNdKTtcblxuICBjb25zdCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYobmV4dFVucmVhZEFjdGl2aXR5S2V5cyk7XG5cbiAgLy8gSWYgd2UgYXJlIHJlbmRlcmluZyBhbnl0aGluZyB0aGF0IGlzIHVucmVhZCwgd2Ugc2hvdWxkIHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uLlxuICAvLyBOb3QgZXZlcnl0aGluZyBpbiB0aGUgYHVucmVhZEFjdGl2aXR5S2V5c2AgYXJlIHJlbmRlcmVkLCBzYXksIGJvdCB0eXBpbmcgaW5kaWNhdG9yLlxuICAvLyBXZSBzaG91bGQgbm90IHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uIGZvciBib3QgdHlwaW5nIGluZGljYXRvciBhcyBpdCB3aWxsIGNvbmZ1c2UgdGhlIHVzZXIuXG4gIGNvbnN0IHVucmVhZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbmV4dFVucmVhZEFjdGl2aXR5S2V5cy5zb21lKGtleSA9PiByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KSksXG4gICAgW3JlbmRlcmluZ0FjdGl2aXR5S2V5cywgbmV4dFVucmVhZEFjdGl2aXR5S2V5c11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNjcm9sbFRvRW5kKHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuXG4gICAgY29uc3QgeyBjdXJyZW50OiByZW5kZXJpbmdBY3Rpdml0eUtleXMgfSA9IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZjtcblxuICAgIC8vIEFmdGVyIHRoZSBcIk5ldyBtZXNzYWdlXCIgYnV0dG9uIGlzIGNsaWNrZWQsIGZvY3VzIG9uIHRoZSBmaXJzdCB1bnJlYWQgYWN0aXZpdHkgd2hpY2ggd2lsbCBiZSByZW5kZXJlZC5cbiAgICBjb25zdCBmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5ID0gbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZi5jdXJyZW50LmZpbmQoa2V5ID0+XG4gICAgICByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KVxuICAgICk7XG5cbiAgICBpZiAoZmlyc3RVbnJlYWRSZW5kZXJpbmdBY3Rpdml0eUtleSkge1xuICAgICAgZm9jdXNCeUFjdGl2aXR5S2V5KGZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyB1bnJlYWQgYWN0aXZpdHksIHNlbmQgdGhlIGZvY3VzIHRvIHRoZSB0ZXJtaW5hdG9yIGJsb2NrLlxuICAgICAgdGVybWluYXRvclJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2ZvY3VzQnlBY3Rpdml0eUtleSwgbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZiwgcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmLCBzY3JvbGxUb0VuZCwgdGVybWluYXRvclJlZl0pO1xuXG4gIGNvbnN0IHJlbmRlclNjcm9sbFRvRW5kQnV0dG9uID0gdXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlcigpKHtcbiAgICBhdEVuZDogYW5pbWF0aW5nVG9FbmQgfHwgYXRFbmQgfHwgc3RpY2t5LFxuICAgIHN0eWxlT3B0aW9ucyxcbiAgICB1bnJlYWRcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7cmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24gJiYgcmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24oeyBvbkNsaWNrOiBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrIH0pfVxuICAgICAgeyEhUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pICYmIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Rlcm1pbmF0b3JSZWZ9IC8+fVxuICAgICAgPFJlYWN0U2Nyb2xsVG9Cb3R0b21QYW5lbCBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlXCI+XG4gICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZpbGxlclwiIG9uRm9jdXM9e29uRm9jdXNGaWxsZXJ9IC8+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgYXJpYS1yb2xlZGVzY3JpcHRpb249e3RyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb259XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGFjdGl2aXRpZXNTdHlsZVNldCArICcnLCAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdHJhbnNjcmlwdCcpfVxuICAgICAgICAgIHJvbGU9XCJmZWVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8QmFzaWNUeXBpbmdJbmRpY2F0b3IgLz5cbiAgICAgIDwvUmVhY3RTY3JvbGxUb0JvdHRvbVBhbmVsPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25Gb2N1c0ZpbGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGVybWluYXRvclJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59O1xuXG50eXBlIFNjcm9sbGVyID0gKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfTogeyBvZmZzZXRIZWlnaHQ6IG51bWJlcjsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4gbnVtYmVyO1xuXG4vLyBcInNjcm9sbGVyXCIgaXMgdGhlIGF1dG8tc2Nyb2xsIGxpbWl0ZXIsIGEuay5hLiBhdXRvIHNjcm9sbCBzbmFwLlxuY29uc3QgdXNlU2Nyb2xsZXIgPSAoYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEFjdGl2aXR5RWxlbWVudE1hcD4pOiBTY3JvbGxlciA9PiB7XG4gIGNvbnN0IFthY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzKCk7XG4gIGNvbnN0IFtsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXldID0gdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IFtzdHlsZU9wdGlvbnNdID0gdXNlU3R5bGVPcHRpb25zKCk7XG5cbiAgY29uc3QgYWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYoYWN0aXZpdHlLZXlzKTtcbiAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYobGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KTtcbiAgY29uc3Qgc3R5bGVPcHRpb25zUmVmID0gdXNlVmFsdWVSZWYoc3R5bGVPcHRpb25zKTtcblxuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiB7XG4gICAgICAgICAgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5LFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZSxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldFxuICAgICAgICB9XG4gICAgICB9ID0gc3R5bGVPcHRpb25zUmVmO1xuXG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGF1dG9TY3JvbGxTbmFwT25QYWdlKSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25QYWdlXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQgPT09ICdudW1iZXInID8gYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9PT0gJ251bWJlcicgPyBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA6IDA7XG5cbiAgICAgIGlmIChwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IHx8IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5RWxlbWVudE1hcCB9ID0gYWN0aXZpdHlFbGVtZW50TWFwUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5S2V5cyB9ID0gYWN0aXZpdHlLZXlzUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSB9ID0gbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmO1xuICAgICAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggPSBhY3Rpdml0eUtleXMuaW5kZXhPZihsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgIGlmICh+bGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXgpIHtcbiAgICAgICAgICAvLyBUaGUgYWN0aXZpdHkgdGhhdCB3ZSBhY2tub3dsZWRnZWQgY291bGQgYmUgbm90IHJlbmRlcmVkLCBzdWNoIGFzIHBvc3QgYmFjayBhY3Rpdml0eS5cbiAgICAgICAgICAvLyBXaGVuIGNhbGN1bGF0aW5nIHNjcm9sbCBzbmFwLCB3ZSBjYW4gb25seSBiYXNlIG9uIHRoZSBmaXJzdCB1bmFja25vd2xlZGdlZC1hbmQtcmVuZGVyaW5nIGFjdGl2aXR5LlxuICAgICAgICAgIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLmtleXMoKSk7XG4gICAgICAgICAgbGV0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCA9IC0xO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBhY2tub3dsZWRnZWRBY3Rpdml0eUtleSBvZiBhY3Rpdml0eUtleXMuc2xpY2UoMCwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggKyAxKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmluZGV4T2YoYWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAofmZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlFbGVtZW50cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLnZhbHVlcygpKTtcblxuICAgICAgICAgICAgaWYgKHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgLy8gR2V0cyB0aGUgYWN0aXZpdHkgZWxlbWVudCB3aGljaCB3ZSBzaG91bGQgc25hcCB0by5cbiAgICAgICAgICAgICAgY29uc3QgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIGFjdGl2aXR5RWxlbWVudHNbZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4ICsgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSAtIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYWN0aXZlLWRlc2NlbmRhbnQnXG4gICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICAgIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQub2Zmc2V0VG9wO1xuXG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgICBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3AgK1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRzWytmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXhdO1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCdcbiAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCAtXG4gICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgKiAoMSAtIHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkgK1xuICAgICAgICAgICAgICAgICAgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnZhbHVlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9LFxuICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGFjdGl2aXR5S2V5c1JlZiwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmLCBzdHlsZU9wdGlvbnNSZWZdXG4gICk7XG59O1xuXG50eXBlIEJhc2ljVHJhbnNjcmlwdFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBCYXNpY1RyYW5zY3JpcHQ6IFZGQzxCYXNpY1RyYW5zY3JpcHRQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBhY3Rpdml0eUVsZW1lbnRNYXBSZWYgPSB1c2VSZWY8QWN0aXZpdHlFbGVtZW50TWFwPihuZXcgTWFwKCkpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgc2Nyb2xsZXIgPSB1c2VTY3JvbGxlcihhY3Rpdml0eUVsZW1lbnRNYXBSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRyYW5zY3JpcHRGb2N1c0NvbXBvc2VyIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgIDxSZWFjdFNjcm9sbFRvQm90dG9tQ29tcG9zZXIgc2Nyb2xsZXI9e3Njcm9sbGVyfT5cbiAgICAgICAgPEtleWJvYXJkSGVscCAvPlxuICAgICAgICA8SW50ZXJuYWxUcmFuc2NyaXB0IGFjdGl2aXR5RWxlbWVudE1hcFJlZj17YWN0aXZpdHlFbGVtZW50TWFwUmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gcmVmPXtjb250YWluZXJSZWZ9IC8+XG4gICAgICA8L1JlYWN0U2Nyb2xsVG9Cb3R0b21Db21wb3Nlcj5cbiAgICA8L1RyYW5zY3JpcHRGb2N1c0NvbXBvc2VyPlxuICApO1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiAnJ1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCYXNpY1RyYW5zY3JpcHQ7XG4iXX0=
|
|
854
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RyYW5zY3JpcHQudHN4Il0sIm5hbWVzIjpbInVzZUFjdGl2aXR5S2V5cyIsImhvb2tzIiwidXNlQWN0aXZpdHlLZXlzQnlSZWFkIiwidXNlQ3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsInVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyIiwidXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlciIsInVzZURpcmVjdGlvbiIsInVzZUdldEFjdGl2aXR5QnlLZXkiLCJ1c2VHZXRLZXlCeUFjdGl2aXR5IiwidXNlR2V0S2V5QnlBY3Rpdml0eUlkIiwidXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IiwidXNlTG9jYWxpemVyIiwidXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkIiwidXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkIiwidXNlU3R5bGVPcHRpb25zIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsImZsZXgiLCJvdmVyZmxvd1giLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsImxpc3RTdHlsZVR5cGUiLCJJbnRlcm5hbFRyYW5zY3JpcHQiLCJyZWYiLCJhY3Rpdml0eUVsZW1lbnRNYXBSZWYiLCJjbGFzc05hbWUiLCJiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCIsImJhc2ljVHJhbnNjcmlwdCIsImJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0IiwiYnViYmxlTnViT2Zmc2V0IiwiZ3JvdXBUaW1lc3RhbXAiLCJzaG93QXZhdGFySW5Hcm91cCIsImFjdGl2ZURlc2NlbmRhbnRJZCIsImFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSIsImRpcmVjdGlvbiIsImZvY3VzZWRBY3Rpdml0eUtleSIsImZvY3VzZWRFeHBsaWNpdGx5IiwiY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlciIsImNyZWF0ZUF2YXRhclJlbmRlcmVyIiwiZm9jdXMiLCJmb2N1c0J5QWN0aXZpdHlLZXkiLCJmb2N1c1JlbGF0aXZlQWN0aXZpdHkiLCJnZXRBY3Rpdml0eUJ5S2V5IiwiZ2V0S2V5QnlBY3Rpdml0eSIsImdldEtleUJ5QWN0aXZpdHlJZCIsImxvY2FsaXplIiwicm9vdENsYXNzTmFtZSIsInJvb3RFbGVtZW50UmVmIiwidGVybWluYXRvckxhYmVsSWQiLCJ0ZXJtaW5hdG9yUmVmIiwiZm9jdXNlZEFjdGl2aXR5S2V5UmVmIiwiaGlkZUFsbFRpbWVzdGFtcHMiLCJ0ZXJtaW5hdG9yVGV4dCIsInRyYW5zY3JpcHRBcmlhTGFiZWwiLCJjYWxsYmFja1JlZiIsImVsZW1lbnQiLCJjdXJyZW50IiwicmVuZGVyaW5nRWxlbWVudHMiLCJ0b3BTaWRlQm90TnViIiwidG9wU2lkZVVzZXJOdWIiLCJmb3JFYWNoIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiZmlyc3RBY3Rpdml0eSIsImFjdGl2aXR5IiwicmVuZGVyQXZhdGFyIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzIiwiaW5kZXhXaXRoaW5TZW5kZXJHcm91cCIsImZpcnN0SW5TZW5kZXJHcm91cCIsImxhc3RJblNlbmRlckdyb3VwIiwibGVuZ3RoIiwiaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCIsInJlbmRlckFjdGl2aXR5IiwiZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwIiwia2V5IiwibGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJyZW5kZXJBY3Rpdml0eVN0YXR1cyIsIm5leHRWaXNpYmxlQWN0aXZpdHkiLCJ1bmRlZmluZWQiLCJ0b3BTaWRlTnViIiwiZnJvbSIsInJvbGUiLCJzaG93Q2FsbG91dCIsInB1c2giLCJhY3Rpdml0eUVsZW1lbnQiLCJzZXQiLCJkZWxldGUiLCJoaWRlVGltZXN0YW1wIiwic2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmQiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiRXJyb3IiLCJhY3Rpdml0eUlkIiwiYWN0aXZpdHlJRCIsInNjcm9sbFRvcCIsImFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwiZ2V0IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGFibGVFbGVtZW50IiwiYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdHMiLCJzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QiLCJhY3Rpdml0eUhlaWdodCIsImhlaWdodCIsImFjdGl2aXR5WSIsInkiLCJzY3JvbGxhYmxlSGVpZ2h0IiwiYWN0aXZpdHlPZmZzZXRUb3AiLCJNYXRoIiwibWluIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxSZWxhdGl2ZSIsImRpc3BsYWNlbWVudCIsInJvb3RFbGVtZW50Iiwic2Nyb2xsYWJsZSIsIm5leHRTY3JvbGxUb3AiLCJvZmZzZXRIZWlnaHQiLCJtYXgiLCJzY3JvbGxIZWlnaHQiLCJtYXJrQWN0aXZpdHlLZXlBc1JlYWQiLCJkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQiLCJoYW5kbGVTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGVDbGllbnRCb3R0b20iLCJib3R0b20iLCJhY3Rpdml0eUVsZW1lbnRzIiwiQXJyYXkiLCJlbnRyaWVzIiwiYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20iLCJyZXZlcnNlIiwiZmluZCIsImVsZW1lbnRDbGllbnRSZWN0IiwiaWQiLCJoYW5kbGVUcmFuc2NyaXB0S2V5RG93biIsImV2ZW50IiwidGFyZ2V0IiwiZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciIsImZyb21UcmFuc2NyaXB0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZWQiLCJJbmZpbml0eSIsImJvZHkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5IiwiZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IiwiaGFuZGxlRm9jdXMiLCJoYW5kbGVGb2N1c0ZpbGxlciIsImFuZHJvaWQiLCJtYXAiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzaGFwZSIsImluc3RhbmNlT2YiLCJNYXAiLCJpc1JlcXVpcmVkIiwic3RyaW5nIiwiSW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZSIsImNoaWxkcmVuIiwib25Gb2N1c0ZpbGxlciIsImFjdGl2aXRpZXNTdHlsZVNldCIsImFjdGl2aXRpZXMiLCJhbmltYXRpbmdUb0VuZCIsImF0RW5kIiwidW5yZWFkQWN0aXZpdHlLZXlzIiwic3RpY2t5Iiwic3R5bGVPcHRpb25zIiwibWFya0FsbEFzQWNrbm93bGVkZ2VkIiwicHJldlN0aWNreSIsInRyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb24iLCJzdGlja3lDaGFuZ2VkVG9UcnVlIiwiZmxhdCIsImZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciIsInJlbmRlcmluZ0FjdGl2aXR5S2V5cyIsInJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiIsIm5leHRVbnJlYWRBY3Rpdml0eUtleXMiLCJuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmIiwidW5yZWFkIiwic29tZSIsImluY2x1ZGVzIiwiaGFuZGxlU2Nyb2xsVG9FbmRCdXR0b25DbGljayIsImZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkiLCJyZW5kZXJTY3JvbGxUb0VuZEJ1dHRvbiIsIm9uQ2xpY2siLCJSZWFjdCIsIkNoaWxkcmVuIiwiY291bnQiLCJhbnkiLCJmdW5jIiwidXNlU2Nyb2xsZXIiLCJhY3Rpdml0eUtleXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkiLCJhY3Rpdml0eUtleXNSZWYiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYiLCJzdHlsZU9wdGlvbnNSZWYiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkiLCJhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJhdXRvU2Nyb2xsU25hcE9uUGFnZSIsImF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IiwicGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2VPZmZzZXQiLCJhY3Rpdml0eUVsZW1lbnRNYXAiLCJ2YWx1ZXMiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCIsImluZGV4T2YiLCJrZXlzIiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4Iiwic2xpY2UiLCJhY2tub3dsZWRnZWRBY3Rpdml0eUtleSIsImluZGV4IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eU9mZnNldFRvcCIsIm9mZnNldFRvcCIsImZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AiLCJCYXNpY1RyYW5zY3JpcHQiLCJjb250YWluZXJSZWYiLCJzY3JvbGxlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBVUE7O0FBQ0E7O0FBQ0E7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJ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LElBQU15QixlQUEwQyxHQUFHLFNBQTdDQSxlQUE2QyxTQUFtQjtBQUFBLE1BQWhCck0sU0FBZ0IsVUFBaEJBLFNBQWdCO0FBQ3BFLE1BQU1ELHFCQUFxQixHQUFHLG1CQUEyQixJQUFJcUksR0FBSixFQUEzQixDQUE5QjtBQUNBLE1BQU1rRSxZQUFZLEdBQUcsb0JBQXJCO0FBRUEsTUFBTUMsUUFBUSxHQUFHaEMsV0FBVyxDQUFDeEsscUJBQUQsQ0FBNUI7QUFFQSxzQkFDRSw2QkFBQyxnQ0FBRDtBQUF5QixJQUFBLFlBQVksRUFBRXVNO0FBQXZDLGtCQUNFLDZCQUFDLDZCQUFEO0FBQTZCLElBQUEsUUFBUSxFQUFFQztBQUF2QyxrQkFDRSw2QkFBQyxxQkFBRCxPQURGLGVBRUUsNkJBQUMsa0JBQUQ7QUFBb0IsSUFBQSxxQkFBcUIsRUFBRXhNLHFCQUEzQztBQUFrRSxJQUFBLFNBQVMsRUFBRUMsU0FBN0U7QUFBd0YsSUFBQSxHQUFHLEVBQUVzTTtBQUE3RixJQUZGLENBREYsQ0FERjtBQVFELENBZEQ7O0FBZ0JBRCxlQUFlLENBQUN0RSxZQUFoQixHQUErQjtBQUM3Qi9ILEVBQUFBLFNBQVMsRUFBRTtBQURrQixDQUEvQjtBQUlBcU0sZUFBZSxDQUFDckUsU0FBaEIsR0FBNEI7QUFDMUJoSSxFQUFBQSxTQUFTLEVBQUVpSSxtQkFBVUs7QUFESyxDQUE1QjtlQUllK0QsZSIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIgYXMgUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyLFxuICBQYW5lbCBhcyBSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwsXG4gIHVzZUFuaW1hdGluZ1RvRW5kLFxuICB1c2VBdEVuZCxcbiAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICB1c2VTY3JvbGxUbyxcbiAgdXNlU2Nyb2xsVG9FbmQsXG4gIHVzZVN0aWNreVxufSBmcm9tICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBGcmFnbWVudCwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUNvbXBvbmVudEZhY3RvcnksIEF2YXRhckNvbXBvbmVudEZhY3RvcnkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUVsZW1lbnRNYXAgfSBmcm9tICcuL1RyYW5zY3JpcHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBGQywgS2V5Ym9hcmRFdmVudEhhbmRsZXIsIE11dGFibGVSZWZPYmplY3QsIFJlYWN0Tm9kZSwgVkZDIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBXZWJDaGF0QWN0aXZpdHkgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1jb3JlJztcblxuaW1wb3J0IHsgYW5kcm9pZCB9IGZyb20gJy4vVXRpbHMvZGV0ZWN0QnJvd3Nlcic7XG5pbXBvcnQgQWN0aXZpdHlSb3cgZnJvbSAnLi9UcmFuc2NyaXB0L0FjdGl2aXR5Um93JztcbmltcG9ydCBCYXNpY1R5cGluZ0luZGljYXRvciBmcm9tICcuL0Jhc2ljVHlwaW5nSW5kaWNhdG9yJztcbmltcG9ydCBGb2N1c1JlZGlyZWN0b3IgZnJvbSAnLi9VdGlscy9Gb2N1c1JlZGlyZWN0b3InO1xuaW1wb3J0IGlucHV0dGFibGVLZXkgZnJvbSAnLi9VdGlscy9UeXBlRm9jdXNTaW5rL2lucHV0dGFibGVLZXknO1xuaW1wb3J0IGlzWmVyb09yUG9zaXRpdmUgZnJvbSAnLi9VdGlscy9pc1plcm9PclBvc2l0aXZlJztcbmltcG9ydCBLZXlib2FyZEhlbHAgZnJvbSAnLi9UcmFuc2NyaXB0L0tleWJvYXJkSGVscCc7XG5pbXBvcnQgTGl2ZVJlZ2lvblRyYW5zY3JpcHQgZnJvbSAnLi9UcmFuc2NyaXB0L0xpdmVSZWdpb25UcmFuc2NyaXB0Jztcbi8vIFRPRE86IFtQMl0gIzQxMzMgUmVuYW1lIHRvIFwiZ2V0VGFiYmFibGVFbGVtZW50c1wiLlxuaW1wb3J0IHRhYmJhYmxlRWxlbWVudHMgZnJvbSAnLi9VdGlscy90YWJiYWJsZUVsZW1lbnRzJztcbmltcG9ydCBUcmFuc2NyaXB0Rm9jdXNDb21wb3NlciBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXInO1xuaW1wb3J0IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlQWN0aXZlRGVzY2VuZGFudElkJztcbmltcG9ydCB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIgZnJvbSAnLi9wcm92aWRlcnMvQWN0aXZpdHlUcmVlL3VzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcic7XG5pbXBvcnQgdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbiBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoU2Nyb2xsUG9zaXRpb24nO1xuaW1wb3J0IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSc7XG5pbXBvcnQgdXNlRm9jdXMgZnJvbSAnLi9ob29rcy91c2VGb2N1cyc7XG5pbXBvcnQgdXNlRm9jdXNCeUFjdGl2aXR5S2V5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c0J5QWN0aXZpdHlLZXknO1xuaW1wb3J0IHVzZUZvY3VzZWRBY3Rpdml0eUtleSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEFjdGl2aXR5S2V5JztcbmltcG9ydCB1c2VGb2N1c2VkRXhwbGljaXRseSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNlZEV4cGxpY2l0bHknO1xuaW1wb3J0IHVzZUZvY3VzUmVsYXRpdmVBY3Rpdml0eSBmcm9tICcuL3Byb3ZpZGVycy9UcmFuc2NyaXB0Rm9jdXMvdXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5JztcbmltcG9ydCB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VQcmV2aW91cyc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZSBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUnO1xuaW1wb3J0IHVzZVJlZ2lzdGVyU2Nyb2xsVG8gZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VSZWdpc3RlclNjcm9sbFRvJztcbmltcG9ydCB1c2VSZWdpc3RlclNjcm9sbFRvRW5kIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5pbXBvcnQgdXNlVW5pcXVlSWQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VVbmlxdWVJZCc7XG5pbXBvcnQgdXNlVmFsdWVSZWYgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VWYWx1ZVJlZic7XG5cbmNvbnN0IHtcbiAgdXNlQWN0aXZpdHlLZXlzLFxuICB1c2VBY3Rpdml0eUtleXNCeVJlYWQsXG4gIHVzZUNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIsXG4gIHVzZUNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyLFxuICB1c2VEaXJlY3Rpb24sXG4gIHVzZUdldEFjdGl2aXR5QnlLZXksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHksXG4gIHVzZUdldEtleUJ5QWN0aXZpdHlJZCxcbiAgdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5LFxuICB1c2VMb2NhbGl6ZXIsXG4gIHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgdXNlTWFya0FsbEFzQWNrbm93bGVkZ2VkLFxuICB1c2VTdHlsZU9wdGlvbnNcbn0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIC8vIE1ha2Ugc3VyZSB0byBzZXQgXCJwb3NpdGlvbjogcmVsYXRpdmVcIiBoZXJlIHRvIGZvcm0gYW5vdGhlciBzdGFja2luZyBjb250ZXh0IGZvciB0aGUgc2Nyb2xsLXRvLWVuZCBidXR0b24uXG4gICAgLy8gU3RhY2tpbmcgY29udGV4dCBoZWxwIGlzb2xhdGluZyBlbGVtZW50cyB0aGF0IHVzZSBcInotaW5kZXhcIiBmcm9tIGdsb2JhbCBwb2xsdXRpb24uXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Qb3NpdGlvbmluZy9VbmRlcnN0YW5kaW5nX3pfaW5kZXgvVGhlX3N0YWNraW5nX2NvbnRleHRcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19maWxsZXInOiB7XG4gICAgICBmbGV4OiAxXG4gICAgfSxcblxuICAgICcmIC53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJzoge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3RyYW5zY3JpcHQnOiB7XG4gICAgICBsaXN0U3R5bGVUeXBlOiAnbm9uZSdcbiAgICB9XG4gIH1cbn07XG5cbnR5cGUgUmVuZGVyaW5nRWxlbWVudCA9IHtcbiAgYWN0aXZpdHk6IFdlYkNoYXRBY3Rpdml0eTtcbiAgY2FsbGJhY2tSZWY6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbiAgaGlkZVRpbWVzdGFtcDogYm9vbGVhbjtcbiAga2V5OiBzdHJpbmc7XG4gIHJlbmRlckFjdGl2aXR5OiBFeGNsdWRlPFJldHVyblR5cGU8QWN0aXZpdHlDb21wb25lbnRGYWN0b3J5PiwgZmFsc2U+O1xuICByZW5kZXJBY3Rpdml0eVN0YXR1czogKHByb3BzOiB7IGhpZGVUaW1lc3RhbXA/OiBib29sZWFuIH0pID0+IFJlYWN0Tm9kZTtcbiAgcmVuZGVyQXZhdGFyOiBBdmF0YXJDb21wb25lbnRGYWN0b3J5O1xuICBzaG93Q2FsbG91dDogYm9vbGVhbjtcbn07XG5cbnR5cGUgU2Nyb2xsQmVoYXZpb3IgPSAnYXV0bycgfCAnc21vb3RoJztcbnR5cGUgU2Nyb2xsVG9PcHRpb25zID0geyBiZWhhdmlvcj86IFNjcm9sbEJlaGF2aW9yIH07XG50eXBlIFNjcm9sbFRvUG9zaXRpb24gPSB7IGFjdGl2aXR5SUQ/OiBzdHJpbmc7IHNjcm9sbFRvcD86IG51bWJlciB9O1xuXG50eXBlIEludGVybmFsVHJhbnNjcmlwdFByb3BzID0ge1xuICBhY3Rpdml0eUVsZW1lbnRNYXBSZWY6IE11dGFibGVSZWZPYmplY3Q8QWN0aXZpdHlFbGVtZW50TWFwPjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLy8gVE9ETzogW1AxXSAjNDEzMyBBZGQgdGVsZW1ldHJ5IGZvciBjb21wdXRpbmcgaG93IG1hbnkgcmUtcmVuZGVyIGRvbmUgc28gZmFyLlxuY29uc3QgSW50ZXJuYWxUcmFuc2NyaXB0ID0gZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgSW50ZXJuYWxUcmFuc2NyaXB0UHJvcHM+KFxuICAoeyBhY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGNsYXNzTmFtZSB9LCByZWYpID0+IHtcbiAgICBjb25zdCBbeyBiYXNpY1RyYW5zY3JpcHQ6IGJhc2ljVHJhbnNjcmlwdFN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgICBjb25zdCBbeyBidWJibGVGcm9tVXNlck51Yk9mZnNldCwgYnViYmxlTnViT2Zmc2V0LCBncm91cFRpbWVzdGFtcCwgc2hvd0F2YXRhckluR3JvdXAgfV0gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBbYWN0aXZlRGVzY2VuZGFudElkXSA9IHVzZUFjdGl2ZURlc2NlbmRhbnRJZCgpO1xuICAgIGNvbnN0IFthY3Rpdml0eVdpdGhSZW5kZXJlclRyZWVdID0gdXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyKCk7XG4gICAgY29uc3QgW2RpcmVjdGlvbl0gPSB1c2VEaXJlY3Rpb24oKTtcbiAgICBjb25zdCBbZm9jdXNlZEFjdGl2aXR5S2V5XSA9IHVzZUZvY3VzZWRBY3Rpdml0eUtleSgpO1xuICAgIGNvbnN0IFtmb2N1c2VkRXhwbGljaXRseV0gPSB1c2VGb2N1c2VkRXhwbGljaXRseSgpO1xuICAgIGNvbnN0IGNyZWF0ZUFjdGl2aXR5U3RhdHVzUmVuZGVyZXIgPSB1c2VDcmVhdGVBY3Rpdml0eVN0YXR1c1JlbmRlcmVyKCk7XG4gICAgY29uc3QgY3JlYXRlQXZhdGFyUmVuZGVyZXIgPSB1c2VDcmVhdGVBdmF0YXJSZW5kZXJlcigpO1xuICAgIGNvbnN0IGZvY3VzID0gdXNlRm9jdXMoKTtcbiAgICBjb25zdCBmb2N1c0J5QWN0aXZpdHlLZXkgPSB1c2VGb2N1c0J5QWN0aXZpdHlLZXkoKTtcbiAgICBjb25zdCBmb2N1c1JlbGF0aXZlQWN0aXZpdHkgPSB1c2VGb2N1c1JlbGF0aXZlQWN0aXZpdHkoKTtcbiAgICBjb25zdCBnZXRBY3Rpdml0eUJ5S2V5ID0gdXNlR2V0QWN0aXZpdHlCeUtleSgpO1xuICAgIGNvbnN0IGdldEtleUJ5QWN0aXZpdHkgPSB1c2VHZXRLZXlCeUFjdGl2aXR5KCk7XG4gICAgY29uc3QgZ2V0S2V5QnlBY3Rpdml0eUlkID0gdXNlR2V0S2V5QnlBY3Rpdml0eUlkKCk7XG4gICAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgICBjb25zdCByb290Q2xhc3NOYW1lID0gdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QoKShST09UX1NUWUxFKSArICcnO1xuICAgIGNvbnN0IHJvb3RFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JMYWJlbElkID0gdXNlVW5pcXVlSWQoJ3dlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Rlcm1pbmF0b3ItbGFiZWwnKTtcbiAgICBjb25zdCB0ZXJtaW5hdG9yUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgY29uc3QgZm9jdXNlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYoZm9jdXNlZEFjdGl2aXR5S2V5KTtcbiAgICBjb25zdCBoaWRlQWxsVGltZXN0YW1wcyA9IGdyb3VwVGltZXN0YW1wID09PSBmYWxzZTtcbiAgICBjb25zdCB0ZXJtaW5hdG9yVGV4dCA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX1RFUk1JTkFUT1JfVEVYVCcpO1xuICAgIGNvbnN0IHRyYW5zY3JpcHRBcmlhTGFiZWwgPSBsb2NhbGl6ZSgnVFJBTlNDUklQVF9BUklBX0xBQkVMX0FMVCcpO1xuXG4gICAgY29uc3QgY2FsbGJhY2tSZWYgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJlZihlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByb290RWxlbWVudFJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBbcmVmLCByb290RWxlbWVudFJlZl1cbiAgICApO1xuXG4gICAgLy8gRmxhdHRlbiB0aGUgdHJlZSBiYWNrIGludG8gYW4gYXJyYXkgd2l0aCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHJlbmRlcmluZy5cbiAgICBjb25zdCByZW5kZXJpbmdFbGVtZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgcmVuZGVyaW5nRWxlbWVudHM6IFJlbmRlcmluZ0VsZW1lbnRbXSA9IFtdO1xuICAgICAgY29uc3QgdG9wU2lkZUJvdE51YiA9IGlzWmVyb09yUG9zaXRpdmUoYnViYmxlTnViT2Zmc2V0KTtcbiAgICAgIGNvbnN0IHRvcFNpZGVVc2VyTnViID0gaXNaZXJvT3JQb3NpdGl2ZShidWJibGVGcm9tVXNlck51Yk9mZnNldCk7XG5cbiAgICAgIGFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZS5mb3JFYWNoKGVudHJpZXNXaXRoU2FtZVNlbmRlciA9PiB7XG4gICAgICAgIGNvbnN0IFtbeyBhY3Rpdml0eTogZmlyc3RBY3Rpdml0eSB9XV0gPSBlbnRyaWVzV2l0aFNhbWVTZW5kZXI7XG4gICAgICAgIGNvbnN0IHJlbmRlckF2YXRhciA9IGNyZWF0ZUF2YXRhclJlbmRlcmVyKHsgYWN0aXZpdHk6IGZpcnN0QWN0aXZpdHkgfSk7XG5cbiAgICAgICAgZW50cmllc1dpdGhTYW1lU2VuZGVyLmZvckVhY2goKGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cywgaW5kZXhXaXRoaW5TZW5kZXJHcm91cCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpcnN0SW5TZW5kZXJHcm91cCA9ICFpbmRleFdpdGhpblNlbmRlckdyb3VwO1xuICAgICAgICAgIGNvbnN0IGxhc3RJblNlbmRlckdyb3VwID0gaW5kZXhXaXRoaW5TZW5kZXJHcm91cCA9PT0gZW50cmllc1dpdGhTYW1lU2VuZGVyLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMuZm9yRWFjaCgoeyBhY3Rpdml0eSwgcmVuZGVyQWN0aXZpdHkgfSwgaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCkgPT4ge1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzaG93IHRoZSB0aW1lc3RhbXAgYXQgdGhlIGVuZCBvZiB0aGUgc2VuZGVyIGdyb3VwLiBCdXQgd2UgYWx3YXlzIHNob3cgdGhlIFwiU2VuZCBmYWlsZWQsIHJldHJ5XCIgcHJvbXB0LlxuICAgICAgICAgICAgY29uc3QgZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwID0gIWluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IGdldEtleUJ5QWN0aXZpdHkoYWN0aXZpdHkpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPVxuICAgICAgICAgICAgICBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwID09PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckFjdGl2aXR5U3RhdHVzID0gY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlcih7XG4gICAgICAgICAgICAgIGFjdGl2aXR5LFxuICAgICAgICAgICAgICBuZXh0VmlzaWJsZUFjdGl2aXR5OiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdG9wU2lkZU51YiA9IGFjdGl2aXR5LmZyb20/LnJvbGUgPT09ICd1c2VyJyA/IHRvcFNpZGVVc2VyTnViIDogdG9wU2lkZUJvdE51YjtcblxuICAgICAgICAgICAgbGV0IHNob3dDYWxsb3V0OiBib29sZWFuO1xuXG4gICAgICAgICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIFwic2hvd0F2YXRhckluR3JvdXBcIiBzZXR0aW5nLCB0aGUgYXZhdGFyIHdpbGwgcmVuZGVyIGluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG4gICAgICAgICAgICBpZiAoc2hvd0F2YXRhckluR3JvdXAgPT09ICdzZW5kZXInKSB7XG4gICAgICAgICAgICAgIGlmICh0b3BTaWRlTnViKSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBmaXJzdEluU2VuZGVyR3JvdXAgJiYgZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0ID0gbGFzdEluU2VuZGVyR3JvdXAgJiYgbGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvd0F2YXRhckluR3JvdXAgPT09ICdzdGF0dXMnKSB7XG4gICAgICAgICAgICAgIGlmICh0b3BTaWRlTnViKSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBmaXJzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSBsYXN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hvd0NhbGxvdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJpbmdFbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG5cbiAgICAgICAgICAgICAgLy8gQWZ0ZXIgdGhlIGVsZW1lbnQgaXMgbW91bnRlZCwgc2V0IGl0IHRvIGFjdGl2aXR5RWxlbWVudHNSZWYuXG4gICAgICAgICAgICAgIGNhbGxiYWNrUmVmOiBhY3Rpdml0eUVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5RWxlbWVudFxuICAgICAgICAgICAgICAgICAgPyBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudC5zZXQoa2V5LCBhY3Rpdml0eUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICA6IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIC8vIFwiaGlkZVRpbWVzdGFtcFwiIGlzIGEgcmVuZGVyLXRpbWUgcGFyYW1ldGVyIGZvciByZW5kZXJBY3Rpdml0eVN0YXR1cygpLlxuICAgICAgICAgICAgICAvLyBJZiB0cnVlLCBpdCB3aWxsIGhpZGUgdGhlIHRpbWVzdGFtcCwgYnV0IGl0IHdpbGwgY29udGludWUgdG8gc2hvdyB0aGVcbiAgICAgICAgICAgICAgLy8gcmV0cnkgcHJvbXB0LiBBbmQgc2hvdyB0aGUgc2NyZWVuIHJlYWRlciB2ZXJzaW9uIG9mIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXA6XG4gICAgICAgICAgICAgICAgaGlkZUFsbFRpbWVzdGFtcHMgfHwgaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCAhPT0gZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5U3RhdHVzLFxuICAgICAgICAgICAgICByZW5kZXJBdmF0YXIsXG4gICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlbmRlcmluZ0VsZW1lbnRzO1xuICAgIH0sIFtcbiAgICAgIGFjdGl2aXR5RWxlbWVudE1hcFJlZixcbiAgICAgIGFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZSxcbiAgICAgIGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LFxuICAgICAgYnViYmxlTnViT2Zmc2V0LFxuICAgICAgY3JlYXRlQWN0aXZpdHlTdGF0dXNSZW5kZXJlcixcbiAgICAgIGNyZWF0ZUF2YXRhclJlbmRlcmVyLFxuICAgICAgZ2V0S2V5QnlBY3Rpdml0eSxcbiAgICAgIGhpZGVBbGxUaW1lc3RhbXBzLFxuICAgICAgc2hvd0F2YXRhckluR3JvdXBcbiAgICBdKTtcblxuICAgIGNvbnN0IHNjcm9sbFRvQm90dG9tU2Nyb2xsVG86IChzY3JvbGxUb3A6IG51bWJlciwgb3B0aW9ucz86IFNjcm9sbFRvT3B0aW9ucykgPT4gdm9pZCA9IHVzZVNjcm9sbFRvKCk7XG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUb0VuZDogKG9wdGlvbnM/OiBTY3JvbGxUb09wdGlvbnMpID0+IHZvaWQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG8gPSB1c2VDYWxsYmFjayhcbiAgICAgIChwb3NpdGlvbjogU2Nyb2xsVG9Qb3NpdGlvbiwgeyBiZWhhdmlvciA9ICdhdXRvJyB9OiBTY3JvbGxUb09wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBpZiAoIXBvc2l0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBGaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gXCJ1c2VTY3JvbGxUb1wiIG11c3QgYmUgYSBTY3JvbGxQb3NpdGlvbiBvYmplY3QuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGFjdGl2aXR5SUQ6IGFjdGl2aXR5SWQsIHNjcm9sbFRvcCB9ID0gcG9zaXRpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzY3JvbGxUb3AgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUbyhzY3JvbGxUb3AsIHsgYmVoYXZpb3IgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGl2aXR5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgY29uc3QgYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudFxuICAgICAgICAgICAgLmdldChnZXRLZXlCeUFjdGl2aXR5SWQoYWN0aXZpdHlJZCkpXG4gICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCcpO1xuXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSByb290RWxlbWVudFJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG5cbiAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUVsZW1lbnQgJiYgYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIEVTTGludCBjb25mbGljdCB3aXRoIFR5cGVTY3JpcHQuIFRoZSByZXN1bHQgb2YgZ2V0Q2xpZW50UmVjdHMoKSBpcyBub3QgYW4gQXJyYXkgYnV0IERPTVJlY3RMaXN0LCBhbmQgY2Fubm90IGJlIGRlc3RydWN0dXJlZC5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0ID0gYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QgPSBzY3JvbGxhYmxlRWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgICAgICAvLyBJZiBlaXRoZXIgdGhlIGFjdGl2aXR5IG9yIHRoZSB0cmFuc2NyaXB0IHNjcm9sbGFibGUgaXMgbm90IG9uIERPTSwgd2Ugd2lsbCBub3Qgc2Nyb2xsIHRoZSB2aWV3LlxuICAgICAgICAgICAgaWYgKGFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Q2xpZW50UmVjdCAmJiBzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQ6IGFjdGl2aXR5SGVpZ2h0LCB5OiBhY3Rpdml0eVkgfSA9IGFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Q2xpZW50UmVjdDtcbiAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHNjcm9sbGFibGVIZWlnaHQgfSA9IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdDtcbiAgICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlPZmZzZXRUb3AgPSBhY3Rpdml0eVkgKyBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gTWF0aC5taW4oYWN0aXZpdHlPZmZzZXRUb3AsIGFjdGl2aXR5T2Zmc2V0VG9wIC0gc2Nyb2xsYWJsZUhlaWdodCArIGFjdGl2aXR5SGVpZ2h0KTtcblxuICAgICAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBnZXRLZXlCeUFjdGl2aXR5SWQsIHJvb3RFbGVtZW50UmVmLCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxUb0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gc2Nyb2xsVG9Cb3R0b21TY3JvbGxUb0VuZCh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KSxcbiAgICAgIFtzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kXVxuICAgICk7XG5cbiAgICBjb25zdCBzY3JvbGxSZWxhdGl2ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGRpcmVjdGlvbjogJ2Rvd24nIHwgJ3VwJywgeyBkaXNwbGFjZW1lbnQgfTogeyBkaXNwbGFjZW1lbnQ/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogcm9vdEVsZW1lbnQgfSA9IHJvb3RFbGVtZW50UmVmO1xuXG4gICAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlOiBIVE1MRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG4gICAgICAgIGxldCBuZXh0U2Nyb2xsVG9wOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwbGFjZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICBuZXh0U2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5zY3JvbGxUb3AgKyAoZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTEpICogZGlzcGxhY2VtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgbmV4dFNjcm9sbFRvcCA9IHNjcm9sbGFibGUuc2Nyb2xsVG9wICsgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xKSAqIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgc2Nyb2xsVG8oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Nyb2xsVG9wOiBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxhYmxlLnNjcm9sbEhlaWdodCAtIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0LCBuZXh0U2Nyb2xsVG9wKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgYmVoYXZpb3I6ICdzbW9vdGgnIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBbcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvXVxuICAgICk7XG5cbiAgICAvLyBTaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgPEJhc2ljVHJhbnNjcmlwdD4gaW5zaWRlIHRoZSA8Q29tcG9zZXI+LCB3aGVuIHRoZSBkZXZlbG9wZXIgY2FsbHMgYHNjcm9sbFhYWGAsIHdlIG5lZWQgdG8gY2FsbCBpdCBvbiBhbGwgaW5zdGFuY2VzLlxuICAgIC8vIFdlIGNhbGwgYHVzZVJlZ2lzdGVyU2Nyb2xsWFhYYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgYHVzZVNjcm9sbFhYWGAgd2lsbCBtdWx0aXBsZXggdGhlIGNhbGwgaW50byBlYWNoIGluc3RhbmNlIG9mIDxCYXNpY1RyYW5zY3JpcHQ+LlxuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG8oc2Nyb2xsVG8pO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG9FbmQoc2Nyb2xsVG9FbmQpO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmUoc2Nyb2xsUmVsYXRpdmUpO1xuXG4gICAgY29uc3QgbWFya0FjdGl2aXR5S2V5QXNSZWFkID0gdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkKCk7XG5cbiAgICBjb25zdCBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQ6IChzY3JvbGxQb3NpdGlvbjogU2Nyb2xsVG9Qb3NpdGlvbikgPT4gdm9pZCA9XG4gICAgICB1c2VEaXNwYXRjaFNjcm9sbFBvc2l0aW9uKCk7XG5cbiAgICAvLyBUT0RPOiBbUDJdIFdlIHNob3VsZCB1c2UgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gdHJhY2sgd2hhdCBhY3Rpdml0eSBpcyBpbiB0aGUgc2Nyb2xsYWJsZS5cbiAgICAvLyAgICAgICAgICAgIEhvd2V2ZXIsIEludGVyc2VjdGlvbk9ic2VydmVyIGlzIG5vdCBhdmFpbGFibGUgb24gSUUxMSwgd2UgbmVlZCB0byBtYWtlIGEgbGltaXRlZCBwb2x5ZmlsbCBpbiBSZWFjdCBzdHlsZS5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGxQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHsgc2Nyb2xsVG9wIH06IHsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IHJvb3RFbGVtZW50IH0gPSByb290RWxlbWVudFJlZjtcblxuICAgICAgICBpZiAoIXJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSByb290RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fc2Nyb2xsYWJsZScpO1xuXG4gICAgICAgIC8vIFwiZ2V0Q2xpZW50UmVjdHMoKVwiIGlzIG5vdCByZXR1cm5pbmcgYW4gYXJyYXksIHRodXMsIGl0IGlzIG5vdCBkZXN0cnVjdHVyYWJsZS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCA9IHNjcm9sbGFibGVFbGVtZW50LmdldENsaWVudFJlY3RzKClbMF07XG5cbiAgICAgICAgLy8gSWYgdGhlIHNjcm9sbGFibGUgaXMgbm90IG1vdW50ZWQsIHdlIGNhbm5vdCBtZWFzdXJlIHdoaWNoIGFjdGl2aXR5IGlzIGluIHZpZXcuIFRodXMsIHdlIHdpbGwgbm90IGZpcmUgYW55IGV2ZW50cy5cbiAgICAgICAgaWYgKCFzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGJvdHRvbTogc2Nyb2xsYWJsZUNsaWVudEJvdHRvbSB9ID0gc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0O1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGFjdGl2aXR5IGp1c3QgYWJvdmUgc2Nyb2xsIHZpZXcgYm90dG9tLlxuICAgICAgICAvLyBJZiB0aGUgc2Nyb2xsIHZpZXcgaXMgYWxyZWFkeSBvbiB0b3AsIGdldCB0aGUgZmlyc3QgYWN0aXZpdHkuXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5RWxlbWVudHMgPSBBcnJheS5mcm9tKGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50LmVudHJpZXMoKSk7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoXG4gICAgICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgICAgICAgICA/IGFjdGl2aXR5RWxlbWVudHNcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLy8gQWRkIHN1YnBpeGVsIHRvbGVyYW5jZVxuICAgICAgICAgICAgICAgIC5maW5kKChbLCBlbGVtZW50XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gXCJnZXRDbGllbnRSZWN0cygpXCIgaXMgbm90IHJldHVybmluZyBhbiBhcnJheSwgdGh1cywgaXQgaXMgbm90IGRlc3RydWN0dXJhYmxlLlxuICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTtcblxuICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IGlzIG5vdCBhdHRhY2hlZCB0byBET00gdHJlZSwgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdCBhcyBcImJvdHRvbW1vc3QgdmlzaWJsZSBhY3Rpdml0eVwiLCBhcyBpdCBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Q2xpZW50UmVjdCAmJiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gPCBzY3JvbGxhYmxlQ2xpZW50Qm90dG9tICsgMTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBhY3Rpdml0eUVsZW1lbnRzWzBdXG4gICAgICAgICk/LlswXTtcblxuICAgICAgICAvLyBXaGVuIHRoZSBlbmQtdXNlciBzbG93bHkgc2Nyb2xsaW5nIHRoZSB2aWV3IGRvd24sIHdlIHdpbGwgbWFyayBhY3Rpdml0eSBhcyByZWFkIHdoZW4gdGhlIG1lc3NhZ2UgZnVsbHkgYXBwZWFyIG9uIHRoZSBzY3JlZW4uXG4gICAgICAgIGFjdGl2aXR5S2V5SnVzdEFib3ZlU2Nyb2xsQm90dG9tICYmIG1hcmtBY3Rpdml0eUtleUFzUmVhZChhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgaWYgKGRpc3BhdGNoU2Nyb2xsUG9zaXRpb25XaXRoQWN0aXZpdHlJZCkge1xuICAgICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gZ2V0QWN0aXZpdHlCeUtleShhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSk7XG5cbiAgICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQoeyAuLi4oYWN0aXZpdHkgPyB7IGFjdGl2aXR5SUQ6IGFjdGl2aXR5LmlkIH0gOiB7fSksIHNjcm9sbFRvcCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgYWN0aXZpdHlFbGVtZW50TWFwUmVmLFxuICAgICAgICBkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQsXG4gICAgICAgIGdldEFjdGl2aXR5QnlLZXksXG4gICAgICAgIG1hcmtBY3Rpdml0eUtleUFzUmVhZCxcbiAgICAgICAgcm9vdEVsZW1lbnRSZWZcbiAgICAgIF1cbiAgICApO1xuXG4gICAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uKGhhbmRsZVNjcm9sbFBvc2l0aW9uKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duID0gdXNlQ2FsbGJhY2s8S2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+PihcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPSB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgZnJvbVRyYW5zY3JpcHQgPSB0YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgaWYgKCFmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yICYmICFmcm9tVHJhbnNjcmlwdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICBmb2N1c1JlbGF0aXZlQWN0aXZpdHkoZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciA/IDAgOiAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPyAwIDogLTEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KEluZmluaXR5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBjYXB0dXJpbmcgcGxhaW4gRU5URVIuXG4gICAgICAgICAgICAvLyBXaGVuIHNjcmVlbiByZWFkZXIgaXMgbm90IHJ1bm5pbmcsIG9yIHNjcmVlbiByZWFkZXIgaXMgcnVubmluZyBvdXRzaWRlIG9mIHNjYW4gbW9kZSwgdGhlIEVOVEVSIGtleSB3aWxsIGJlIGNhcHR1cmVkIGhlcmUuXG4gICAgICAgICAgICBpZiAoIWZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSFRNTEVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudFxuICAgICAgICAgICAgICAgIC5nZXQoZm9jdXNlZEFjdGl2aXR5S2V5UmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYm9keScpO1xuXG4gICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudHMoYm9keSlbMF0/LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgIGZvY3VzKCdzZW5kQm94V2l0aG91dEtleWJvYXJkJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KC1JbmZpbml0eSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYW5kbGVkKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIC8vIElmIGEgY3VzdG9tIEhUTUwgY29udHJvbCB3YW50cyB0byBoYW5kbGUgdXAvZG93biBhcnJvdywgd2Ugd2lsbCBwcmV2ZW50IHRoZW0gZnJvbSBsaXN0ZW5pbmcgdG8gdGhpcyBldmVudCB0byBwcmV2ZW50IGJ1Z3MgZHVlIHRvIGhhbmRsaW5nIGFycm93IGtleXMgdHdpY2UuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYWN0aXZpdHlFbGVtZW50TWFwUmVmLCBmb2N1cywgZm9jdXNlZEFjdGl2aXR5S2V5UmVmLCBmb2N1c1JlbGF0aXZlQWN0aXZpdHksIHRlcm1pbmF0b3JSZWZdXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pj4oXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWx0S2V5LCBjdHJsS2V5LCBrZXksIG1ldGFLZXksIHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKGFsdEtleSB8fCAoY3RybEtleSAmJiBrZXkgIT09ICd2JykgfHwgbWV0YUtleSB8fCAoIWlucHV0dGFibGVLZXkoa2V5KSAmJiBrZXkgIT09ICdCYWNrc3BhY2UnKSkge1xuICAgICAgICAgIC8vIElnbm9yZSBpZiBvbmUgb2YgdGhlIHV0aWxpdHkga2V5IChleGNlcHQgU0hJRlQpIGlzIHByZXNzZWRcbiAgICAgICAgICAvLyBFLmcuIENUUkwtQyBvbiBhIGxpbmsgaW4gb25lIG9mIHRoZSBtZXNzYWdlIHNob3VsZCBub3QganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIC8vIEUuZy4gXCJBXCIgb3IgXCJCYWNrc3BhY2VcIiBzaG91bGQganVtcCB0byBjaGF0IGJveFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbmQga2V5c3Ryb2tlcyB0byBzZW5kIGJveCBpZiB3ZSBhcmUgZm9jdXNpbmcgb24gdGhlIHRyYW5zY3JpcHQgb3IgdGVybWluYXRvci5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fCB0YXJnZXQgPT09IHRlcm1pbmF0b3JSZWYuY3VycmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgZm9jdXMoJ3NlbmRCb3gnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtmb2N1c11cbiAgICApO1xuXG4gICAgdXNlUmVnaXN0ZXJGb2N1c1RyYW5zY3JpcHQodXNlQ2FsbGJhY2soKCkgPT4gZm9jdXNCeUFjdGl2aXR5S2V5KHVuZGVmaW5lZCksIFtmb2N1c0J5QWN0aXZpdHlLZXldKSk7XG5cbiAgICAvLyBXaGVuIHRoZSBmb2N1c2luZyBhY3Rpdml0eSBoYXMgY2hhbmdlZCwgZGlzcGF0Y2ggYW4gZXZlbnQgdG8gb2JzZXJ2ZXJzIG9mIFwidXNlT2JzZXJ2ZVRyYW5zY3JpcHRGb2N1c1wiLlxuICAgIGNvbnN0IGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSA9IHVzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSgpO1xuXG4gICAgLy8gRGlzcGF0Y2ggYSBcInRyYW5zY3JpcHQgZm9jdXNcIiBldmVudCBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbi5cbiAgICAvLyBXZSBzaG91bGQgbm90IGRpc3BhdGNoIFwidHJhbnNjcmlwdCBmb2N1c1wiIHdoZW4gYSBuZXcgYWN0aXZpdHkgY29tZS4gQWx0aG91Z2ggdGhlIHNlbGVjdGlvbiBjaGFuZ2UsIGl0IGlzIG5vdCBpbml0aWF0ZWQgZnJvbSB0aGUgdXNlci5cbiAgICB1c2VNZW1vKFxuICAgICAgKCkgPT4gZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5KGZvY3VzZWRFeHBsaWNpdGx5ID8gZm9jdXNlZEFjdGl2aXR5S2V5IDogdW5kZWZpbmVkKSxcbiAgICAgIFtkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXksIGZvY3VzZWRBY3Rpdml0eUtleSwgZm9jdXNlZEV4cGxpY2l0bHldXG4gICAgKTtcblxuICAgIC8vIFdoZW4gdGhlIHRyYW5zY3JpcHQgaXMgYmVpbmcgZm9jdXNlZCBvbiwgd2Ugc2hvdWxkIGRpc3BhdGNoIGEgXCJ0cmFuc2NyaXB0Zm9jdXNcIiBldmVudC5cbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUNhbGxiYWNrKFxuICAgICAgLy8gV2UgY2FsbCBcImZvY3VzQnlBY3Rpdml0eUtleVwiIHdpdGggYWN0aXZpdHkga2V5IG9mIFwidHJ1ZVwiLlxuICAgICAgLy8gSXQgbWVhbnMsIHRyaWVzIHRvIGZvY3VzIG9uIGFueXRoaW5nLlxuICAgICAgKHsgY3VycmVudFRhcmdldCwgdGFyZ2V0IH0pID0+IHRhcmdldCA9PT0gY3VycmVudFRhcmdldCAmJiBmb2N1c0J5QWN0aXZpdHlLZXkodHJ1ZSwgZmFsc2UpLFxuICAgICAgW2ZvY3VzQnlBY3Rpdml0eUtleV1cbiAgICApO1xuXG4gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBJRTExLlxuICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIGFuZCBlbXB0eSBzcGFjZSAoYS5rLmEuIGZpbGxlcikgaW4gYW4gZW1wdHkgdHJhbnNjcmlwdCwgSUUxMSBzYXlzIHRoZSBmb2N1cyBpcyBvbiB0aGUgPGRpdiBjbGFzc05hbWU9XCJmaWxsZXJcIj4sXG4gICAgLy8gZGVzcGl0ZSB0aGUgZmFjdCB0aGVyZSBhcmUgbm8gXCJ0YWJJbmRleFwiIGF0dHJpYnV0ZXMgc2V0IG9uIHRoZSBmaWxsZXIuXG4gICAgLy8gV2UgbmVlZCB0byBhcnRpZmljaWFsbHkgc2VuZCB0aGUgZm9jdXMgYmFjayB0byB0aGUgdHJhbnNjcmlwdC5cbiAgICBjb25zdCBoYW5kbGVGb2N1c0ZpbGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IGZvY3VzQnlBY3Rpdml0eUtleSh1bmRlZmluZWQpLCBbZm9jdXNCeUFjdGl2aXR5S2V5XSk7XG5cbiAgICAvLyBXaGVuIGZvY3VzIGludG8gdGhlIHRyYW5zY3JpcHQgdXNpbmcgVEFCL1NISUZULVRBQiwgc2Nyb2xsIHRoZSBmb2N1c2VkIGFjdGl2aXR5IGludG8gdmlldy5cbiAgICB1c2VPYnNlcnZlRm9jdXNWaXNpYmxlKFxuICAgICAgcm9vdEVsZW1lbnRSZWYsXG4gICAgICB1c2VDYWxsYmFjaygoKSA9PiBmb2N1c0J5QWN0aXZpdHlLZXkodW5kZWZpbmVkKSwgW2ZvY3VzQnlBY3Rpdml0eUtleV0pXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIC8vIEFsdGhvdWdoIEFuZHJvaWQgVGFsa0JhY2sgMTIuMSBkb2VzIG5vdCBzdXBwb3J0IGBhcmlhLWFjdGl2ZWRlc2NlbmRhbnRgLCB3aGVuIHVzZWQsIGl0IGJlY29tZSBidWdneSBhbmQgd2lsbCBuYXJyYXRlIGNvbnRlbnQgdHdpY2UuXG4gICAgICAgIC8vIFdlIGFyZSBkaXNhYmxpbmcgYGFyaWEtYWN0aXZlZGVzY2VuZGFudGAgZm9yIEFuZHJvaWQuIFNlZSA8QWN0aXZpdHlSb3c+IGZvciBkZXRhaWxzLlxuICAgICAgICBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9e2FuZHJvaWQgPyB1bmRlZmluZWQgOiBhY3RpdmVEZXNjZW5kYW50SWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RyYW5zY3JpcHRBcmlhTGFiZWx9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdCcsXG4gICAgICAgICAgYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgKyAnJyxcbiAgICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICAgIChjbGFzc05hbWUgfHwgJycpICsgJydcbiAgICAgICAgKX1cbiAgICAgICAgZGlyPXtkaXJlY3Rpb259XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZUZvY3VzfVxuICAgICAgICBvbktleURvd249e2hhbmRsZVRyYW5zY3JpcHRLZXlEb3dufVxuICAgICAgICBvbktleURvd25DYXB0dXJlPXtoYW5kbGVUcmFuc2NyaXB0S2V5RG93bkNhcHR1cmV9XG4gICAgICAgIHJlZj17Y2FsbGJhY2tSZWZ9XG4gICAgICAgIC8vIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIgd2lsbCBvbmx5IHdvcmtzIHdpdGggYSBudW1iZXIgb2Ygcm9sZXMgYW5kIGl0IG11c3QgYmUgZXhwbGljaXRseSBzZXQuXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIC8vIEZvciB1cC9kb3duIGFycm93IGtleSBuYXZpZ2F0aW9uIGFjcm9zcyBhY3Rpdml0aWVzLCB0aGlzIGNvbXBvbmVudCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSB0YWIgc2VxdWVuY2UuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiB3aWxsIG5vdCBiZSBuYXJyYXRlZCB3aGVuIHRoZSB1c2VyIHByZXNzIHVwL2Rvd24gYXJyb3cga2V5cy5cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjEvI2tiZF9mb2N1c19hY3RpdmVkZXNjZW5kYW50XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgPlxuICAgICAgICA8TGl2ZVJlZ2lvblRyYW5zY3JpcHQgYWN0aXZpdHlFbGVtZW50TWFwUmVmPXthY3Rpdml0eUVsZW1lbnRNYXBSZWZ9IC8+XG4gICAgICAgIHsvKiBUT0RPOiBbUDJdIEZpeCBFU0xpbnQgZXJyb3IgYG5vLXVzZS1iZWZvcmUtZGVmaW5lYCAqL31cbiAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi99XG4gICAgICAgIDxJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlIG9uRm9jdXNGaWxsZXI9e2hhbmRsZUZvY3VzRmlsbGVyfSB0ZXJtaW5hdG9yUmVmPXt0ZXJtaW5hdG9yUmVmfT5cbiAgICAgICAgICB7cmVuZGVyaW5nRWxlbWVudHMubWFwKFxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgIGNhbGxiYWNrUmVmLFxuICAgICAgICAgICAgICBoaWRlVGltZXN0YW1wLFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIHJlbmRlckFjdGl2aXR5LFxuICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgcmVuZGVyQXZhdGFyLFxuICAgICAgICAgICAgICBzaG93Q2FsbG91dFxuICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICA8QWN0aXZpdHlSb3cgYWN0aXZpdHk9e2FjdGl2aXR5fSBrZXk9e2tleX0gcmVmPXtjYWxsYmFja1JlZn0+XG4gICAgICAgICAgICAgICAge3JlbmRlckFjdGl2aXR5KHtcbiAgICAgICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICByZW5kZXJBY3Rpdml0eVN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckF2YXRhcixcbiAgICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvQWN0aXZpdHlSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlPlxuICAgICAgICB7ISFyZW5kZXJpbmdFbGVtZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Jvb3RFbGVtZW50UmVmfSAvPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt0ZXJtaW5hdG9yTGFiZWxJZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvclwiXG4gICAgICAgICAgICAgIHJlZj17dGVybWluYXRvclJlZn1cbiAgICAgICAgICAgICAgcm9sZT1cIm5vdGVcIlxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X190ZXJtaW5hdG9yLWJvZHlcIj5cbiAgICAgICAgICAgICAgICB7LyogYGlkYCBpcyByZXF1aXJlZCBmb3IgYGFyaWEtbGFiZWxsZWRieWAgKi99XG4gICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mb3JiaWQtZG9tLXByb3BzICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci10ZXh0XCIgaWQ9e3Rlcm1pbmF0b3JMYWJlbElkfT5cbiAgICAgICAgICAgICAgICAgIHt0ZXJtaW5hdG9yVGV4dH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZvY3VzLWluZGljYXRvclwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6ICcnXG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHQucHJvcFR5cGVzID0ge1xuICAvLyBQcm9wVHlwZXMgY2Fubm90IHZhbGlkYXRlIHByZWNpc2VseSB3aXRoIGl0cyBUeXBlU2NyaXB0IGNvdW50ZXJwYXJ0LlxuICAvLyBAdHMtaWdub3JlXG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuaW5zdGFuY2VPZihNYXApXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxudHlwZSBJbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBvbkZvY3VzRmlsbGVyOiAoKSA9PiB2b2lkO1xuICB0ZXJtaW5hdG9yUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbi8vIFNlcGFyYXRpbmcgaGlnaC1mcmVxdWVuY3kgaG9va3MgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cbmNvbnN0IEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGU6IEZDPEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGVQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgb25Gb2N1c0ZpbGxlcixcbiAgdGVybWluYXRvclJlZlxufSkgPT4ge1xuICBjb25zdCBbeyBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzU3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICBjb25zdCBbYW5pbWF0aW5nVG9FbmRdOiBbYm9vbGVhbl0gPSB1c2VBbmltYXRpbmdUb0VuZCgpO1xuICBjb25zdCBbYXRFbmRdOiBbYm9vbGVhbl0gPSB1c2VBdEVuZCgpO1xuICBjb25zdCBbLCB1bnJlYWRBY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzQnlSZWFkKCk7XG4gIGNvbnN0IFtzdGlja3ldOiBbYm9vbGVhbl0gPSB1c2VTdGlja3koKTtcbiAgY29uc3QgW3N0eWxlT3B0aW9uc10gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgZm9jdXNCeUFjdGl2aXR5S2V5ID0gdXNlRm9jdXNCeUFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IGxvY2FsaXplID0gdXNlTG9jYWxpemVyKCk7XG4gIGNvbnN0IG1hcmtBY3Rpdml0eUtleUFzUmVhZCA9IHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCgpO1xuICBjb25zdCBtYXJrQWxsQXNBY2tub3dsZWRnZWQgPSB1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQoKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQ6IChvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG9FbmQoKTtcblxuICBjb25zdCBwcmV2U3RpY2t5ID0gdXNlUHJldmlvdXMoc3RpY2t5KTtcbiAgY29uc3QgdHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbiA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX0FSSUFfUk9MRV9BTFQnKTtcblxuICBjb25zdCBzdGlja3lDaGFuZ2VkVG9UcnVlID0gcHJldlN0aWNreSAhPT0gc3RpY2t5ICYmIHN0aWNreTtcblxuICAvLyBBY2tub3dsZWRnZWQgbWVhbnMgZWl0aGVyOlxuICAvLyAxLiBUaGUgdXNlciBzZW50IGEgbWVzc2FnZVxuICAvLyAgICAtIFdlIGRvbid0IG5lZWQgYSBjb25kaXRpb24gaGVyZS4gV2hlbiBXZWIgQ2hhdCBzZW5kcyB0aGUgdXNlcidzIG1lc3NhZ2UsIGl0IHdpbGwgc2Nyb2xsIHRvIGJvdHRvbSwgYW5kIGl0IHdpbGwgdHJpZ2dlciBjb25kaXRpb24gMiBiZWxvdy5cbiAgLy8gMi4gVGhlIHVzZXIgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHQsIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblxuICAvLyAgICAtIElmIHRoZSB0cmFuc2NyaXB0IGlzIGFscmVhZHkgYXQgdGhlIGJvdHRvbSwgdGhlIHVzZXIgbmVlZHMgdG8gc2Nyb2xsIHVwIGFuZCB0aGVuIGdvIGJhY2sgZG93blxuICAvLyAgICAtIFdoYXQgaGFwcGVucyBpZiB3ZSBhcmUgcmVsYXhpbmcgXCJzY3JvbGxlZCBmcm9tIGEgbm9uLWJvdHRvbSBzY3JvbGwgcG9zaXRpb25cIjpcbiAgLy8gICAgICAxLiBUaGUgY29uZGl0aW9uIHdpbGwgYmVjb21lIHNvbGVseSBcImF0IHRoZSBib3R0b20gb2YgdGhlIHRyYW5zY3JpcHRcIlxuICAvLyAgICAgIDIuIEF1dG8tc2Nyb2xsIHdpbGwgYWx3YXlzIHNjcm9sbCB0aGUgdHJhbnNjcmlwdCB0byB0aGUgYm90dG9tXG4gIC8vICAgICAgMy4gV2ViIENoYXQgd2lsbCBhbHdheXMgYWNrbm93bGVkZ2UgYWxsIGFjdGl2aXRpZXMgYXMgaXQgaXMgYXQgdGhlIGJvdHRvbVxuICAvLyAgICAgIDQuIEFja25vd2xlZGdlIGZsYWcgYmVjb21lIHVzZWxlc3NcbiAgLy8gICAgICA1LiBUaGVyZWZvcmUsIGV2ZW4gdGhlIGRldmVsb3BlciBzZXQgXCJwYXVzZSBhZnRlciAzIGFjdGl2aXRpZXNcIiwgaWYgYWN0aXZpdGllcyBhcmUgY29taW5nIGluIGF0IGEgc2xvdyBwYWNlIChub3QgYmF0Y2hlZCBpbiBhIHNpbmdsZSByZW5kZXIpXG4gIC8vICAgICAgICAgV2ViIENoYXQgd2lsbCBrZWVwIHNjcm9sbGluZyBhbmQgbm90IHNuYXBwZWQvcGF1c2VkXG5cbiAgLy8gTm90ZTogV2hlbiBXZWIgQ2hhdCBpcyBsb2FkZWQsIHRoZXJlIGFyZSBubyBhY3Rpdml0aWVzIGFja25vd2xlZGdlZC4gV2UgbmVlZCB0byBhc3N1bWUgYWxsIGFycml2aW5nIGFjdGl2aXRpZXMgYXJlIGFja25vd2xlZGdlZCB1bnRpbCBlbmQtdXNlciBzZW5kcyB0aGVpciBmaXJzdCBhY3Rpdml0eS5cbiAgLy8gICAgICAgQWN0aXZpdGllcyBsb2FkZWQgaW5pdGlhbGx5IGNvdWxkIGJlIGZyb20gY29udmVyc2F0aW9uIGhpc3RvcnkuIFdpdGhvdXQgYXNzdW1pbmcgYWNrbm93bGVkZ2VtZW50LCBXZWIgQ2hhdCB3aWxsIG5vdCBzY3JvbGwgaW5pdGlhbGx5IChhcyBldmVyeXRoaW5nIGlzIG5vdCBhY2tub3dsZWRnZWQpLlxuICAvLyAgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlIGNoYXQgYWRhcHRlciBzaG91bGQgbGV0IFdlYiBDaGF0IGtub3cgaWYgdGhlIGFjdGl2aXR5IGlzIGxvYWRlZCBmcm9tIGhpc3Rvcnkgb3Igbm90LlxuXG4gIC8vIFRPRE86IFtQMl0gIzM2NzAgTW92ZSB0aGUgXCJjb252ZXJzYXRpb24gaGlzdG9yeSBhY2tub3dsZWRnZW1lbnRcIiBsb2dpYyBtZW50aW9uZWQgYWJvdmUgdG8gcG9seWZpbGwgb2YgY2hhdCBhZGFwdGVycy5cbiAgLy8gICAgICAgMS4gQ2hhdCBhZGFwdGVyIHNob3VsZCBzZW5kIFwiYWNrbm93bGVkZ2VkXCIgYXMgcGFydCBvZiBcImNoYW5uZWxEYXRhXCJcbiAgLy8gICAgICAgMi4gSWYgXCJhY2tub3dsZWRnZWRcIiBpcyBcInVuZGVmaW5lZFwiLCB3ZSBzZXQgaXQgdG86XG4gIC8vICAgICAgICAgIGEuIHRydWUsIGlmIHRoZXJlIGFyZSBubyBlZ3Jlc3MgYWN0aXZpdGllcyB5ZXRcbiAgLy8gICAgICAgICAgYi4gT3RoZXJ3aXNlLCBmYWxzZVxuXG4gIHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHN0aWNreUNoYW5nZWRUb1RydWUgJiZcbiAgICAgIC8vIFRPRE86IFtQMl0gQm90aCBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCBhbmQgYG1hcmtBbGxBc0Fja25vd2xlZGdlZGAgaG9vayBhcmUgc2V0dGVycyBvZiB1c2VTdGF0ZS5cbiAgICAgIC8vICAgICAgIFRoaXMgbWVhbnMsIGluIGEgcmVuZGVyIGxvb3AsIHdlIHdpbGwgYmUgY2FsbGluZyBzZXR0ZXIgYW5kIHdpbGwgY2F1c2UgYW5vdGhlciByZS1yZW5kZXIuXG4gICAgICAvLyAgICAgICBUaGlzIGlzIG5vdCB0cml2aWFsIGJ1dCB3ZSBzaG91bGQgdGhpbmsgaWYgdGhlcmUgaXMgYSB3YXkgdG8gYXZvaWQgdGhpcy5cbiAgICAgIG1hcmtBbGxBc0Fja25vd2xlZGdlZCgpLFxuICAgIFttYXJrQWxsQXNBY2tub3dsZWRnZWQsIHN0aWNreUNoYW5nZWRUb1RydWVdXG4gICk7XG5cbiAgY29uc3QgW2ZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcl0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoeyBmbGF0OiB0cnVlIH0pO1xuICBjb25zdCBnZXRLZXlCeUFjdGl2aXR5ID0gdXNlR2V0S2V5QnlBY3Rpdml0eSgpO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5czogc3RyaW5nW10gPSB1c2VNZW1vPHN0cmluZ1tdPihcbiAgICAoKSA9PiBmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIubWFwKCh7IGFjdGl2aXR5IH0pID0+IGdldEtleUJ5QWN0aXZpdHkoYWN0aXZpdHkpKSxcbiAgICBbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyLCBnZXRLZXlCeUFjdGl2aXR5XVxuICApO1xuXG4gIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZiA9IHVzZVZhbHVlUmVmKHJlbmRlcmluZ0FjdGl2aXR5S2V5cyk7XG5cbiAgLy8gVG8gcHJldmVudCBmbGFzaHkgYnV0dG9uLCB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGFub3RoZXIgcmVuZGVyIGxvb3AgdG8gdXBkYXRlIHRoZSBgW3JlYWRBY3Rpdml0eUtleXMsIHVucmVhZEFjdGl2aXR5S2V5c11gIHN0YXRlLlxuICAvLyBJbnN0ZWFkLCB3ZSBhcmUgYnVpbGRpbmcgdGhlIG5leHQgb25lIGluIHRoaXMgYHVzZU1lbW9gIGNhbGwuXG4gIGNvbnN0IG5leHRVbnJlYWRBY3Rpdml0eUtleXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBUaGlzIGNvZGUgbmVlZCB0byBiZSBjYXJlZnVsIHJldmlld2VkIGFzIGl0IHdpbGwgY2F1c2UgYW5vdGhlciByZW5kZXIuIFRoZSBjb2RlIHNob3VsZCBiZSBjb252ZXJnaW5nLlxuICAgIC8vIEFmdGVyIHdlIGNhbGwgYG1hcmtBY3Rpdml0eUtleUFzUmVhZGAsIGV2ZXJ5dGhpbmcgd2lsbCBiZSByZWFkIGFuZCBub3RoaW5nIHdpbGwgYmUgdW5yZWFkLlxuICAgIC8vIFRoYXQgbWVhbnMsIGluIG5leHQgcmVuZGVyLCBgdW5yZWFkQWN0aXZpdHlLZXlzYCB3aWxsIGJlIGVtcHRpZWQgYW5kIHRoZSBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCB3aWxsIG5vdCBnZXQgY2FsbGVkIGFnYWluLlxuICAgIGlmIChzdGlja3kgJiYgdW5yZWFkQWN0aXZpdHlLZXlzLmxlbmd0aCkge1xuICAgICAgbWFya0FjdGl2aXR5S2V5QXNSZWFkKHVucmVhZEFjdGl2aXR5S2V5c1t1bnJlYWRBY3Rpdml0eUtleXMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHVucmVhZEFjdGl2aXR5S2V5cztcbiAgfSwgW21hcmtBY3Rpdml0eUtleUFzUmVhZCwgc3RpY2t5LCB1bnJlYWRBY3Rpdml0eUtleXNdKTtcblxuICBjb25zdCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYobmV4dFVucmVhZEFjdGl2aXR5S2V5cyk7XG5cbiAgLy8gSWYgd2UgYXJlIHJlbmRlcmluZyBhbnl0aGluZyB0aGF0IGlzIHVucmVhZCwgd2Ugc2hvdWxkIHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uLlxuICAvLyBOb3QgZXZlcnl0aGluZyBpbiB0aGUgYHVucmVhZEFjdGl2aXR5S2V5c2AgYXJlIHJlbmRlcmVkLCBzYXksIGJvdCB0eXBpbmcgaW5kaWNhdG9yLlxuICAvLyBXZSBzaG91bGQgbm90IHNob3cgdGhlIFwiTmV3IG1lc3NhZ2VzXCIgYnV0dG9uIGZvciBib3QgdHlwaW5nIGluZGljYXRvciBhcyBpdCB3aWxsIGNvbmZ1c2UgdGhlIHVzZXIuXG4gIGNvbnN0IHVucmVhZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gbmV4dFVucmVhZEFjdGl2aXR5S2V5cy5zb21lKGtleSA9PiByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KSksXG4gICAgW3JlbmRlcmluZ0FjdGl2aXR5S2V5cywgbmV4dFVucmVhZEFjdGl2aXR5S2V5c11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNjcm9sbFRvRW5kKHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuXG4gICAgY29uc3QgeyBjdXJyZW50OiByZW5kZXJpbmdBY3Rpdml0eUtleXMgfSA9IHJlbmRlcmluZ0FjdGl2aXR5S2V5c1JlZjtcblxuICAgIC8vIEFmdGVyIHRoZSBcIk5ldyBtZXNzYWdlXCIgYnV0dG9uIGlzIGNsaWNrZWQsIGZvY3VzIG9uIHRoZSBmaXJzdCB1bnJlYWQgYWN0aXZpdHkgd2hpY2ggd2lsbCBiZSByZW5kZXJlZC5cbiAgICBjb25zdCBmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5ID0gbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZi5jdXJyZW50LmZpbmQoa2V5ID0+XG4gICAgICByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5jbHVkZXMoa2V5KVxuICAgICk7XG5cbiAgICBpZiAoZmlyc3RVbnJlYWRSZW5kZXJpbmdBY3Rpdml0eUtleSkge1xuICAgICAgZm9jdXNCeUFjdGl2aXR5S2V5KGZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyB1bnJlYWQgYWN0aXZpdHksIHNlbmQgdGhlIGZvY3VzIHRvIHRoZSB0ZXJtaW5hdG9yIGJsb2NrLlxuICAgICAgdGVybWluYXRvclJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgIH1cbiAgfSwgW2ZvY3VzQnlBY3Rpdml0eUtleSwgbmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZiwgcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmLCBzY3JvbGxUb0VuZCwgdGVybWluYXRvclJlZl0pO1xuXG4gIGNvbnN0IHJlbmRlclNjcm9sbFRvRW5kQnV0dG9uID0gdXNlQ3JlYXRlU2Nyb2xsVG9FbmRCdXR0b25SZW5kZXJlcigpKHtcbiAgICBhdEVuZDogYW5pbWF0aW5nVG9FbmQgfHwgYXRFbmQgfHwgc3RpY2t5LFxuICAgIHN0eWxlT3B0aW9ucyxcbiAgICB1bnJlYWRcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7cmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24gJiYgcmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24oeyBvbkNsaWNrOiBoYW5kbGVTY3JvbGxUb0VuZEJ1dHRvbkNsaWNrIH0pfVxuICAgICAgeyEhUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pICYmIDxGb2N1c1JlZGlyZWN0b3IgcmVkaXJlY3RSZWY9e3Rlcm1pbmF0b3JSZWZ9IC8+fVxuICAgICAgPFJlYWN0U2Nyb2xsVG9Cb3R0b21QYW5lbCBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlXCI+XG4gICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZpbGxlclwiIG9uRm9jdXM9e29uRm9jdXNGaWxsZXJ9IC8+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgYXJpYS1yb2xlZGVzY3JpcHRpb249e3RyYW5zY3JpcHRSb2xlRGVzY3JpcHRpb259XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGFjdGl2aXRpZXNTdHlsZVNldCArICcnLCAnd2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdHJhbnNjcmlwdCcpfVxuICAgICAgICAgIHJvbGU9XCJmZWVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8QmFzaWNUeXBpbmdJbmRpY2F0b3IgLz5cbiAgICAgIDwvUmVhY3RTY3JvbGxUb0JvdHRvbVBhbmVsPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25Gb2N1c0ZpbGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGVybWluYXRvclJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59O1xuXG50eXBlIFNjcm9sbGVyID0gKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfTogeyBvZmZzZXRIZWlnaHQ6IG51bWJlcjsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4gbnVtYmVyO1xuXG4vLyBcInNjcm9sbGVyXCIgaXMgdGhlIGF1dG8tc2Nyb2xsIGxpbWl0ZXIsIGEuay5hLiBhdXRvIHNjcm9sbCBzbmFwLlxuY29uc3QgdXNlU2Nyb2xsZXIgPSAoYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEFjdGl2aXR5RWxlbWVudE1hcD4pOiBTY3JvbGxlciA9PiB7XG4gIGNvbnN0IFthY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzKCk7XG4gIGNvbnN0IFtsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXldID0gdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IFtzdHlsZU9wdGlvbnNdID0gdXNlU3R5bGVPcHRpb25zKCk7XG5cbiAgY29uc3QgYWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYoYWN0aXZpdHlLZXlzKTtcbiAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYobGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KTtcbiAgY29uc3Qgc3R5bGVPcHRpb25zUmVmID0gdXNlVmFsdWVSZWYoc3R5bGVPcHRpb25zKTtcblxuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiB7XG4gICAgICAgICAgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5LFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZSxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldFxuICAgICAgICB9XG4gICAgICB9ID0gc3R5bGVPcHRpb25zUmVmO1xuXG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGF1dG9TY3JvbGxTbmFwT25QYWdlKSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25QYWdlXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQgPT09ICdudW1iZXInID8gYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IDogMDtcbiAgICAgIGNvbnN0IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9XG4gICAgICAgIHR5cGVvZiBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA9PT0gJ251bWJlcicgPyBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCA6IDA7XG5cbiAgICAgIGlmIChwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IHx8IHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5RWxlbWVudE1hcCB9ID0gYWN0aXZpdHlFbGVtZW50TWFwUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2aXR5S2V5cyB9ID0gYWN0aXZpdHlLZXlzUmVmO1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSB9ID0gbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmO1xuICAgICAgICBjb25zdCB2YWx1ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggPSBhY3Rpdml0eUtleXMuaW5kZXhPZihsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgIGlmICh+bGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXgpIHtcbiAgICAgICAgICAvLyBUaGUgYWN0aXZpdHkgdGhhdCB3ZSBhY2tub3dsZWRnZWQgY291bGQgYmUgbm90IHJlbmRlcmVkLCBzdWNoIGFzIHBvc3QgYmFjayBhY3Rpdml0eS5cbiAgICAgICAgICAvLyBXaGVuIGNhbGN1bGF0aW5nIHNjcm9sbCBzbmFwLCB3ZSBjYW4gb25seSBiYXNlIG9uIHRoZSBmaXJzdCB1bmFja25vd2xlZGdlZC1hbmQtcmVuZGVyaW5nIGFjdGl2aXR5LlxuICAgICAgICAgIGNvbnN0IHJlbmRlcmluZ0FjdGl2aXR5S2V5cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLmtleXMoKSk7XG4gICAgICAgICAgbGV0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCA9IC0xO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBhY2tub3dsZWRnZWRBY3Rpdml0eUtleSBvZiBhY3Rpdml0eUtleXMuc2xpY2UoMCwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXggKyAxKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmluZGV4T2YoYWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkpO1xuXG4gICAgICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAofmZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlFbGVtZW50cyA9IEFycmF5LmZyb20oYWN0aXZpdHlFbGVtZW50TWFwLnZhbHVlcygpKTtcblxuICAgICAgICAgICAgaWYgKHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgLy8gR2V0cyB0aGUgYWN0aXZpdHkgZWxlbWVudCB3aGljaCB3ZSBzaG91bGQgc25hcCB0by5cbiAgICAgICAgICAgICAgY29uc3QgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPVxuICAgICAgICAgICAgICAgIGFjdGl2aXR5RWxlbWVudHNbZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4ICsgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSAtIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICcud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fYWN0aXZpdHktYWN0aXZlLWRlc2NlbmRhbnQnXG4gICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICAgIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQub2Zmc2V0VG9wO1xuXG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgICBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wICtcbiAgICAgICAgICAgICAgICAgICAgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgLVxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3AgK1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQgPSBhY3Rpdml0eUVsZW1lbnRzWytmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXhdO1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQgPSBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCdcbiAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wID1cbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Lm9mZnNldFRvcCArIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5T2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCAtXG4gICAgICAgICAgICAgICAgICBvZmZzZXRIZWlnaHQgKiAoMSAtIHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uUGFnZSkgK1xuICAgICAgICAgICAgICAgICAgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnZhbHVlcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9LFxuICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGFjdGl2aXR5S2V5c1JlZiwgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmLCBzdHlsZU9wdGlvbnNSZWZdXG4gICk7XG59O1xuXG50eXBlIEJhc2ljVHJhbnNjcmlwdFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBCYXNpY1RyYW5zY3JpcHQ6IFZGQzxCYXNpY1RyYW5zY3JpcHRQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBhY3Rpdml0eUVsZW1lbnRNYXBSZWYgPSB1c2VSZWY8QWN0aXZpdHlFbGVtZW50TWFwPihuZXcgTWFwKCkpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgc2Nyb2xsZXIgPSB1c2VTY3JvbGxlcihhY3Rpdml0eUVsZW1lbnRNYXBSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPFRyYW5zY3JpcHRGb2N1c0NvbXBvc2VyIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgIDxSZWFjdFNjcm9sbFRvQm90dG9tQ29tcG9zZXIgc2Nyb2xsZXI9e3Njcm9sbGVyfT5cbiAgICAgICAgPEtleWJvYXJkSGVscCAvPlxuICAgICAgICA8SW50ZXJuYWxUcmFuc2NyaXB0IGFjdGl2aXR5RWxlbWVudE1hcFJlZj17YWN0aXZpdHlFbGVtZW50TWFwUmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gcmVmPXtjb250YWluZXJSZWZ9IC8+XG4gICAgICA8L1JlYWN0U2Nyb2xsVG9Cb3R0b21Db21wb3Nlcj5cbiAgICA8L1RyYW5zY3JpcHRGb2N1c0NvbXBvc2VyPlxuICApO1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiAnJ1xufTtcblxuQmFzaWNUcmFuc2NyaXB0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBCYXNpY1RyYW5zY3JpcHQ7XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
package/lib/Composer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -83,9 +83,9 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
|
|
|
83
83
|
|
|
84
84
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
85
85
|
|
|
86
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
86
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
87
87
|
|
|
88
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
88
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
89
89
|
|
|
90
90
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
91
91
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
package/lib/Dictation.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof";
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
4
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createCoreMiddleware.d.ts","sourceRoot":"","sources":["../../../src/Middleware/Activity/createCoreMiddleware.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createCoreMiddleware.d.ts","sourceRoot":"","sources":["../../../src/Middleware/Activity/createCoreMiddleware.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAM9D,MAAM,CAAC,OAAO,UAAU,oBAAoB,IAAI,kBAAkB,EAAE,CAkEnE"}
|