botframework-webchat 4.16.1-main.20231205.a03e74d → 4.16.1-main.20240119.3d09177

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.
Files changed (101) hide show
  1. package/dist/webchat-es5.js +1 -1
  2. package/dist/webchat-minimal.js +1 -1
  3. package/dist/webchat.js +1 -1
  4. package/lib/AddFullBundle.js +9 -18
  5. package/lib/FullComposer.js +1 -13
  6. package/lib/FullReactWebChat.js +1 -12
  7. package/lib/adaptiveCards/AdaptiveCardsComposer.js +3 -13
  8. package/lib/adaptiveCards/AdaptiveCardsContext.js +1 -3
  9. package/lib/adaptiveCards/Attachment/AdaptiveCardAttachment.js +2 -8
  10. package/lib/adaptiveCards/Attachment/AdaptiveCardBuilder.js +1 -17
  11. package/lib/adaptiveCards/Attachment/AdaptiveCardContent.js +5 -20
  12. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/closest.js +1 -5
  13. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/findDOMNodeOwner.js +2 -7
  14. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/useAdaptiveCardModEffect.js +6 -28
  15. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/useLazyRef.js +1 -6
  16. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/usePrevious.js +2 -3
  17. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/private/useValueRef.js +1 -3
  18. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useActionSetShouldNotBeMenuBarModEffect.js +1 -7
  19. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useActionShouldBePushButtonModEffect.js +7 -21
  20. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useActiveElementModEffect.js +4 -12
  21. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useDisabledModEffect.js +4 -12
  22. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/usePersistValuesModEffect.js +5 -16
  23. package/lib/adaptiveCards/Attachment/AdaptiveCardHacks/useRoleModEffect.js +3 -7
  24. package/lib/adaptiveCards/Attachment/AdaptiveCardRenderer.js +82 -116
  25. package/lib/adaptiveCards/Attachment/AnimationCardAttachment.js +2 -8
  26. package/lib/adaptiveCards/Attachment/AnimationCardContent.js +10 -21
  27. package/lib/adaptiveCards/Attachment/AudioCardAttachment.js +3 -8
  28. package/lib/adaptiveCards/Attachment/AudioCardContent.js +13 -24
  29. package/lib/adaptiveCards/Attachment/CommonCard.js +9 -28
  30. package/lib/adaptiveCards/Attachment/HeroCardAttachment.js +2 -8
  31. package/lib/adaptiveCards/Attachment/HeroCardContent.js +9 -29
  32. package/lib/adaptiveCards/Attachment/OAuthCardAttachment.js +2 -8
  33. package/lib/adaptiveCards/Attachment/OAuthCardContent.js +9 -28
  34. package/lib/adaptiveCards/Attachment/ReceiptCardAttachment.js +2 -8
  35. package/lib/adaptiveCards/Attachment/ReceiptCardContent.js +37 -70
  36. package/lib/adaptiveCards/Attachment/SignInCardAttachment.js +2 -8
  37. package/lib/adaptiveCards/Attachment/SignInCardContent.js +5 -15
  38. package/lib/adaptiveCards/Attachment/ThumbnailCardAttachment.js +2 -8
  39. package/lib/adaptiveCards/Attachment/ThumbnailCardContent.js +22 -44
  40. package/lib/adaptiveCards/Attachment/VideoCardAttachment.js +3 -8
  41. package/lib/adaptiveCards/Attachment/VideoCardContent.js +9 -20
  42. package/lib/adaptiveCards/Attachment/private/renderAdaptiveCard.js +11 -21
  43. package/lib/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js +18 -37
  44. package/lib/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js +19 -25
  45. package/lib/adaptiveCards/DOMManipulationWithUndo/addEventListenerWithUndo.js +1 -5
  46. package/lib/adaptiveCards/DOMManipulationWithUndo/bunchUndos.js +1 -4
  47. package/lib/adaptiveCards/DOMManipulationWithUndo/durableAddClassWithUndo.js +3 -7
  48. package/lib/adaptiveCards/DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo.js +5 -18
  49. package/lib/adaptiveCards/DOMManipulationWithUndo/private/addClass.js +2 -3
  50. package/lib/adaptiveCards/DOMManipulationWithUndo/private/getAttributeOrFalse.js +1 -2
  51. package/lib/adaptiveCards/DOMManipulationWithUndo/private/noOp.js +1 -3
  52. package/lib/adaptiveCards/DOMManipulationWithUndo/private/setOrRemoveAttributeIfFalse.js +1 -2
  53. package/lib/adaptiveCards/DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo.js +1 -9
  54. package/lib/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.js +6 -6
  55. package/lib/adaptiveCards/Styles/StyleSet/AnimationCardAttachment.js +2 -2
  56. package/lib/adaptiveCards/Styles/StyleSet/AudioCardAttachment.js +3 -3
  57. package/lib/adaptiveCards/Styles/adaptiveCardHostConfig.js +7 -14
  58. package/lib/adaptiveCards/Styles/createAdaptiveCardsStyleSet.js +2 -12
  59. package/lib/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.js +3 -10
  60. package/lib/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.js +1 -14
  61. package/lib/adaptiveCards/defaultStyleOptions.js +1 -1
  62. package/lib/adaptiveCards/hooks/internal/useAdaptiveCardsContext.js +1 -7
  63. package/lib/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.js +13 -33
  64. package/lib/adaptiveCards/hooks/internal/useUniqueId.js +2 -5
  65. package/lib/adaptiveCards/hooks/useAdaptiveCardsHostConfig.js +4 -13
  66. package/lib/adaptiveCards/hooks/useAdaptiveCardsPackage.js +2 -6
  67. package/lib/adaptiveCards/normalizeStyleOptions.js +1 -7
  68. package/lib/addVersion.js +4 -9
  69. package/lib/createBrowserWebSpeechPonyfillFactory.js +1 -4
  70. package/lib/createCognitiveServicesSpeechServicesPonyfillFactory.js +24 -34
  71. package/lib/createDirectLine.js +14 -16
  72. package/lib/createDirectLineAppServiceExtension.js +4 -6
  73. package/lib/createDirectLineSpeechAdapters.js +16 -23
  74. package/lib/createFullStyleSet.js +2 -8
  75. package/lib/fullBundleDefaultStyleOptions.js +1 -9
  76. package/lib/hooks/useStyleOptions.js +3 -8
  77. package/lib/hooks/useStyleSet.js +3 -9
  78. package/lib/index-es5.js +3 -17
  79. package/lib/index-minimal.js +2 -22
  80. package/lib/index.js +2 -43
  81. package/lib/markdown/markdownItPlugins/ariaLabel.js +15 -18
  82. package/lib/markdown/markdownItPlugins/betterLink.js +15 -32
  83. package/lib/markdown/markdownItPlugins/respectCRLF.js +3 -4
  84. package/lib/markdown/private/iterateLinkDefinitions.js +1 -25
  85. package/lib/markdown/renderMarkdown.js +9 -25
  86. package/lib/polyfill.js +1 -22
  87. package/lib/renderWebChat.js +1 -5
  88. package/lib/speech/CustomAudioInputStream.js +65 -104
  89. package/lib/speech/bytesPerSample.js +1 -2
  90. package/lib/speech/createAudioConfig.js +11 -30
  91. package/lib/speech/createAudioContext.js +6 -5
  92. package/lib/speech/createMicrophoneAudioConfigAndAudioContext.js +25 -37
  93. package/lib/speech/getUserMedia.js +5 -8
  94. package/lib/useComposerProps.js +7 -14
  95. package/package.json +32 -19
  96. package/src/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx +2 -2
  97. package/src/__tests__/createDirectLine.spec.js +0 -32
  98. package/src/__tests__/versionTag.es5.spec.js +0 -16
  99. package/src/__tests__/versionTag.full.spec.js +0 -16
  100. package/src/__tests__/versionTag.minimal.spec.js +0 -16
  101. package/src/adaptiveCards/Styles/createAdaptiveCardsStyleSet.spec.js +0 -13
@@ -1,65 +1,42 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
-
16
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
13
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
21
-
22
14
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
15
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
-
26
16
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
-
28
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
29
-
30
18
  var _microsoftCognitiveservicesSpeechSdk = require("microsoft-cognitiveservices-speech-sdk");
31
-
32
19
  var _Exports = require("microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common/Exports");
33
-
34
20
  var _AudioStreamFormat = require("microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Audio/AudioStreamFormat");
35
-
36
21
  var _Exports2 = require("microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.speech/Exports");
37
-
38
22
  var _botframeworkWebchatCore = require("botframework-webchat-core");
39
-
40
23
  var _uuid = require("uuid");
41
-
42
24
  var _pDeferEs = _interopRequireDefault(require("p-defer-es5"));
43
-
44
25
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
45
-
46
26
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
-
48
27
  var SYMBOL_DEVICE_INFO_DEFERRED = Symbol('deviceInfoDeferred');
49
28
  var SYMBOL_EVENTS = Symbol('events');
50
29
  var SYMBOL_FORMAT_DEFERRED = Symbol('formatDeferred');
51
- var SYMBOL_OPTIONS = Symbol('options'); // Speech SDK quirks: Only 2 lifecycle functions are actually used.
30
+ var SYMBOL_OPTIONS = Symbol('options');
31
+
32
+ // Speech SDK quirks: Only 2 lifecycle functions are actually used.
52
33
  // They are: attach() and turnOff().
53
34
  // Others are not used, including: blob(), close(), detach(), turnOn().
54
-
55
35
  var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
56
36
  (0, _inherits2.default)(CustomAudioInputStream, _AudioInputStream);
57
-
58
37
  var _super = _createSuper(CustomAudioInputStream);
59
-
60
38
  function CustomAudioInputStream() {
61
39
  var _this;
62
-
63
40
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
64
41
  (0, _classCallCheck2.default)(this, CustomAudioInputStream);
65
42
  _this = _super.call(this);
@@ -70,26 +47,28 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
70
47
  var normalizedOptions = {
71
48
  debug: options.debug || false,
72
49
  id: options.id || (0, _uuid.v4)().replace(/\x2D/g, '')
73
- }; // False alarm: indexer is a constant of type Symbol.
74
- // eslint-disable-next-line security/detect-object-injection
50
+ };
75
51
 
76
- _this[SYMBOL_DEVICE_INFO_DEFERRED] = (0, _pDeferEs.default)(); // False alarm: indexer is a constant of type Symbol.
52
+ // False alarm: indexer is a constant of type Symbol.
77
53
  // eslint-disable-next-line security/detect-object-injection
54
+ _this[SYMBOL_DEVICE_INFO_DEFERRED] = (0, _pDeferEs.default)();
78
55
 
79
- _this[SYMBOL_EVENTS] = new _Exports.EventSource(); // False alarm: indexer is a constant of type Symbol.
56
+ // False alarm: indexer is a constant of type Symbol.
80
57
  // eslint-disable-next-line security/detect-object-injection
58
+ _this[SYMBOL_EVENTS] = new _Exports.EventSource();
81
59
 
82
- _this[SYMBOL_FORMAT_DEFERRED] = (0, _pDeferEs.default)(); // False alarm: indexer is a constant of type Symbol.
60
+ // False alarm: indexer is a constant of type Symbol.
83
61
  // eslint-disable-next-line security/detect-object-injection
62
+ _this[SYMBOL_FORMAT_DEFERRED] = (0, _pDeferEs.default)();
84
63
 
64
+ // False alarm: indexer is a constant of type Symbol.
65
+ // eslint-disable-next-line security/detect-object-injection
85
66
  _this[SYMBOL_OPTIONS] = normalizedOptions;
86
67
  return _this;
87
68
  }
