@pie-element/ebsr 9.1.2-next.72 → 9.2.0-next.1

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/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [9.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr@9.1.1...@pie-element/ebsr@9.2.0) (2023-12-19)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * update pie-lib/pie-toolbox PD-2068 ([34eccd5](https://github.com/pie-framework/pie-elements/commit/34eccd52c44259eddf3e2b816b00b82f83bc2bf8))
12
+
13
+
14
+ ### Features
15
+
16
+ * update pie-lib/pie-toolbox PD-2555 ([86d4fd9](https://github.com/pie-framework/pie-elements/commit/86d4fd909180dd1fcbc446bd8b29c23af21a1c69))
17
+ * update pie-lib/pie-toolbox PD-3307, PD-2067, PD-3271, PD-3041, PD-2068 ([2eabcbd](https://github.com/pie-framework/pie-elements/commit/2eabcbd036e318bb24552f4140ca7384ad865951))
18
+
19
+
20
+
21
+
22
+
6
23
  ## [9.1.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr@9.1.0...@pie-element/ebsr@9.1.1) (2023-11-27)
7
24
 
8
25
 
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [9.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr-configure@9.0.3...@pie-element/ebsr-configure@9.1.0) (2023-12-19)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * update pie-lib/pie-toolbox PD-2068 ([34eccd5](https://github.com/pie-framework/pie-elements/commit/34eccd52c44259eddf3e2b816b00b82f83bc2bf8))
12
+
13
+
14
+ ### Features
15
+
16
+ * update pie-lib/pie-toolbox PD-2555 ([86d4fd9](https://github.com/pie-framework/pie-elements/commit/86d4fd909180dd1fcbc446bd8b29c23af21a1c69))
17
+ * update pie-lib/pie-toolbox PD-3307, PD-2067, PD-3271, PD-3041, PD-2068 ([2eabcbd](https://github.com/pie-framework/pie-elements/commit/2eabcbd036e318bb24552f4140ca7384ad865951))
18
+
19
+
20
+
21
+
22
+
6
23
  ## [9.0.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr-configure@9.0.2...@pie-element/ebsr-configure@9.0.3) (2023-11-27)
7
24
 
8
25
 
@@ -0,0 +1,434 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
6
+
7
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
+
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+
13
+ var _react = _interopRequireDefault(require("react"));
14
+
15
+ var _enzyme = require("enzyme");
16
+
17
+ var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
18
+
19
+ var _configUi = require("@pie-lib/pie-toolbox/config-ui");
20
+
21
+ var _reactDom = _interopRequireDefault(require("react-dom"));
22
+
23
+ var _defaults = _interopRequireDefault(require("../defaults"));
24
+
25
+ var _main = require("../main");
26
+
27
+ var _index = _interopRequireDefault(require("../index"));
28
+
29
+ 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; }
30
+
31
+ 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) { (0, _defineProperty2["default"])(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; }
32
+
33
+ jest.mock('react-dom', function () {
34
+ return {
35
+ render: jest.fn()
36
+ };
37
+ });
38
+ jest.mock('@pie-framework/pie-configure-events', function () {
39
+ return {
40
+ ModelUpdatedEvent: function ModelUpdatedEvent(update) {
41
+ return {
42
+ update: update,
43
+ preventDefault: jest.fn(),
44
+ stopImmediatePropagation: jest.fn()
45
+ };
46
+ }
47
+ };
48
+ });
49
+ jest.mock('@pie-lib/pie-toolbox/config-ui', function () {
50
+ return {
51
+ choiceUtils: {
52
+ firstAvailableIndex: jest.fn()
53
+ },
54
+ settings: {
55
+ Panel: function Panel(props) {
56
+ return /*#__PURE__*/_react["default"].createElement("div", props);
57
+ },
58
+ toggle: jest.fn(),
59
+ radio: jest.fn(),
60
+ dropdown: jest.fn()
61
+ },
62
+ layout: {
63
+ ConfigLayout: function ConfigLayout(props) {
64
+ return /*#__PURE__*/_react["default"].createElement("div", null, props.children);
65
+ }
66
+ }
67
+ };
68
+ });
69
+ jest.mock('@pie-element/multiple-choice/configure/lib', function () {
70
+ return /*#__PURE__*/(0, _createClass2["default"])(function MockConfigure() {
71
+ (0, _classCallCheck2["default"])(this, MockConfigure);
72
+ });
73
+ });
74
+ var PART_A = 'partA';
75
+ var PART_B = 'partB';
76
+
77
+ var createDefaultModel = function createDefaultModel(model) {
78
+ var newModel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
79
+ return _objectSpread(_objectSpread(_objectSpread({}, model), newModel), {}, {
80
+ partA: _objectSpread(_objectSpread({}, model.partA), newModel.partA),
81
+ partB: _objectSpread(_objectSpread({}, model.partB), newModel.partB)
82
+ });
83
+ };
84
+
85
+ var model = createDefaultModel(_defaults["default"].model, {
86
+ partA: {
87
+ choiceMode: 'radio',
88
+ choices: [{
89
+ value: 'yellow',
90
+ label: 'Yellow',
91
+ correct: true,
92
+ feedback: {
93
+ type: 'custom',
94
+ value: 'foo'
95
+ }
96
+ }, {
97
+ value: 'green',
98
+ label: 'Green',
99
+ feedback: {
100
+ type: 'default'
101
+ }
102
+ }],
103
+ choicePrefix: 'numbers',
104
+ prompt: "prompt ".concat(PART_A),
105
+ errors: {}
106
+ },
107
+ partB: {
108
+ choiceMode: 'radio',
109
+ choices: [{
110
+ value: 'orange',
111
+ label: 'Orange',
112
+ correct: true,
113
+ feedback: {
114
+ type: 'custom',
115
+ value: 'foo'
116
+ }
117
+ }, {
118
+ value: 'purple',
119
+ label: 'Purple',
120
+ feedback: {
121
+ type: 'default'
122
+ }
123
+ }],
124
+ choicePrefix: 'numbers',
125
+ prompt: "prompt ".concat(PART_B),
126
+ errors: {}
127
+ }
128
+ });
129
+ describe('index', function () {
130
+ var Def;
131
+ var el;
132
+ var onModelChanged = jest.fn();
133
+ var onConfigurationChanged = jest.fn();
134
+ var main;
135
+ beforeAll(function () {
136
+ Def = require('../index')["default"];
137
+ });
138
+ beforeEach(function () {
139
+ el = new Def();
140
+ el.model = model;
141
+ el.configuration = _defaults["default"].configuration;
142
+ el.onModelChanged = onModelChanged;
143
+ el.onConfigurationChanged = onConfigurationChanged;
144
+ el.connectedCallback();
145
+ el.dispatchEvent = el.onModelUpdated;
146
+ main = (0, _enzyme.mount)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
147
+ classes: {},
148
+ model: el._model,
149
+ configuration: _defaults["default"].configuration,
150
+ onConfigurationChanged: el.onConfigurationChanged,
151
+ onModelChanged: el.onModelChanged
152
+ })); // mock onModelChanged to dispatch a MODEL_UPDATED event (as multiple-choice does)
153
+
154
+ main.instance().partA.onModelChanged = function (m) {
155
+ var event = new _pieConfigureEvents.ModelUpdatedEvent(m, false);
156
+ el.dispatchEvent(_objectSpread(_objectSpread({}, event), {}, {
157
+ target: {
158
+ getAttribute: jest.fn().mockReturnValue('A')
159
+ }
160
+ }));
161
+ };
162
+
163
+ main.instance().partB.onModelChanged = function (m) {
164
+ var event = new _pieConfigureEvents.ModelUpdatedEvent(m, false);
165
+ el.dispatchEvent(_objectSpread(_objectSpread({}, event), {}, {
166
+ target: {
167
+ getAttribute: jest.fn().mockReturnValue('B')
168
+ }
169
+ }));
170
+ };
171
+ });
172
+ describe('createDefaultModel', function () {
173
+ it('default-snapshot', function () {
174
+ var m = _index["default"].createDefaultModel({});
175
+
176
+ expect(m).toMatchSnapshot();
177
+ });
178
+ it('with-overrides-snapshot', function () {
179
+ var m = _index["default"].createDefaultModel({
180
+ partA: {
181
+ rationale: 'foo',
182
+ teacherInstructions: 'ti'
183
+ }
184
+ });
185
+
186
+ expect(m).toMatchSnapshot();
187
+ });
188
+ });
189
+ describe('set model', function () {
190
+ it('calls ReactDOM.render', function () {
191
+ el.model = model;
192
+ expect(el._model).toEqual(model);
193
+ expect(_reactDom["default"].render).toHaveBeenCalled();
194
+ });
195
+ it('should have set the model for partA and partB', function () {
196
+ expect(main.instance().partA._model).toEqual(model.partA);
197
+ expect(main.instance().partB._model).toEqual(model.partB);
198
+ });
199
+ });
200
+ describe('set configuration', function () {
201
+ it('calls ReactDOM.render', function () {
202
+ el.configuration = _defaults["default"].configuration;
203
+ expect(_reactDom["default"].render).toHaveBeenCalled();
204
+ });
205
+ it('should have set the configuration for partA and partB', function () {
206
+ expect(main.instance().partA.configuration).toEqual(_objectSpread(_objectSpread({}, _defaults["default"].configuration.partA), {}, {
207
+ partLabels: _defaults["default"].configuration.partLabels,
208
+ settingsPanelDisabled: true
209
+ }));
210
+ expect(main.instance().partB.configuration).toEqual(_objectSpread(_objectSpread({}, _defaults["default"].configuration.partB), {}, {
211
+ partLabels: _defaults["default"].configuration.partLabels,
212
+ settingsPanelDisabled: true
213
+ }));
214
+ });
215
+ });
216
+
217
+ var assetOnModelUpdated = function assetOnModelUpdated(label, key, updatedPart, expected) {
218
+ it(label, function () {
219
+ var event = new _pieConfigureEvents.ModelUpdatedEvent(updatedPart, false);
220
+ el.dispatchEvent(_objectSpread(_objectSpread({}, event), {}, {
221
+ target: {
222
+ getAttribute: jest.fn().mockReturnValue(key)
223
+ }
224
+ }));
225
+ expect(_reactDom["default"].render).toBeCalled();
226
+ expect(el._model["part".concat(key)]).toEqual(expected);
227
+ });
228
+ };
229
+
230
+ describe('onModelUpdated', function () {
231
+ assetOnModelUpdated('dispatching MODEL_UPDATED updates model.partA', 'A', {
232
+ updatedA: true
233
+ }, {
234
+ updatedA: true
235
+ });
236
+ assetOnModelUpdated('dispatching MODEL_UPDATED updates model.partB', 'B', {
237
+ updatedB: true
238
+ }, {
239
+ updatedB: true
240
+ });
241
+ assetOnModelUpdated('dispatching MODEL_UPDATED with update undefined does not update model.partA', 'A', undefined, createDefaultModel(model).partA);
242
+ assetOnModelUpdated('dispatching MODEL_UPDATED with update undefined does not update model.partB', 'B', undefined, createDefaultModel(model).partB);
243
+ });
244
+
245
+ var assetPartUpdate = function assetPartUpdate(label, key, updatedModel) {
246
+ it("".concat(key, " - ").concat(label), function () {
247
+ main.instance()[key].onModelChanged(updatedModel);
248
+ expect(el._model[key]).toEqual(updatedModel);
249
+ expect(_reactDom["default"].render).toBeCalled();
250
+ });
251
+ };
252
+
253
+ describe('part update', function () {
254
+ assetPartUpdate('Dispatching Model Updated Event will update Teacher Instructions', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
255
+ teacherInstructions: 'Part A Teacher Instructions'
256
+ }));
257
+ assetPartUpdate('Dispatching Model Updated Event will update Teacher Instructions', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
258
+ teacherInstructions: 'Part B Teacher Instructions'
259
+ }));
260
+ assetPartUpdate('Dispatching Model Updated Event will update Prompt', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
261
+ prompt: 'Prompt A'
262
+ }));
263
+ assetPartUpdate('Dispatching Model Updated Event will update Prompt', 'partB', _objectSpread(_objectSpread({}, model.partA), {}, {
264
+ prompt: 'Prompt B'
265
+ }));
266
+ assetPartUpdate('Dispatching Model Updated Event will update Choices - ADD CHOICE', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
267
+ choices: [].concat((0, _toConsumableArray2["default"])(model.partA.choices), [{
268
+ label: 'label',
269
+ value: _configUi.choiceUtils.firstAvailableIndex(model.partA.choices.map(function (c) {
270
+ return c.value;
271
+ }), 0),
272
+ feedback: {
273
+ type: 'none'
274
+ }
275
+ }])
276
+ }));
277
+ assetPartUpdate('Dispatching Model Updated Event will update Choices - ADD CHOICE', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
278
+ choices: [].concat((0, _toConsumableArray2["default"])(model.partB.choices), [{
279
+ label: 'label',
280
+ value: _configUi.choiceUtils.firstAvailableIndex(model.partB.choices.map(function (c) {
281
+ return c.value;
282
+ }), 0),
283
+ feedback: {
284
+ type: 'none'
285
+ }
286
+ }])
287
+ }));
288
+ assetPartUpdate('Dispatching Model Updated Event will update Choices - REMOVE CHOICE', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
289
+ choices: model.partA.choices.splice(0, 2)
290
+ }));
291
+ assetPartUpdate('Dispatching Model Updated Event will update Choices - REMOVE CHOICE', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
292
+ choices: model.partB.choices.splice(0, 2)
293
+ }));
294
+ assetPartUpdate('Dispatching Model Updated Event will update Choices - CHANGE CHOICE', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
295
+ choices: model.partA.choices.splice(1, 1, {
296
+ correct: true,
297
+ value: 'green',
298
+ label: function label(value) {
299
+ return value.charAt(0).toUpperCase() + value.slice(1);
300
+ },
301
+ feedback: {
302
+ type: 'none',
303
+ value: ''
304
+ }
305
+ })
306
+ }));
307
+ assetPartUpdate('Dispatching Model Updated Event will update Choices - CHANGE CHOICE', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
308
+ choices: model.partB.choices.splice(1, 1, {
309
+ correct: true,
310
+ value: 'green',
311
+ label: function label(value) {
312
+ return value.charAt(0).toUpperCase() + value.slice(1);
313
+ },
314
+ feedback: {
315
+ type: 'none',
316
+ value: ''
317
+ }
318
+ })
319
+ }));
320
+ assetPartUpdate('Dispatching Model Updated Event will update Choices', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
321
+ choices: []
322
+ }));
323
+ assetPartUpdate('Dispatching Model Updated Event will update Choices', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
324
+ choices: []
325
+ }));
326
+ });
327
+ });
328
+ describe('main', function () {
329
+ var Def;
330
+ var el;
331
+ var main;
332
+ beforeAll(function () {
333
+ Def = require('../index')["default"];
334
+ });
335
+ beforeEach(function () {
336
+ el = new Def();
337
+ el.model = model;
338
+ el.configuration = _defaults["default"].configuration;
339
+ el.dispatchEvent = el.onModelUpdated;
340
+ main = (0, _enzyme.mount)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
341
+ classes: {},
342
+ model: el._model,
343
+ configuration: _defaults["default"].configuration,
344
+ onConfigurationChanged: el.onConfigurationChanged,
345
+ onModelChanged: el.onModelChanged
346
+ }));
347
+ });
348
+
349
+ var assertOnModelChanged = function assertOnModelChanged(label, updatedModel, expected) {
350
+ it(label, function () {
351
+ main.instance().props.onModelChanged(updatedModel);
352
+ expect(el._model).toEqual(createDefaultModel(model, expected));
353
+ });
354
+ };
355
+
356
+ describe('onModelChanged', function () {
357
+ assertOnModelChanged('does not change the model', {}, model);
358
+ assertOnModelChanged('changes partA - checkbox', {
359
+ partA: {
360
+ choiceMode: 'checkbox'
361
+ }
362
+ }, _objectSpread(_objectSpread({}, model), {}, {
363
+ partA: {
364
+ choiceMode: 'checkbox'
365
+ }
366
+ }));
367
+ assertOnModelChanged('changes partA - choicePrefix', {
368
+ partA: {
369
+ choicePrefix: 'numbers'
370
+ }
371
+ }, _objectSpread(_objectSpread({}, model), {}, {
372
+ partA: {
373
+ choicePrefix: 'numbers'
374
+ }
375
+ }));
376
+ assertOnModelChanged('changes partA - partialScoring', {
377
+ partialScoring: false
378
+ }, _objectSpread(_objectSpread({}, model), {}, {
379
+ partialScoring: false
380
+ }));
381
+ assertOnModelChanged('changes partA - lockChoiceOrder', {
382
+ partA: {
383
+ lockChoiceOrder: true
384
+ }
385
+ }, _objectSpread(_objectSpread({}, model), {}, {
386
+ partA: {
387
+ lockChoiceOrder: true
388
+ }
389
+ }));
390
+ assertOnModelChanged('changes partA - scoringType', {
391
+ scoringType: 'auto'
392
+ }, _objectSpread(_objectSpread({}, model), {}, {
393
+ scoringType: 'auto'
394
+ }));
395
+ assertOnModelChanged('changes partB - checkbox', {
396
+ partB: {
397
+ choiceMode: 'checkbox'
398
+ }
399
+ }, _objectSpread(_objectSpread({}, model), {}, {
400
+ partB: {
401
+ choiceMode: 'checkbox'
402
+ }
403
+ }));
404
+ assertOnModelChanged('changes partB - choicePrefix', {
405
+ partB: {
406
+ choicePrefix: 'numbers'
407
+ }
408
+ }, _objectSpread(_objectSpread({}, model), {}, {
409
+ partB: {
410
+ choicePrefix: 'numbers'
411
+ }
412
+ }));
413
+ assertOnModelChanged('changes partB - partialScoring', {
414
+ partialScoring: false
415
+ }, _objectSpread(_objectSpread({}, model), {}, {
416
+ partialScoring: false
417
+ }));
418
+ assertOnModelChanged('changes partB - lockChoiceOrder', {
419
+ partB: {
420
+ lockChoiceOrder: true
421
+ }
422
+ }, _objectSpread(_objectSpread({}, model), {}, {
423
+ partB: {
424
+ lockChoiceOrder: true
425
+ }
426
+ }));
427
+ assertOnModelChanged('changes partB - scoringType', {
428
+ scoringType: 'auto'
429
+ }, _objectSpread(_objectSpread({}, model), {}, {
430
+ scoringType: 'auto'
431
+ }));
432
+ });
433
+ });
434
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsInJlbmRlciIsImZuIiwiTW9kZWxVcGRhdGVkRXZlbnQiLCJ1cGRhdGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsInNldHRpbmdzIiwiUGFuZWwiLCJwcm9wcyIsInRvZ2dsZSIsInJhZGlvIiwiZHJvcGRvd24iLCJsYXlvdXQiLCJDb25maWdMYXlvdXQiLCJjaGlsZHJlbiIsIlBBUlRfQSIsIlBBUlRfQiIsImNyZWF0ZURlZmF1bHRNb2RlbCIsIm1vZGVsIiwibmV3TW9kZWwiLCJwYXJ0QSIsInBhcnRCIiwiZGVmYXVsdHMiLCJjaG9pY2VNb2RlIiwiY2hvaWNlcyIsInZhbHVlIiwibGFiZWwiLCJjb3JyZWN0IiwiZmVlZGJhY2siLCJ0eXBlIiwiY2hvaWNlUHJlZml4IiwicHJvbXB0IiwiZXJyb3JzIiwiZGVzY3JpYmUiLCJEZWYiLCJlbCIsIm9uTW9kZWxDaGFuZ2VkIiwib25Db25maWd1cmF0aW9uQ2hhbmdlZCIsIm1haW4iLCJiZWZvcmVBbGwiLCJyZXF1aXJlIiwiYmVmb3JlRWFjaCIsImNvbmZpZ3VyYXRpb24iLCJjb25uZWN0ZWRDYWxsYmFjayIsImRpc3BhdGNoRXZlbnQiLCJvbk1vZGVsVXBkYXRlZCIsIl9tb2RlbCIsImluc3RhbmNlIiwibSIsImV2ZW50IiwidGFyZ2V0IiwiZ2V0QXR0cmlidXRlIiwibW9ja1JldHVyblZhbHVlIiwiaXQiLCJFYnNyQ29uZmlndXJlIiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwicmF0aW9uYWxlIiwidGVhY2hlckluc3RydWN0aW9ucyIsInRvRXF1YWwiLCJSZWFjdERPTSIsInRvSGF2ZUJlZW5DYWxsZWQiLCJwYXJ0TGFiZWxzIiwic2V0dGluZ3NQYW5lbERpc2FibGVkIiwiYXNzZXRPbk1vZGVsVXBkYXRlZCIsImtleSIsInVwZGF0ZWRQYXJ0IiwiZXhwZWN0ZWQiLCJ0b0JlQ2FsbGVkIiwidXBkYXRlZEEiLCJ1cGRhdGVkQiIsInVuZGVmaW5lZCIsImFzc2V0UGFydFVwZGF0ZSIsInVwZGF0ZWRNb2RlbCIsInV0aWxzIiwibWFwIiwiYyIsInNwbGljZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJhc3NlcnRPbk1vZGVsQ2hhbmdlZCIsInBhcnRpYWxTY29yaW5nIiwibG9ja0Nob2ljZU9yZGVyIiwic2NvcmluZ1R5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsV0FBVixFQUF1QjtBQUFBLFNBQU87QUFDNUJDLElBQUFBLE1BQU0sRUFBRUYsSUFBSSxDQUFDRyxFQUFMO0FBRG9CLEdBQVA7QUFBQSxDQUF2QjtBQUlBSCxJQUFJLENBQUNDLElBQUwsQ0FBVSxxQ0FBVixFQUFpRDtBQUFBLFNBQU87QUFDdERHLElBQUFBLGlCQUFpQixFQUFFLDJCQUFDQyxNQUFELEVBQVk7QUFDN0IsYUFBTztBQUNMQSxRQUFBQSxNQUFNLEVBQU5BLE1BREs7QUFFTEMsUUFBQUEsY0FBYyxFQUFFTixJQUFJLENBQUNHLEVBQUwsRUFGWDtBQUdMSSxRQUFBQSx3QkFBd0IsRUFBRVAsSUFBSSxDQUFDRyxFQUFMO0FBSHJCLE9BQVA7QUFLRDtBQVBxRCxHQUFQO0FBQUEsQ0FBakQ7QUFVQUgsSUFBSSxDQUFDQyxJQUFMLENBQVUsZ0NBQVYsRUFBNEM7QUFBQSxTQUFPO0FBQ2pETyxJQUFBQSxXQUFXLEVBQUU7QUFDWEMsTUFBQUEsbUJBQW1CLEVBQUVULElBQUksQ0FBQ0csRUFBTDtBQURWLEtBRG9DO0FBSWpETyxJQUFBQSxRQUFRLEVBQUU7QUFDUkMsTUFBQUEsS0FBSyxFQUFFLGVBQUNDLEtBQUQ7QUFBQSw0QkFBVyx1Q0FBU0EsS0FBVCxDQUFY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QVUsRUFBRTtBQURQO0FBVFMsT0FBcEI7QUFjQTBELElBQUFBLG9CQUFvQixDQUNsQiw4QkFEa0IsRUFFbEI7QUFDRTVELE1BQUFBLEtBQUssRUFBRTtBQUNMUyxRQUFBQSxZQUFZLEVBQUU7QUFEVDtBQURULEtBRmtCLGtDQVFiWixLQVJhO0FBU2hCRyxNQUFBQSxLQUFLLEVBQUU7QUFDTFMsUUFBQUEsWUFBWSxFQUFFO0FBRFQ7QUFUUyxPQUFwQjtBQWNBbUQsSUFBQUEsb0JBQW9CLENBQ2xCLGdDQURrQixFQUVsQjtBQUNFQyxNQUFBQSxjQUFjLEVBQUU7QUFEbEIsS0FGa0Isa0NBTWJoRSxLQU5hO0FBT2hCZ0UsTUFBQUEsY0FBYyxFQUFFO0FBUEEsT0FBcEI7QUFVQUQsSUFBQUEsb0JBQW9CLENBQ2xCLGlDQURrQixFQUVsQjtBQUNFNUQsTUFBQUEsS0FBSyxFQUFFO0FBQ0w4RCxRQUFBQSxlQUFlLEVBQUU7QUFEWjtBQURULEtBRmtCLGtDQVFiakUsS0FSYTtBQVNoQkcsTUFBQUEsS0FBSyxFQUFFO0FBQ0w4RCxRQUFBQSxlQUFlLEVBQUU7QUFEWjtBQVRTLE9BQXBCO0FBY0FGLElBQUFBLG9CQUFvQixDQUNsQiw2QkFEa0IsRUFFbEI7QUFDRUcsTUFBQUEsV0FBVyxFQUFFO0FBRGYsS0FGa0Isa0NBTWJsRSxLQU5hO0FBT2hCa0UsTUFBQUEsV0FBVyxFQUFFO0FBUEcsT0FBcEI7QUFVRCxHQTlITyxDQUFSO0FBK0hELENBaktPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbW91bnQgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IHsgTW9kZWxVcGRhdGVkRXZlbnQgfSBmcm9tICdAcGllLWZyYW1ld29yay9waWUtY29uZmlndXJlLWV2ZW50cyc7XG5pbXBvcnQgeyBjaG9pY2VVdGlscyBhcyB1dGlscyB9IGZyb20gJ0BwaWUtbGliL3BpZS10b29sYm94L2NvbmZpZy11aSc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBNYWluIH0gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgRWJzckNvbmZpZ3VyZSBmcm9tICcuLi9pbmRleCc7XG5cbmplc3QubW9jaygncmVhY3QtZG9tJywgKCkgPT4gKHtcbiAgcmVuZGVyOiBqZXN0LmZuKCksXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1mcmFtZXdvcmsvcGllLWNvbmZpZ3VyZS1ldmVudHMnLCAoKSA9PiAoe1xuICBNb2RlbFVwZGF0ZWRFdmVudDogKHVwZGF0ZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGUsXG4gICAgICBwcmV2ZW50RGVmYXVsdDogamVzdC5mbigpLFxuICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBqZXN0LmZuKCksXG4gICAgfTtcbiAgfSxcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9waWUtdG9vbGJveC9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKSxcbiAgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBQYW5lbDogKHByb3BzKSA9PiA8ZGl2IHsuLi5wcm9wc30gLz4sXG4gICAgdG9nZ2xlOiBqZXN0LmZuKCksXG4gICAgcmFkaW86IGplc3QuZm4oKSxcbiAgICBkcm9wZG93bjogamVzdC5mbigpLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICB9LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtZWxlbWVudC9tdWx0aXBsZS1jaG9pY2UvY29uZmlndXJlL2xpYicsICgpID0+IGNsYXNzIE1vY2tDb25maWd1cmUge30pO1xuXG5jb25zdCBQQVJUX0EgPSAncGFydEEnO1xuY29uc3QgUEFSVF9CID0gJ3BhcnRCJztcblxuY29uc3QgY3JlYXRlRGVmYXVsdE1vZGVsID0gKG1vZGVsLCBuZXdNb2RlbCA9IHt9KSA9PiAoe1xuICAuLi5tb2RlbCxcbiAgLi4ubmV3TW9kZWwsXG4gIHBhcnRBOiB7XG4gICAgLi4ubW9kZWwucGFydEEsXG4gICAgLi4ubmV3TW9kZWwucGFydEEsXG4gIH0sXG4gIHBhcnRCOiB7XG4gICAgLi4ubW9kZWwucGFydEIsXG4gICAgLi4ubmV3TW9kZWwucGFydEIsXG4gIH0sXG59KTtcblxuY29uc3QgbW9kZWwgPSBjcmVhdGVEZWZhdWx0TW9kZWwoZGVmYXVsdHMubW9kZWwsIHtcbiAgcGFydEE6IHtcbiAgICBjaG9pY2VNb2RlOiAncmFkaW8nLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6ICd5ZWxsb3cnLFxuICAgICAgICBsYWJlbDogJ1llbGxvdycsXG4gICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgICAgdHlwZTogJ2N1c3RvbScsXG4gICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6ICdncmVlbicsXG4gICAgICAgIGxhYmVsOiAnR3JlZW4nLFxuICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjaG9pY2VQcmVmaXg6ICdudW1iZXJzJyxcbiAgICBwcm9tcHQ6IGBwcm9tcHQgJHtQQVJUX0F9YCxcbiAgICBlcnJvcnM6IHt9LFxuICB9LFxuICBwYXJ0Qjoge1xuICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgY2hvaWNlczogW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogJ29yYW5nZScsXG4gICAgICAgIGxhYmVsOiAnT3JhbmdlJyxcbiAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICB2YWx1ZTogJ2ZvbycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogJ3B1cnBsZScsXG4gICAgICAgIGxhYmVsOiAnUHVycGxlJyxcbiAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hvaWNlUHJlZml4OiAnbnVtYmVycycsXG4gICAgcHJvbXB0OiBgcHJvbXB0ICR7UEFSVF9CfWAsXG4gICAgZXJyb3JzOiB7fSxcbiAgfSxcbn0pO1xuXG5kZXNjcmliZSgnaW5kZXgnLCAoKSA9PiB7XG4gIGxldCBEZWY7XG4gIGxldCBlbDtcbiAgbGV0IG9uTW9kZWxDaGFuZ2VkID0gamVzdC5mbigpO1xuICBsZXQgb25Db25maWd1cmF0aW9uQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgbGV0IG1haW47XG5cbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBEZWYgPSByZXF1aXJlKCcuLi9pbmRleCcpLmRlZmF1bHQ7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGVsID0gbmV3IERlZigpO1xuICAgIGVsLm1vZGVsID0gbW9kZWw7XG4gICAgZWwuY29uZmlndXJhdGlvbiA9IGRlZmF1bHRzLmNvbmZpZ3VyYXRpb247XG4gICAgZWwub25Nb2RlbENoYW5nZWQgPSBvbk1vZGVsQ2hhbmdlZDtcbiAgICBlbC5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkID0gb25Db25maWd1cmF0aW9uQ2hhbmdlZDtcbiAgICBlbC5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQgPSBlbC5vbk1vZGVsVXBkYXRlZDtcblxuICAgIG1haW4gPSBtb3VudChcbiAgICAgIDxNYWluXG4gICAgICAgIGNsYXNzZXM9e3t9fVxuICAgICAgICBtb2RlbD17ZWwuX21vZGVsfVxuICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0cy5jb25maWd1cmF0aW9ufVxuICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkPXtlbC5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkfVxuICAgICAgICBvbk1vZGVsQ2hhbmdlZD17ZWwub25Nb2RlbENoYW5nZWR9XG4gICAgICAvPixcbiAgICApO1xuXG4gICAgLy8gbW9jayBvbk1vZGVsQ2hhbmdlZCB0byBkaXNwYXRjaCBhIE1PREVMX1VQREFURUQgZXZlbnQgKGFzIG11bHRpcGxlLWNob2ljZSBkb2VzKVxuICAgIG1haW4uaW5zdGFuY2UoKS5wYXJ0QS5vbk1vZGVsQ2hhbmdlZCA9IChtKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RlbFVwZGF0ZWRFdmVudChtLCBmYWxzZSk7XG5cbiAgICAgIGVsLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgZ2V0QXR0cmlidXRlOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKCdBJyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9O1xuICAgIG1haW4uaW5zdGFuY2UoKS5wYXJ0Qi5vbk1vZGVsQ2hhbmdlZCA9IChtKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RlbFVwZGF0ZWRFdmVudChtLCBmYWxzZSk7XG5cbiAgICAgIGVsLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgZ2V0QXR0cmlidXRlOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKCdCJyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9O1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlRGVmYXVsdE1vZGVsJywgKCkgPT4ge1xuICAgIGl0KCdkZWZhdWx0LXNuYXBzaG90JywgKCkgPT4ge1xuICAgICAgY29uc3QgbSA9IEVic3JDb25maWd1cmUuY3JlYXRlRGVmYXVsdE1vZGVsKHt9KTtcbiAgICAgIGV4cGVjdChtKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgICBpdCgnd2l0aC1vdmVycmlkZXMtc25hcHNob3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtID0gRWJzckNvbmZpZ3VyZS5jcmVhdGVEZWZhdWx0TW9kZWwoe1xuICAgICAgICBwYXJ0QTogeyByYXRpb25hbGU6ICdmb28nLCB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAndGknIH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NldCBtb2RlbCcsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgUmVhY3RET00ucmVuZGVyJywgKCkgPT4ge1xuICAgICAgZWwubW9kZWwgPSBtb2RlbDtcblxuICAgICAgZXhwZWN0KGVsLl9tb2RlbCkudG9FcXVhbChtb2RlbCk7XG4gICAgICBleHBlY3QoUmVhY3RET00ucmVuZGVyKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgc2V0IHRoZSBtb2RlbCBmb3IgcGFydEEgYW5kIHBhcnRCJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1haW4uaW5zdGFuY2UoKS5wYXJ0QS5fbW9kZWwpLnRvRXF1YWwobW9kZWwucGFydEEpO1xuICAgICAgZXhwZWN0KG1haW4uaW5zdGFuY2UoKS5wYXJ0Qi5fbW9kZWwpLnRvRXF1YWwobW9kZWwucGFydEIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0IGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIFJlYWN0RE9NLnJlbmRlcicsICgpID0+IHtcbiAgICAgIGVsLmNvbmZpZ3VyYXRpb24gPSBkZWZhdWx0cy5jb25maWd1cmF0aW9uO1xuXG4gICAgICBleHBlY3QoUmVhY3RET00ucmVuZGVyKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgc2V0IHRoZSBjb25maWd1cmF0aW9uIGZvciBwYXJ0QSBhbmQgcGFydEInLCAoKSA9PiB7XG4gICAgICBleHBlY3QobWFpbi5pbnN0YW5jZSgpLnBhcnRBLmNvbmZpZ3VyYXRpb24pLnRvRXF1YWwoe1xuICAgICAgICAuLi5kZWZhdWx0cy5jb25maWd1cmF0aW9uLnBhcnRBLFxuICAgICAgICBwYXJ0TGFiZWxzOiBkZWZhdWx0cy5jb25maWd1cmF0aW9uLnBhcnRMYWJlbHMsXG4gICAgICAgIHNldHRpbmdzUGFuZWxEaXNhYmxlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1haW4uaW5zdGFuY2UoKS5wYXJ0Qi5jb25maWd1cmF0aW9uKS50b0VxdWFsKHtcbiAgICAgICAgLi4uZGVmYXVsdHMuY29uZmlndXJhdGlvbi5wYXJ0QixcbiAgICAgICAgcGFydExhYmVsczogZGVmYXVsdHMuY29uZmlndXJhdGlvbi5wYXJ0TGFiZWxzLFxuICAgICAgICBzZXR0aW5nc1BhbmVsRGlzYWJsZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgYXNzZXRPbk1vZGVsVXBkYXRlZCA9IChsYWJlbCwga2V5LCB1cGRhdGVkUGFydCwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChsYWJlbCwgKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kZWxVcGRhdGVkRXZlbnQodXBkYXRlZFBhcnQsIGZhbHNlKTtcblxuICAgICAgZWwuZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBnZXRBdHRyaWJ1dGU6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoa2V5KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoUmVhY3RET00ucmVuZGVyKS50b0JlQ2FsbGVkKCk7XG4gICAgICBleHBlY3QoZWwuX21vZGVsW2BwYXJ0JHtrZXl9YF0pLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdvbk1vZGVsVXBkYXRlZCcsICgpID0+IHtcbiAgICBhc3NldE9uTW9kZWxVcGRhdGVkKCdkaXNwYXRjaGluZyBNT0RFTF9VUERBVEVEIHVwZGF0ZXMgbW9kZWwucGFydEEnLCAnQScsIHsgdXBkYXRlZEE6IHRydWUgfSwgeyB1cGRhdGVkQTogdHJ1ZSB9KTtcbiAgICBhc3NldE9uTW9kZWxVcGRhdGVkKCdkaXNwYXRjaGluZyBNT0RFTF9VUERBVEVEIHVwZGF0ZXMgbW9kZWwucGFydEInLCAnQicsIHsgdXBkYXRlZEI6IHRydWUgfSwgeyB1cGRhdGVkQjogdHJ1ZSB9KTtcblxuICAgIGFzc2V0T25Nb2RlbFVwZGF0ZWQoXG4gICAgICAnZGlzcGF0Y2hpbmcgTU9ERUxfVVBEQVRFRCB3aXRoIHVwZGF0ZSB1bmRlZmluZWQgZG9lcyBub3QgdXBkYXRlIG1vZGVsLnBhcnRBJyxcbiAgICAgICdBJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNyZWF0ZURlZmF1bHRNb2RlbChtb2RlbCkucGFydEEsXG4gICAgKTtcbiAgICBhc3NldE9uTW9kZWxVcGRhdGVkKFxuICAgICAgJ2Rpc3BhdGNoaW5nIE1PREVMX1VQREFURUQgd2l0aCB1cGRhdGUgdW5kZWZpbmVkIGRvZXMgbm90IHVwZGF0ZSBtb2RlbC5wYXJ0QicsXG4gICAgICAnQicsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjcmVhdGVEZWZhdWx0TW9kZWwobW9kZWwpLnBhcnRCLFxuICAgICk7XG4gIH0pO1xuXG4gIGNvbnN0IGFzc2V0UGFydFVwZGF0ZSA9IChsYWJlbCwga2V5LCB1cGRhdGVkTW9kZWwpID0+IHtcbiAgICBpdChgJHtrZXl9IC0gJHtsYWJlbH1gLCAoKSA9PiB7XG4gICAgICBtYWluLmluc3RhbmNlKClba2V5XS5vbk1vZGVsQ2hhbmdlZCh1cGRhdGVkTW9kZWwpO1xuXG4gICAgICBleHBlY3QoZWwuX21vZGVsW2tleV0pLnRvRXF1YWwodXBkYXRlZE1vZGVsKTtcbiAgICAgIGV4cGVjdChSZWFjdERPTS5yZW5kZXIpLnRvQmVDYWxsZWQoKTtcbiAgICB9KTtcbiAgfTtcblxuICBkZXNjcmliZSgncGFydCB1cGRhdGUnLCAoKSA9PiB7XG4gICAgYXNzZXRQYXJ0VXBkYXRlKCdEaXNwYXRjaGluZyBNb2RlbCBVcGRhdGVkIEV2ZW50IHdpbGwgdXBkYXRlIFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJywgJ3BhcnRBJywge1xuICAgICAgLi4ubW9kZWwucGFydEEsXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnUGFydCBBIFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICB9KTtcbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgVGVhY2hlciBJbnN0cnVjdGlvbnMnLCAncGFydEInLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QixcbiAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdQYXJ0IEIgVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBQcm9tcHQnLCAncGFydEEnLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QSxcbiAgICAgIHByb21wdDogJ1Byb21wdCBBJyxcbiAgICB9KTtcbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgUHJvbXB0JywgJ3BhcnRCJywge1xuICAgICAgLi4ubW9kZWwucGFydEEsXG4gICAgICBwcm9tcHQ6ICdQcm9tcHQgQicsXG4gICAgfSk7XG5cbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgQ2hvaWNlcyAtIEFERCBDSE9JQ0UnLCAncGFydEEnLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgLi4ubW9kZWwucGFydEEuY2hvaWNlcyxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnbGFiZWwnLFxuICAgICAgICAgIHZhbHVlOiB1dGlscy5maXJzdEF2YWlsYWJsZUluZGV4KFxuICAgICAgICAgICAgbW9kZWwucGFydEEuY2hvaWNlcy5tYXAoKGMpID0+IGMudmFsdWUpLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICApLFxuICAgICAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgICAgICB0eXBlOiAnbm9uZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgYXNzZXRQYXJ0VXBkYXRlKCdEaXNwYXRjaGluZyBNb2RlbCBVcGRhdGVkIEV2ZW50IHdpbGwgdXBkYXRlIENob2ljZXMgLSBBREQgQ0hPSUNFJywgJ3BhcnRCJywge1xuICAgICAgLi4ubW9kZWwucGFydEIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIC4uLm1vZGVsLnBhcnRCLmNob2ljZXMsXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICB2YWx1ZTogdXRpbHMuZmlyc3RBdmFpbGFibGVJbmRleChcbiAgICAgICAgICAgIG1vZGVsLnBhcnRCLmNob2ljZXMubWFwKChjKSA9PiBjLnZhbHVlKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBDaG9pY2VzIC0gUkVNT1ZFIENIT0lDRScsICdwYXJ0QScsIHtcbiAgICAgIC4uLm1vZGVsLnBhcnRBLFxuICAgICAgY2hvaWNlczogbW9kZWwucGFydEEuY2hvaWNlcy5zcGxpY2UoMCwgMiksXG4gICAgfSk7XG4gICAgYXNzZXRQYXJ0VXBkYXRlKCdEaXNwYXRjaGluZyBNb2RlbCBVcGRhdGVkIEV2ZW50IHdpbGwgdXBkYXRlIENob2ljZXMgLSBSRU1PVkUgQ0hPSUNFJywgJ3BhcnRCJywge1xuICAgICAgLi4ubW9kZWwucGFydEIsXG4gICAgICBjaG9pY2VzOiBtb2RlbC5wYXJ0Qi5jaG9pY2VzLnNwbGljZSgwLCAyKSxcbiAgICB9KTtcbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgQ2hvaWNlcyAtIENIQU5HRSBDSE9JQ0UnLCAncGFydEEnLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QSxcbiAgICAgIGNob2ljZXM6IG1vZGVsLnBhcnRBLmNob2ljZXMuc3BsaWNlKDEsIDEsIHtcbiAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6ICdncmVlbicsXG4gICAgICAgIGxhYmVsOiAodmFsdWUpID0+IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSksXG4gICAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBDaG9pY2VzIC0gQ0hBTkdFIENIT0lDRScsICdwYXJ0QicsIHtcbiAgICAgIC4uLm1vZGVsLnBhcnRCLFxuICAgICAgY2hvaWNlczogbW9kZWwucGFydEIuY2hvaWNlcy5zcGxpY2UoMSwgMSwge1xuICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICB2YWx1ZTogJ2dyZWVuJyxcbiAgICAgICAgbGFiZWw6ICh2YWx1ZSkgPT4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKSxcbiAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICB0eXBlOiAnbm9uZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgQ2hvaWNlcycsICdwYXJ0QScsIHsgLi4ubW9kZWwucGFydEEsIGNob2ljZXM6IFtdIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBDaG9pY2VzJywgJ3BhcnRCJywgeyAuLi5tb2RlbC5wYXJ0QiwgY2hvaWNlczogW10gfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdtYWluJywgKCkgPT4ge1xuICBsZXQgRGVmO1xuICBsZXQgZWw7XG4gIGxldCBtYWluO1xuXG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgRGVmID0gcmVxdWlyZSgnLi4vaW5kZXgnKS5kZWZhdWx0O1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBlbCA9IG5ldyBEZWYoKTtcbiAgICBlbC5tb2RlbCA9IG1vZGVsO1xuICAgIGVsLmNvbmZpZ3VyYXRpb24gPSBkZWZhdWx0cy5jb25maWd1cmF0aW9uO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQgPSBlbC5vbk1vZGVsVXBkYXRlZDtcblxuICAgIG1haW4gPSBtb3VudChcbiAgICAgIDxNYWluXG4gICAgICAgIGNsYXNzZXM9e3t9fVxuICAgICAgICBtb2RlbD17ZWwuX21vZGVsfVxuICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0cy5jb25maWd1cmF0aW9ufVxuICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkPXtlbC5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkfVxuICAgICAgICBvbk1vZGVsQ2hhbmdlZD17ZWwub25Nb2RlbENoYW5nZWR9XG4gICAgICAvPixcbiAgICApO1xuICB9KTtcblxuICBjb25zdCBhc3NlcnRPbk1vZGVsQ2hhbmdlZCA9IChsYWJlbCwgdXBkYXRlZE1vZGVsLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KGxhYmVsLCAoKSA9PiB7XG4gICAgICBtYWluLmluc3RhbmNlKCkucHJvcHMub25Nb2RlbENoYW5nZWQodXBkYXRlZE1vZGVsKTtcblxuICAgICAgZXhwZWN0KGVsLl9tb2RlbCkudG9FcXVhbChjcmVhdGVEZWZhdWx0TW9kZWwobW9kZWwsIGV4cGVjdGVkKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ29uTW9kZWxDaGFuZ2VkJywgKCkgPT4ge1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKCdkb2VzIG5vdCBjaGFuZ2UgdGhlIG1vZGVsJywge30sIG1vZGVsKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRBIC0gY2hlY2tib3gnLFxuICAgICAge1xuICAgICAgICBwYXJ0QToge1xuICAgICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydEE6IHtcbiAgICAgICAgICBjaG9pY2VNb2RlOiAnY2hlY2tib3gnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKFxuICAgICAgJ2NoYW5nZXMgcGFydEEgLSBjaG9pY2VQcmVmaXgnLFxuICAgICAge1xuICAgICAgICBwYXJ0QToge1xuICAgICAgICAgIGNob2ljZVByZWZpeDogJ251bWJlcnMnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgIHBhcnRBOiB7XG4gICAgICAgICAgY2hvaWNlUHJlZml4OiAnbnVtYmVycycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXNzZXJ0T25Nb2RlbENoYW5nZWQoXG4gICAgICAnY2hhbmdlcyBwYXJ0QSAtIHBhcnRpYWxTY29yaW5nJyxcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRBIC0gbG9ja0Nob2ljZU9yZGVyJyxcbiAgICAgIHtcbiAgICAgICAgcGFydEE6IHtcbiAgICAgICAgICBsb2NrQ2hvaWNlT3JkZXI6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydEE6IHtcbiAgICAgICAgICBsb2NrQ2hvaWNlT3JkZXI6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXNzZXJ0T25Nb2RlbENoYW5nZWQoXG4gICAgICAnY2hhbmdlcyBwYXJ0QSAtIHNjb3JpbmdUeXBlJyxcbiAgICAgIHtcbiAgICAgICAgc2NvcmluZ1R5cGU6ICdhdXRvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICBzY29yaW5nVHlwZTogJ2F1dG8nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKFxuICAgICAgJ2NoYW5nZXMgcGFydEIgLSBjaGVja2JveCcsXG4gICAgICB7XG4gICAgICAgIHBhcnRCOiB7XG4gICAgICAgICAgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICBwYXJ0Qjoge1xuICAgICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXNzZXJ0T25Nb2RlbENoYW5nZWQoXG4gICAgICAnY2hhbmdlcyBwYXJ0QiAtIGNob2ljZVByZWZpeCcsXG4gICAgICB7XG4gICAgICAgIHBhcnRCOiB7XG4gICAgICAgICAgY2hvaWNlUHJlZml4OiAnbnVtYmVycycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydEI6IHtcbiAgICAgICAgICBjaG9pY2VQcmVmaXg6ICdudW1iZXJzJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRCIC0gcGFydGlhbFNjb3JpbmcnLFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKFxuICAgICAgJ2NoYW5nZXMgcGFydEIgLSBsb2NrQ2hvaWNlT3JkZXInLFxuICAgICAge1xuICAgICAgICBwYXJ0Qjoge1xuICAgICAgICAgIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICBwYXJ0Qjoge1xuICAgICAgICAgIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRCIC0gc2NvcmluZ1R5cGUnLFxuICAgICAge1xuICAgICAgICBzY29yaW5nVHlwZTogJ2F1dG8nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgIHNjb3JpbmdUeXBlOiAnYXV0bycsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -148,4 +148,4 @@ var _default = {
148
148
  }