88
-
89
69
  (0, _createClass2.default)(CustomAudioInputStream, [{
90
70
  key: "events",
91
- get:
92
- /** Gets the event source for listening to events. */
71
+ get: /** Gets the event source for listening to events. */
93
72
  // ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.
94
73
  // @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)
95
74
  function get() {
@@ -97,6 +76,7 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
97
76
  // eslint-disable-next-line security/detect-object-injection
98
77
  return this[SYMBOL_EVENTS];
99
78
  }
79
+
100
80
  /** Gets the format of the audio stream. */
101
81
  // Speech SDK quirks: `AudioStreamFormatImpl` is internal implementation while `AudioStreamFormat` is public.
102
82
  // It is weird to expose `AudioStreamFormatImpl` instead of `AudioStreamFormat`.
@@ -105,17 +85,17 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
105
85
  // But in Direct Line Speech, it is called before "attach".
106
86
  // ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.
107
87
  // @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)
108
-
109
88
  }, {
110
89
  key: "format",
111
90
  get: function get() {
112
- this.debug('Getting "format".'); // False alarm: indexer is a constant of type Symbol.
113
- // eslint-disable-next-line security/detect-object-injection
91
+ this.debug('Getting "format".');
114
92
 
93
+ // False alarm: indexer is a constant of type Symbol.
94
+ // eslint-disable-next-line security/detect-object-injection
115
95
  return this[SYMBOL_FORMAT_DEFERRED].promise;
116
96
  }
117
- /** Gets the ID of this audio stream. */
118
97
 
98
+ /** Gets the ID of this audio stream. */
119
99
  }, {
120
100
  key: "id",
121
101
  value: function id() {
@@ -123,173 +103,167 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
123
103
  // eslint-disable-next-line security/detect-object-injection
124
104
  return this[SYMBOL_OPTIONS].id;
125
105
  }
106
+
126
107
  /** Emits an event. */
127
108
  // Speech SDK quirks: In JavaScript, onXxx means "listen to event XXX".
128
109
  // Instead, in Speech SDK, it means "emit event XXX".
129
-
130
110
  }, {
131
111
  key: "onEvent",
132
112
  value: function onEvent(event) {
133
113
  // False alarm: indexer is a constant of type Symbol.
134
114
  // eslint-disable-next-line security/detect-object-injection
135
115
  this[SYMBOL_EVENTS].onEvent(event);
136
-
137
116
  _Exports.Events.instance.onEvent(event);
138
117
  }
139
- /** Emits an `AudioSourceInitializingEvent`. */
140
118
 
119
+ /** Emits an `AudioSourceInitializingEvent`. */
141
120
  }, {
142
121
  key: "emitInitializing",
143
122
  value: function emitInitializing() {
144
123
  this.debug('Emitting "AudioSourceInitializingEvent".');
145
124
  this.onEvent(new _Exports.AudioSourceInitializingEvent(this.id()));
146
125
  }
147
- /** Emits an `AudioSourceReadyEvent`. */
148
126
 
127
+ /** Emits an `AudioSourceReadyEvent`. */
149
128
  }, {
150
129
  key: "emitReady",
151
130
  value: function emitReady() {
152
131
  this.debug('Emitting "AudioSourceReadyEvent".');
153
132
  this.onEvent(new _Exports.AudioSourceReadyEvent(this.id()));
154
133
  }
134
+
155
135
  /** Emits an `AudioSourceErrorEvent`. */
156
136
  // Speech SDK quirks: Since "turnOn" is never called and "turnOff" does not work in Direct Line Speech, the "source error" event is not emitted at all.
157
137
  // Instead, we only emit "node error" event.
158
-
159
138
  }, {
160
139
  key: "emitError",
161
140
  value: function emitError(error) {
162
141
  this.debug('Emitting "AudioSourceErrorEvent".', {
163
142
  error: error
164
- }); // Speech SDK quirks: "error" is a string, instead of object of type "Error".
143
+ });
165
144
 
145
+ // Speech SDK quirks: "error" is a string, instead of object of type "Error".
166
146
  this.onEvent(new _Exports.AudioSourceErrorEvent(this.id(), error.message));
167
147
  }
168
- /** Emits an `AudioStreamNodeAttachingEvent`. */
169
148
 
149
+ /** Emits an `AudioStreamNodeAttachingEvent`. */
170
150
  }, {
171
151
  key: "emitNodeAttaching",
172
152
  value: function emitNodeAttaching(audioNodeId) {
173
153
  this.debug("Emitting \"AudioStreamNodeAttachingEvent\" for node \"".concat(audioNodeId, "\"."));
174
154
  this.onEvent(new _Exports.AudioStreamNodeAttachingEvent(this.id(), audioNodeId));
175
155
  }
176
- /** Emits an `AudioStreamNodeAttachedEvent`. */
177
156
 
157
+ /** Emits an `AudioStreamNodeAttachedEvent`. */
178
158
  }, {
179
159
  key: "emitNodeAttached",
180
160
  value: function emitNodeAttached(audioNodeId) {
181
161
  this.debug("Emitting \"AudioStreamNodeAttachedEvent\" for node \"".concat(audioNodeId, "\"."));
182
162
  this.onEvent(new _Exports.AudioStreamNodeAttachedEvent(this.id(), audioNodeId));
183
163
  }
184
- /** Emits an `AudioStreamNodeErrorEvent`. */
185
164
 
165
+ /** Emits an `AudioStreamNodeErrorEvent`. */
186
166
  }, {
187
167
  key: "emitNodeError",
188
168
  value: function emitNodeError(audioNodeId, error) {
189
169
  this.debug("Emitting \"AudioStreamNodeErrorEvent\" for node \"".concat(audioNodeId, "\"."), {
190
170
  error: error
191
- }); // Speech SDK quirks: "error" is a string, instead of object of type "Error".
171
+ });
192
172
 
173
+ // Speech SDK quirks: "error" is a string, instead of object of type "Error".
193
174
  this.onEvent(new _Exports.AudioStreamNodeErrorEvent(this.id(), audioNodeId, error.message));
194
175
  }
195
- /** Emits an `AudioStreamNodeDetachedEvent`. */
196
176
 
177
+ /** Emits an `AudioStreamNodeDetachedEvent`. */
197
178
  }, {
198
179
  key: "emitNodeDetached",
199
180
  value: function emitNodeDetached(audioNodeId) {
200
181
  this.debug('Emitting "AudioStreamNodeDetachedEvent".');
201
182
  this.onEvent(new _Exports.AudioStreamNodeDetachedEvent(this.id(), audioNodeId));
202
183
  }
203
- /** Emits an `AudioSourceOffEvent`. */
204
184
 
185
+ /** Emits an `AudioSourceOffEvent`. */
205
186
  }, {
206
187
  key: "emitOff",
207
188
  value: function emitOff() {
208
189
  this.debug('Emitting "AudioSourceOffEvent".');
209
190
  this.onEvent(new _Exports.AudioSourceOffEvent(this.id()));
210
- } // Speech SDK quirks: Although "close" is marked as abstract, it is never called in our observations.
211
- // ESLint: Speech SDK requires this function, but we are not implementing it.
191
+ }
212
192
 
193
+ // Speech SDK quirks: Although "close" is marked as abstract, it is never called in our observations.
194
+ // ESLint: Speech SDK requires this function, but we are not implementing it.
213
195
  }, {
214
196
  key: "close",
215
197
  value: function close() {
216
198
  this.debug('Callback for "close".');
217
199
  throw new Error('Not implemented');
218
- } // Speech SDK quirks: Although "turnOn" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.
200
+ }
219
201
 
202
+ // Speech SDK quirks: Although "turnOn" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.
220
203
  }, {
221
204
  key: "turnOn",
222
205
  value: function turnOn() {
223
206
  this.debug('Callback for "turnOn".');
224
207
  throw new Error('Not implemented');
225
- } // Speech SDK quirks: Although "detach" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.
208
+ }
226
209
 
210
+ // Speech SDK quirks: Although "detach" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.
227
211
  }, {
228
212
  key: "detach",
229
213
  value: function detach() {
230
214
  this.debug('Callback for "detach".');
231
215
  throw new Error('Not implemented');
232
216
  }
233
- /** Log the message to console if `debug` is set to `true`. */
234
217
 
218
+ /** Log the message to console if `debug` is set to `true`. */
235
219
  }, {
236
220
  key: "debug",
237
221
  value: function debug(message) {
238
222
  var _console;
239
-
240
223
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
241
224
  args[_key - 1] = arguments[_key];
242
225
  }
243
-
244
226
  // ESLint: For debugging, will only log when "debug" is set to "true".
245
227
  // False alarm: indexer is a constant of type Symbol.
246
228
  // eslint-disable-next-line no-console, security/detect-object-injection
247
229
  this[SYMBOL_OPTIONS].debug && (_console = console).info.apply(_console, ["CustomAudioInputStream: ".concat(message)].concat(args));
248
230
  }
249
- /** Implements this function. When called, it should start recording and return an `IAudioStreamNode`. */
250
231
 
232
+ /** Implements this function. When called, it should start recording and return an `IAudioStreamNode`. */
251
233
  }, {
252
234
  key: "attach",
253
- value:
254
- /** Attaches the device by returning an audio node. */
235
+ value: /** Attaches the device by returning an audio node. */
255
236
  function attach(audioNodeId) {
256
237
  var _this2 = this;
257
-
258
238
  this.debug("Callback for \"attach\" with \"".concat(audioNodeId, "\"."));
259
239
  this.emitNodeAttaching(audioNodeId);
260
240
  return Promise.resolve().then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
261
241
  var _yield$_this2$perform, audioStreamNode, deviceInfo, format;
262
-
263
242
  return _regenerator.default.wrap(function _callee2$(_context2) {
264
243
  while (1) {
265
244
  switch (_context2.prev = _context2.next) {
266
245
  case 0:
267
246
  _this2.emitInitializing();
268
-
269
247
  _context2.prev = 1;
270
248
  _context2.next = 4;
271
249
  return _this2.performAttach(audioNodeId);
272
-
273
250
  case 4:
274
251
  _yield$_this2$perform = _context2.sent;
275
252
  audioStreamNode = _yield$_this2$perform.audioStreamNode;
276
253
  deviceInfo = _yield$_this2$perform.deviceInfo;
277
254
  format = _yield$_this2$perform.format;
278
-
279
255
  // Although only getter of "format" is called before "attach" (in Direct Line Speech),
280
256
  // we are handling both "deviceInfo" and "format" in similar way for uniformity.
257
+
281
258
  // False alarm: indexer is a constant of type Symbol.
282
259
  // eslint-disable-next-line security/detect-object-injection
283
- _this2[SYMBOL_DEVICE_INFO_DEFERRED].resolve(deviceInfo); // False alarm: indexer is a constant of type Symbol.
284
- // eslint-disable-next-line security/detect-object-injection
285
-
260
+ _this2[SYMBOL_DEVICE_INFO_DEFERRED].resolve(deviceInfo);
286
261
 
262
+ // False alarm: indexer is a constant of type Symbol.
263
+ // eslint-disable-next-line security/detect-object-injection
287
264
  _this2[SYMBOL_FORMAT_DEFERRED].resolve(new _AudioStreamFormat.AudioStreamFormatImpl(format.samplesPerSec, format.bitsPerSample, format.channels));
288
-
289
265
  _this2.emitReady();
290
-
291
266
  _this2.emitNodeAttached(audioNodeId);
292
-
293
267
  return _context2.abrupt("return", {
294
268
  detach: function () {
295
269
  var _detach = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
@@ -298,16 +272,12 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
298
272
  switch (_context.prev = _context.next) {
299
273
  case 0:
300
274
  _this2.debug("Detaching audio node \"".concat(audioNodeId, "\"."));
301
-
302
275
  _context.next = 3;
303
276
  return audioStreamNode.detach();
304
-
305
277
  case 3:
306
278
  // Speech SDK quirks: Since "turnOff" is not called in Direct Line Speech, we will emit event "source off" here instead.
307
279
  _this2.emitOff();
308
-
309
280
  _this2.emitNodeDetached(audioNodeId);
310
-
311
281
  case 5:
312
282
  case "end":
313
283
  return _context.stop();
@@ -315,11 +285,9 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
315
285
  }
316
286
  }, _callee);
317
287
  }));
318
-
319
288
  function detach() {
320
289
  return _detach.apply(this, arguments);
321
290
  }
322
-
323
291
  return detach;
324
292
  }(),
325
293
  id: function id() {
@@ -327,19 +295,14 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
327
295
  },
328
296
  read: function read() {
329
297
  _this2.debug('Reading');
330
-
331
298
  return audioStreamNode.read();
332
299
  }
333
300
  });
334
-
335
301
  case 15:
336
302
  _context2.prev = 15;
337
303
  _context2.t0 = _context2["catch"](1);
338
-
339
304
  _this2.emitNodeError(audioNodeId, _context2.t0);
340
-
341
305
  throw _context2.t0;
342
-
343
306
  case 19:
344
307
  case "end":
345
308
  return _context2.stop();
@@ -348,14 +311,15 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
348
311
  }, _callee2, null, [[1, 15]]);