149
149
  };
150
150
  exports["default"] = _default;
151
- //# sourceMappingURL=defaults.js.map
151
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZhdWx0cy5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0Q29uZmlnIiwiYWRkQ2hvaWNlQnV0dG9uIiwic2V0dGluZ3MiLCJsYWJlbCIsImNob2ljZU1vZGUiLCJjaG9pY2VQcmVmaXgiLCJkZWxldGVDaG9pY2UiLCJmZWVkYmFjayIsImxvY2tDaG9pY2VPcmRlciIsInByb21wdCIsInJhdGlvbmFsZSIsInNldHRpbmdzUGFuZWxEaXNhYmxlZCIsInN0dWRlbnRJbnN0cnVjdGlvbnMiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwiY2hvaWNlc0xheW91dCIsImdyaWRDb2x1bW5zIiwic3BlbGxDaGVjayIsImVuYWJsZWQiLCJtYXhJbWFnZVdpZHRoIiwiY2hvaWNlcyIsIm1heEltYWdlSGVpZ2h0IiwibWF0aE1sT3B0aW9ucyIsIm1tbE91dHB1dCIsIm1tbEVkaXRpbmciLCJwYXJ0TW9kZWwiLCJiYXNlIiwicmF0aW9uYWxlRW5hYmxlZCIsImZlZWRiYWNrRW5hYmxlZCIsInByb21wdEVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwic3BlbGxDaGVja0VuYWJsZWQiLCJtb2RlbCIsInBhcnRMYWJlbHMiLCJwYXJ0TGFiZWxUeXBlIiwicGFydEEiLCJwYXJ0QiIsImNvbmZpZ3VyYXRpb24iLCJwYXJ0aWFsU2NvcmluZyIsInNjb3JpbmdUeXBlIiwibGFuZ3VhZ2UiLCJsYW5ndWFnZUNob2ljZXMiLCJvcHRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFFQSxJQUFNQSxhQUFhLEdBQUc7QUFDcEJDLEVBQUFBLGVBQWUsRUFBRTtBQUNmQyxJQUFBQSxRQUFRLEVBQUUsSUFESztBQUVmQyxJQUFBQSxLQUFLLEVBQUU7QUFGUSxHQURHO0FBS3BCQyxFQUFBQSxVQUFVLEVBQUU7QUFDVkYsSUFBQUEsUUFBUSxFQUFFLElBREE7QUFFVkMsSUFBQUEsS0FBSyxFQUFFO0FBRkcsR0FMUTtBQVNwQkUsRUFBQUEsWUFBWSxFQUFFO0FBQ1pILElBQUFBLFFBQVEsRUFBRSxJQURFO0FBRVpDLElBQUFBLEtBQUssRUFBRTtBQUZLLEdBVE07QUFhcEJHLEVBQUFBLFlBQVksRUFBRTtBQUNaSixJQUFBQSxRQUFRLEVBQUU7QUFERSxHQWJNO0FBZ0JwQkssRUFBQUEsUUFBUSxFQUFFO0FBQ1JMLElBQUFBLFFBQVEsRUFBRSxJQURGO0FBRVJDLElBQUFBLEtBQUssRUFBRTtBQUZDLEdBaEJVO0FBb0JwQkssRUFBQUEsZUFBZSxFQUFFO0FBQ2ZOLElBQUFBLFFBQVEsRUFBRSxJQURLO0FBRWZDLElBQUFBLEtBQUssRUFBRTtBQUZRLEdBcEJHO0FBd0JwQk0sRUFBQUEsTUFBTSxFQUFFO0FBQ05QLElBQUFBLFFBQVEsRUFBRSxJQURKO0FBRU5DLElBQUFBLEtBQUssRUFBRTtBQUZELEdBeEJZO0FBNEJwQk8sRUFBQUEsU0FBUyxFQUFFO0FBQ1RSLElBQUFBLFFBQVEsRUFBRSxJQUREO0FBRVRDLElBQUFBLEtBQUssRUFBRTtBQUZFLEdBNUJTO0FBZ0NwQlEsRUFBQUEscUJBQXFCLEVBQUUsSUFoQ0g7QUFpQ3BCQyxFQUFBQSxtQkFBbUIsRUFBRTtBQUNuQlYsSUFBQUEsUUFBUSxFQUFFLEtBRFM7QUFFbkJDLElBQUFBLEtBQUssRUFBRTtBQUZZLEdBakNEO0FBcUNwQlUsRUFBQUEsbUJBQW1CLEVBQUU7QUFDbkJYLElBQUFBLFFBQVEsRUFBRSxJQURTO0FBRW5CQyxJQUFBQSxLQUFLLEVBQUU7QUFGWSxHQXJDRDtBQXlDcEJXLEVBQUFBLGFBQWEsRUFBRTtBQUNiWixJQUFBQSxRQUFRLEVBQUUsS0FERztBQUViQyxJQUFBQSxLQUFLLEVBQUU7QUFGTSxHQXpDSztBQTZDcEJZLEVBQUFBLFdBQVcsRUFBRTtBQUNYWixJQUFBQSxLQUFLLEVBQUU7QUFESSxHQTdDTztBQWdEcEJhLEVBQUFBLFVBQVUsRUFBRTtBQUNWYixJQUFBQSxLQUFLLEVBQUUsWUFERztBQUVWRCxJQUFBQSxRQUFRLEVBQUUsS0FGQTtBQUdWZSxJQUFBQSxPQUFPLEVBQUU7QUFIQyxHQWhEUTtBQXFEcEJDLEVBQUFBLGFBQWEsRUFBRTtBQUNiTCxJQUFBQSxtQkFBbUIsRUFBRSxHQURSO0FBRWJKLElBQUFBLE1BQU0sRUFBRSxHQUZLO0FBR2JDLElBQUFBLFNBQVMsRUFBRSxHQUhFO0FBSWJTLElBQUFBLE9BQU8sRUFBRTtBQUpJLEdBckRLO0FBMkRwQkMsRUFBQUEsY0FBYyxFQUFFO0FBQ2RQLElBQUFBLG1CQUFtQixFQUFFLEdBRFA7QUFFZEosSUFBQUEsTUFBTSxFQUFFLEdBRk07QUFHZEMsSUFBQUEsU0FBUyxFQUFFLEdBSEc7QUFJZFMsSUFBQUEsT0FBTyxFQUFFO0FBSkssR0EzREk7QUFpRXBCRSxFQUFBQSxhQUFhLEVBQUU7QUFDYkMsSUFBQUEsU0FBUyxFQUFFLEtBREU7QUFFYkMsSUFBQUEsVUFBVSxFQUFFO0FBRkM7QUFqRUssQ0FBdEI7O0FBdUVBLElBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUNDLElBQUQ7QUFBQTtBQUNoQnJCLElBQUFBLFVBQVUsRUFBRSxPQURJO0FBRWhCZSxJQUFBQSxPQUFPLEVBQUUsRUFGTztBQUdoQmQsSUFBQUEsWUFBWSxFQUFFLFNBSEU7QUFJaEJJLElBQUFBLE1BQU0sRUFBRSxRQUpRO0FBS2hCaUIsSUFBQUEsZ0JBQWdCLEVBQUUsSUFMRjtBQU1oQkMsSUFBQUEsZUFBZSxFQUFFLEtBTkQ7QUFPaEJDLElBQUFBLGFBQWEsRUFBRSxJQVBDO0FBUWhCZixJQUFBQSxtQkFBbUIsRUFBRSxFQVJMO0FBU2hCSCxJQUFBQSxTQUFTLEVBQUUsRUFUSztBQVVoQm1CLElBQUFBLDBCQUEwQixFQUFFLElBVlo7QUFXaEJDLElBQUFBLDBCQUEwQixFQUFFLElBWFo7QUFZaEJDLElBQUFBLGlCQUFpQixFQUFFLElBWkg7QUFhaEJqQixJQUFBQSxhQUFhLEVBQUUsVUFiQztBQWNoQkMsSUFBQUEsV0FBVyxFQUFFO0FBZEcsS0FlYlUsSUFmYTtBQUFBLENBQWxCOztlQWtCZTtBQUNiTyxFQUFBQSxLQUFLLEVBQUU7QUFDTEMsSUFBQUEsVUFBVSxFQUFFLElBRFA7QUFFTEMsSUFBQUEsYUFBYSxFQUFFLFNBRlY7QUFHTDtBQUNBQyxJQUFBQSxLQUFLLEVBQUVYLFNBQVMsQ0FBQztBQUFFZixNQUFBQSxNQUFNLEVBQUU7QUFBVixLQUFELENBSlg7QUFLTDJCLElBQUFBLEtBQUssRUFBRVosU0FBUyxDQUFDO0FBQUVmLE1BQUFBLE1BQU0sRUFBRTtBQUFWLEtBQUQ7QUFMWCxHQURNO0FBUWI0QixFQUFBQSxhQUFhLEVBQUU7QUFDYkMsSUFBQUEsY0FBYyxFQUFFO0FBQ2RuQyxNQUFBQSxLQUFLLEVBQUUsdUJBRE87QUFFZDtBQUNBO0FBQ0E7QUFDQUQsTUFBQUEsUUFBUSxFQUFFO0FBTEksS0FESDtBQVFicUMsSUFBQUEsV0FBVyxFQUFFO0FBQ1hyQyxNQUFBQSxRQUFRLEVBQUUsS0FEQztBQUVYQyxNQUFBQSxLQUFLLEVBQUU7QUFGSSxLQVJBO0FBWWJnQyxJQUFBQSxLQUFLLEVBQUUsMkJBQVVuQyxhQUFWLENBWk07QUFhYm9DLElBQUFBLEtBQUssRUFBRSwyQkFBVXBDLGFBQVYsQ0FiTTtBQWNiaUMsSUFBQUEsVUFBVSxFQUFFO0FBQ1YvQixNQUFBQSxRQUFRLEVBQUUsSUFEQTtBQUVWQyxNQUFBQSxLQUFLLEVBQUU7QUFGRyxLQWRDO0FBa0JiUSxJQUFBQSxxQkFBcUIsRUFBRSxLQWxCVjtBQW1CYjZCLElBQUFBLFFBQVEsRUFBRTtBQUNSdEMsTUFBQUEsUUFBUSxFQUFFLEtBREY7QUFFUkMsTUFBQUEsS0FBSyxFQUFFLGtCQUZDO0FBR1JjLE1BQUFBLE9BQU8sRUFBRTtBQUhELEtBbkJHO0FBd0Jid0IsSUFBQUEsZUFBZSxFQUFFO0FBQ2Z0QyxNQUFBQSxLQUFLLEVBQUUsa0JBRFE7QUFFZnVDLE1BQUFBLE9BQU8sRUFBRTtBQUZNO0FBeEJKO0FBUkYsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbmNvbnN0IGRlZmF1bHRDb25maWcgPSB7XG4gIGFkZENob2ljZUJ1dHRvbjoge1xuICAgIHNldHRpbmdzOiB0cnVlLFxuICAgIGxhYmVsOiAnQWRkIGEgQ2hvaWNlJyxcbiAgfSxcbiAgY2hvaWNlTW9kZToge1xuICAgIHNldHRpbmdzOiB0cnVlLFxuICAgIGxhYmVsOiAnUmVzcG9uc2UgVHlwZScsXG4gIH0sXG4gIGNob2ljZVByZWZpeDoge1xuICAgIHNldHRpbmdzOiB0cnVlLFxuICAgIGxhYmVsOiAnQ2hvaWNlIExhYmVscycsXG4gIH0sXG4gIGRlbGV0ZUNob2ljZToge1xuICAgIHNldHRpbmdzOiB0cnVlLFxuICB9LFxuICBmZWVkYmFjazoge1xuICAgIHNldHRpbmdzOiB0cnVlLFxuICAgIGxhYmVsOiAnRmVlZGJhY2snLFxuICB9LFxuICBsb2NrQ2hvaWNlT3JkZXI6IHtcbiAgICBzZXR0aW5nczogdHJ1ZSxcbiAgICBsYWJlbDogJ0xvY2sgQ2hvaWNlIE9yZGVyJyxcbiAgfSxcbiAgcHJvbXB0OiB7XG4gICAgc2V0dGluZ3M6IHRydWUsXG4gICAgbGFiZWw6ICdQcm9tcHQnLFxuICB9LFxuICByYXRpb25hbGU6IHtcbiAgICBzZXR0aW5nczogdHJ1ZSxcbiAgICBsYWJlbDogJ1JhdGlvbmFsZScsXG4gIH0sXG4gIHNldHRpbmdzUGFuZWxEaXNhYmxlZDogdHJ1ZSxcbiAgc3R1ZGVudEluc3RydWN0aW9uczoge1xuICAgIHNldHRpbmdzOiBmYWxzZSxcbiAgICBsYWJlbDogJ1N0dWRlbnQgSW5zdHJ1Y3Rpb25zJyxcbiAgfSxcbiAgdGVhY2hlckluc3RydWN0aW9uczoge1xuICAgIHNldHRpbmdzOiB0cnVlLFxuICAgIGxhYmVsOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICB9LFxuICBjaG9pY2VzTGF5b3V0OiB7XG4gICAgc2V0dGluZ3M6IGZhbHNlLFxuICAgIGxhYmVsOiAnQ2hvaWNlcyBMYXlvdXQnLFxuICB9LFxuICBncmlkQ29sdW1uczoge1xuICAgIGxhYmVsOiAnR3JpZCBjb2x1bW5zJyxcbiAgfSxcbiAgc3BlbGxDaGVjazoge1xuICAgIGxhYmVsOiAnU3BlbGxjaGVjaycsXG4gICAgc2V0dGluZ3M6IGZhbHNlLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gIH0sXG4gIG1heEltYWdlV2lkdGg6IHtcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAzMDAsXG4gICAgcHJvbXB0OiAzMDAsXG4gICAgcmF0aW9uYWxlOiA2MzYsXG4gICAgY2hvaWNlczogNjM2LFxuICB9LFxuICBtYXhJbWFnZUhlaWdodDoge1xuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IDMwMCxcbiAgICBwcm9tcHQ6IDMwMCxcbiAgICByYXRpb25hbGU6IDMwMCxcbiAgICBjaG9pY2VzOiAzMDAsXG4gIH0sXG4gIG1hdGhNbE9wdGlvbnM6IHtcbiAgICBtbWxPdXRwdXQ6IGZhbHNlLFxuICAgIG1tbEVkaXRpbmc6IGZhbHNlLFxuICB9LFxufTtcblxuY29uc3QgcGFydE1vZGVsID0gKGJhc2UpID0+ICh7XG4gIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gIGNob2ljZXM6IFtdLFxuICBjaG9pY2VQcmVmaXg6ICdudW1iZXJzJyxcbiAgcHJvbXB0OiAnUHJvbXB0JyxcbiAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgZmVlZGJhY2tFbmFibGVkOiBmYWxzZSxcbiAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gIHJhdGlvbmFsZTogJycsXG4gIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgc3BlbGxDaGVja0VuYWJsZWQ6IHRydWUsXG4gIGNob2ljZXNMYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gIGdyaWRDb2x1bW5zOiAnMicsXG4gIC4uLmJhc2UsXG59KTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb2RlbDoge1xuICAgIHBhcnRMYWJlbHM6IHRydWUsXG4gICAgcGFydExhYmVsVHlwZTogJ0xldHRlcnMnLFxuICAgIC8vIHBhcnRpYWxTY29yaW5nOiBmYWxzZSxcbiAgICBwYXJ0QTogcGFydE1vZGVsKHsgcHJvbXB0OiAnUHJvbXB0IEEnIH0pLFxuICAgIHBhcnRCOiBwYXJ0TW9kZWwoeyBwcm9tcHQ6ICdQcm9tcHQgQicgfSksXG4gIH0sXG4gIGNvbmZpZ3VyYXRpb246IHtcbiAgICBwYXJ0aWFsU2NvcmluZzoge1xuICAgICAgbGFiZWw6ICdBbGxvdyBQYXJ0aWFsIFNjb3JpbmcnLFxuICAgICAgLy8gdGhpcyB3aWxsIHR1cm4gb2ZmIHBhcnRpYWwgc2NvcmluZyB0b2dnbGUgaW4gdGhlIHNldHRpbmdzIHRhYiBieSBkZWZhdWx0IGZvciB0aGUgaW50ZXJhY3Rpb25cbiAgICAgIC8vIGFzIHdlJ2QgbGlrZSBwYXJ0aWFsIHNjb3JpbmcgdG8gYmUgY29udHJvbGxlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCBlbnRpcmVseVxuICAgICAgLy8gaWYgYW55IG90aGVyIGNvbnN1bWVycyB3b3VsZCBsaWtlIHRvIGVuYWJsZSBpdCBmb3IgdGhlbXNlbHZlcywgdGhleSBjYW4gZG8gc28gZnJvbSB0aGVpciBtb2RlbCBkaXJlY3RseS5cbiAgICAgIHNldHRpbmdzOiBmYWxzZSxcbiAgICB9LFxuICAgIHNjb3JpbmdUeXBlOiB7XG4gICAgICBzZXR0aW5nczogZmFsc2UsXG4gICAgICBsYWJlbDogJ1Njb3JpbmcgVHlwZScsXG4gICAgfSxcbiAgICBwYXJ0QTogY2xvbmVEZWVwKGRlZmF1bHRDb25maWcpLFxuICAgIHBhcnRCOiBjbG9uZURlZXAoZGVmYXVsdENvbmZpZyksXG4gICAgcGFydExhYmVsczoge1xuICAgICAgc2V0dGluZ3M6IHRydWUsXG4gICAgICBsYWJlbDogJ1BhcnQgTGFiZWxzJyxcbiAgICB9LFxuICAgIHNldHRpbmdzUGFuZWxEaXNhYmxlZDogZmFsc2UsXG4gICAgbGFuZ3VhZ2U6IHtcbiAgICAgIHNldHRpbmdzOiBmYWxzZSxcbiAgICAgIGxhYmVsOiAnU3BlY2lmeSBMYW5ndWFnZScsXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICB9LFxuICAgIGxhbmd1YWdlQ2hvaWNlczoge1xuICAgICAgbGFiZWw6ICdMYW5ndWFnZSBDaG9pY2VzJyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgIH1cbiAgfSxcbn07XG4iXX0=
@@ -240,4 +240,4 @@ exports["default"] = EbsrConfigure;
240
240
  })
241
241
  });
242
242
  });
243
- //# sourceMappingURL=index.js.map
243
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJNT0RFTF9VUERBVEVEIiwiTW9kZWxVcGRhdGVkRXZlbnQiLCJUWVBFIiwiTUNfVEFHX05BTUUiLCJFYnNyTUNDb25maWd1cmUiLCJNdWx0aXBsZUNob2ljZUNvbmZpZ3VyZSIsImRlZmluZU11bHRpcGxlQ2hvaWNlIiwiY3VzdG9tRWxlbWVudHMiLCJnZXQiLCJkZWZpbmUiLCJwcmVwYXJlQ3VzdG9taXphdGlvbk9iamVjdCIsImNvbmZpZyIsIm1vZGVsIiwiY29uZmlndXJhdGlvbiIsInNlbnNpYmxlRGVmYXVsdHMiLCJzZXR0aW5nc1BhbmVsRGlzYWJsZWQiLCJtb2RlbERlZmF1bHQiLCJFYnNyQ29uZmlndXJlIiwibSIsInJlc2V0IiwiX21vZGVsIiwiY3JlYXRlRGVmYXVsdE1vZGVsIiwiZGlzcGF0Y2hNb2RlbFVwZGF0ZWQiLCJfcmVuZGVyIiwiZSIsInRhcmdldCIsInByZXZlbnREZWZhdWx0Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwiaWQiLCJnZXRBdHRyaWJ1dGUiLCJ1cGRhdGUiLCJkaXNwYXRjaEV2ZW50IiwiX2NvbmZpZ3VyYXRpb24iLCJvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkIiwiYmluZCIsInJlc2V0VmFsdWUiLCJjIiwiaW5mbyIsIm5ld0NvbmZpZ3VyYXRpb24iLCJsYW5ndWFnZSIsImVuYWJsZWQiLCJsYW5ndWFnZUNob2ljZXMiLCJvcHRpb25zIiwibGVuZ3RoIiwidmFsdWUiLCJzZXR0aW5ncyIsImZpbmQiLCJvcHRpb24iLCJwdXNoIiwibGFiZWwiLCJvbk1vZGVsQ2hhbmdlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbk1vZGVsVXBkYXRlZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJlbGVtZW50IiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiTWFpbiIsIlJlYWN0RE9NIiwicmVuZGVyIiwiSFRNTEVsZW1lbnQiLCJwYXJ0QSIsInBhcnRCIiwiZGVmYXVsdHMiLCJj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dENqQixRQUFBQSxzQkFBc0IsRUFBRSxLQUFLQTtBQUpTLE9BQTFCLENBQWQ7O0FBT0F5QiwyQkFBU0MsTUFBVCxDQUFnQkwsT0FBaEIsRUFBeUIsSUFBekI7QUFDRDs7O2tEQXJJd0NNLFc7OztpQ0FBdEIzQyxhLHdCQUNTO0FBQUEsa0ZBQXdDLEVBQXhDO0FBQUEsMEJBQUc0QyxLQUFIO0FBQUEsTUFBR0EsS0FBSCw0QkFBVyxFQUFYO0FBQUEsMEJBQWVDLEtBQWY7QUFBQSxNQUFlQSxLQUFmLDRCQUF1QixFQUF2QjtBQUFBLE1BQThCbEQsS0FBOUI7O0FBQUEsTUFBNENtRCxRQUE1Qyx1RUFBdUQvQyxZQUF2RDtBQUFBLHVEQUN2QitDLFFBRHVCLEdBRXZCbkQsS0FGdUI7QUFHMUJpRCxJQUFBQSxLQUFLLGdEQUNBRSxRQUFRLENBQUNGLEtBRFQsR0FFQUEsS0FGQTtBQUdIRyxNQUFBQSxhQUFhLEVBQ1hILEtBQUssQ0FBQ0csYUFBTixJQUF3QkgsS0FBSyxDQUFDSSxZQUFOLEtBQXVCLEtBQXZCLElBQWdDLFlBQXhELElBQXlFRixRQUFRLENBQUNGLEtBQVQsQ0FBZUc7QUFKdkYsTUFIcUI7QUFTMUJGLElBQUFBLEtBQUssZ0RBQ0FDLFFBQVEsQ0FBQ0QsS0FEVCxHQUVBQSxLQUZBO0FBR0hFLE1BQUFBLGFBQWEsRUFDWEYsS0FBSyxDQUFDRSxhQUFOLElBQXdCRixLQUFLLENBQUNHLFlBQU4sS0FBdUIsS0FBdkIsSUFBZ0MsWUFBeEQsSUFBeUVGLFFBQVEsQ0FBQ0QsS0FBVCxDQUFlRTtBQUp2RjtBQVRxQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBNb2RlbFVwZGF0ZWRFdmVudCB9IGZyb20gJ0BwaWUtZnJhbWV3b3JrL3BpZS1jb25maWd1cmUtZXZlbnRzJztcbmltcG9ydCBNdWx0aXBsZUNob2ljZUNvbmZpZ3VyZSBmcm9tICdAcGllLWVsZW1lbnQvbXVsdGlwbGUtY2hvaWNlL2NvbmZpZ3VyZS9saWInO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJ2xvZGFzaC9kZWZhdWx0cyc7XG5pbXBvcnQgTWFpbiBmcm9tICcuL21haW4nO1xuXG5pbXBvcnQgc2Vuc2libGVEZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzJztcblxuY29uc3QgTU9ERUxfVVBEQVRFRCA9IE1vZGVsVXBkYXRlZEV2ZW50LlRZUEU7XG5jb25zdCBNQ19UQUdfTkFNRSA9ICdlYnNyLW11bHRpcGxlLWNob2ljZS1jb25maWd1cmUnO1xuXG5jbGFzcyBFYnNyTUNDb25maWd1cmUgZXh0ZW5kcyBNdWx0aXBsZUNob2ljZUNvbmZpZ3VyZSB7fVxuXG5jb25zdCBkZWZpbmVNdWx0aXBsZUNob2ljZSA9ICgpID0+IHtcbiAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQoTUNfVEFHX05BTUUpKSB7XG4gICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKE1DX1RBR19OQU1FLCBFYnNyTUNDb25maWd1cmUpO1xuICB9XG59O1xuXG5kZWZpbmVNdWx0aXBsZUNob2ljZSgpO1xuXG5jb25zdCBwcmVwYXJlQ3VzdG9taXphdGlvbk9iamVjdCA9IChjb25maWcsIG1vZGVsKSA9PiB7XG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBkZWZhdWx0cyhjb25maWcsIHNlbnNpYmxlRGVmYXVsdHMuY29uZmlndXJhdGlvbik7XG4gIGNvbmZpZ3VyYXRpb24uc2V0dGluZ3NQYW5lbERpc2FibGVkID0gdHJ1ZTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgbW9kZWwsXG4gIH07XG59O1xuXG5jb25zdCB7IG1vZGVsOiBtb2RlbERlZmF1bHQgfSA9IHNlbnNpYmxlRGVmYXVsdHMgfHwge307XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVic3JDb25maWd1cmUgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gIHN0YXRpYyBjcmVhdGVEZWZhdWx0TW9kZWwgPSAoeyBwYXJ0QSA9IHt9LCBwYXJ0QiA9IHt9LCAuLi5tb2RlbCB9ID0ge30sIGRlZmF1bHRzID0gbW9kZWxEZWZhdWx0KSA9PiAoe1xuICAgIC4uLmRlZmF1bHRzLFxuICAgIC4uLm1vZGVsLFxuICAgIHBhcnRBOiB7XG4gICAgICAuLi5kZWZhdWx0cy5wYXJ0QSxcbiAgICAgIC4uLnBhcnRBLFxuICAgICAgY2hvaWNlc0xheW91dDpcbiAgICAgICAgcGFydEEuY2hvaWNlc0xheW91dCB8fCAocGFydEEudmVydGljYWxNb2RlID09PSBmYWxzZSAmJiAnaG9yaXpvbnRhbCcpIHx8IGRlZmF1bHRzLnBhcnRBLmNob2ljZXNMYXlvdXQsXG4gICAgfSxcbiAgICBwYXJ0Qjoge1xuICAgICAgLi4uZGVmYXVsdHMucGFydEIsXG4gICAgICAuLi5wYXJ0QixcbiAgICAgIGNob2ljZXNMYXlvdXQ6XG4gICAgICAgIHBhcnRCLmNob2ljZXNMYXlvdXQgfHwgKHBhcnRCLnZlcnRpY2FsTW9kZSA9PT0gZmFsc2UgJiYgJ2hvcml6b250YWwnKSB8fCBkZWZhdWx0cy5wYXJ0Qi5jaG9pY2VzTGF5b3V0LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9tb2RlbCA9IEVic3JDb25maWd1cmUuY3JlYXRlRGVmYXVsdE1vZGVsKCk7XG5cbiAgICB0aGlzLl9jb25maWd1cmF0aW9uID0gc2Vuc2libGVEZWZhdWx0cy5jb25maWd1cmF0aW9uO1xuICAgIHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlZCA9IHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2V0IG1vZGVsKG0pIHtcbiAgICB0aGlzLl9tb2RlbCA9IEVic3JDb25maWd1cmUuY3JlYXRlRGVmYXVsdE1vZGVsKG0sIHRoaXMuX21vZGVsKTtcblxuICAgIHRoaXMuX3JlbmRlcigpO1xuICB9XG5cbiAgZGlzcGF0Y2hNb2RlbFVwZGF0ZWQocmVzZXQpIHtcbiAgICBjb25zdCByZXNldFZhbHVlID0gISFyZXNldDtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgTW9kZWxVcGRhdGVkRXZlbnQodGhpcy5fbW9kZWwsIHJlc2V0VmFsdWUpKTtcbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2VkID0gKG0sIHJlc2V0KSA9PiB7XG4gICAgdGhpcy5fbW9kZWwgPSBFYnNyQ29uZmlndXJlLmNyZWF0ZURlZmF1bHRNb2RlbChtLCB0aGlzLl9tb2RlbCk7XG5cbiAgICB0aGlzLmRpc3BhdGNoTW9kZWxVcGRhdGVkKHJlc2V0KTtcbiAgICB0aGlzLl9yZW5kZXIoKTtcbiAgfTtcblxuICBzZXQgY29uZmlndXJhdGlvbihjKSB7XG4gICAgY29uc3QgaW5mbyA9IHByZXBhcmVDdXN0b21pemF0aW9uT2JqZWN0KGMsIHRoaXMuX21vZGVsKTtcblxuICAgIGNvbnN0IG5ld0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5zZW5zaWJsZURlZmF1bHRzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAuLi5pbmZvLmNvbmZpZ3VyYXRpb24sXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBuZXdDb25maWd1cmF0aW9uO1xuXG4gICAgLy8gaWYgbGFuZ3VhZ2U6ZW5hYmxlZCBpcyB0cnVlLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIGRlZmF1bHQgaXRlbSBtb2RlbCBzaG91bGQgaW5jbHVkZSBhIGxhbmd1YWdlIHZhbHVlO1xuICAgIC8vIGlmIGl0IGlzIGZhbHNlLCB0aGVuIHRoZSBsYW5ndWFnZSBmaWVsZCBzaG91bGQgYmUgb21pdHRlZCBmcm9tIHRoZSBpdGVtIG1vZGVsLlxuICAgIC8vIGlmIGEgZGVmYXVsdCBpdGVtIG1vZGVsIGluY2x1ZGVzIGEgbGFuZ3VhZ2UgdmFsdWUgKGUuZy4sIGVuX1VTKSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXV0aG9yaW5nIHZpZXcgc2V0dGluZ3MgaGF2ZSBsYW5ndWFnZTpzZXR0aW5ncyA9IHRydWUsXG4gICAgLy8gdGhlbiAoYSkgbGFuZ3VhZ2U6ZW5hYmxlZCBzaG91bGQgYWxzbyBiZSB0cnVlLCBhbmQgKGIpIHRoYXQgZGVmYXVsdCBsYW5ndWFnZSB2YWx1ZSBzaG91bGQgYmUgcmVwcmVzZW50ZWQgaW4gbGFuZ3VhZ2VDaG9pY2VzW10gKGFzIGEga2V5KS5cbiAgICBpZiAobmV3Q29uZmlndXJhdGlvbj8ubGFuZ3VhZ2U/LmVuYWJsZWQpIHtcbiAgICAgIGlmIChuZXdDb25maWd1cmF0aW9uPy5sYW5ndWFnZUNob2ljZXM/Lm9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9tb2RlbC5sYW5ndWFnZSA9IG5ld0NvbmZpZ3VyYXRpb24/Lmxhbmd1YWdlQ2hvaWNlcy5vcHRpb25zWzBdLnZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV3Q29uZmlndXJhdGlvbi5sYW5ndWFnZS5zZXR0aW5ncyAmJiB0aGlzLl9tb2RlbC5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5fY29uZmlndXJhdGlvbi5sYW5ndWFnZS5lbmFibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWd1cmF0aW9uLmxhbmd1YWdlQ2hvaWNlcy5vcHRpb25zIHx8ICF0aGlzLl9jb25maWd1cmF0aW9uLmxhbmd1YWdlQ2hvaWNlcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9jb25maWd1cmF0aW9uLmxhbmd1YWdlQ2hvaWNlcy5vcHRpb25zID0gW107XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBsYW5ndWFnZSBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIHRoZSBsYW5ndWFnZUNob2ljZXMub3B0aW9ucyBhcnJheVxuICAgICAgLy8gYW5kIGlmIG5vdCwgdGhlbiBhZGQgaXQuXG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZ3VyYXRpb24ubGFuZ3VhZ2VDaG9pY2VzLm9wdGlvbnMuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSB0aGlzLl9tb2RlbC5sYW5ndWFnZSkpIHtcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbi5sYW5ndWFnZUNob2ljZXMub3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy5fbW9kZWwubGFuZ3VhZ2UsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuX21vZGVsLmxhbmd1YWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuX21vZGVsLmxhbmd1YWdlO1xuICAgIH1cblxuICAgIHRoaXMuX3JlbmRlcigpO1xuICB9XG5cbiAgb25Db25maWd1cmF0aW9uQ2hhbmdlZChjKSB7XG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IHByZXBhcmVDdXN0b21pemF0aW9uT2JqZWN0KGMsIHRoaXMuX21vZGVsKS5jb25maWd1cmF0aW9uO1xuXG4gICAgaWYgKHRoaXMuX21vZGVsKSB7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2VkKHRoaXMuX21vZGVsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZW5kZXIoKTtcbiAgfVxuXG4gIG9uTW9kZWxVcGRhdGVkID0gKGUpID0+IHtcbiAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IGlkID0gZS50YXJnZXQgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXG4gICAgaWYgKGlkKSB7XG4gICAgICBpZiAoZS51cGRhdGUpIHtcbiAgICAgICAgdGhpcy5fbW9kZWxbYHBhcnQke2lkfWBdID0gZS51cGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgTW9kZWxVcGRhdGVkRXZlbnQodGhpcy5fbW9kZWwpKTtcbiAgICB9XG4gIH07XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKE1PREVMX1VQREFURUQsIHRoaXMub25Nb2RlbFVwZGF0ZWQpO1xuICAgIHRoaXMuX3JlbmRlcigpO1xuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKE1PREVMX1VQREFURUQsIHRoaXMub25Nb2RlbFVwZGF0ZWQpO1xuICB9XG5cbiAgX3JlbmRlcigpIHtcbiAgICBsZXQgZWxlbWVudCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFpbiwge1xuICAgICAgbW9kZWw6IHRoaXMuX21vZGVsLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5fY29uZmlndXJhdGlvbixcbiAgICAgIG9uTW9kZWxDaGFuZ2VkOiB0aGlzLm9uTW9kZWxDaGFuZ2VkLFxuICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZDogdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgIH0pO1xuXG4gICAgUmVhY3RET00ucmVuZGVyKGVsZW1lbnQsIHRoaXMpO1xuICB9XG59XG4iXX0=