349
312
  })));
350
313
  }
314
+
351
315
  /**
352
316
  * Implements this function. When called, it should stop recording. This is called before the `IAudioStreamNode.detach` function.
353
317
  *
354
318
  * Note: when using with Direct Line Speech, this function is never called.
355
319
  */
320
+
356
321
  // ESLint: We are not implementing this function because it is not called by Direct Line Speech.
357
322
  // eslint-disable-next-line class-methods-use-this
358
-
359
323
  }, {
360
324
  key: "performTurnOff",
361
325
  value: function performTurnOff() {
@@ -363,15 +327,15 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
363
327
  // eslint-disable-next-line no-useless-return
364
328
  return;
365
329
  }
330
+
366
331
  /** Turn off the audio device. This is called before detaching from the graph. */
367
332
  // Speech SDK quirks: It is confused to have both "turnOff" and "detach". "turnOff" is called before "detach".
368
333
  // Why don't we put all logics at "detach"?
369
334
  // Speech SDK quirks: Direct Line Speech never call "turnOff". "Source off" event need to be emitted during "detach" instead.
370
335
  // Also, custom implementation should be done at "detach" instead, such as ending and closing output streams.
371
-
372
336
  }, {
373
337
  key: "turnOff",
374
- value: function () {
338
+ value: (function () {
375
339
  var _turnOff = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
376
340
  return _regenerator.default.wrap(function _callee3$(_context3) {
377
341
  while (1) {
@@ -380,7 +344,6 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
380
344
  this.debug("Callback for \"turnOff\".");
381
345
  _context3.next = 3;
382
346
  return this.performTurnOff();
383
-
384
347
  case 3:
385
348
  case "end":
386
349
  return _context3.stop();
@@ -388,39 +351,38 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
388
351
  }
389
352
  }, _callee3, this);
390
353
  }));
391
-
392
354
  function turnOff() {
393
355
  return _turnOff.apply(this, arguments);
394
356
  }
395
-
396
357
  return turnOff;
397
358
  }()
398
359
  /** Gets the device information. */
399
360
  // ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.
400
361
  // @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)
401
-
362
+ )
402
363
  }, {
403
364
  key: "deviceInfo",
404
365
  get: function get() {
405
- this.debug("Getting \"deviceInfo\"."); // False alarm: indexer is a constant of type Symbol.
406
- // eslint-disable-next-line security/detect-object-injection
366
+ this.debug("Getting \"deviceInfo\".");
407
367
 
368
+ // False alarm: indexer is a constant of type Symbol.
369
+ // eslint-disable-next-line security/detect-object-injection
408
370
  return Promise.all([this[SYMBOL_DEVICE_INFO_DEFERRED].promise, this[SYMBOL_FORMAT_DEFERRED].promise]).then(function (_ref2) {
409
371
  var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
410
- _ref3$ = _ref3[0],
411
- connectivity = _ref3$.connectivity,
412
- manufacturer = _ref3$.manufacturer,
413
- model = _ref3$.model,
414
- type = _ref3$.type,
415
- _ref3$2 = _ref3[1],
416
- bitsPerSample = _ref3$2.bitsPerSample,
417
- channels = _ref3$2.channels,
418
- samplesPerSec = _ref3$2.samplesPerSec;
419
-
372
+ _ref3$ = _ref3[0],
373
+ connectivity = _ref3$.connectivity,
374
+ manufacturer = _ref3$.manufacturer,
375
+ model = _ref3$.model,
376
+ type = _ref3$.type,
377
+ _ref3$2 = _ref3[1],
378
+ bitsPerSample = _ref3$2.bitsPerSample,
379
+ channels = _ref3$2.channels,
380
+ samplesPerSec = _ref3$2.samplesPerSec;
420
381
  return {
421
382
  bitspersample: bitsPerSample,
422
383
  channelcount: channels,
423
- connectivity: typeof connectivity === 'string' && !(0, _botframeworkWebchatCore.isForbiddenPropertyName)(connectivity) ? // Mitigated through denylisting.
384
+ connectivity: typeof connectivity === 'string' && !(0, _botframeworkWebchatCore.isForbiddenPropertyName)(connectivity) ?
385
+ // Mitigated through denylisting.
424
386
  // eslint-disable-next-line security/detect-object-injection
425
387
  _Exports2.connectivity[connectivity] : connectivity || _Exports2.connectivity.Unknown,
426
388
  manufacturer: manufacturer || '',
@@ -435,7 +397,6 @@ var CustomAudioInputStream = /*#__PURE__*/function (_AudioInputStream) {
435
397
  }]);
436
398
  return CustomAudioInputStream;
437
399
  }(_microsoftCognitiveservicesSpeechSdk.AudioInputStream);
438
-
439
400
  var _default = CustomAudioInputStream;
440
401
  exports.default = _default;
441
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRUQiLCJTeW1ib2wiLCJTWU1CT0xfRVZFTlRTIiwiU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRCIsIlNZTUJPTF9PUFRJT05TIiwiQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbSIsIm9wdGlvbnMiLCJub3JtYWxpemVkT3B0aW9ucyIsImRlYnVnIiwiaWQiLCJ2NCIsInJlcGxhY2UiLCJjcmVhdGVEZWZlcnJlZCIsIkV2ZW50U291cmNlIiwicHJvbWlzZSIsImV2ZW50Iiwib25FdmVudCIsIkV2ZW50cyIsImluc3RhbmNlIiwiQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudCIsIkF1ZGlvU291cmNlUmVhZHlFdmVudCIsImVycm9yIiwiQXVkaW9Tb3VyY2VFcnJvckV2ZW50IiwibWVzc2FnZSIsImF1ZGlvTm9kZUlkIiwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQiLCJBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50IiwiQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudCIsIkF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQiLCJBdWRpb1NvdXJjZU9mZkV2ZW50IiwiRXJyb3IiLCJhcmdzIiwiY29uc29sZSIsImluZm8iLCJlbWl0Tm9kZUF0dGFjaGluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImVtaXRJbml0aWFsaXppbmciLCJwZXJmb3JtQXR0YWNoIiwiYXVkaW9TdHJlYW1Ob2RlIiwiZGV2aWNlSW5mbyIsImZvcm1hdCIsIkF1ZGlvU3RyZWFtRm9ybWF0SW1wbCIsInNhbXBsZXNQZXJTZWMiLCJiaXRzUGVyU2FtcGxlIiwiY2hhbm5lbHMiLCJlbWl0UmVhZHkiLCJlbWl0Tm9kZUF0dGFjaGVkIiwiZGV0YWNoIiwiZW1pdE9mZiIsImVtaXROb2RlRGV0YWNoZWQiLCJyZWFkIiwiZW1pdE5vZGVFcnJvciIsInBlcmZvcm1UdXJuT2ZmIiwiYWxsIiwiY29ubmVjdGl2aXR5IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJ0eXBlIiwiYml0c3BlcnNhbXBsZSIsImNoYW5uZWxjb3VudCIsImlzRm9yYmlkZGVuUHJvcGVydHlOYW1lIiwiQ29ubmVjdGl2aXR5IiwiVW5rbm93biIsInNhbXBsZXJhdGUiLCJUeXBlIiwiQXVkaW9JbnB1dFN0cmVhbSJdLCJzb3VyY2VSb290IjoiYnVuZGxlOi8vLyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NwZWVjaC9DdXN0b21BdWRpb0lucHV0U3RyZWFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1ZGlvSW5wdXRTdHJlYW0gfSBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkayc7XG5cbmltcG9ydCB7XG4gIEF1ZGlvU291cmNlRXJyb3JFdmVudCxcbiAgQXVkaW9Tb3VyY2VFdmVudCxcbiAgQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudCxcbiAgQXVkaW9Tb3VyY2VPZmZFdmVudCxcbiAgQXVkaW9Tb3VyY2VSZWFkeUV2ZW50LFxuICBBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50LFxuICBBdWRpb1N0cmVhbU5vZGVBdHRhY2hpbmdFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudCxcbiAgRXZlbnRzLFxuICBFdmVudFNvdXJjZVxufSBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkay9kaXN0cmliL2xpYi9zcmMvY29tbW9uL0V4cG9ydHMnO1xuXG5pbXBvcnQgeyBBdWRpb1N0cmVhbUZvcm1hdEltcGwgfSBmcm9tICdtaWNyb3NvZnQtY29nbml0aXZlc2VydmljZXMtc3BlZWNoLXNkay9kaXN0cmliL2xpYi9zcmMvc2RrL0F1ZGlvL0F1ZGlvU3RyZWFtRm9ybWF0JztcblxuaW1wb3J0IHtcbiAgY29ubmVjdGl2aXR5IGFzIENvbm5lY3Rpdml0eSxcbiAgSVNwZWVjaENvbmZpZ0F1ZGlvRGV2aWNlLFxuICB0eXBlIGFzIFR5cGVcbn0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsvZGlzdHJpYi9saWIvc3JjL2NvbW1vbi5zcGVlY2gvRXhwb3J0cyc7XG5cbmltcG9ydCB7IGlzRm9yYmlkZGVuUHJvcGVydHlOYW1lIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IGNyZWF0ZURlZmVycmVkLCB7IERlZmVycmVkUHJvbWlzZSB9IGZyb20gJ3AtZGVmZXItZXM1JztcblxudHlwZSBBdWRpb1N0cmVhbU5vZGUgPSB7XG4gIGRldGFjaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaWQ6ICgpID0+IHN0cmluZztcbiAgcmVhZDogKCkgPT4gUHJvbWlzZTxTdHJlYW1DaHVuazxBcnJheUJ1ZmZlcj4+O1xufTtcblxudHlwZSBEZXZpY2VJbmZvID0ge1xuICBjb25uZWN0aXZpdHk/OiBDb25uZWN0aXZpdHkgfCAnQmx1ZXRvb3RoJyB8ICdXaXJlZCcgfCAnV2lGaScgfCAnQ2VsbHVsYXInIHwgJ0luQnVpbHQnIHwgJ1Vua25vd24nO1xuICBtYW51ZmFjdHVyZXI/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICB0eXBlPzpcbiAgICB8IFR5cGVcbiAgICB8ICdQaG9uZSdcbiAgICB8ICdTcGVha2VyJ1xuICAgIHwgJ0NhcidcbiAgICB8ICdIZWFkc2V0J1xuICAgIHwgJ1RoZXJtb3N0YXQnXG4gICAgfCAnTWljcm9waG9uZXMnXG4gICAgfCAnRGVza3Bob25lJ1xuICAgIHwgJ1JlbW90ZUNvbnRyb2wnXG4gICAgfCAnVW5rbm93bidcbiAgICB8ICdGaWxlJ1xuICAgIHwgJ1N0cmVhbSc7XG59O1xuXG50eXBlIEZvcm1hdCA9IHtcbiAgYml0c1BlclNhbXBsZTogbnVtYmVyO1xuICBjaGFubmVsczogbnVtYmVyO1xuICBzYW1wbGVzUGVyU2VjOiBudW1iZXI7XG59O1xuXG50eXBlIE5vcm1hbGl6ZWRPcHRpb25zID0gUmVxdWlyZWQ8T21pdDxPcHRpb25zLCAnZGVidWcnPj4gJiB7XG4gIGRlYnVnOiBib29sZWFuO1xufTtcblxudHlwZSBPcHRpb25zID0ge1xuICBkZWJ1Zz86IHRydWU7XG4gIGlkPzogc3RyaW5nO1xufTtcblxudHlwZSBTdHJlYW1DaHVuazxUPiA9IHtcbiAgaXNFbmQ6IGJvb2xlYW47XG4gIGJ1ZmZlcjogVDtcbiAgdGltZVJlY2VpdmVkOiBudW1iZXI7XG59O1xuXG5jb25zdCBTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRUQgPSBTeW1ib2woJ2RldmljZUluZm9EZWZlcnJlZCcpO1xuY29uc3QgU1lNQk9MX0VWRU5UUyA9IFN5bWJvbCgnZXZlbnRzJyk7XG5jb25zdCBTWU1CT0xfRk9STUFUX0RFRkVSUkVEID0gU3ltYm9sKCdmb3JtYXREZWZlcnJlZCcpO1xuY29uc3QgU1lNQk9MX09QVElPTlMgPSBTeW1ib2woJ29wdGlvbnMnKTtcblxuLy8gU3BlZWNoIFNESyBxdWlya3M6IE9ubHkgMiBsaWZlY3ljbGUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSB1c2VkLlxuLy8gICAgICAgICAgICAgICAgICAgIFRoZXkgYXJlOiBhdHRhY2goKSBhbmQgdHVybk9mZigpLlxuLy8gICAgICAgICAgICAgICAgICAgIE90aGVycyBhcmUgbm90IHVzZWQsIGluY2x1ZGluZzogYmxvYigpLCBjbG9zZSgpLCBkZXRhY2goKSwgdHVybk9uKCkuXG5hYnN0cmFjdCBjbGFzcyBDdXN0b21BdWRpb0lucHV0U3RyZWFtIGV4dGVuZHMgQXVkaW9JbnB1dFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBub3JtYWxpemVkT3B0aW9uczogTm9ybWFsaXplZE9wdGlvbnMgPSB7XG4gICAgICBkZWJ1Zzogb3B0aW9ucy5kZWJ1ZyB8fCBmYWxzZSxcbiAgICAgIGlkOiBvcHRpb25zLmlkIHx8IHY0KCkucmVwbGFjZSgvLS9ndSwgJycpXG4gICAgfTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdID0gY3JlYXRlRGVmZXJyZWQ8RGV2aWNlSW5mbz4oKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfRVZFTlRTXSA9IG5ldyBFdmVudFNvdXJjZTxBdWRpb1NvdXJjZUV2ZW50PigpO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICB0aGlzW1NZTUJPTF9GT1JNQVRfREVGRVJSRURdID0gY3JlYXRlRGVmZXJyZWQ8QXVkaW9TdHJlYW1Gb3JtYXRJbXBsPigpO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICB0aGlzW1NZTUJPTF9PUFRJT05TXSA9IG5vcm1hbGl6ZWRPcHRpb25zO1xuICB9XG5cbiAgW1NZTUJPTF9ERVZJQ0VfSU5GT19ERUZFUlJFRF06IERlZmVycmVkUHJvbWlzZTxEZXZpY2VJbmZvPjtcbiAgW1NZTUJPTF9FVkVOVFNdOiBFdmVudFNvdXJjZTxBdWRpb1NvdXJjZUV2ZW50PjtcbiAgW1NZTUJPTF9GT1JNQVRfREVGRVJSRURdOiBEZWZlcnJlZFByb21pc2U8QXVkaW9TdHJlYW1Gb3JtYXRJbXBsPjtcbiAgW1NZTUJPTF9PUFRJT05TXTogTm9ybWFsaXplZE9wdGlvbnM7XG5cbiAgLyoqIEdldHMgdGhlIGV2ZW50IHNvdXJjZSBmb3IgbGlzdGVuaW5nIHRvIGV2ZW50cy4gKi9cbiAgLy8gRVNMaW50OiBUaGlzIGNvZGUgd2lsbCBvbmx5IHdvcmtzIGluIGJyb3dzZXJzIG90aGVyIHRoYW4gSUUxMS4gT25seSB3b3JrcyBpbiBFUzUgaXMgb2theS5cbiAgLy8gQHRzLWlnbm9yZSBBY2Nlc3NvcnMgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGFyZ2V0aW5nIEVDTUFTY3JpcHQgNSBhbmQgaGlnaGVyLnRzKDEwNTYpXG4gIGdldCBldmVudHMoKTogRXZlbnRTb3VyY2U8QXVkaW9Tb3VyY2VFdmVudD4ge1xuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgcmV0dXJuIHRoaXNbU1lNQk9MX0VWRU5UU107XG4gIH1cblxuICAvKiogR2V0cyB0aGUgZm9ybWF0IG9mIHRoZSBhdWRpbyBzdHJlYW0uICovXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsYCBpcyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiB3aGlsZSBgQXVkaW9TdHJlYW1Gb3JtYXRgIGlzIHB1YmxpYy5cbiAgLy8gICAgICAgICAgICAgICAgICAgIEl0IGlzIHdlaXJkIHRvIGV4cG9zZSBgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsYCBpbnN0ZWFkIG9mIGBBdWRpb1N0cmVhbUZvcm1hdGAuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBJdCBpcyB3ZWlyZCB0byByZXR1cm4gYSBgUHJvbWlzZWAgaW4gYSBwcm9wZXJ0eS5cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEluIG5vcm1hbCBzcGVlY2ggcmVjb2duaXRpb24sIGdldHRlciBvZiBcImZvcm1hdFwiIGlzIGNhbGxlZCBvbmx5IGFmdGVyIFwiYXR0YWNoXCIuXG4gIC8vICAgICAgICAgICAgICAgICAgICBCdXQgaW4gRGlyZWN0IExpbmUgU3BlZWNoLCBpdCBpcyBjYWxsZWQgYmVmb3JlIFwiYXR0YWNoXCIuXG4gIC8vIEVTTGludDogVGhpcyBjb2RlIHdpbGwgb25seSB3b3JrcyBpbiBicm93c2VycyBvdGhlciB0aGFuIElFMTEuIE9ubHkgd29ya3MgaW4gRVM1IGlzIG9rYXkuXG4gIC8vIEB0cy1pZ25vcmUgQWNjZXNzb3JzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRhcmdldGluZyBFQ01BU2NyaXB0IDUgYW5kIGhpZ2hlci50cygxMDU2KVxuICBnZXQgZm9ybWF0KCk6IFByb21pc2U8QXVkaW9TdHJlYW1Gb3JtYXRJbXBsPiB7XG4gICAgdGhpcy5kZWJ1ZygnR2V0dGluZyBcImZvcm1hdFwiLicpO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICByZXR1cm4gdGhpc1tTWU1CT0xfRk9STUFUX0RFRkVSUkVEXS5wcm9taXNlO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIElEIG9mIHRoaXMgYXVkaW8gc3RyZWFtLiAqL1xuICBpZCgpOiBzdHJpbmcge1xuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgcmV0dXJuIHRoaXNbU1lNQk9MX09QVElPTlNdLmlkO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGV2ZW50LiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogSW4gSmF2YVNjcmlwdCwgb25YeHggbWVhbnMgXCJsaXN0ZW4gdG8gZXZlbnQgWFhYXCIuXG4gIC8vICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBpbiBTcGVlY2ggU0RLLCBpdCBtZWFucyBcImVtaXQgZXZlbnQgWFhYXCIuXG4gIHByb3RlY3RlZCBvbkV2ZW50KGV2ZW50OiBBdWRpb1NvdXJjZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICB0aGlzW1NZTUJPTF9FVkVOVFNdLm9uRXZlbnQoZXZlbnQpO1xuICAgIEV2ZW50cy5pbnN0YW5jZS5vbkV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0SW5pdGlhbGl6aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0VtaXR0aW5nIFwiQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudFwiLicpO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9Tb3VyY2VJbml0aWFsaXppbmdFdmVudCh0aGlzLmlkKCkpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9Tb3VyY2VSZWFkeUV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXRSZWFkeSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU291cmNlUmVhZHlFdmVudFwiLicpO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9Tb3VyY2VSZWFkeUV2ZW50KHRoaXMuaWQoKSkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1NvdXJjZUVycm9yRXZlbnRgLiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogU2luY2UgXCJ0dXJuT25cIiBpcyBuZXZlciBjYWxsZWQgYW5kIFwidHVybk9mZlwiIGRvZXMgbm90IHdvcmsgaW4gRGlyZWN0IExpbmUgU3BlZWNoLCB0aGUgXCJzb3VyY2UgZXJyb3JcIiBldmVudCBpcyBub3QgZW1pdHRlZCBhdCBhbGwuXG4gIC8vICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB3ZSBvbmx5IGVtaXQgXCJub2RlIGVycm9yXCIgZXZlbnQuXG4gIHByb3RlY3RlZCBlbWl0RXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnRW1pdHRpbmcgXCJBdWRpb1NvdXJjZUVycm9yRXZlbnRcIi4nLCB7IGVycm9yIH0pO1xuXG4gICAgLy8gU3BlZWNoIFNESyBxdWlya3M6IFwiZXJyb3JcIiBpcyBhIHN0cmluZywgaW5zdGVhZCBvZiBvYmplY3Qgb2YgdHlwZSBcIkVycm9yXCIuXG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1NvdXJjZUVycm9yRXZlbnQodGhpcy5pZCgpLCBlcnJvci5tZXNzYWdlKSk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU3RyZWFtTm9kZUF0dGFjaGluZ0V2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlQXR0YWNoaW5nKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKGBFbWl0dGluZyBcIkF1ZGlvU3RyZWFtTm9kZUF0dGFjaGluZ0V2ZW50XCIgZm9yIG5vZGUgXCIke2F1ZGlvTm9kZUlkfVwiLmApO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlQXR0YWNoZWQoYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoYEVtaXR0aW5nIFwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudFwiIGZvciBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZUF0dGFjaGVkRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlRXJyb3IoYXVkaW9Ob2RlSWQ6IHN0cmluZywgZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZyhgRW1pdHRpbmcgXCJBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50XCIgZm9yIG5vZGUgXCIke2F1ZGlvTm9kZUlkfVwiLmAsIHsgZXJyb3IgfSk7XG5cbiAgICAvLyBTcGVlY2ggU0RLIHF1aXJrczogXCJlcnJvclwiIGlzIGEgc3RyaW5nLCBpbnN0ZWFkIG9mIG9iamVjdCBvZiB0eXBlIFwiRXJyb3JcIi5cbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZUVycm9yRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCwgZXJyb3IubWVzc2FnZSkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVEZXRhY2hlZEV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXROb2RlRGV0YWNoZWQoYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0VtaXR0aW5nIFwiQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudFwiLicpO1xuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudCh0aGlzLmlkKCksIGF1ZGlvTm9kZUlkKSk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU291cmNlT2ZmRXZlbnRgLiAqL1xuICBwcm90ZWN0ZWQgZW1pdE9mZigpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU291cmNlT2ZmRXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU291cmNlT2ZmRXZlbnQodGhpcy5pZCgpKSk7XG4gIH1cblxuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogQWx0aG91Z2ggXCJjbG9zZVwiIGlzIG1hcmtlZCBhcyBhYnN0cmFjdCwgaXQgaXMgbmV2ZXIgY2FsbGVkIGluIG91ciBvYnNlcnZhdGlvbnMuXG4gIC8vIEVTTGludDogU3BlZWNoIFNESyByZXF1aXJlcyB0aGlzIGZ1bmN0aW9uLCBidXQgd2UgYXJlIG5vdCBpbXBsZW1lbnRpbmcgaXQuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0NhbGxiYWNrIGZvciBcImNsb3NlXCIuJyk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEFsdGhvdWdoIFwidHVybk9uXCIgaXMgaW1wbGVtZW50ZWQgaW4gU3BlZWNoIFNESyBQdXNoL1B1bGxBdWRpb0lucHV0U3RyZWFtLCBpdCBpcyBuZXZlciBjYWxsZWQgaW4gb3VyIG9ic2VydmF0aW9ucy5cbiAgdHVybk9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0NhbGxiYWNrIGZvciBcInR1cm5PblwiLicpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBBbHRob3VnaCBcImRldGFjaFwiIGlzIGltcGxlbWVudGVkIGluIFNwZWVjaCBTREsgUHVzaC9QdWxsQXVkaW9JbnB1dFN0cmVhbSwgaXQgaXMgbmV2ZXIgY2FsbGVkIGluIG91ciBvYnNlcnZhdGlvbnMuXG4gIGRldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdDYWxsYmFjayBmb3IgXCJkZXRhY2hcIi4nKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogTG9nIHRoZSBtZXNzYWdlIHRvIGNvbnNvbGUgaWYgYGRlYnVnYCBpcyBzZXQgdG8gYHRydWVgLiAqL1xuICBwcml2YXRlIGRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpIHtcbiAgICAvLyBFU0xpbnQ6IEZvciBkZWJ1Z2dpbmcsIHdpbGwgb25seSBsb2cgd2hlbiBcImRlYnVnXCIgaXMgc2V0IHRvIFwidHJ1ZVwiLlxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUsIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfT1BUSU9OU10uZGVidWcgJiYgY29uc29sZS5pbmZvKGBDdXN0b21BdWRpb0lucHV0U3RyZWFtOiAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG4gIH1cblxuICAvKiogSW1wbGVtZW50cyB0aGlzIGZ1bmN0aW9uLiBXaGVuIGNhbGxlZCwgaXQgc2hvdWxkIHN0YXJ0IHJlY29yZGluZyBhbmQgcmV0dXJuIGFuIGBJQXVkaW9TdHJlYW1Ob2RlYC4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBlcmZvcm1BdHRhY2goYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IFByb21pc2U8e1xuICAgIGF1ZGlvU3RyZWFtTm9kZTogQXVkaW9TdHJlYW1Ob2RlO1xuICAgIGRldmljZUluZm86IERldmljZUluZm87XG4gICAgZm9ybWF0OiBGb3JtYXQ7XG4gIH0+O1xuXG4gIC8qKiBBdHRhY2hlcyB0aGUgZGV2aWNlIGJ5IHJldHVybmluZyBhbiBhdWRpbyBub2RlLiAqL1xuICBhdHRhY2goYXVkaW9Ob2RlSWQ6IHN0cmluZyk6IFByb21pc2U8QXVkaW9TdHJlYW1Ob2RlPiB7XG4gICAgdGhpcy5kZWJ1ZyhgQ2FsbGJhY2sgZm9yIFwiYXR0YWNoXCIgd2l0aCBcIiR7YXVkaW9Ob2RlSWR9XCIuYCk7XG5cbiAgICB0aGlzLmVtaXROb2RlQXR0YWNoaW5nKGF1ZGlvTm9kZUlkKTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuPEF1ZGlvU3RyZWFtTm9kZT4oYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0SW5pdGlhbGl6aW5nKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgYXVkaW9TdHJlYW1Ob2RlLCBkZXZpY2VJbmZvLCBmb3JtYXQgfSA9IGF3YWl0IHRoaXMucGVyZm9ybUF0dGFjaChhdWRpb05vZGVJZCk7XG5cbiAgICAgICAgLy8gQWx0aG91Z2ggb25seSBnZXR0ZXIgb2YgXCJmb3JtYXRcIiBpcyBjYWxsZWQgYmVmb3JlIFwiYXR0YWNoXCIgKGluIERpcmVjdCBMaW5lIFNwZWVjaCksXG4gICAgICAgIC8vIHdlIGFyZSBoYW5kbGluZyBib3RoIFwiZGV2aWNlSW5mb1wiIGFuZCBcImZvcm1hdFwiIGluIHNpbWlsYXIgd2F5IGZvciB1bmlmb3JtaXR5LlxuXG4gICAgICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICB0aGlzW1NZTUJPTF9ERVZJQ0VfSU5GT19ERUZFUlJFRF0ucmVzb2x2ZShkZXZpY2VJbmZvKTtcblxuICAgICAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgdGhpc1tTWU1CT0xfRk9STUFUX0RFRkVSUkVEXS5yZXNvbHZlKFxuICAgICAgICAgIG5ldyBBdWRpb1N0cmVhbUZvcm1hdEltcGwoZm9ybWF0LnNhbXBsZXNQZXJTZWMsIGZvcm1hdC5iaXRzUGVyU2FtcGxlLCBmb3JtYXQuY2hhbm5lbHMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5lbWl0UmVhZHkoKTtcbiAgICAgICAgdGhpcy5lbWl0Tm9kZUF0dGFjaGVkKGF1ZGlvTm9kZUlkKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRldGFjaDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgRGV0YWNoaW5nIGF1ZGlvIG5vZGUgXCIke2F1ZGlvTm9kZUlkfVwiLmApO1xuXG4gICAgICAgICAgICBhd2FpdCBhdWRpb1N0cmVhbU5vZGUuZGV0YWNoKCk7XG5cbiAgICAgICAgICAgIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBTaW5jZSBcInR1cm5PZmZcIiBpcyBub3QgY2FsbGVkIGluIERpcmVjdCBMaW5lIFNwZWVjaCwgd2Ugd2lsbCBlbWl0IGV2ZW50IFwic291cmNlIG9mZlwiIGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICAgIHRoaXMuZW1pdE9mZigpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Tm9kZURldGFjaGVkKGF1ZGlvTm9kZUlkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlkOiAoKSA9PiBhdWRpb1N0cmVhbU5vZGUuaWQoKSxcbiAgICAgICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdSZWFkaW5nJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBhdWRpb1N0cmVhbU5vZGUucmVhZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1pdE5vZGVFcnJvcihhdWRpb05vZGVJZCwgZXJyb3IpO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgdGhpcyBmdW5jdGlvbi4gV2hlbiBjYWxsZWQsIGl0IHNob3VsZCBzdG9wIHJlY29yZGluZy4gVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBgSUF1ZGlvU3RyZWFtTm9kZS5kZXRhY2hgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBOb3RlOiB3aGVuIHVzaW5nIHdpdGggRGlyZWN0IExpbmUgU3BlZWNoLCB0aGlzIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZC5cbiAgICovXG5cbiAgLy8gRVNMaW50OiBXZSBhcmUgbm90IGltcGxlbWVudGluZyB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgaXQgaXMgbm90IGNhbGxlZCBieSBEaXJlY3QgTGluZSBTcGVlY2guXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByb3RlY3RlZCBwZXJmb3JtVHVybk9mZigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBFU0xpbnQ6IFwicmV0dXJuXCIgaXMgcmVxdWlyZWQgYnkgVHlwZVNjcmlwdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLXJldHVyblxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKiBUdXJuIG9mZiB0aGUgYXVkaW8gZGV2aWNlLiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgZGV0YWNoaW5nIGZyb20gdGhlIGdyYXBoLiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogSXQgaXMgY29uZnVzZWQgdG8gaGF2ZSBib3RoIFwidHVybk9mZlwiIGFuZCBcImRldGFjaFwiLiBcInR1cm5PZmZcIiBpcyBjYWxsZWQgYmVmb3JlIFwiZGV0YWNoXCIuXG4gIC8vICAgICAgICAgICAgICAgICAgICBXaHkgZG9uJ3Qgd2UgcHV0IGFsbCBsb2dpY3MgYXQgXCJkZXRhY2hcIj9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IERpcmVjdCBMaW5lIFNwZWVjaCBuZXZlciBjYWxsIFwidHVybk9mZlwiLiBcIlNvdXJjZSBvZmZcIiBldmVudCBuZWVkIHRvIGJlIGVtaXR0ZWQgZHVyaW5nIFwiZGV0YWNoXCIgaW5zdGVhZC5cbiAgLy8gICAgICAgICAgICAgICAgICAgIEFsc28sIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgZG9uZSBhdCBcImRldGFjaFwiIGluc3RlYWQsIHN1Y2ggYXMgZW5kaW5nIGFuZCBjbG9zaW5nIG91dHB1dCBzdHJlYW1zLlxuICBhc3luYyB0dXJuT2ZmKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGVidWcoYENhbGxiYWNrIGZvciBcInR1cm5PZmZcIi5gKTtcblxuICAgIGF3YWl0IHRoaXMucGVyZm9ybVR1cm5PZmYoKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24uICovXG4gIC8vIEVTTGludDogVGhpcyBjb2RlIHdpbGwgb25seSB3b3JrcyBpbiBicm93c2VycyBvdGhlciB0aGFuIElFMTEuIE9ubHkgd29ya3MgaW4gRVM1IGlzIG9rYXkuXG4gIC8vIEB0cy1pZ25vcmUgQWNjZXNzb3JzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRhcmdldGluZyBFQ01BU2NyaXB0IDUgYW5kIGhpZ2hlci50cygxMDU2KVxuICBnZXQgZGV2aWNlSW5mbygpOiBQcm9taXNlPElTcGVlY2hDb25maWdBdWRpb0RldmljZT4ge1xuICAgIHRoaXMuZGVidWcoYEdldHRpbmcgXCJkZXZpY2VJbmZvXCIuYCk7XG5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbdGhpc1tTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdLnByb21pc2UsIHRoaXNbU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRF0ucHJvbWlzZV0pLnRoZW4oXG4gICAgICAoW3sgY29ubmVjdGl2aXR5LCBtYW51ZmFjdHVyZXIsIG1vZGVsLCB0eXBlIH0sIHsgYml0c1BlclNhbXBsZSwgY2hhbm5lbHMsIHNhbXBsZXNQZXJTZWMgfV0pID0+ICh7XG4gICAgICAgIGJpdHNwZXJzYW1wbGU6IGJpdHNQZXJTYW1wbGUsXG4gICAgICAgIGNoYW5uZWxjb3VudDogY2hhbm5lbHMsXG4gICAgICAgIGNvbm5lY3Rpdml0eTpcbiAgICAgICAgICB0eXBlb2YgY29ubmVjdGl2aXR5ID09PSAnc3RyaW5nJyAmJiAhaXNGb3JiaWRkZW5Qcm9wZXJ0eU5hbWUoY29ubmVjdGl2aXR5KVxuICAgICAgICAgICAgPyAvLyBNaXRpZ2F0ZWQgdGhyb3VnaCBkZW55bGlzdGluZy5cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgIENvbm5lY3Rpdml0eVtjb25uZWN0aXZpdHldXG4gICAgICAgICAgICA6IGNvbm5lY3Rpdml0eSB8fCBDb25uZWN0aXZpdHkuVW5rbm93bixcbiAgICAgICAgbWFudWZhY3R1cmVyOiBtYW51ZmFjdHVyZXIgfHwgJycsXG4gICAgICAgIG1vZGVsOiBtb2RlbCB8fCAnJyxcbiAgICAgICAgc2FtcGxlcmF0ZTogc2FtcGxlc1BlclNlYyxcbiAgICAgICAgLy8gTWl0aWdhdGVkIHRocm91Z2ggZGVueWxpc3RpbmcuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICB0eXBlOiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgJiYgIWlzRm9yYmlkZGVuUHJvcGVydHlOYW1lKHR5cGUpID8gVHlwZVt0eXBlXSA6IHR5cGUgfHwgVHlwZS5Vbmtub3duXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbTtcblxuZXhwb3J0IHR5cGUgeyBBdWRpb1N0cmVhbU5vZGUsIERldmlj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
402
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWljcm9zb2Z0Q29nbml0aXZlc2VydmljZXNTcGVlY2hTZGsiLCJyZXF1aXJlIiwiX0V4cG9ydHMiLCJfQXVkaW9TdHJlYW1Gb3JtYXQiLCJfRXhwb3J0czIiLCJfYm90ZnJhbWV3b3JrV2ViY2hhdENvcmUiLCJfdXVpZCIsIl9wRGVmZXJFcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY3JlYXRlU3VwZXIiLCJEZXJpdmVkIiwiaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJfY3JlYXRlU3VwZXJJbnRlcm5hbCIsIlN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsImRlZmF1bHQiLCJyZXN1bHQiLCJOZXdUYXJnZXQiLCJjb25zdHJ1Y3RvciIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsInNoYW0iLCJQcm94eSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsImUiLCJTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRUQiLCJTeW1ib2wiLCJTWU1CT0xfRVZFTlRTIiwiU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRCIsIlNZTUJPTF9PUFRJT05TIiwiQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbSIsIl9BdWRpb0lucHV0U3RyZWFtIiwiX2luaGVyaXRzMiIsIl9zdXBlciIsIl90aGlzIiwib3B0aW9ucyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9jbGFzc0NhbGxDaGVjazIiLCJfZGVmaW5lUHJvcGVydHkyIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZDIiLCJub3JtYWxpemVkT3B0aW9ucyIsImRlYnVnIiwiaWQiLCJ2NCIsInJlcGxhY2UiLCJjcmVhdGVEZWZlcnJlZCIsIkV2ZW50U291cmNlIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldCIsInByb21pc2UiLCJ2YWx1ZSIsIm9uRXZlbnQiLCJldmVudCIsIkV2ZW50cyIsImluc3RhbmNlIiwiZW1pdEluaXRpYWxpemluZyIsIkF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnQiLCJlbWl0UmVhZHkiLCJBdWRpb1NvdXJjZVJlYWR5RXZlbnQiLCJlbWl0RXJyb3IiLCJlcnJvciIsIkF1ZGlvU291cmNlRXJyb3JFdmVudCIsIm1lc3NhZ2UiLCJlbWl0Tm9kZUF0dGFjaGluZyIsImF1ZGlvTm9kZUlkIiwiY29uY2F0IiwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQiLCJlbWl0Tm9kZUF0dGFjaGVkIiwiQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudCIsImVtaXROb2RlRXJyb3IiLCJBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50IiwiZW1pdE5vZGVEZXRhY2hlZCIsIkF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQiLCJlbWl0T2ZmIiwiQXVkaW9Tb3VyY2VPZmZFdmVudCIsImNsb3NlIiwiRXJyb3IiLCJ0dXJuT24iLCJkZXRhY2giLCJfY29uc29sZSIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uc29sZSIsImluZm8iLCJhdHRhY2giLCJfdGhpczIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfeWllbGQkX3RoaXMyJHBlcmZvcm0iLCJhdWRpb1N0cmVhbU5vZGUiLCJkZXZpY2VJbmZvIiwiZm9ybWF0Iiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInByZXYiLCJuZXh0IiwicGVyZm9ybUF0dGFjaCIsInNlbnQiLCJBdWRpb1N0cmVhbUZvcm1hdEltcGwiLCJzYW1wbGVzUGVyU2VjIiwiYml0c1BlclNhbXBsZSIsImNoYW5uZWxzIiwiYWJydXB0IiwiX2RldGFjaCIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic3RvcCIsInJlYWQiLCJ0MCIsInBlcmZvcm1UdXJuT2ZmIiwiX3R1cm5PZmYiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInR1cm5PZmYiLCJhbGwiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkyIiwiX3JlZjMkIiwiY29ubmVjdGl2aXR5IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJ0eXBlIiwiX3JlZjMkMiIsImJpdHNwZXJzYW1wbGUiLCJjaGFubmVsY291bnQiLCJpc0ZvcmJpZGRlblByb3BlcnR5TmFtZSIsIkNvbm5lY3Rpdml0eSIsIlVua25vd24iLCJzYW1wbGVyYXRlIiwiVHlwZSIsIkF1ZGlvSW5wdXRTdHJlYW0iLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImJ1bmRsZTovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGVlY2gvQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdWRpb0lucHV0U3RyZWFtIH0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsnO1xuXG5pbXBvcnQge1xuICBBdWRpb1NvdXJjZUVycm9yRXZlbnQsXG4gIEF1ZGlvU291cmNlRXZlbnQsXG4gIEF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnQsXG4gIEF1ZGlvU291cmNlT2ZmRXZlbnQsXG4gIEF1ZGlvU291cmNlUmVhZHlFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudCxcbiAgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoaW5nRXZlbnQsXG4gIEF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQsXG4gIEF1ZGlvU3RyZWFtTm9kZUVycm9yRXZlbnQsXG4gIEV2ZW50cyxcbiAgRXZlbnRTb3VyY2Vcbn0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsvZGlzdHJpYi9saWIvc3JjL2NvbW1vbi9FeHBvcnRzJztcblxuaW1wb3J0IHsgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsIH0gZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsvZGlzdHJpYi9saWIvc3JjL3Nkay9BdWRpby9BdWRpb1N0cmVhbUZvcm1hdCc7XG5cbmltcG9ydCB7XG4gIGNvbm5lY3Rpdml0eSBhcyBDb25uZWN0aXZpdHksXG4gIElTcGVlY2hDb25maWdBdWRpb0RldmljZSxcbiAgdHlwZSBhcyBUeXBlXG59IGZyb20gJ21pY3Jvc29mdC1jb2duaXRpdmVzZXJ2aWNlcy1zcGVlY2gtc2RrL2Rpc3RyaWIvbGliL3NyYy9jb21tb24uc3BlZWNoL0V4cG9ydHMnO1xuXG5pbXBvcnQgeyBpc0ZvcmJpZGRlblByb3BlcnR5TmFtZSB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWNvcmUnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBjcmVhdGVEZWZlcnJlZCwgeyBEZWZlcnJlZFByb21pc2UgfSBmcm9tICdwLWRlZmVyLWVzNSc7XG5cbnR5cGUgQXVkaW9TdHJlYW1Ob2RlID0ge1xuICBkZXRhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGlkOiAoKSA9PiBzdHJpbmc7XG4gIHJlYWQ6ICgpID0+IFByb21pc2U8U3RyZWFtQ2h1bms8QXJyYXlCdWZmZXI+Pjtcbn07XG5cbnR5cGUgRGV2aWNlSW5mbyA9IHtcbiAgY29ubmVjdGl2aXR5PzogQ29ubmVjdGl2aXR5IHwgJ0JsdWV0b290aCcgfCAnV2lyZWQnIHwgJ1dpRmknIHwgJ0NlbGx1bGFyJyB8ICdJbkJ1aWx0JyB8ICdVbmtub3duJztcbiAgbWFudWZhY3R1cmVyPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCBUeXBlXG4gICAgfCAnUGhvbmUnXG4gICAgfCAnU3BlYWtlcidcbiAgICB8ICdDYXInXG4gICAgfCAnSGVhZHNldCdcbiAgICB8ICdUaGVybW9zdGF0J1xuICAgIHwgJ01pY3JvcGhvbmVzJ1xuICAgIHwgJ0Rlc2twaG9uZSdcbiAgICB8ICdSZW1vdGVDb250cm9sJ1xuICAgIHwgJ1Vua25vd24nXG4gICAgfCAnRmlsZSdcbiAgICB8ICdTdHJlYW0nO1xufTtcblxudHlwZSBGb3JtYXQgPSB7XG4gIGJpdHNQZXJTYW1wbGU6IG51bWJlcjtcbiAgY2hhbm5lbHM6IG51bWJlcjtcbiAgc2FtcGxlc1BlclNlYzogbnVtYmVyO1xufTtcblxudHlwZSBOb3JtYWxpemVkT3B0aW9ucyA9IFJlcXVpcmVkPE9taXQ8T3B0aW9ucywgJ2RlYnVnJz4+ICYge1xuICBkZWJ1ZzogYm9vbGVhbjtcbn07XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgZGVidWc/OiB0cnVlO1xuICBpZD86IHN0cmluZztcbn07XG5cbnR5cGUgU3RyZWFtQ2h1bms8VD4gPSB7XG4gIGlzRW5kOiBib29sZWFuO1xuICBidWZmZXI6IFQ7XG4gIHRpbWVSZWNlaXZlZDogbnVtYmVyO1xufTtcblxuY29uc3QgU1lNQk9MX0RFVklDRV9JTkZPX0RFRkVSUkVEID0gU3ltYm9sKCdkZXZpY2VJbmZvRGVmZXJyZWQnKTtcbmNvbnN0IFNZTUJPTF9FVkVOVFMgPSBTeW1ib2woJ2V2ZW50cycpO1xuY29uc3QgU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRCA9IFN5bWJvbCgnZm9ybWF0RGVmZXJyZWQnKTtcbmNvbnN0IFNZTUJPTF9PUFRJT05TID0gU3ltYm9sKCdvcHRpb25zJyk7XG5cbi8vIFNwZWVjaCBTREsgcXVpcmtzOiBPbmx5IDIgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgdXNlZC5cbi8vICAgICAgICAgICAgICAgICAgICBUaGV5IGFyZTogYXR0YWNoKCkgYW5kIHR1cm5PZmYoKS5cbi8vICAgICAgICAgICAgICAgICAgICBPdGhlcnMgYXJlIG5vdCB1c2VkLCBpbmNsdWRpbmc6IGJsb2IoKSwgY2xvc2UoKSwgZGV0YWNoKCksIHR1cm5PbigpLlxuYWJzdHJhY3QgY2xhc3MgQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbSBleHRlbmRzIEF1ZGlvSW5wdXRTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnM6IE5vcm1hbGl6ZWRPcHRpb25zID0ge1xuICAgICAgZGVidWc6IG9wdGlvbnMuZGVidWcgfHwgZmFsc2UsXG4gICAgICBpZDogb3B0aW9ucy5pZCB8fCB2NCgpLnJlcGxhY2UoLy0vZ3UsICcnKVxuICAgIH07XG5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHRoaXNbU1lNQk9MX0RFVklDRV9JTkZPX0RFRkVSUkVEXSA9IGNyZWF0ZURlZmVycmVkPERldmljZUluZm8+KCk7XG5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHRoaXNbU1lNQk9MX0VWRU5UU10gPSBuZXcgRXZlbnRTb3VyY2U8QXVkaW9Tb3VyY2VFdmVudD4oKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfRk9STUFUX0RFRkVSUkVEXSA9IGNyZWF0ZURlZmVycmVkPEF1ZGlvU3RyZWFtRm9ybWF0SW1wbD4oKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfT1BUSU9OU10gPSBub3JtYWxpemVkT3B0aW9ucztcbiAgfVxuXG4gIFtTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdOiBEZWZlcnJlZFByb21pc2U8RGV2aWNlSW5mbz47XG4gIFtTWU1CT0xfRVZFTlRTXTogRXZlbnRTb3VyY2U8QXVkaW9Tb3VyY2VFdmVudD47XG4gIFtTWU1CT0xfRk9STUFUX0RFRkVSUkVEXTogRGVmZXJyZWRQcm9taXNlPEF1ZGlvU3RyZWFtRm9ybWF0SW1wbD47XG4gIFtTWU1CT0xfT1BUSU9OU106IE5vcm1hbGl6ZWRPcHRpb25zO1xuXG4gIC8qKiBHZXRzIHRoZSBldmVudCBzb3VyY2UgZm9yIGxpc3RlbmluZyB0byBldmVudHMuICovXG4gIC8vIEVTTGludDogVGhpcyBjb2RlIHdpbGwgb25seSB3b3JrcyBpbiBicm93c2VycyBvdGhlciB0aGFuIElFMTEuIE9ubHkgd29ya3MgaW4gRVM1IGlzIG9rYXkuXG4gIC8vIEB0cy1pZ25vcmUgQWNjZXNzb3JzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRhcmdldGluZyBFQ01BU2NyaXB0IDUgYW5kIGhpZ2hlci50cygxMDU2KVxuICBnZXQgZXZlbnRzKCk6IEV2ZW50U291cmNlPEF1ZGlvU291cmNlRXZlbnQ+IHtcbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHJldHVybiB0aGlzW1NZTUJPTF9FVkVOVFNdO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGZvcm1hdCBvZiB0aGUgYXVkaW8gc3RyZWFtLiAqL1xuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogYEF1ZGlvU3RyZWFtRm9ybWF0SW1wbGAgaXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gd2hpbGUgYEF1ZGlvU3RyZWFtRm9ybWF0YCBpcyBwdWJsaWMuXG4gIC8vICAgICAgICAgICAgICAgICAgICBJdCBpcyB3ZWlyZCB0byBleHBvc2UgYEF1ZGlvU3RyZWFtRm9ybWF0SW1wbGAgaW5zdGVhZCBvZiBgQXVkaW9TdHJlYW1Gb3JtYXRgLlxuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogSXQgaXMgd2VpcmQgdG8gcmV0dXJuIGEgYFByb21pc2VgIGluIGEgcHJvcGVydHkuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBJbiBub3JtYWwgc3BlZWNoIHJlY29nbml0aW9uLCBnZXR0ZXIgb2YgXCJmb3JtYXRcIiBpcyBjYWxsZWQgb25seSBhZnRlciBcImF0dGFjaFwiLlxuICAvLyAgICAgICAgICAgICAgICAgICAgQnV0IGluIERpcmVjdCBMaW5lIFNwZWVjaCwgaXQgaXMgY2FsbGVkIGJlZm9yZSBcImF0dGFjaFwiLlxuICAvLyBFU0xpbnQ6IFRoaXMgY29kZSB3aWxsIG9ubHkgd29ya3MgaW4gYnJvd3NlcnMgb3RoZXIgdGhhbiBJRTExLiBPbmx5IHdvcmtzIGluIEVTNSBpcyBva2F5LlxuICAvLyBAdHMtaWdub3JlIEFjY2Vzc29ycyBhcmUgb25seSBhdmFpbGFibGUgd2hlbiB0YXJnZXRpbmcgRUNNQVNjcmlwdCA1IGFuZCBoaWdoZXIudHMoMTA1NilcbiAgZ2V0IGZvcm1hdCgpOiBQcm9taXNlPEF1ZGlvU3RyZWFtRm9ybWF0SW1wbD4ge1xuICAgIHRoaXMuZGVidWcoJ0dldHRpbmcgXCJmb3JtYXRcIi4nKTtcblxuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgcmV0dXJuIHRoaXNbU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRF0ucHJvbWlzZTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBJRCBvZiB0aGlzIGF1ZGlvIHN0cmVhbS4gKi9cbiAgaWQoKTogc3RyaW5nIHtcbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHJldHVybiB0aGlzW1NZTUJPTF9PUFRJT05TXS5pZDtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBldmVudC4gKi9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEluIEphdmFTY3JpcHQsIG9uWHh4IG1lYW5zIFwibGlzdGVuIHRvIGV2ZW50IFhYWFwiLlxuICAvLyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgaW4gU3BlZWNoIFNESywgaXQgbWVhbnMgXCJlbWl0IGV2ZW50IFhYWFwiLlxuICBwcm90ZWN0ZWQgb25FdmVudChldmVudDogQXVkaW9Tb3VyY2VFdmVudCk6IHZvaWQge1xuICAgIC8vIEZhbHNlIGFsYXJtOiBpbmRleGVyIGlzIGEgY29uc3RhbnQgb2YgdHlwZSBTeW1ib2wuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgdGhpc1tTWU1CT0xfRVZFTlRTXS5vbkV2ZW50KGV2ZW50KTtcbiAgICBFdmVudHMuaW5zdGFuY2Uub25FdmVudChldmVudCk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnRgLiAqL1xuICBwcm90ZWN0ZWQgZW1pdEluaXRpYWxpemluZygpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU291cmNlSW5pdGlhbGl6aW5nRXZlbnQodGhpcy5pZCgpKSk7XG4gIH1cblxuICAvKiogRW1pdHMgYW4gYEF1ZGlvU291cmNlUmVhZHlFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0UmVhZHkoKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnRW1pdHRpbmcgXCJBdWRpb1NvdXJjZVJlYWR5RXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU291cmNlUmVhZHlFdmVudCh0aGlzLmlkKCkpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9Tb3VyY2VFcnJvckV2ZW50YC4gKi9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IFNpbmNlIFwidHVybk9uXCIgaXMgbmV2ZXIgY2FsbGVkIGFuZCBcInR1cm5PZmZcIiBkb2VzIG5vdCB3b3JrIGluIERpcmVjdCBMaW5lIFNwZWVjaCwgdGhlIFwic291cmNlIGVycm9yXCIgZXZlbnQgaXMgbm90IGVtaXR0ZWQgYXQgYWxsLlxuICAvLyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgd2Ugb25seSBlbWl0IFwibm9kZSBlcnJvclwiIGV2ZW50LlxuICBwcm90ZWN0ZWQgZW1pdEVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoJ0VtaXR0aW5nIFwiQXVkaW9Tb3VyY2VFcnJvckV2ZW50XCIuJywgeyBlcnJvciB9KTtcblxuICAgIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBcImVycm9yXCIgaXMgYSBzdHJpbmcsIGluc3RlYWQgb2Ygb2JqZWN0IG9mIHR5cGUgXCJFcnJvclwiLlxuICAgIHRoaXMub25FdmVudChuZXcgQXVkaW9Tb3VyY2VFcnJvckV2ZW50KHRoaXMuaWQoKSwgZXJyb3IubWVzc2FnZSkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1N0cmVhbU5vZGVBdHRhY2hpbmdFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZUF0dGFjaGluZyhhdWRpb05vZGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZyhgRW1pdHRpbmcgXCJBdWRpb1N0cmVhbU5vZGVBdHRhY2hpbmdFdmVudFwiIGZvciBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZUF0dGFjaGluZ0V2ZW50KHRoaXMuaWQoKSwgYXVkaW9Ob2RlSWQpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9TdHJlYW1Ob2RlQXR0YWNoZWRFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZUF0dGFjaGVkKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKGBFbWl0dGluZyBcIkF1ZGlvU3RyZWFtTm9kZUF0dGFjaGVkRXZlbnRcIiBmb3Igbm9kZSBcIiR7YXVkaW9Ob2RlSWR9XCIuYCk7XG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1N0cmVhbU5vZGVBdHRhY2hlZEV2ZW50KHRoaXMuaWQoKSwgYXVkaW9Ob2RlSWQpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZUVycm9yKGF1ZGlvTm9kZUlkOiBzdHJpbmcsIGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIHRoaXMuZGVidWcoYEVtaXR0aW5nIFwiQXVkaW9TdHJlYW1Ob2RlRXJyb3JFdmVudFwiIGZvciBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gLCB7IGVycm9yIH0pO1xuXG4gICAgLy8gU3BlZWNoIFNESyBxdWlya3M6IFwiZXJyb3JcIiBpcyBhIHN0cmluZywgaW5zdGVhZCBvZiBvYmplY3Qgb2YgdHlwZSBcIkVycm9yXCIuXG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1N0cmVhbU5vZGVFcnJvckV2ZW50KHRoaXMuaWQoKSwgYXVkaW9Ob2RlSWQsIGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhbiBgQXVkaW9TdHJlYW1Ob2RlRGV0YWNoZWRFdmVudGAuICovXG4gIHByb3RlY3RlZCBlbWl0Tm9kZURldGFjaGVkKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdFbWl0dGluZyBcIkF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnRcIi4nKTtcbiAgICB0aGlzLm9uRXZlbnQobmV3IEF1ZGlvU3RyZWFtTm9kZURldGFjaGVkRXZlbnQodGhpcy5pZCgpLCBhdWRpb05vZGVJZCkpO1xuICB9XG5cbiAgLyoqIEVtaXRzIGFuIGBBdWRpb1NvdXJjZU9mZkV2ZW50YC4gKi9cbiAgcHJvdGVjdGVkIGVtaXRPZmYoKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnRW1pdHRpbmcgXCJBdWRpb1NvdXJjZU9mZkV2ZW50XCIuJyk7XG4gICAgdGhpcy5vbkV2ZW50KG5ldyBBdWRpb1NvdXJjZU9mZkV2ZW50KHRoaXMuaWQoKSkpO1xuICB9XG5cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEFsdGhvdWdoIFwiY2xvc2VcIiBpcyBtYXJrZWQgYXMgYWJzdHJhY3QsIGl0IGlzIG5ldmVyIGNhbGxlZCBpbiBvdXIgb2JzZXJ2YXRpb25zLlxuICAvLyBFU0xpbnQ6IFNwZWVjaCBTREsgcmVxdWlyZXMgdGhpcyBmdW5jdGlvbiwgYnV0IHdlIGFyZSBub3QgaW1wbGVtZW50aW5nIGl0LlxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdDYWxsYmFjayBmb3IgXCJjbG9zZVwiLicpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBBbHRob3VnaCBcInR1cm5PblwiIGlzIGltcGxlbWVudGVkIGluIFNwZWVjaCBTREsgUHVzaC9QdWxsQXVkaW9JbnB1dFN0cmVhbSwgaXQgaXMgbmV2ZXIgY2FsbGVkIGluIG91ciBvYnNlcnZhdGlvbnMuXG4gIHR1cm5PbigpOiB2b2lkIHtcbiAgICB0aGlzLmRlYnVnKCdDYWxsYmFjayBmb3IgXCJ0dXJuT25cIi4nKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvLyBTcGVlY2ggU0RLIHF1aXJrczogQWx0aG91Z2ggXCJkZXRhY2hcIiBpcyBpbXBsZW1lbnRlZCBpbiBTcGVlY2ggU0RLIFB1c2gvUHVsbEF1ZGlvSW5wdXRTdHJlYW0sIGl0IGlzIG5ldmVyIGNhbGxlZCBpbiBvdXIgb2JzZXJ2YXRpb25zLlxuICBkZXRhY2goKTogdm9pZCB7XG4gICAgdGhpcy5kZWJ1ZygnQ2FsbGJhY2sgZm9yIFwiZGV0YWNoXCIuJyk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIExvZyB0aGUgbWVzc2FnZSB0byBjb25zb2xlIGlmIGBkZWJ1Z2AgaXMgc2V0IHRvIGB0cnVlYC4gKi9cbiAgcHJpdmF0ZSBkZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKSB7XG4gICAgLy8gRVNMaW50OiBGb3IgZGVidWdnaW5nLCB3aWxsIG9ubHkgbG9nIHdoZW4gXCJkZWJ1Z1wiIGlzIHNldCB0byBcInRydWVcIi5cbiAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlLCBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgIHRoaXNbU1lNQk9MX09QVElPTlNdLmRlYnVnICYmIGNvbnNvbGUuaW5mbyhgQ3VzdG9tQXVkaW9JbnB1dFN0cmVhbTogJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqIEltcGxlbWVudHMgdGhpcyBmdW5jdGlvbi4gV2hlbiBjYWxsZWQsIGl0IHNob3VsZCBzdGFydCByZWNvcmRpbmcgYW5kIHJldHVybiBhbiBgSUF1ZGlvU3RyZWFtTm9kZWAuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtQXR0YWNoKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgICBhdWRpb1N0cmVhbU5vZGU6IEF1ZGlvU3RyZWFtTm9kZTtcbiAgICBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvO1xuICAgIGZvcm1hdDogRm9ybWF0O1xuICB9PjtcblxuICAvKiogQXR0YWNoZXMgdGhlIGRldmljZSBieSByZXR1cm5pbmcgYW4gYXVkaW8gbm9kZS4gKi9cbiAgYXR0YWNoKGF1ZGlvTm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPEF1ZGlvU3RyZWFtTm9kZT4ge1xuICAgIHRoaXMuZGVidWcoYENhbGxiYWNrIGZvciBcImF0dGFjaFwiIHdpdGggXCIke2F1ZGlvTm9kZUlkfVwiLmApO1xuXG4gICAgdGhpcy5lbWl0Tm9kZUF0dGFjaGluZyhhdWRpb05vZGVJZCk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbjxBdWRpb1N0cmVhbU5vZGU+KGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMuZW1pdEluaXRpYWxpemluZygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGF1ZGlvU3RyZWFtTm9kZSwgZGV2aWNlSW5mbywgZm9ybWF0IH0gPSBhd2FpdCB0aGlzLnBlcmZvcm1BdHRhY2goYXVkaW9Ob2RlSWQpO1xuXG4gICAgICAgIC8vIEFsdGhvdWdoIG9ubHkgZ2V0dGVyIG9mIFwiZm9ybWF0XCIgaXMgY2FsbGVkIGJlZm9yZSBcImF0dGFjaFwiIChpbiBEaXJlY3QgTGluZSBTcGVlY2gpLFxuICAgICAgICAvLyB3ZSBhcmUgaGFuZGxpbmcgYm90aCBcImRldmljZUluZm9cIiBhbmQgXCJmb3JtYXRcIiBpbiBzaW1pbGFyIHdheSBmb3IgdW5pZm9ybWl0eS5cblxuICAgICAgICAvLyBGYWxzZSBhbGFybTogaW5kZXhlciBpcyBhIGNvbnN0YW50IG9mIHR5cGUgU3ltYm9sLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgdGhpc1tTWU1CT0xfREVWSUNFX0lORk9fREVGRVJSRURdLnJlc29sdmUoZGV2aWNlSW5mbyk7XG5cbiAgICAgICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgIHRoaXNbU1lNQk9MX0ZPUk1BVF9ERUZFUlJFRF0ucmVzb2x2ZShcbiAgICAgICAgICBuZXcgQXVkaW9TdHJlYW1Gb3JtYXRJbXBsKGZvcm1hdC5zYW1wbGVzUGVyU2VjLCBmb3JtYXQuYml0c1BlclNhbXBsZSwgZm9ybWF0LmNoYW5uZWxzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZW1pdFJlYWR5KCk7XG4gICAgICAgIHRoaXMuZW1pdE5vZGVBdHRhY2hlZChhdWRpb05vZGVJZCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZXRhY2g6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYERldGFjaGluZyBhdWRpbyBub2RlIFwiJHthdWRpb05vZGVJZH1cIi5gKTtcblxuICAgICAgICAgICAgYXdhaXQgYXVkaW9TdHJlYW1Ob2RlLmRldGFjaCgpO1xuXG4gICAgICAgICAgICAvLyBTcGVlY2ggU0RLIHF1aXJrczogU2luY2UgXCJ0dXJuT2ZmXCIgaXMgbm90IGNhbGxlZCBpbiBEaXJlY3QgTGluZSBTcGVlY2gsIHdlIHdpbGwgZW1pdCBldmVudCBcInNvdXJjZSBvZmZcIiBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgICB0aGlzLmVtaXRPZmYoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdE5vZGVEZXRhY2hlZChhdWRpb05vZGVJZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZDogKCkgPT4gYXVkaW9TdHJlYW1Ob2RlLmlkKCksXG4gICAgICAgICAgcmVhZDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZygnUmVhZGluZycpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXVkaW9TdHJlYW1Ob2RlLnJlYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtaXROb2RlRXJyb3IoYXVkaW9Ob2RlSWQsIGVycm9yKTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIHRoaXMgZnVuY3Rpb24uIFdoZW4gY2FsbGVkLCBpdCBzaG91bGQgc3RvcCByZWNvcmRpbmcuIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgYElBdWRpb1N0cmVhbU5vZGUuZGV0YWNoYCBmdW5jdGlvbi5cbiAgICpcbiAgICogTm90ZTogd2hlbiB1c2luZyB3aXRoIERpcmVjdCBMaW5lIFNwZWVjaCwgdGhpcyBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQuXG4gICAqL1xuXG4gIC8vIEVTTGludDogV2UgYXJlIG5vdCBpbXBsZW1lbnRpbmcgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0IGlzIG5vdCBjYWxsZWQgYnkgRGlyZWN0IExpbmUgU3BlZWNoLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcm90ZWN0ZWQgcGVyZm9ybVR1cm5PZmYoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRVNMaW50OiBcInJldHVyblwiIGlzIHJlcXVpcmVkIGJ5IFR5cGVTY3JpcHRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1yZXR1cm5cbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogVHVybiBvZmYgdGhlIGF1ZGlvIGRldmljZS4gVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGRldGFjaGluZyBmcm9tIHRoZSBncmFwaC4gKi9cbiAgLy8gU3BlZWNoIFNESyBxdWlya3M6IEl0IGlzIGNvbmZ1c2VkIHRvIGhhdmUgYm90aCBcInR1cm5PZmZcIiBhbmQgXCJkZXRhY2hcIi4gXCJ0dXJuT2ZmXCIgaXMgY2FsbGVkIGJlZm9yZSBcImRldGFjaFwiLlxuICAvLyAgICAgICAgICAgICAgICAgICAgV2h5IGRvbid0IHdlIHB1dCBhbGwgbG9naWNzIGF0IFwiZGV0YWNoXCI/XG4gIC8vIFNwZWVjaCBTREsgcXVpcmtzOiBEaXJlY3QgTGluZSBTcGVlY2ggbmV2ZXIgY2FsbCBcInR1cm5PZmZcIi4gXCJTb3VyY2Ugb2ZmXCIgZXZlbnQgbmVlZCB0byBiZSBlbWl0dGVkIGR1cmluZyBcImRldGFjaFwiIGluc3RlYWQuXG4gIC8vICAgICAgICAgICAgICAgICAgICBBbHNvLCBjdXN0b20gaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGRvbmUgYXQgXCJkZXRhY2hcIiBpbnN0ZWFkLCBzdWNoIGFzIGVuZGluZyBhbmQgY2xvc2luZyBvdXRwdXQgc3RyZWFtcy5cbiAgYXN5bmMgdHVybk9mZigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRlYnVnKGBDYWxsYmFjayBmb3IgXCJ0dXJuT2ZmXCIuYCk7XG5cbiAgICBhd2FpdCB0aGlzLnBlcmZvcm1UdXJuT2ZmKCk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uLiAqL1xuICAvLyBFU0xpbnQ6IFRoaXMgY29kZSB3aWxsIG9ubHkgd29ya3MgaW4gYnJvd3NlcnMgb3RoZXIgdGhhbiBJRTExLiBPbmx5IHdvcmtzIGluIEVTNSBpcyBva2F5LlxuICAvLyBAdHMtaWdub3JlIEFjY2Vzc29ycyBhcmUgb25seSBhdmFpbGFibGUgd2hlbiB0YXJnZXRpbmcgRUNNQVNjcmlwdCA1IGFuZCBoaWdoZXIudHMoMTA1NilcbiAgZ2V0IGRldmljZUluZm8oKTogUHJvbWlzZTxJU3BlZWNoQ29uZmlnQXVkaW9EZXZpY2U+IHtcbiAgICB0aGlzLmRlYnVnKGBHZXR0aW5nIFwiZGV2aWNlSW5mb1wiLmApO1xuXG4gICAgLy8gRmFsc2UgYWxhcm06IGluZGV4ZXIgaXMgYSBjb25zdGFudCBvZiB0eXBlIFN5bWJvbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXNbU1lNQk9MX0RFVklDRV9JTkZPX0RFRkVSUkVEXS5wcm9taXNlLCB0aGlzW1NZTUJPTF9GT1JNQVRfREVGRVJSRURdLnByb21pc2VdKS50aGVuKFxuICAgICAgKFt7IGNvbm5lY3Rpdml0eSwgbWFudWZhY3R1cmVyLCBtb2RlbCwgdHlwZSB9LCB7IGJpdHNQZXJTYW1wbGUsIGNoYW5uZWxzLCBzYW1wbGVzUGVyU2VjIH1dKSA9PiAoe1xuICAgICAgICBiaXRzcGVyc2FtcGxlOiBiaXRzUGVyU2FtcGxlLFxuICAgICAgICBjaGFubmVsY291bnQ6IGNoYW5uZWxzLFxuICAgICAgICBjb25uZWN0aXZpdHk6XG4gICAgICAgICAgdHlwZW9mIGNvbm5lY3Rpdml0eSA9PT0gJ3N0cmluZycgJiYgIWlzRm9yYmlkZGVuUHJvcGVydHlOYW1lKGNvbm5lY3Rpdml0eSlcbiAgICAgICAgICAgID8gLy8gTWl0aWdhdGVkIHRocm91Z2ggZGVueWxpc3RpbmcuXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICBDb25uZWN0aXZpdHlbY29ubmVjdGl2aXR5XVxuICAgICAgICAgICAgOiBjb25uZWN0aXZpdHkgfHwgQ29ubmVjdGl2aXR5LlVua25vd24sXG4gICAgICAgIG1hbnVmYWN0dXJlcjogbWFudWZhY3R1cmVyIHx8ICcnLFxuICAgICAgICBtb2RlbDogbW9kZWwgfHwgJycsXG4gICAgICAgIHNhbXBsZXJhdGU6IHNhbXBsZXNQZXJTZWMsXG4gICAgICAgIC8vIE1pdGlnYXRlZCB0aHJvdWdoIGRlbnlsaXN0aW5nLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgdHlwZTogdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnICYmICFpc0ZvcmJpZGRlblByb3BlcnR5TmFtZSh0eXBlKSA/IFR5cGVbdHlwZV0gOiB0eXBlIHx8IFR5cGUuVW5rbm93blxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbUF1ZGlvSW5wdXRTdHJlYW07XG5cbmV4cG9ydCB0eXBlIHsgQXVkaW9TdHJlYW1Ob2RlLCBEZXZpY2VJbmZvLCBGb3JtYXQsIE9wdGlvbnMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxvQ0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBY0EsSUFBQUUsa0JBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQU1BLElBQUFJLHdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFDLHNCQUFBLENBQUFQLE9BQUE7QUFBOEQsU0FBQVEsYUFBQUMsT0FBQSxRQUFBQyx5QkFBQSxHQUFBQyx5QkFBQSxvQkFBQUMscUJBQUEsUUFBQUMsS0FBQSxPQUFBQyxnQkFBQSxDQUFBQyxPQUFBLEVBQUFOLE9BQUEsR0FBQU8sTUFBQSxNQUFBTix5QkFBQSxRQUFBTyxTQUFBLE9BQUFILGdCQUFBLENBQUFDLE9BQUEsUUFBQUcsV0FBQSxFQUFBRixNQUFBLEdBQUFHLE9BQUEsQ0FBQUMsU0FBQSxDQUFBUCxLQUFBLEVBQUFRLFNBQUEsRUFBQUosU0FBQSxZQUFBRCxNQUFBLEdBQUFILEtBQUEsQ0FBQVMsS0FBQSxPQUFBRCxTQUFBLGdCQUFBRSwyQkFBQSxDQUFBUixPQUFBLFFBQUFDLE1BQUE7QUFBQSxTQUFBTCwwQkFBQSxlQUFBUSxPQUFBLHFCQUFBQSxPQUFBLENBQUFDLFNBQUEsb0JBQUFELE9BQUEsQ0FBQUMsU0FBQSxDQUFBSSxJQUFBLDJCQUFBQyxLQUFBLG9DQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBQyxJQUFBLENBQUFWLE9BQUEsQ0FBQUMsU0FBQSxD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
@@ -4,11 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = bytesPerSample;
7
-
8
7
  function bytesPerSample(settings) {
9
8
  // `channelCount` is not on @types/web@0.0.54 yet, related to https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1290.
10
9
  // @ts-ignore
11
10
  // eslint-disable-next-line no-magic-numbers
12
11
  return (settings.sampleSize >> 3) * settings.channelCount * settings.sampleRate;
13
12
  }
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJieXRlc1BlclNhbXBsZSIsInNldHRpbmdzIiwic2FtcGxlU2l6ZSIsImNoYW5uZWxDb3VudCIsInNhbXBsZVJhdGUiXSwic291cmNlUm9vdCI6ImJ1bmRsZTovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGVlY2gvYnl0ZXNQZXJTYW1wbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnl0ZXNQZXJTYW1wbGUoc2V0dGluZ3M6IE1lZGlhVHJhY2tTZXR0aW5ncykge1xuICAvLyBgY2hhbm5lbENvdW50YCBpcyBub3Qgb24gQHR5cGVzL3dlYkAwLjAuNTQgeWV0LCByZWxhdGVkIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9pc3N1ZXMvMTI5MC5cbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICByZXR1cm4gKChzZXR0aW5ncy5zYW1wbGVTaXplIGFzIG51bWJlcikgPj4gMykgKiAoc2V0dGluZ3MuY2hhbm5lbENvdW50IGFzIG51bWJlcikgKiAoc2V0dGluZ3Muc2FtcGxlUmF0ZSBhcyBudW1iZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWUsU0FBU0EsY0FBVCxDQUF3QkMsUUFBeEIsRUFBc0Q7RUFDbkU7RUFDQTtFQUNBO0VBQ0EsT0FBTyxDQUFFQSxRQUFRLENBQUNDLFVBQVYsSUFBbUMsQ0FBcEMsSUFBMENELFFBQVEsQ0FBQ0UsWUFBbkQsR0FBOEVGLFFBQVEsQ0FBQ0csVUFBOUY7QUFDRCJ9
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJieXRlc1BlclNhbXBsZSIsInNldHRpbmdzIiwic2FtcGxlU2l6ZSIsImNoYW5uZWxDb3VudCIsInNhbXBsZVJhdGUiXSwic291cmNlUm9vdCI6ImJ1bmRsZTovLy8iLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcGVlY2gvYnl0ZXNQZXJTYW1wbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnl0ZXNQZXJTYW1wbGUoc2V0dGluZ3M6IE1lZGlhVHJhY2tTZXR0aW5ncykge1xuICAvLyBgY2hhbm5lbENvdW50YCBpcyBub3Qgb24gQHR5cGVzL3dlYkAwLjAuNTQgeWV0LCByZWxhdGVkIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9pc3N1ZXMvMTI5MC5cbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICByZXR1cm4gKChzZXR0aW5ncy5zYW1wbGVTaXplIGFzIG51bWJlcikgPj4gMykgKiAoc2V0dGluZ3MuY2hhbm5lbENvdW50IGFzIG51bWJlcikgKiAoc2V0dGluZ3Muc2FtcGxlUmF0ZSBhcyBudW1iZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBZSxTQUFTQSxjQUFjQSxDQUFDQyxRQUE0QixFQUFFO0VBQ25FO0VBQ0E7RUFDQTtFQUNBLE9BQU8sQ0FBRUEsUUFBUSxDQUFDQyxVQUFVLElBQWUsQ0FBQyxJQUFLRCxRQUFRLENBQUNFLFlBQXVCLEdBQUlGLFFBQVEsQ0FBQ0csVUFBcUI7QUFDckgifQ==