@pie-element/multiple-choice 7.6.1-beta.1 → 7.6.1-beta.3

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.
@@ -1,492 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = exports.Main = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
24
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
- var _react = _interopRequireDefault(require("react"));
27
-
28
- var _propTypes = _interopRequireDefault(require("prop-types"));
29
-
30
- var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
31
-
32
- var _configUi = require("@pie-lib/config-ui");
33
-
34
- var _renderUi = require("@pie-lib/render-ui");
35
-
36
- var _styles = require("@material-ui/core/styles");
37
-
38
- var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
39
-
40
- var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
41
-
42
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
43
-
44
- var _Info = _interopRequireDefault(require("@material-ui/icons/Info"));
45
-
46
- var _merge = _interopRequireDefault(require("lodash/merge"));
47
-
48
- var _utils = require("./utils");
49
-
50
- 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; }
51
-
52
- 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; }
53
-
54
- 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); }; }
55
-
56
- 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; } }
57
-
58
- var Panel = _configUi.settings.Panel,
59
- toggle = _configUi.settings.toggle,
60
- radio = _configUi.settings.radio,
61
- dropdown = _configUi.settings.dropdown;
62
- var MAX_CHOICES = 9;
63
-
64
- var styles = function styles(theme) {
65
- return {
66
- promptHolder: {
67
- width: '100%',
68
- paddingBottom: theme.spacing.unit * 2,
69
- marginBottom: theme.spacing.unit * 2
70
- },
71
- prompt: {
72
- paddingTop: theme.spacing.unit * 2,
73
- width: '100%'
74
- },
75
- rationaleHolder: {
76
- width: '70%'
77
- },
78
- accessibilityHolder: {
79
- width: '70%'
80
- },
81
- rationale: {
82
- paddingTop: theme.spacing.unit * 2
83
- },
84
- accessibility: {
85
- paddingTop: theme.spacing.unit * 2
86
- },
87
- choiceConfigurationHolder: {
88
- display: 'flex',
89
- flexDirection: 'column',
90
- alignItems: 'center'
91
- },
92
- choiceConfiguration: {
93
- width: '100%',
94
- paddingTop: theme.spacing.unit * 2,
95
- paddingBottom: theme.spacing.unit * 2
96
- },
97
- switchElement: {
98
- justifyContent: 'space-between',
99
- margin: 0
100
- },
101
- addButton: {
102
- marginTop: theme.spacing.unit * 3,
103
- "float": 'right'
104
- },
105
- disableButton: {
106
- cursor: 'not-allowed',
107
- pointerEvents: 'all',
108
- backgroundColor: _renderUi.color.disabled(),
109
- '&:hover': {
110
- backgroundColor: _renderUi.color.disabled()
111
- },
112
- '&:focus': {
113
- backgroundColor: _renderUi.color.disabled()
114
- }
115
- },
116
- flexContainer: {
117
- display: 'flex',
118
- alignItems: 'center',
119
- marginBottom: theme.spacing.unit
120
- },
121
- titleText: {
122
- fontFamily: 'Cerebri Sans',
123
- fontSize: theme.typography.fontSize + 2,
124
- lineHeight: '19px',
125
- color: '#495B8F',
126
- marginRight: theme.spacing.unit
127
- },
128
- tooltip: {
129
- fontSize: theme.typography.fontSize - 2,
130
- whiteSpace: 'pre',
131
- maxWidth: '500px'
132
- },
133
- errorText: {
134
- fontSize: theme.typography.fontSize - 2,
135
- color: 'red',
136
- paddingTop: theme.spacing.unit
137
- }
138
- };
139
- };
140
-
141
- var Design = (0, _styles.withStyles)(styles)(function (props) {
142
- var classes = props.classes,
143
- model = props.model,
144
- configuration = props.configuration,
145
- onPromptChanged = props.onPromptChanged,
146
- onChoiceChanged = props.onChoiceChanged,
147
- onRemoveChoice = props.onRemoveChoice,
148
- onAddChoice = props.onAddChoice,
149
- imageSupport = props.imageSupport,
150
- uploadSoundSupport = props.uploadSoundSupport,
151
- onChangeModel = props.onChangeModel,
152
- onConfigurationChanged = props.onConfigurationChanged,
153
- onTeacherInstructionsChanged = props.onTeacherInstructionsChanged;
154
-
155
- var _ref = configuration || {},
156
- _ref$prompt = _ref.prompt,
157
- prompt = _ref$prompt === void 0 ? {} : _ref$prompt,
158
- _ref$addChoiceButton = _ref.addChoiceButton,
159
- addChoiceButton = _ref$addChoiceButton === void 0 ? {} : _ref$addChoiceButton,
160
- _ref$feedback = _ref.feedback,
161
- feedback = _ref$feedback === void 0 ? {} : _ref$feedback,
162
- _ref$deleteChoice = _ref.deleteChoice,
163
- deleteChoice = _ref$deleteChoice === void 0 ? {} : _ref$deleteChoice,
164
- _ref$choiceMode = _ref.choiceMode,
165
- choiceMode = _ref$choiceMode === void 0 ? {} : _ref$choiceMode,
166
- _ref$choicePrefix = _ref.choicePrefix,
167
- choicePrefix = _ref$choicePrefix === void 0 ? {} : _ref$choicePrefix,
168
- _ref$partialScoring = _ref.partialScoring,
169
- partialScoring = _ref$partialScoring === void 0 ? {} : _ref$partialScoring,
170
- _ref$lockChoiceOrder = _ref.lockChoiceOrder,
171
- lockChoiceOrder = _ref$lockChoiceOrder === void 0 ? {} : _ref$lockChoiceOrder,
172
- _ref$teacherInstructi = _ref.teacherInstructions,
173
- teacherInstructions = _ref$teacherInstructi === void 0 ? {} : _ref$teacherInstructi,
174
- _ref$studentInstructi = _ref.studentInstructions,
175
- studentInstructions = _ref$studentInstructi === void 0 ? {} : _ref$studentInstructi,
176
- _ref$rationale = _ref.rationale,
177
- rationale = _ref$rationale === void 0 ? {} : _ref$rationale,
178
- _ref$accessibility = _ref.accessibility,
179
- accessibility = _ref$accessibility === void 0 ? {} : _ref$accessibility,
180
- _ref$scoringType = _ref.scoringType,
181
- scoringType = _ref$scoringType === void 0 ? {} : _ref$scoringType,
182
- _ref$sequentialChoice = _ref.sequentialChoiceLabels,
183
- sequentialChoiceLabels = _ref$sequentialChoice === void 0 ? {} : _ref$sequentialChoice,
184
- settingsPanelDisabled = _ref.settingsPanelDisabled,
185
- choicesLayout = _ref.choicesLayout,
186
- _ref$spellCheck = _ref.spellCheck,
187
- spellCheck = _ref$spellCheck === void 0 ? {} : _ref$spellCheck,
188
- gridColumns = _ref.gridColumns,
189
- _ref$maxImageWidth = _ref.maxImageWidth,
190
- maxImageWidth = _ref$maxImageWidth === void 0 ? {} : _ref$maxImageWidth,
191
- _ref$maxImageHeight = _ref.maxImageHeight,
192
- maxImageHeight = _ref$maxImageHeight === void 0 ? {} : _ref$maxImageHeight,
193
- _ref$withRubric = _ref.withRubric,
194
- withRubric = _ref$withRubric === void 0 ? {} : _ref$withRubric;
195
-
196
- var _ref2 = configuration || {},
197
- maxAnswerChoices = _ref2.maxAnswerChoices;
198
-
199
- var _ref3 = model || {},
200
- limitChoicesNumber = _ref3.limitChoicesNumber,
201
- teacherInstructionsEnabled = _ref3.teacherInstructionsEnabled,
202
- rationaleEnabled = _ref3.rationaleEnabled,
203
- accessibilityLabelsEnabled = _ref3.accessibilityLabelsEnabled,
204
- feedbackEnabled = _ref3.feedbackEnabled,
205
- promptEnabled = _ref3.promptEnabled,
206
- spellCheckEnabled = _ref3.spellCheckEnabled,
207
- choices = _ref3.choices,
208
- errors = _ref3.errors,
209
- toolbarEditorPosition = _ref3.toolbarEditorPosition;
210
-
211
- var _ref4 = errors || {},
212
- choicesErrors = _ref4.choicesErrors,
213
- correctResponseError = _ref4.correctResponseError,
214
- answerChoicesError = _ref4.answerChoicesError;
215
-
216
- var nrOfColumnsAvailable = choices !== null && choices !== void 0 && choices.length ? Array.from({
217
- length: choices.length
218
- }, function (_, i) {
219
- return "".concat(i + 1);
220
- }) : [];
221
- var labelPlugins = {
222
- audio: {
223
- disabled: true
224
- },
225
- video: {
226
- disabled: true
227
- }
228
- };
229
- var toolbarOpts = {
230
- position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
231
- }; // if old property is used, set maxAnswerChoices to 9
232
-
233
- if (limitChoicesNumber) {
234
- maxAnswerChoices = MAX_CHOICES;
235
- }
236
-
237
- var validationMessage = (0, _utils.generateValidationMessage)(configuration);
238
- var defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
239
- var defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
240
- var addChoiceButtonTooltip = maxAnswerChoices && (choices === null || choices === void 0 ? void 0 : choices.length) >= maxAnswerChoices ? "Only ".concat(maxAnswerChoices, " allowed maximum") : '';
241
- var panelSettings = {
242
- choiceMode: choiceMode.settings && radio(choiceMode.label, ['checkbox', 'radio']),
243
- 'sequentialChoiceLabels.enabled': sequentialChoiceLabels.settings && toggle(sequentialChoiceLabels.label, true),
244
- choicePrefix: choicePrefix.settings && radio(choicePrefix.label, ['numbers', 'letters']),
245
- partialScoring: partialScoring.settings && toggle(partialScoring.label),
246
- lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),
247
- feedbackEnabled: feedback.settings && toggle(feedback.label),
248
- choicesLayout: choicesLayout.settings && dropdown(choicesLayout.label, ['vertical', 'grid', 'horizontal']),
249
- gridColumns: choicesLayout.settings && model.choicesLayout === 'grid' && nrOfColumnsAvailable.length > 0 && dropdown(gridColumns.label, nrOfColumnsAvailable)
250
- };
251
- var panelProperties = {
252
- teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
253
- studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),
254
- promptEnabled: prompt.settings && toggle(prompt.label),
255
- rationaleEnabled: rationale.settings && toggle(rationale.label),
256
- spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
257
- accessibilityLabelsEnabled: accessibility.settings && toggle(accessibility.label),
258
- scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),
259
- rubricEnabled: (withRubric === null || withRubric === void 0 ? void 0 : withRubric.settings) && toggle(withRubric === null || withRubric === void 0 ? void 0 : withRubric.label)
260
- };
261
- return /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
262
- hideSettings: settingsPanelDisabled,
263
- settings: /*#__PURE__*/_react["default"].createElement(Panel, {
264
- model: model,
265
- onChangeModel: onChangeModel,
266
- configuration: configuration,
267
- onChangeConfiguration: onConfigurationChanged,
268
- groups: {
269
- Settings: panelSettings,
270
- Properties: panelProperties
271
- }
272
- })
273
- }, /*#__PURE__*/_react["default"].createElement("div", null, promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
274
- label: prompt.label,
275
- className: classes.promptHolder
276
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
277
- className: classes.prompt,
278
- markup: model.prompt,
279
- onChange: onPromptChanged,
280
- imageSupport: imageSupport,
281
- nonEmpty: false,
282
- disableUnderline: true,
283
- toolbarOpts: toolbarOpts,
284
- spellCheck: spellCheckEnabled,
285
- maxImageWidth: maxImageWidth && maxImageWidth.prompt,
286
- maxImageHeight: maxImageHeight && maxImageHeight.prompt,
287
- uploadSoundSupport: uploadSoundSupport,
288
- languageCharactersProps: [{
289
- language: 'spanish'
290
- }, {
291
- language: 'special'
292
- }]
293
- })), correctResponseError && /*#__PURE__*/_react["default"].createElement("div", {
294
- className: classes.errorText
295
- }, correctResponseError), answerChoicesError && /*#__PURE__*/_react["default"].createElement("div", {
296
- className: classes.errorText
297
- }, answerChoicesError), addChoiceButton.settings && /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
298
- title: addChoiceButtonTooltip,
299
- classes: {
300
- tooltip: classes.tooltip
301
- }
302
- }, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
303
- classes: {
304
- root: maxAnswerChoices && (choices === null || choices === void 0 ? void 0 : choices.length) >= maxAnswerChoices && classes.disableButton
305
- },
306
- className: classes.addButton,
307
- variant: "contained",
308
- color: "primary",
309
- onClick: onAddChoice
310
- }, addChoiceButton.label))));
311
- });
312
-
313
- var Main = /*#__PURE__*/function (_React$Component) {
314
- (0, _inherits2["default"])(Main, _React$Component);
315
-
316
- var _super = _createSuper(Main);
317
-
318
- function Main() {
319
- var _this;
320
-
321
- (0, _classCallCheck2["default"])(this, Main);
322
-
323
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
324
- args[_key] = arguments[_key];
325
- }
326
-
327
- _this = _super.call.apply(_super, [this].concat(args));
328
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
329
- showWarning: false
330
- });
331
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRemoveChoice", function (index) {
332
- var _this$props = _this.props,
333
- model = _this$props.model,
334
- configuration = _this$props.configuration,
335
- onModelChanged = _this$props.onModelChanged;
336
-
337
- var _ref5 = configuration || {},
338
- minAnswerChoices = _ref5.minAnswerChoices;
339
-
340
- if (minAnswerChoices && model.choices.length === minAnswerChoices) {
341
- _this.setState({
342
- showWarning: true
343
- });
344
-
345
- return;
346
- }
347
-
348
- model.choices.splice(index, 1);
349
- onModelChanged(model);
350
- });
351
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onAddChoice", function () {
352
- var _this$props2 = _this.props,
353
- model = _this$props2.model,
354
- configuration = _this$props2.configuration,
355
- onModelChanged = _this$props2.onModelChanged;
356
-
357
- var _ref6 = configuration || {},
358
- maxAnswerChoices = _ref6.maxAnswerChoices;
359
-
360
- var _ref7 = model || {},
361
- limitChoicesNumber = _ref7.limitChoicesNumber; // if old property is used, set maxAnswerChoices to 9
362
-
363
-
364
- if (limitChoicesNumber) {
365
- maxAnswerChoices = MAX_CHOICES;
366
- }
367
-
368
- if (maxAnswerChoices && model.choices.length >= maxAnswerChoices) {
369
- return;
370
- }
371
-
372
- model.choices.push({
373
- label: '',
374
- value: _configUi.choiceUtils.firstAvailableIndex(model.choices.map(function (c) {
375
- return c.value;
376
- }), 0),
377
- feedback: {
378
- type: 'none'
379
- }
380
- });
381
- onModelChanged(model);
382
- });
383
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChoiceChanged", function (index, choice) {
384
- var _this$props3 = _this.props,
385
- model = _this$props3.model,
386
- onModelChanged = _this$props3.onModelChanged;
387
-
388
- if (choice.correct && model.choiceMode === 'radio') {
389
- model.choices = model.choices.map(function (c) {
390
- return (0, _merge["default"])({}, c, {
391
- correct: false
392
- });
393
- });
394
- }
395
-
396
- model.choices.splice(index, 1, choice);
397
- onModelChanged(model);
398
- });
399
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onPromptChanged", function (prompt) {
400
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
401
- prompt: prompt
402
- }));
403
- });
404
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onTeacherInstructionsChanged", function (teacherInstructions) {
405
- _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
406
- teacherInstructions: teacherInstructions
407
- }));
408
- });
409
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onModelChanged", function (model, key) {
410
- var onModelChanged = _this.props.onModelChanged;
411
-
412
- switch (key) {
413
- case 'choiceMode':
414
- {
415
- var value = model.choiceMode;
416
-
417
- if (value === 'radio') {
418
- var correctFound = false;
419
- model.choices = model.choices.map(function (c) {
420
- if (correctFound) {
421
- c.correct = false;
422
- return c;
423
- }
424
-
425
- if (c.correct) {
426
- correctFound = true;
427
- }
428
-
429
- return c;
430
- });
431
- }
432
-
433
- onModelChanged(model, true);
434
- break;
435
- }
436
-
437
- default:
438
- onModelChanged(model);
439
- break;
440
- }
441
- });
442
- return _this;
443
- }
444
-
445
- (0, _createClass2["default"])(Main, [{
446
- key: "render",
447
- value: function render() {
448
- var _this2 = this;
449
-
450
- var _this$props$configura = this.props.configuration;
451
- _this$props$configura = _this$props$configura === void 0 ? {} : _this$props$configura;
452
- var minAnswerChoices = _this$props$configura.minAnswerChoices;
453
- var showWarning = this.state.showWarning;
454
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
455
- open: showWarning,
456
- title: "Warning",
457
- text: "There can't be less than ".concat(minAnswerChoices || 0, " choices."),
458
- onConfirm: function onConfirm() {
459
- return _this2.setState({
460
- showWarning: false
461
- });
462
- }
463
- }), /*#__PURE__*/_react["default"].createElement(Design, (0, _extends2["default"])({}, this.props, {
464
- onChangeModel: this.onModelChanged,
465
- onRemoveChoice: this.onRemoveChoice,
466
- onChoiceChanged: this.onChoiceChanged,
467
- onAddChoice: this.onAddChoice,
468
- onPromptChanged: this.onPromptChanged,
469
- onTeacherInstructionsChanged: this.onTeacherInstructionsChanged
470
- })));
471
- }
472
- }]);
473
- return Main;
474
- }(_react["default"].Component);
475
-
476
- exports.Main = Main;
477
- (0, _defineProperty2["default"])(Main, "propTypes", {
478
- model: _propTypes["default"].object.isRequired,
479
- configuration: _propTypes["default"].object.isRequired,
480
- disableSidePanel: _propTypes["default"].bool,
481
- onModelChanged: _propTypes["default"].func.isRequired,
482
- onConfigurationChanged: _propTypes["default"].func.isRequired,
483
- classes: _propTypes["default"].object.isRequired,
484
- imageSupport: _propTypes["default"].shape({
485
- add: _propTypes["default"].func.isRequired,
486
- "delete": _propTypes["default"].func.isRequired
487
- })
488
- });
489
- var Styled = (0, _styles.withStyles)(styles)(Main);
490
- var _default = Styled;
491
- exports["default"] = _default;
492
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzeCJdLCJuYW1lcyI6WyJQYW5lbCIsInNldHRpbmdzIiwidG9nZ2xlIiwicmFkaW8iLCJkcm9wZG93biIsIk1BWF9DSE9JQ0VTIiwic3R5bGVzIiwidGhlbWUiLCJwcm9tcHRIb2xkZXIiLCJ3aWR0aCIsInBhZGRpbmdCb3R0b20iLCJzcGFjaW5nIiwidW5pdCIsIm1hcmdpbkJvdHRvbSIsInByb21wdCIsInBhZGRpbmdUb3AiLCJyYXRpb25hbGVIb2xkZXIiLCJhY2Nlc3NpYmlsaXR5SG9sZGVyIiwicmF0aW9uYWxlIiwiYWNjZXNzaWJpbGl0eSIsImNob2ljZUNvbmZpZ3VyYXRpb25Ib2xkZXIiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJjaG9pY2VDb25maWd1cmF0aW9uIiwic3dpdGNoRWxlbWVudCIsImp1c3RpZnlDb250ZW50IiwibWFyZ2luIiwiYWRkQnV0dG9uIiwibWFyZ2luVG9wIiwiZGlzYWJsZUJ1dHRvbiIsImN1cnNvciIsInBvaW50ZXJFdmVudHMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjb2xvciIsImRpc2FibGVkIiwiZmxleENvbnRhaW5lciIsInRpdGxlVGV4dCIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsInR5cG9ncmFwaHkiLCJsaW5lSGVpZ2h0IiwibWFyZ2luUmlnaHQiLCJ0b29sdGlwIiwid2hpdGVTcGFjZSIsIm1heFdpZHRoIiwiZXJyb3JUZXh0IiwiRGVzaWduIiwicHJvcHMiLCJjbGFzc2VzIiwibW9kZWwiLCJjb25maWd1cmF0aW9uIiwib25Qcm9tcHRDaGFuZ2VkIiwib25DaG9pY2VDaGFuZ2VkIiwib25SZW1vdmVDaG9pY2UiLCJvbkFkZENob2ljZSIsImltYWdlU3VwcG9ydCIsInVwbG9hZFNvdW5kU3VwcG9ydCIsIm9uQ2hhbmdlTW9kZWwiLCJvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkIiwib25UZWFjaGVySW5zdHJ1Y3Rpb25zQ2hhbmdlZCIsImFkZENob2ljZUJ1dHRvbiIsImZlZWRiYWNrIiwiZGVsZXRlQ2hvaWNlIiwiY2hvaWNlTW9kZSIsImNob2ljZVByZWZpeCIsInBhcnRpYWxTY29yaW5nIiwibG9ja0Nob2ljZU9yZGVyIiwidGVhY2hlckluc3RydWN0aW9ucyIsInN0dWRlbnRJbnN0cnVjdGlvbnMiLCJzY29yaW5nVHlwZSIsInNlcXVlbnRpYWxDaG9pY2VMYWJlbHMiLCJzZXR0aW5nc1BhbmVsRGlzYWJsZWQiLCJjaG9pY2VzTGF5b3V0Iiwic3BlbGxDaGVjayIsImdyaWRDb2x1bW5zIiwibWF4SW1hZ2VXaWR0aCIsIm1heEltYWdlSGVpZ2h0Iiwid2l0aFJ1YnJpYyIsIm1heEFuc3dlckNob2ljZXMiLCJsaW1pdENob2ljZXNOdW1iZXIiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInJhdGlvbmFsZUVuYWJsZWQiLCJhY2Nlc3NpYmlsaXR5TGFiZWxzRW5hYmxlZCIsImZlZWRiYWNrRW5hYmxlZCIsInByb21wdEVuYWJsZWQiLCJzcGVsbENoZWNrRW5hYmxlZCIsImNob2ljZXMiLCJlcnJvcnMiLCJ0b29sYmFyRWRpdG9yUG9zaXRpb24iLCJjaG9pY2VzRXJyb3JzIiwiY29ycmVjdFJlc3BvbnNlRXJyb3IiLCJhbnN3ZXJDaG9pY2VzRXJyb3IiLCJuck9mQ29sdW1uc0F2YWlsYWJsZSIsImxlbmd0aCIsIkFycmF5IiwiZnJvbSIsIl8iLCJpIiwibGFiZWxQbHVnaW5zIiwiYXVkaW8iLCJ2aWRlbyIsInRvb2xiYXJPcHRzIiwicG9zaXRpb24iLCJ2YWxpZGF0aW9uTWVzc2FnZSIsImRlZmF1bHRJbWFnZU1heFdpZHRoIiwiZGVmYXVsdEltYWdlTWF4SGVpZ2h0IiwiYWRkQ2hvaWNlQnV0dG9uVG9vbHRpcCIsInBhbmVsU2V0dGluZ3MiLCJsYWJlbCIsInBhbmVsUHJvcGVydGllcyIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwicnVicmljRW5hYmxlZCIsIlNldHRpbmdzIiwiUHJvcGVydGllcyIsImxhbmd1YWdlIiwicm9vdCIsIk1haW4iLCJzaG93V2FybmluZyIsImluZGV4Iiwib25Nb2RlbENoYW5nZWQiLCJtaW5BbnN3ZXJDaG9pY2VzIiwic2V0U3RhdGUiLCJzcGxpY2UiLCJwdXNoIiwidmFsdWUiLCJ1dGlscyIsImZpcnN0QXZhaWxhYmxlSW5kZXgiLCJtYXAiLCJjIiwidHlwZSIsImNob2ljZSIsImNvcnJlY3QiLCJrZXkiLCJjb3JyZWN0Rm91bmQiLCJzdGF0ZSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsImRpc2FibGVTaWRlUGFuZWwiLCJib29sIiwiZnVuYyIsInNoYXBlIiwiYWRkIiwiU3R5bGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBUUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQSxJQUFRQSxLQUFSLEdBQTJDQyxrQkFBM0MsQ0FBUUQsS0FBUjtBQUFBLElBQWVFLE1BQWYsR0FBMkNELGtCQUEzQyxDQUFlQyxNQUFmO0FBQUEsSUFBdUJDLEtBQXZCLEdBQTJDRixrQkFBM0MsQ0FBdUJFLEtBQXZCO0FBQUEsSUFBOEJDLFFBQTlCLEdBQTJDSCxrQkFBM0MsQ0FBOEJHLFFBQTlCO0FBRUEsSUFBTUMsV0FBVyxHQUFHLENBQXBCOztBQUVBLElBQU1DLE1BQU0sR0FBRyxTQUFUQSxNQUFTLENBQUNDLEtBQUQ7QUFBQSxTQUFZO0FBQ3pCQyxJQUFBQSxZQUFZLEVBQUU7QUFDWkMsTUFBQUEsS0FBSyxFQUFFLE1BREs7QUFFWkMsTUFBQUEsYUFBYSxFQUFFSCxLQUFLLENBQUNJLE9BQU4sQ0FBY0MsSUFBZCxHQUFxQixDQUZ4QjtBQUdaQyxNQUFBQSxZQUFZLEVBQUVOLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFkLEdBQXFCO0FBSHZCLEtBRFc7QUFNekJFLElBQUFBLE1BQU0sRUFBRTtBQUNOQyxNQUFBQSxVQUFVLEVBQUVSLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFkLEdBQXFCLENBRDNCO0FBRU5ILE1BQUFBLEtBQUssRUFBRTtBQUZELEtBTmlCO0FBVXpCTyxJQUFBQSxlQUFlLEVBQUU7QUFDZlAsTUFBQUEsS0FBSyxFQUFFO0FBRFEsS0FWUTtBQWF6QlEsSUFBQUEsbUJBQW1CLEVBQUU7QUFDbkJSLE1BQUFBLEtBQUssRUFBRTtBQURZLEtBYkk7QUFnQnpCUyxJQUFBQSxTQUFTLEVBQUU7QUFDVEgsTUFBQUEsVUFBVSxFQUFFUixLQUFLLENBQUNJLE9BQU4sQ0FBY0MsSUFBZCxHQUFxQjtBQUR4QixLQWhCYztBQW1CekJPLElBQUFBLGFBQWEsRUFBRTtBQUNiSixNQUFBQSxVQUFVLEVBQUVSLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFkLEdBQXFCO0FBRHBCLEtBbkJVO0FBc0J6QlEsSUFBQUEseUJBQXlCLEVBQUU7QUFDekJDLE1BQUFBLE9BQU8sRUFBRSxNQURnQjtBQUV6QkMsTUFBQUEsYUFBYSxFQUFFLFFBRlU7QUFHekJDLE1BQUFBLFVBQVUsRUFBRTtBQUhhLEtBdEJGO0FBMkJ6QkMsSUFBQUEsbUJBQW1CLEVBQUU7QUFDbkJmLE1BQUFBLEtBQUssRUFBRSxNQURZO0FBRW5CTSxNQUFBQSxVQUFVLEVBQUVSLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFkLEdBQXFCLENBRmQ7QUFHbkJGLE1BQUFBLGFBQWEsRUFBRUgsS0FBSyxDQUFDSSxPQUFOLENBQWNDLElBQWQsR0FBcUI7QUFIakIsS0EzQkk7QUFnQ3pCYSxJQUFBQSxhQUFhLEVBQUU7QUFDYkMsTUFBQUEsY0FBYyxFQUFFLGVBREg7QUFFYkMsTUFBQUEsTUFBTSxFQUFFO0FBRkssS0FoQ1U7QUFvQ3pCQyxJQUFBQSxTQUFTLEVBQUU7QUFDVEMsTUFBQUEsU0FBUyxFQUFFdEIsS0FBSyxDQUFDSSxPQUFOLENBQWNDLElBQWQsR0FBcUIsQ0FEdkI7QUFFVCxlQUFPO0FBRkUsS0FwQ2M7QUF3Q3pCa0IsSUFBQUEsYUFBYSxFQUFFO0FBQ2JDLE1BQUFBLE1BQU0sRUFBRSxhQURLO0FBRWJDLE1BQUFBLGFBQWEsRUFBRSxLQUZGO0FBR2JDLE1BQUFBLGVBQWUsRUFBRUMsZ0JBQU1DLFFBQU4sRUFISjtBQUliLGlCQUFXO0FBQ1RGLFFBQUFBLGVBQWUsRUFBRUMsZ0JBQU1DLFFBQU47QUFEUixPQUpFO0FBT2IsaUJBQVc7QUFDVEYsUUFBQUEsZUFBZSxFQUFFQyxnQkFBTUMsUUFBTjtBQURSO0FBUEUsS0F4Q1U7QUFtRHpCQyxJQUFBQSxhQUFhLEVBQUU7QUFDYmYsTUFBQUEsT0FBTyxFQUFFLE1BREk7QUFFYkUsTUFBQUEsVUFBVSxFQUFFLFFBRkM7QUFHYlYsTUFBQUEsWUFBWSxFQUFFTixLQUFLLENBQUNJLE9BQU4sQ0FBY0M7QUFIZixLQW5EVTtBQXdEekJ5QixJQUFBQSxTQUFTLEVBQUU7QUFDVEMsTUFBQUEsVUFBVSxFQUFFLGNBREg7QUFFVEMsTUFBQUEsUUFBUSxFQUFFaEMsS0FBSyxDQUFDaUMsVUFBTixDQUFpQkQsUUFBakIsR0FBNEIsQ0FGN0I7QUFHVEUsTUFBQUEsVUFBVSxFQUFFLE1BSEg7QUFJVFAsTUFBQUEsS0FBSyxFQUFFLFNBSkU7QUFLVFEsTUFBQUEsV0FBVyxFQUFFbkMsS0FBSyxDQUFDSSxPQUFOLENBQWNDO0FBTGxCLEtBeERjO0FBK0R6QitCLElBQUFBLE9BQU8sRUFBRTtBQUNQSixNQUFBQSxRQUFRLEVBQUVoQyxLQUFLLENBQUNpQyxVQUFOLENBQWlCRCxRQUFqQixHQUE0QixDQUQvQjtBQUVQSyxNQUFBQSxVQUFVLEVBQUUsS0FGTDtBQUdQQyxNQUFBQSxRQUFRLEVBQUU7QUFISCxLQS9EZ0I7QUFvRXpCQyxJQUFBQSxTQUFTLEVBQUU7QUFDVFAsTUFBQUEsUUFBUSxFQUFFaEMsS0FBSyxDQUFDaUMsVUFBTixDQUFpQkQsUUFBakIsR0FBNEIsQ0FEN0I7QUFFVEwsTUFBQUEsS0FBSyxFQUFFLEtBRkU7QUFHVG5CLE1BQUFBLFVBQVUsRUFBRVIsS0FBSyxDQUFDSSxPQUFOLENBQWNDO0FBSGpCO0FBcEVjLEdBQVo7QUFBQSxDQUFmOztBQTJFQSxJQUFNbUMsTUFBTSxHQUFHLHdCQUFXekMsTUFBWCxFQUFtQixVQUFDMEMsS0FBRCxFQUFXO0FBQzNDLE1BQ0VDLE9BREYsR0FhSUQsS0FiSixDQUNFQyxPQURGO0FBQUEsTUFFRUMsS0FGRixHQWFJRixLQWJKLENBRUVFLEtBRkY7QUFBQSxNQUdFQyxhQUhGLEdBYUlILEtBYkosQ0FHRUcsYUFIRjtBQUFBLE1BSUVDLGVBSkYsR0FhSUosS0FiSixDQUlFSSxlQUpGO0FBQUEsTUFLRUMsZUFMRixHQWFJTCxLQWJKLENBS0VLLGVBTEY7QUFBQSxNQU1FQyxjQU5GLEdBYUlOLEtBYkosQ0FNRU0sY0FORjtBQUFBLE1BT0VDLFdBUEYsR0FhSVAsS0FiSixDQU9FTyxXQVBGO0FBQUEsTUFRRUMsWUFSRixHQWFJUixLQWJKLENBUUVRLFlBUkY7QUFBQSxNQVNFQyxrQkFURixHQWFJVCxLQWJKLENBU0VTLGtCQVRGO0FBQUEsTUFVRUMsYUFWRixHQWFJVixLQWJKLENBVUVVLGFBVkY7QUFBQSxNQVdFQyxzQkFYRixHQWFJWCxLQWJKLENBV0VXLHNCQVhGO0FBQUEsTUFZRUMsNEJBWkYsR0FhSVosS0FiSixDQVlFWSw0QkFaRjs7QUFlQSxhQXNCSVQsYUFBYSxJQUFJLEVBdEJyQjtBQUFBLHlCQUNFckMsTUFERjtBQUFBLE1BQ0VBLE1BREYsNEJBQ1csRUFEWDtBQUFBLGtDQUVFK0MsZUFGRjtBQUFBLE1BRUVBLGVBRkYscUNBRW9CLEVBRnBCO0FBQUEsMkJBR0VDLFFBSEY7QUFBQSxNQUdFQSxRQUhGLDhCQUdhLEVBSGI7QUFBQSwrQkFJRUMsWUFKRjtBQUFBLE1BSUVBLFlBSkYsa0NBSWlCLEVBSmpCO0FBQUEsNkJBS0VDLFVBTEY7QUFBQSxNQUtFQSxVQUxGLGdDQUtlLEVBTGY7QUFBQSwrQkFNRUMsWUFORjtBQUFBLE1BTUVBLFlBTkYsa0NBTWlCLEVBTmpCO0FBQUEsaUNBT0VDLGNBUEY7QUFBQSxNQU9FQSxjQVBGLG9DQU9tQixFQVBuQjtBQUFBLGtDQVFFQyxlQVJGO0FBQUEsTUFRRUEsZUFSRixxQ0FRb0IsRUFScEI7QUFBQSxtQ0FTRUMsbUJBVEY7QUFBQSxNQVNFQSxtQkFURixzQ0FTd0IsRUFUeEI7QUFBQSxtQ0FVRUMsbUJBVkY7QUFBQSxNQVVFQSxtQkFWRixzQ0FVd0IsRUFWeEI7QUFBQSw0QkFXRW5ELFNBWEY7QUFBQSxNQVdFQSxTQVhGLCtCQVdjLEVBWGQ7QUFBQSxnQ0FZRUMsYUFaRjtBQUFBLE1BWUVBLGFBWkYsbUNBWWtCLEVBWmxCO0FBQUEsOEJBYUVtRCxXQWJGO0FBQUEsTUFhRUEsV0FiRixpQ0FhZ0IsRUFiaEI7QUFBQSxtQ0FjRUMsc0JBZEY7QUFBQSxNQWNFQSxzQkFkRixzQ0FjMkIsRUFkM0I7QUFBQSxNQWVFQyxxQkFmRixRQWVFQSxxQkFmRjtBQUFBLE1BZ0JFQyxhQWhCRixRQWdCRUEsYUFoQkY7QUFBQSw2QkFpQkVDLFVBakJGO0FBQUEsTUFpQkVBLFVBakJGLGdDQWlCZSxFQWpCZjtBQUFBLE1Ba0JFQyxXQWxCRixRQWtCRUEsV0FsQkY7QUFBQSxnQ0FtQkVDLGFBbkJGO0FBQUEsTUFtQkVBLGFBbkJGLG1DQW1Ca0IsRUFuQmxCO0FBQUEsaUNBb0JFQyxjQXBCRjtBQUFBLE1Bb0JFQSxjQXBCRixvQ0FvQm1CLEVBcEJuQjtBQUFBLDZCQXFCRUMsVUFyQkY7QUFBQSxNQXFCRUEsVUFyQkYsZ0NBcUJlLEVBckJmOztBQXVCQSxjQUEyQjNCLGFBQWEsSUFBSSxFQUE1QztBQUFBLE1BQU00QixnQkFBTixTQUFNQSxnQkFBTjs7QUFDQSxjQVdJN0IsS0FBSyxJQUFJLEVBWGI7QUFBQSxNQUNFOEIsa0JBREYsU0FDRUEsa0JBREY7QUFBQSxNQUVFQywwQkFGRixTQUVFQSwwQkFGRjtBQUFBLE1BR0VDLGdCQUhGLFNBR0VBLGdCQUhGO0FBQUEsTUFJRUMsMEJBSkYsU0FJRUEsMEJBSkY7QUFBQSxNQUtFQyxlQUxGLFNBS0VBLGVBTEY7QUFBQSxNQU1FQyxhQU5GLFNBTUVBLGFBTkY7QUFBQSxNQU9FQyxpQkFQRixTQU9FQSxpQkFQRjtBQUFBLE1BUUVDLE9BUkYsU0FRRUEsT0FSRjtBQUFBLE1BU0VDLE1BVEYsU0FTRUEsTUFURjtBQUFBLE1BVUVDLHFCQVZGLFNBVUVBLHFCQVZGOztBQWFBLGNBQW9FRCxNQUFNLElBQUksRUFBOUU7QUFBQSxNQUFRRSxhQUFSLFNBQVFBLGFBQVI7QUFBQSxNQUF1QkMsb0JBQXZCLFNBQXVCQSxvQkFBdkI7QUFBQSxNQUE2Q0Msa0JBQTdDLFNBQTZDQSxrQkFBN0M7O0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUdOLE9BQU8sU0FBUCxJQUFBQSxPQUFPLFdBQVAsSUFBQUEsT0FBTyxDQUFFTyxNQUFULEdBQWtCQyxLQUFLLENBQUNDLElBQU4sQ0FBVztBQUFFRixJQUFBQSxNQUFNLEVBQUVQLE9BQU8sQ0FBQ087QUFBbEIsR0FBWCxFQUF1QyxVQUFDRyxDQUFELEVBQUlDLENBQUo7QUFBQSxxQkFBYUEsQ0FBQyxHQUFHLENBQWpCO0FBQUEsR0FBdkMsQ0FBbEIsR0FBaUYsRUFBOUc7QUFFQSxNQUFNQyxZQUFZLEdBQUc7QUFDbkJDLElBQUFBLEtBQUssRUFBRTtBQUFFakUsTUFBQUEsUUFBUSxFQUFFO0FBQVosS0FEWTtBQUVuQmtFLElBQUFBLEtBQUssRUFBRTtBQUFFbEUsTUFBQUEsUUFBUSxFQUFFO0FBQVo7QUFGWSxHQUFyQjtBQUtBLE1BQU1tRSxXQUFXLEdBQUc7QUFDbEJDLElBQUFBLFFBQVEsRUFBRWQscUJBQXFCLEtBQUssS0FBMUIsR0FBa0MsS0FBbEMsR0FBMEM7QUFEbEMsR0FBcEIsQ0E3RDJDLENBaUUzQzs7QUFDQSxNQUFJVCxrQkFBSixFQUF3QjtBQUN0QkQsSUFBQUEsZ0JBQWdCLEdBQUcxRSxXQUFuQjtBQUNEOztBQUVELE1BQU1tRyxpQkFBaUIsR0FBRyxzQ0FBMEJyRCxhQUExQixDQUExQjtBQUNBLE1BQU1zRCxvQkFBb0IsR0FBRzdCLGFBQWEsSUFBSUEsYUFBYSxDQUFDOUQsTUFBNUQ7QUFDQSxNQUFNNEYscUJBQXFCLEdBQUc3QixjQUFjLElBQUlBLGNBQWMsQ0FBQy9ELE1BQS9EO0FBQ0EsTUFBTTZGLHNCQUFzQixHQUMxQjVCLGdCQUFnQixJQUFJLENBQUFRLE9BQU8sU0FBUCxJQUFBQSxPQUFPLFdBQVAsWUFBQUEsT0FBTyxDQUFFTyxNQUFULEtBQW1CZixnQkFBdkMsa0JBQWtFQSxnQkFBbEUsd0JBQXVHLEVBRHpHO0FBR0EsTUFBTTZCLGFBQWEsR0FBRztBQUNwQjVDLElBQUFBLFVBQVUsRUFBRUEsVUFBVSxDQUFDL0QsUUFBWCxJQUF1QkUsS0FBSyxDQUFDNkQsVUFBVSxDQUFDNkMsS0FBWixFQUFtQixDQUFDLFVBQUQsRUFBYSxPQUFiLENBQW5CLENBRHBCO0FBRXBCLHNDQUFrQ3RDLHNCQUFzQixDQUFDdEUsUUFBdkIsSUFBbUNDLE1BQU0sQ0FBQ3FFLHNCQUFzQixDQUFDc0MsS0FBeEIsRUFBK0IsSUFBL0IsQ0FGdkQ7QUFHcEI1QyxJQUFBQSxZQUFZLEVBQUVBLFlBQVksQ0FBQ2hFLFFBQWIsSUFBeUJFLEtBQUssQ0FBQzhELFlBQVksQ0FBQzRDLEtBQWQsRUFBcUIsQ0FBQyxTQUFELEVBQVksU0FBWixDQUFyQixDQUh4QjtBQUlwQjNDLElBQUFBLGNBQWMsRUFBRUEsY0FBYyxDQUFDakUsUUFBZixJQUEyQkMsTUFBTSxDQUFDZ0UsY0FBYyxDQUFDMkMsS0FBaEIsQ0FKN0I7QUFLcEIxQyxJQUFBQSxlQUFlLEVBQUVBLGVBQWUsQ0FBQ2xFLFFBQWhCLElBQTRCQyxNQUFNLENBQUNpRSxlQUFlLENBQUMwQyxLQUFqQixDQUwvQjtBQU1wQnpCLElBQUFBLGVBQWUsRUFBRXRCLFFBQVEsQ0FBQzdELFFBQVQsSUFBcUJDLE1BQU0sQ0FBQzRELFFBQVEsQ0FBQytDLEtBQVYsQ0FOeEI7QUFPcEJwQyxJQUFBQSxhQUFhLEVBQUVBLGFBQWEsQ0FBQ3hFLFFBQWQsSUFBMEJHLFFBQVEsQ0FBQ3FFLGFBQWEsQ0FBQ29DLEtBQWYsRUFBc0IsQ0FBQyxVQUFELEVBQWEsTUFBYixFQUFxQixZQUFyQixDQUF0QixDQVA3QjtBQVFwQmxDLElBQUFBLFdBQVcsRUFDVEYsYUFBYSxDQUFDeEUsUUFBZCxJQUNBaUQsS0FBSyxDQUFDdUIsYUFBTixLQUF3QixNQUR4QixJQUVBb0Isb0JBQW9CLENBQUNDLE1BQXJCLEdBQThCLENBRjlCLElBR0ExRixRQUFRLENBQUN1RSxXQUFXLENBQUNrQyxLQUFiLEVBQW9CaEIsb0JBQXBCO0FBWlUsR0FBdEI7QUFlQSxNQUFNaUIsZUFBZSxHQUFHO0FBQ3RCN0IsSUFBQUEsMEJBQTBCLEVBQUViLG1CQUFtQixDQUFDbkUsUUFBcEIsSUFBZ0NDLE1BQU0sQ0FBQ2tFLG1CQUFtQixDQUFDeUMsS0FBckIsQ0FENUM7QUFFdEJFLElBQUFBLDBCQUEwQixFQUFFMUMsbUJBQW1CLENBQUNwRSxRQUFwQixJQUFnQ0MsTUFBTSxDQUFDbUUsbUJBQW1CLENBQUN3QyxLQUFyQixDQUY1QztBQUd0QnhCLElBQUFBLGFBQWEsRUFBRXZFLE1BQU0sQ0FBQ2IsUUFBUCxJQUFtQkMsTUFBTSxDQUFDWSxNQUFNLENBQUMrRixLQUFSLENBSGxCO0FBSXRCM0IsSUFBQUEsZ0JBQWdCLEVBQUVoRSxTQUFTLENBQUNqQixRQUFWLElBQXNCQyxNQUFNLENBQUNnQixTQUFTLENBQUMyRixLQUFYLENBSnhCO0FBS3RCdkIsSUFBQUEsaUJBQWlCLEVBQUVaLFVBQVUsQ0FBQ3pFLFFBQVgsSUFBdUJDLE1BQU0sQ0FBQ3dFLFVBQVUsQ0FBQ21DLEtBQVosQ0FMMUI7QUFNdEIxQixJQUFBQSwwQkFBMEIsRUFBRWhFLGFBQWEsQ0FBQ2xCLFFBQWQsSUFBMEJDLE1BQU0sQ0FBQ2lCLGFBQWEsQ0FBQzBGLEtBQWYsQ0FOdEM7QUFPdEJ2QyxJQUFBQSxXQUFXLEVBQUVBLFdBQVcsQ0FBQ3JFLFFBQVosSUFBd0JFLEtBQUssQ0FBQ21FLFdBQVcsQ0FBQ3VDLEtBQWIsRUFBb0IsQ0FBQyxNQUFELEVBQVMsUUFBVCxDQUFwQixDQVBwQjtBQVF0QkcsSUFBQUEsYUFBYSxFQUFFLENBQUFsQyxVQUFVLFNBQVYsSUFBQUEsVUFBVSxXQUFWLFlBQUFBLFVBQVUsQ0FBRTdFLFFBQVosS0FBd0JDLE1BQU0sQ0FBQzRFLFVBQUQsYUFBQ0EsVUFBRCx1QkFBQ0EsVUFBVSxDQUFFK0IsS0FBYjtBQVJ2QixHQUF4QjtBQVdBLHNCQUNFLGdDQUFDLGdCQUFELENBQVEsWUFBUjtBQUNFLElBQUEsWUFBWSxFQUFFckMscUJBRGhCO0FBRUUsSUFBQSxRQUFRLGVBQ04sZ0NBQUMsS0FBRDtBQUNFLE1BQUEsS0FBSyxFQUFFdEIsS0FEVDtBQUVFLE1BQUEsYUFBYSxFQUFFUSxhQUZqQjtBQUdFLE1BQUEsYUFBYSxFQUFFUCxhQUhqQjtBQUlFLE1BQUEscUJBQXFCLEVBQUVRLHNCQUp6QjtBQUtFLE1BQUEsTUFBTSxFQUFFO0FBQ05zRCxRQUFBQSxRQUFRLEVBQUVMLGFBREo7QUFFTk0sUUFBQUEsVUFBVSxFQUFFSjtBQUZOO0FBTFY7QUFISixrQkFlRSw2Q0FDR3pCLGFBQWEsaUJBQ1osZ0NBQUMsd0JBQUQ7QUFBZ0IsSUFBQSxLQUFLLEVBQUV2RSxNQUFNLENBQUMrRixLQUE5QjtBQUFxQyxJQUFBLFNBQVMsRUFBRTVELE9BQU8sQ0FBQ3pDO0FBQXhELGtCQUNFLGdDQUFDLHdCQUFEO0FBQ0UsSUFBQSxTQUFTLEVBQUV5QyxPQUFPLENBQUNuQyxNQURyQjtBQUVFLElBQUEsTUFBTSxFQUFFb0MsS0FBSyxDQUFDcEMsTUFGaEI7QUFHRSxJQUFBLFFBQVEsRUFBRXNDLGVBSFo7QUFJRSxJQUFBLFlBQVksRUFBRUksWUFKaEI7QUFLRSxJQUFBLFFBQVEsRUFBRSxLQUxaO0FBTUUsSUFBQSxnQkFBZ0IsTUFObEI7QUFPRSxJQUFBLFdBQVcsRUFBRThDLFdBUGY7QUFRRSxJQUFBLFVBQVUsRUFBRWhCLGlCQVJkO0FBU0UsSUFBQSxhQUFhLEVBQUVWLGFBQWEsSUFBSUEsYUFBYSxDQUFDOUQsTUFUaEQ7QUFVRSxJQUFBLGNBQWMsRUFBRStELGNBQWMsSUFBSUEsY0FBYyxDQUFDL0QsTUFWbkQ7QUFXRSxJQUFBLGtCQUFrQixFQUFFMkMsa0JBWHRCO0FBWUUsSUFBQSx1QkFBdUIsRUFBRSxDQUFDO0FBQUUwRCxNQUFBQSxRQUFRLEVBQUU7QUFBWixLQUFELEVBQTBCO0FBQUVBLE1BQUFBLFFBQVEsRUFBRTtBQUFaLEtBQTFCO0FBWjNCLElBREYsQ0FGSixFQW9CR3hCLG9CQUFvQixpQkFBSTtBQUFLLElBQUEsU0FBUyxFQUFFMUMsT0FBTyxDQUFDSDtBQUF4QixLQUFvQzZDLG9CQUFwQyxDQXBCM0IsRUFxQkdDLGtCQUFrQixpQkFBSTtBQUFLLElBQUEsU0FBUyxFQUFFM0MsT0FBTyxDQUFDSDtBQUF4QixLQUFvQzhDLGtCQUFwQyxDQXJCekIsRUF1QkcvQixlQUFlLENBQUM1RCxRQUFoQixpQkFDQyxnQ0FBQyxtQkFBRDtBQUFTLElBQUEsS0FBSyxFQUFFMEcsc0JBQWhCO0FBQXdDLElBQUEsT0FBTyxFQUFFO0FBQUVoRSxNQUFBQSxPQUFPLEVBQUVNLE9BQU8sQ0FBQ047QUFBbkI7QUFBakQsa0JBQ0UsZ0NBQUMsa0JBQUQ7QUFDRSxJQUFBLE9BQU8sRUFBRTtBQUFFeUUsTUFBQUEsSUFBSSxFQUFFckMsZ0JBQWdCLElBQUksQ0FBQVEsT0FBTyxTQUFQLElBQUFBLE9BQU8sV0FBUCxZQUFBQSxPQUFPLENBQUVPLE1BQVQsS0FBbUJmLGdCQUF2QyxJQUEyRDlCLE9BQU8sQ0FBQ25CO0FBQTNFLEtBRFg7QUFFRSxJQUFBLFNBQVMsRUFBRW1CLE9BQU8sQ0FBQ3JCLFNBRnJCO0FBR0UsSUFBQSxPQUFPLEVBQUMsV0FIVjtBQUlFLElBQUEsS0FBSyxFQUFDLFNBSlI7QUFLRSxJQUFBLE9BQU8sRUFBRTJCO0FBTFgsS0FPR00sZUFBZSxDQUFDZ0QsS0FQbkIsQ0FERixDQXhCSixDQWZGLENBREY7QUF1REQsQ0E3SmMsQ0FBZjs7SUErSmFRLEk7Ozs7Ozs7Ozs7Ozs7Ozs4RkFjSDtBQUFFQyxNQUFBQSxXQUFXLEVBQUU7QUFBZixLO3VHQUVTLFVBQUNDLEtBQUQsRUFBVztBQUMxQix3QkFBaUQsTUFBS3ZFLEtBQXREO0FBQUEsVUFBUUUsS0FBUixlQUFRQSxLQUFSO0FBQUEsVUFBZUMsYUFBZixlQUFlQSxhQUFmO0FBQUEsVUFBOEJxRSxjQUE5QixlQUE4QkEsY0FBOUI7O0FBQ0Esa0JBQTZCckUsYUFBYSxJQUFJLEVBQTlDO0FBQUEsVUFBUXNFLGdCQUFSLFNBQVFBLGdCQUFSOztBQUVBLFVBQUlBLGdCQUFnQixJQUFJdkUsS0FBSyxDQUFDcUMsT0FBTixDQUFjTyxNQUFkLEtBQXlCMkIsZ0JBQWpELEVBQW1FO0FBQ2pFLGNBQUtDLFFBQUwsQ0FBYztBQUFFSixVQUFBQSxXQUFXLEVBQUU7QUFBZixTQUFkOztBQUVBO0FBQ0Q7O0FBRURwRSxNQUFBQSxLQUFLLENBQUNxQyxPQUFOLENBQWNvQyxNQUFkLENBQXFCSixLQUFyQixFQUE0QixDQUE1QjtBQUNBQyxNQUFBQSxjQUFjLENBQUN0RSxLQUFELENBQWQ7QUFDRCxLO29HQUVhLFlBQU07QUFDbEIseUJBQWlELE1BQUtGLEtBQXREO0FBQUEsVUFBUUUsS0FBUixnQkFBUUEsS0FBUjtBQUFBLFVBQWVDLGFBQWYsZ0JBQWVBLGFBQWY7QUFBQSxVQUE4QnFFLGNBQTlCLGdCQUE4QkEsY0FBOUI7O0FBQ0Esa0JBQTJCckUsYUFBYSxJQUFJLEVBQTVDO0FBQUEsVUFBTTRCLGdCQUFOLFNBQU1BLGdCQUFOOztBQUNBLGtCQUErQjdCLEtBQUssSUFBSSxFQUF4QztBQUFBLFVBQVE4QixrQkFBUixTQUFRQSxrQkFBUixDQUhrQixDQUtsQjs7O0FBQ0EsVUFBSUEsa0JBQUosRUFBd0I7QUFDdEJELFFBQUFBLGdCQUFnQixHQUFHMUUsV0FBbkI7QUFDRDs7QUFFRCxVQUFJMEUsZ0JBQWdCLElBQUk3QixLQUFLLENBQUNxQyxPQUFOLENBQWNPLE1BQWQsSUFBd0JmLGdCQUFoRCxFQUFrRTtBQUNoRTtBQUNEOztBQUVEN0IsTUFBQUEsS0FBSyxDQUFDcUMsT0FBTixDQUFjcUMsSUFBZCxDQUFtQjtBQUNqQmYsUUFBQUEsS0FBSyxFQUFFLEVBRFU7QUFFakJnQixRQUFBQSxLQUFLLEVBQUVDLHNCQUFNQyxtQkFBTixDQUNMN0UsS0FBSyxDQUFDcUMsT0FBTixDQUFjeUMsR0FBZCxDQUFrQixVQUFDQyxDQUFEO0FBQUEsaUJBQU9BLENBQUMsQ0FBQ0osS0FBVDtBQUFBLFNBQWxCLENBREssRUFFTCxDQUZLLENBRlU7QUFNakIvRCxRQUFBQSxRQUFRLEVBQUU7QUFBRW9FLFVBQUFBLElBQUksRUFBRTtBQUFSO0FBTk8sT0FBbkI7QUFTQVYsTUFBQUEsY0FBYyxDQUFDdEUsS0FBRCxDQUFkO0FBQ0QsSzt3R0FFaUIsVUFBQ3FFLEtBQUQsRUFBUVksTUFBUixFQUFtQjtBQUNuQyx5QkFBa0MsTUFBS25GLEtBQXZDO0FBQUEsVUFBUUUsS0FBUixnQkFBUUEsS0FBUjtBQUFBLFVBQWVzRSxjQUFmLGdCQUFlQSxjQUFmOztBQUVBLFVBQUlXLE1BQU0sQ0FBQ0MsT0FBUCxJQUFrQmxGLEtBQUssQ0FBQ2MsVUFBTixLQUFxQixPQUEzQyxFQUFvRDtBQUNsRGQsUUFBQUEsS0FBSyxDQUFDcUMsT0FBTixHQUFnQnJDLEtBQUssQ0FBQ3FDLE9BQU4sQ0FBY3lDLEdBQWQsQ0FBa0IsVUFBQ0MsQ0FBRDtBQUFBLGlCQUFPLHVCQUFNLEVBQU4sRUFBVUEsQ0FBVixFQUFhO0FBQUVHLFlBQUFBLE9BQU8sRUFBRTtBQUFYLFdBQWIsQ0FBUDtBQUFBLFNBQWxCLENBQWhCO0FBQ0Q7O0FBRURsRixNQUFBQSxLQUFLLENBQUNxQyxPQUFOLENBQWNvQyxNQUFkLENBQXFCSixLQUFyQixFQUE0QixDQUE1QixFQUErQlksTUFBL0I7QUFDQVgsTUFBQUEsY0FBYyxDQUFDdEUsS0FBRCxDQUFkO0FBQ0QsSzt3R0FFaUIsVUFBQ3BDLE1BQUQsRUFBWTtBQUM1QixZQUFLa0MsS0FBTCxDQUFXd0UsY0FBWCxpQ0FDSyxNQUFLeEUsS0FBTCxDQUFXRSxLQURoQjtBQUVFcEMsUUFBQUEsTUFBTSxFQUFOQTtBQUZGO0FBSUQsSztxSEFFOEIsVUFBQ3NELG1CQUFELEVBQXlCO0FBQ3RELFlBQUtwQixLQUFMLENBQVd3RSxjQUFYLGlDQUNLLE1BQUt4RSxLQUFMLENBQVdFLEtBRGhCO0FBRUVrQixRQUFBQSxtQkFBbUIsRUFBbkJBO0FBRkY7QUFJRCxLO3VHQUVnQixVQUFDbEIsS0FBRCxFQUFRbUYsR0FBUixFQUFnQjtBQUMvQixVQUFRYixjQUFSLEdBQTJCLE1BQUt4RSxLQUFoQyxDQUFRd0UsY0FBUjs7QUFFQSxjQUFRYSxHQUFSO0FBQ0UsYUFBSyxZQUFMO0FBQW1CO0FBQ2pCLGdCQUFJUixLQUFLLEdBQUczRSxLQUFLLENBQUNjLFVBQWxCOztBQUVBLGdCQUFJNkQsS0FBSyxLQUFLLE9BQWQsRUFBdUI7QUFDckIsa0JBQUlTLFlBQVksR0FBRyxLQUFuQjtBQUVBcEYsY0FBQUEsS0FBSyxDQUFDcUMsT0FBTixHQUFnQnJDLEtBQUssQ0FBQ3FDLE9BQU4sQ0FBY3lDLEdBQWQsQ0FBa0IsVUFBQ0MsQ0FBRCxFQUFPO0FBQ3ZDLG9CQUFJSyxZQUFKLEVBQWtCO0FBQ2hCTCxrQkFBQUEsQ0FBQyxDQUFDRyxPQUFGLEdBQVksS0FBWjtBQUVBLHlCQUFPSCxDQUFQO0FBQ0Q7O0FBRUQsb0JBQUlBLENBQUMsQ0FBQ0csT0FBTixFQUFlO0FBQ2JFLGtCQUFBQSxZQUFZLEdBQUcsSUFBZjtBQUNEOztBQUVELHVCQUFPTCxDQUFQO0FBQ0QsZUFaZSxDQUFoQjtBQWFEOztBQUVEVCxZQUFBQSxjQUFjLENBQUN0RSxLQUFELEVBQVEsSUFBUixDQUFkO0FBQ0E7QUFDRDs7QUFFRDtBQUNFc0UsVUFBQUEsY0FBYyxDQUFDdEUsS0FBRCxDQUFkO0FBQ0E7QUE1Qko7QUE4QkQsSzs7Ozs7O1dBRUQsa0JBQVM7QUFBQTs7QUFDUCxrQ0FBcUQsS0FBS0YsS0FBMUQsQ0FBUUcsYUFBUjtBQUFBLGlFQUE4QyxFQUE5QztBQUFBLFVBQXlCc0UsZ0JBQXpCLHlCQUF5QkEsZ0JBQXpCO0FBQ0EsVUFBUUgsV0FBUixHQUF3QixLQUFLaUIsS0FBN0IsQ0FBUWpCLFdBQVI7QUFFQSwwQkFDRSxnQ0FBQyxpQkFBRCxDQUFPLFFBQVAscUJBQ0UsZ0NBQUMscUJBQUQ7QUFDRSxRQUFBLElBQUksRUFBRUEsV0FEUjtBQUVFLFFBQUEsS0FBSyxFQUFDLFNBRlI7QUFHRSxRQUFBLElBQUkscUNBQThCRyxnQkFBZ0IsSUFBSSxDQUFsRCxjQUhOO0FBSUUsUUFBQSxTQUFTLEVBQUU7QUFBQSxpQkFBTSxNQUFJLENBQUNDLFFBQUwsQ0FBYztBQUFFSixZQUFBQSxXQUFXLEVBQUU7QUFBZixXQUFkLENBQU47QUFBQTtBQUpiLFFBREYsZUFPRSxnQ0FBQyxNQUFELGdDQUNNLEtBQUt0RSxLQURYO0FBRUUsUUFBQSxhQUFhLEVBQUUsS0FBS3dFLGNBRnRCO0FBR0UsUUFBQSxjQUFjLEVBQUUsS0FBS2xFLGNBSHZCO0FBSUUsUUFBQSxlQUFlLEVBQUUsS0FBS0QsZUFKeEI7QUFLRSxRQUFBLFdBQVcsRUFBRSxLQUFLRSxXQUxwQjtBQU1FLFFBQUEsZUFBZSxFQUFFLEtBQUtILGVBTnhCO0FBT0UsUUFBQSw0QkFBNEIsRUFBRSxLQUFLUTtBQVByQyxTQVBGLENBREY7QUFtQkQ7OztFQTNJdUI0RSxrQkFBTUMsUzs7O2lDQUFuQnBCLEksZUFDUTtBQUNqQm5FLEVBQUFBLEtBQUssRUFBRXdGLHNCQUFVQyxNQUFWLENBQWlCQyxVQURQO0FBRWpCekYsRUFBQUEsYUFBYSxFQUFFdUYsc0JBQVVDLE1BQVYsQ0FBaUJDLFVBRmY7QUFHakJDLEVBQUFBLGdCQUFnQixFQUFFSCxzQkFBVUksSUFIWDtBQUlqQnRCLEVBQUFBLGNBQWMsRUFBRWtCLHNCQUFVSyxJQUFWLENBQWVILFVBSmQ7QUFLakJqRixFQUFBQSxzQkFBc0IsRUFBRStFLHNCQUFVSyxJQUFWLENBQWVILFVBTHRCO0FBTWpCM0YsRUFBQUEsT0FBTyxFQUFFeUYsc0JBQVVDLE1BQVYsQ0FBaUJDLFVBTlQ7QUFPakJwRixFQUFBQSxZQUFZLEVBQUVrRixzQkFBVU0sS0FBVixDQUFnQjtBQUM1QkMsSUFBQUEsR0FBRyxFQUFFUCxzQkFBVUssSUFBVixDQUFlSCxVQURRO0FBRTVCLGNBQVFGLHNCQUFVSyxJQUFWLENBQWVIO0FBRkssR0FBaEI7QUFQRyxDO0FBNklyQixJQUFNTSxNQUFNLEdBQUcsd0JBQVc1SSxNQUFYLEVBQW1CK0csSUFBbkIsQ0FBZjtlQUVlNkIsTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEVkaXRhYmxlSHRtbCBmcm9tICdAcGllLWxpYi9lZGl0YWJsZS1odG1sJztcbmltcG9ydCB7XG4gIEFsZXJ0RGlhbG9nLFxuICBJbnB1dENvbnRhaW5lcixcbiAgQ2hvaWNlQ29uZmlndXJhdGlvbixcbiAgc2V0dGluZ3MsXG4gIGxheW91dCxcbiAgY2hvaWNlVXRpbHMgYXMgdXRpbHMsXG59IGZyb20gJ0BwaWUtbGliL2NvbmZpZy11aSc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvQnV0dG9uJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL1Rvb2x0aXAnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvVHlwb2dyYXBoeSc7XG5pbXBvcnQgSW5mbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvSW5mbyc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnbG9kYXNoL21lcmdlJztcbmltcG9ydCB7IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgeyBQYW5lbCwgdG9nZ2xlLCByYWRpbywgZHJvcGRvd24gfSA9IHNldHRpbmdzO1xuXG5jb25zdCBNQVhfQ0hPSUNFUyA9IDk7XG5cbmNvbnN0IHN0eWxlcyA9ICh0aGVtZSkgPT4gKHtcbiAgcHJvbXB0SG9sZGVyOiB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBwYWRkaW5nQm90dG9tOiB0aGVtZS5zcGFjaW5nLnVuaXQgKiAyLFxuICAgIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZy51bml0ICogMixcbiAgfSxcbiAgcHJvbXB0OiB7XG4gICAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZy51bml0ICogMixcbiAgICB3aWR0aDogJzEwMCUnLFxuICB9LFxuICByYXRpb25hbGVIb2xkZXI6IHtcbiAgICB3aWR0aDogJzcwJScsXG4gIH0sXG4gIGFjY2Vzc2liaWxpdHlIb2xkZXI6IHtcbiAgICB3aWR0aDogJzcwJScsXG4gIH0sXG4gIHJhdGlvbmFsZToge1xuICAgIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcudW5pdCAqIDIsXG4gIH0sXG4gIGFjY2Vzc2liaWxpdHk6IHtcbiAgICBwYWRkaW5nVG9wOiB0aGVtZS5zcGFjaW5nLnVuaXQgKiAyLFxuICB9LFxuICBjaG9pY2VDb25maWd1cmF0aW9uSG9sZGVyOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxuICBjaG9pY2VDb25maWd1cmF0aW9uOiB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBwYWRkaW5nVG9wOiB0aGVtZS5zcGFjaW5nLnVuaXQgKiAyLFxuICAgIHBhZGRpbmdCb3R0b206IHRoZW1lLnNwYWNpbmcudW5pdCAqIDIsXG4gIH0sXG4gIHN3aXRjaEVsZW1lbnQ6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIG1hcmdpbjogMCxcbiAgfSxcbiAgYWRkQnV0dG9uOiB7XG4gICAgbWFyZ2luVG9wOiB0aGVtZS5zcGFjaW5nLnVuaXQgKiAzLFxuICAgIGZsb2F0OiAncmlnaHQnLFxuICB9LFxuICBkaXNhYmxlQnV0dG9uOiB7XG4gICAgY3Vyc29yOiAnbm90LWFsbG93ZWQnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnLFxuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuZGlzYWJsZWQoKSxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuZGlzYWJsZWQoKSxcbiAgICB9LFxuICAgICcmOmZvY3VzJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5kaXNhYmxlZCgpLFxuICAgIH0sXG4gIH0sXG4gIGZsZXhDb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nLnVuaXQsXG4gIH0sXG4gIHRpdGxlVGV4dDoge1xuICAgIGZvbnRGYW1pbHk6ICdDZXJlYnJpIFNhbnMnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplICsgMixcbiAgICBsaW5lSGVpZ2h0OiAnMTlweCcsXG4gICAgY29sb3I6ICcjNDk1QjhGJyxcbiAgICBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2luZy51bml0LFxuICB9LFxuICB0b29sdGlwOiB7XG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFNpemUgLSAyLFxuICAgIHdoaXRlU3BhY2U6ICdwcmUnLFxuICAgIG1heFdpZHRoOiAnNTAwcHgnLFxuICB9LFxuICBlcnJvclRleHQ6IHtcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSAtIDIsXG4gICAgY29sb3I6ICdyZWQnLFxuICAgIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcudW5pdCxcbiAgfSxcbn0pO1xuXG5jb25zdCBEZXNpZ24gPSB3aXRoU3R5bGVzKHN0eWxlcykoKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1vZGVsLFxuICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgb25Qcm9tcHRDaGFuZ2VkLFxuICAgIG9uQ2hvaWNlQ2hhbmdlZCxcbiAgICBvblJlbW92ZUNob2ljZSxcbiAgICBvbkFkZENob2ljZSxcbiAgICBpbWFnZVN1cHBvcnQsXG4gICAgdXBsb2FkU291bmRTdXBwb3J0LFxuICAgIG9uQ2hhbmdlTW9kZWwsXG4gICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZCxcbiAgICBvblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2VkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3Qge1xuICAgIHByb21wdCA9IHt9LFxuICAgIGFkZENob2ljZUJ1dHRvbiA9IHt9LFxuICAgIGZlZWRiYWNrID0ge30sXG4gICAgZGVsZXRlQ2hvaWNlID0ge30sXG4gICAgY2hvaWNlTW9kZSA9IHt9LFxuICAgIGNob2ljZVByZWZpeCA9IHt9LFxuICAgIHBhcnRpYWxTY29yaW5nID0ge30sXG4gICAgbG9ja0Nob2ljZU9yZGVyID0ge30sXG4gICAgdGVhY2hlckluc3RydWN0aW9ucyA9IHt9LFxuICAgIHN0dWRlbnRJbnN0cnVjdGlvbnMgPSB7fSxcbiAgICByYXRpb25hbGUgPSB7fSxcbiAgICBhY2Nlc3NpYmlsaXR5ID0ge30sXG4gICAgc2NvcmluZ1R5cGUgPSB7fSxcbiAgICBzZXF1ZW50aWFsQ2hvaWNlTGFiZWxzID0ge30sXG4gICAgc2V0dGluZ3NQYW5lbERpc2FibGVkLFxuICAgIGNob2ljZXNMYXlvdXQsXG4gICAgc3BlbGxDaGVjayA9IHt9LFxuICAgIGdyaWRDb2x1bW5zLFxuICAgIG1heEltYWdlV2lkdGggPSB7fSxcbiAgICBtYXhJbWFnZUhlaWdodCA9IHt9LFxuICAgIHdpdGhSdWJyaWMgPSB7fSxcbiAgfSA9IGNvbmZpZ3VyYXRpb24gfHwge307XG4gIGxldCB7IG1heEFuc3dlckNob2ljZXMgfSA9IGNvbmZpZ3VyYXRpb24gfHwge307XG4gIGNvbnN0IHtcbiAgICBsaW1pdENob2ljZXNOdW1iZXIsXG4gICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQsXG4gICAgcmF0aW9uYWxlRW5hYmxlZCxcbiAgICBhY2Nlc3NpYmlsaXR5TGFiZWxzRW5hYmxlZCxcbiAgICBmZWVkYmFja0VuYWJsZWQsXG4gICAgcHJvbXB0RW5hYmxlZCxcbiAgICBzcGVsbENoZWNrRW5hYmxlZCxcbiAgICBjaG9pY2VzLFxuICAgIGVycm9ycyxcbiAgICB0b29sYmFyRWRpdG9yUG9zaXRpb24sXG4gIH0gPSBtb2RlbCB8fCB7fTtcblxuICBjb25zdCB7IGNob2ljZXNFcnJvcnMsIGNvcnJlY3RSZXNwb25zZUVycm9yLCBhbnN3ZXJDaG9pY2VzRXJyb3IgfSA9IGVycm9ycyB8fCB7fTtcbiAgY29uc3QgbnJPZkNvbHVtbnNBdmFpbGFibGUgPSBjaG9pY2VzPy5sZW5ndGggPyBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjaG9pY2VzLmxlbmd0aCB9LCAoXywgaSkgPT4gYCR7aSArIDF9YCkgOiBbXTtcblxuICBjb25zdCBsYWJlbFBsdWdpbnMgPSB7XG4gICAgYXVkaW86IHsgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICB2aWRlbzogeyBkaXNhYmxlZDogdHJ1ZSB9LFxuICB9O1xuXG4gIGNvbnN0IHRvb2xiYXJPcHRzID0ge1xuICAgIHBvc2l0aW9uOiB0b29sYmFyRWRpdG9yUG9zaXRpb24gPT09ICd0b3AnID8gJ3RvcCcgOiAnYm90dG9tJyxcbiAgfTtcblxuICAvLyBpZiBvbGQgcHJvcGVydHkgaXMgdXNlZCwgc2V0IG1heEFuc3dlckNob2ljZXMgdG8gOVxuICBpZiAobGltaXRDaG9pY2VzTnVtYmVyKSB7XG4gICAgbWF4QW5zd2VyQ2hvaWNlcyA9IE1BWF9DSE9JQ0VTO1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2UgPSBnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlKGNvbmZpZ3VyYXRpb24pO1xuICBjb25zdCBkZWZhdWx0SW1hZ2VNYXhXaWR0aCA9IG1heEltYWdlV2lkdGggJiYgbWF4SW1hZ2VXaWR0aC5wcm9tcHQ7XG4gIGNvbnN0IGRlZmF1bHRJbWFnZU1heEhlaWdodCA9IG1heEltYWdlSGVpZ2h0ICYmIG1heEltYWdlSGVpZ2h0LnByb21wdDtcbiAgY29uc3QgYWRkQ2hvaWNlQnV0dG9uVG9vbHRpcCA9XG4gICAgbWF4QW5zd2VyQ2hvaWNlcyAmJiBjaG9pY2VzPy5sZW5ndGggPj0gbWF4QW5zd2VyQ2hvaWNlcyA/IGBPbmx5ICR7bWF4QW5zd2VyQ2hvaWNlc30gYWxsb3dlZCBtYXhpbXVtYCA6ICcnO1xuXG4gIGNvbnN0IHBhbmVsU2V0dGluZ3MgPSB7XG4gICAgY2hvaWNlTW9kZTogY2hvaWNlTW9kZS5zZXR0aW5ncyAmJiByYWRpbyhjaG9pY2VNb2RlLmxhYmVsLCBbJ2NoZWNrYm94JywgJ3JhZGlvJ10pLFxuICAgICdzZXF1ZW50aWFsQ2hvaWNlTGFiZWxzLmVuYWJsZWQnOiBzZXF1ZW50aWFsQ2hvaWNlTGFiZWxzLnNldHRpbmdzICYmIHRvZ2dsZShzZXF1ZW50aWFsQ2hvaWNlTGFiZWxzLmxhYmVsLCB0cnVlKSxcbiAgICBjaG9pY2VQcmVmaXg6IGNob2ljZVByZWZpeC5zZXR0aW5ncyAmJiByYWRpbyhjaG9pY2VQcmVmaXgubGFiZWwsIFsnbnVtYmVycycsICdsZXR0ZXJzJ10pLFxuICAgIHBhcnRpYWxTY29yaW5nOiBwYXJ0aWFsU2NvcmluZy5zZXR0aW5ncyAmJiB0b2dnbGUocGFydGlhbFNjb3JpbmcubGFiZWwpLFxuICAgIGxvY2tDaG9pY2VPcmRlcjogbG9ja0Nob2ljZU9yZGVyLnNldHRpbmdzICYmIHRvZ2dsZShsb2NrQ2hvaWNlT3JkZXIubGFiZWwpLFxuICAgIGZlZWRiYWNrRW5hYmxlZDogZmVlZGJhY2suc2V0dGluZ3MgJiYgdG9nZ2xlKGZlZWRiYWNrLmxhYmVsKSxcbiAgICBjaG9pY2VzTGF5b3V0OiBjaG9pY2VzTGF5b3V0LnNldHRpbmdzICYmIGRyb3Bkb3duKGNob2ljZXNMYXlvdXQubGFiZWwsIFsndmVydGljYWwnLCAnZ3JpZCcsICdob3Jpem9udGFsJ10pLFxuICAgIGdyaWRDb2x1bW5zOlxuICAgICAgY2hvaWNlc0xheW91dC5zZXR0aW5ncyAmJlxuICAgICAgbW9kZWwuY2hvaWNlc0xheW91dCA9PT0gJ2dyaWQnICYmXG4gICAgICBuck9mQ29sdW1uc0F2YWlsYWJsZS5sZW5ndGggPiAwICYmXG4gICAgICBkcm9wZG93bihncmlkQ29sdW1ucy5sYWJlbCwgbnJPZkNvbHVtbnNBdmFpbGFibGUpLFxuICB9O1xuXG4gIGNvbnN0IHBhbmVsUHJvcGVydGllcyA9IHtcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZDogdGVhY2hlckluc3RydWN0aW9ucy5zZXR0aW5ncyAmJiB0b2dnbGUodGVhY2hlckluc3RydWN0aW9ucy5sYWJlbCksXG4gICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHN0dWRlbnRJbnN0cnVjdGlvbnMuc2V0dGluZ3MgJiYgdG9nZ2xlKHN0dWRlbnRJbnN0cnVjdGlvbnMubGFiZWwpLFxuICAgIHByb21wdEVuYWJsZWQ6IHByb21wdC5zZXR0aW5ncyAmJiB0b2dnbGUocHJvbXB0LmxhYmVsKSxcbiAgICByYXRpb25hbGVFbmFibGVkOiByYXRpb25hbGUuc2V0dGluZ3MgJiYgdG9nZ2xlKHJhdGlvbmFsZS5sYWJlbCksXG4gICAgc3BlbGxDaGVja0VuYWJsZWQ6IHNwZWxsQ2hlY2suc2V0dGluZ3MgJiYgdG9nZ2xlKHNwZWxsQ2hlY2subGFiZWwpLFxuICAgIGFjY2Vzc2liaWxpdHlMYWJlbHNFbmFibGVkOiBhY2Nlc3NpYmlsaXR5LnNldHRpbmdzICYmIHRvZ2dsZShhY2Nlc3NpYmlsaXR5LmxhYmVsKSxcbiAgICBzY29yaW5nVHlwZTogc2NvcmluZ1R5cGUuc2V0dGluZ3MgJiYgcmFkaW8oc2NvcmluZ1R5cGUubGFiZWwsIFsnYXV0bycsICdydWJyaWMnXSksXG4gICAgcnVicmljRW5hYmxlZDogd2l0aFJ1YnJpYz8uc2V0dGluZ3MgJiYgdG9nZ2xlKHdpdGhSdWJyaWM/LmxhYmVsKSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxsYXlvdXQuQ29uZmlnTGF5b3V0XG4gICAgICBoaWRlU2V0dGluZ3M9e3NldHRpbmdzUGFuZWxEaXNhYmxlZH1cbiAgICAgIHNldHRpbmdzPXtcbiAgICAgICAgPFBhbmVsXG4gICAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICAgIG9uQ2hhbmdlTW9kZWw9e29uQ2hhbmdlTW9kZWx9XG4gICAgICAgICAgY29uZmlndXJhdGlvbj17Y29uZmlndXJhdGlvbn1cbiAgICAgICAgICBvbkNoYW5nZUNvbmZpZ3VyYXRpb249e29uQ29uZmlndXJhdGlvbkNoYW5nZWR9XG4gICAgICAgICAgZ3JvdXBzPXt7XG4gICAgICAgICAgICBTZXR0aW5nczogcGFuZWxTZXR0aW5ncyxcbiAgICAgICAgICAgIFByb3BlcnRpZXM6IHBhbmVsUHJvcGVydGllcyxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgfVxuICAgID5cbiAgICAgIDxkaXY+XG4gICAgICAgIHtwcm9tcHRFbmFibGVkICYmIChcbiAgICAgICAgICA8SW5wdXRDb250YWluZXIgbGFiZWw9e3Byb21wdC5sYWJlbH0gY2xhc3NOYW1lPXtjbGFzc2VzLnByb21wdEhvbGRlcn0+XG4gICAgICAgICAgICA8RWRpdGFibGVIdG1sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5wcm9tcHR9XG4gICAgICAgICAgICAgIG1hcmt1cD17bW9kZWwucHJvbXB0fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17b25Qcm9tcHRDaGFuZ2VkfVxuICAgICAgICAgICAgICBpbWFnZVN1cHBvcnQ9e2ltYWdlU3VwcG9ydH1cbiAgICAgICAgICAgICAgbm9uRW1wdHk9e2ZhbHNlfVxuICAgICAgICAgICAgICBkaXNhYmxlVW5kZXJsaW5lXG4gICAgICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja0VuYWJsZWR9XG4gICAgICAgICAgICAgIG1heEltYWdlV2lkdGg9e21heEltYWdlV2lkdGggJiYgbWF4SW1hZ2VXaWR0aC5wcm9tcHR9XG4gICAgICAgICAgICAgIG1heEltYWdlSGVpZ2h0PXttYXhJbWFnZUhlaWdodCAmJiBtYXhJbWFnZUhlaWdodC5wcm9tcHR9XG4gICAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgICAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wcz17W3sgbGFuZ3VhZ2U6ICdzcGFuaXNoJyB9LCB7IGxhbmd1YWdlOiAnc3BlY2lhbCcgfV19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvSW5wdXRDb250YWluZXI+XG4gICAgICAgICl9XG5cbiAgICAgICAge2NvcnJlY3RSZXNwb25zZUVycm9yICYmIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmVycm9yVGV4dH0+e2NvcnJlY3RSZXNwb25zZUVycm9yfTwvZGl2Pn1cbiAgICAgICAge2Fuc3dlckNob2ljZXNFcnJvciAmJiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5lcnJvclRleHR9PnthbnN3ZXJDaG9pY2VzRXJyb3J9PC9kaXY+fVxuXG4gICAgICAgIHthZGRDaG9pY2VCdXR0b24uc2V0dGluZ3MgJiYgKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXthZGRDaG9pY2VCdXR0b25Ub29sdGlwfSBjbGFzc2VzPXt7IHRvb2x0aXA6IGNsYXNzZXMudG9vbHRpcCB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgY2xhc3Nlcz17eyByb290OiBtYXhBbnN3ZXJDaG9pY2VzICYmIGNob2ljZXM/Lmxlbmd0aCA+PSBtYXhBbnN3ZXJDaG9pY2VzICYmIGNsYXNzZXMuZGlzYWJsZUJ1dHRvbiB9fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMuYWRkQnV0dG9ufVxuICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgb25DbGljaz17b25BZGRDaG9pY2V9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHthZGRDaG9pY2VCdXR0b24ubGFiZWx9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2xheW91dC5Db25maWdMYXlvdXQ+XG4gICk7XG59KTtcblxuZXhwb3J0IGNsYXNzIE1haW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgY29uZmlndXJhdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGRpc2FibGVTaWRlUGFuZWw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uTW9kZWxDaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGltYWdlU3VwcG9ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGFkZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIGRlbGV0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0ZSA9IHsgc2hvd1dhcm5pbmc6IGZhbHNlIH07XG5cbiAgb25SZW1vdmVDaG9pY2UgPSAoaW5kZXgpID0+IHtcbiAgICBjb25zdCB7IG1vZGVsLCBjb25maWd1cmF0aW9uLCBvbk1vZGVsQ2hhbmdlZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IG1pbkFuc3dlckNob2ljZXMgfSA9IGNvbmZpZ3VyYXRpb24gfHwge307XG5cbiAgICBpZiAobWluQW5zd2VyQ2hvaWNlcyAmJiBtb2RlbC5jaG9pY2VzLmxlbmd0aCA9PT0gbWluQW5zd2VyQ2hvaWNlcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNob3dXYXJuaW5nOiB0cnVlIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbW9kZWwuY2hvaWNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIG9uTW9kZWxDaGFuZ2VkKG1vZGVsKTtcbiAgfTtcblxuICBvbkFkZENob2ljZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IG1vZGVsLCBjb25maWd1cmF0aW9uLCBvbk1vZGVsQ2hhbmdlZCB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBtYXhBbnN3ZXJDaG9pY2VzIH0gPSBjb25maWd1cmF0aW9uIHx8IHt9O1xuICAgIGNvbnN0IHsgbGltaXRDaG9pY2VzTnVtYmVyIH0gPSBtb2RlbCB8fCB7fTtcblxuICAgIC8vIGlmIG9sZCBwcm9wZXJ0eSBpcyB1c2VkLCBzZXQgbWF4QW5zd2VyQ2hvaWNlcyB0byA5XG4gICAgaWYgKGxpbWl0Q2hvaWNlc051bWJlcikge1xuICAgICAgbWF4QW5zd2VyQ2hvaWNlcyA9IE1BWF9DSE9JQ0VTO1xuICAgIH1cblxuICAgIGlmIChtYXhBbnN3ZXJDaG9pY2VzICYmIG1vZGVsLmNob2ljZXMubGVuZ3RoID49IG1heEFuc3dlckNob2ljZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtb2RlbC5jaG9pY2VzLnB1c2goe1xuICAgICAgbGFiZWw6ICcnLFxuICAgICAgdmFsdWU6IHV0aWxzLmZpcnN0QXZhaWxhYmxlSW5kZXgoXG4gICAgICAgIG1vZGVsLmNob2ljZXMubWFwKChjKSA9PiBjLnZhbHVlKSxcbiAgICAgICAgMCxcbiAgICAgICksXG4gICAgICBmZWVkYmFjazogeyB0eXBlOiAnbm9uZScgfSxcbiAgICB9KTtcblxuICAgIG9uTW9kZWxDaGFuZ2VkKG1vZGVsKTtcbiAgfTtcblxuICBvbkNob2ljZUNoYW5nZWQgPSAoaW5kZXgsIGNob2ljZSkgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwsIG9uTW9kZWxDaGFuZ2VkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKGNob2ljZS5jb3JyZWN0ICYmIG1vZGVsLmNob2ljZU1vZGUgPT09ICdyYWRpbycpIHtcbiAgICAgIG1vZGVsLmNob2ljZXMgPSBtb2RlbC5jaG9pY2VzLm1hcCgoYykgPT4gbWVyZ2Uoe30sIGMsIHsgY29ycmVjdDogZmFsc2UgfSkpO1xuICAgIH1cblxuICAgIG1vZGVsLmNob2ljZXMuc3BsaWNlKGluZGV4LCAxLCBjaG9pY2UpO1xuICAgIG9uTW9kZWxDaGFuZ2VkKG1vZGVsKTtcbiAgfTtcblxuICBvblByb21wdENoYW5nZWQgPSAocHJvbXB0KSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vbk1vZGVsQ2hhbmdlZCh7XG4gICAgICAuLi50aGlzLnByb3BzLm1vZGVsLFxuICAgICAgcHJvbXB0LFxuICAgIH0pO1xuICB9O1xuXG4gIG9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQgPSAodGVhY2hlckluc3RydWN0aW9ucykgPT4ge1xuICAgIHRoaXMucHJvcHMub25Nb2RlbENoYW5nZWQoe1xuICAgICAgLi4udGhpcy5wcm9wcy5tb2RlbCxcbiAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgfSk7XG4gIH07XG5cbiAgb25Nb2RlbENoYW5nZWQgPSAobW9kZWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHsgb25Nb2RlbENoYW5nZWQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnY2hvaWNlTW9kZSc6IHtcbiAgICAgICAgbGV0IHZhbHVlID0gbW9kZWwuY2hvaWNlTW9kZTtcblxuICAgICAgICBpZiAodmFsdWUgPT09ICdyYWRpbycpIHtcbiAgICAgICAgICBsZXQgY29ycmVjdEZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgICBtb2RlbC5jaG9pY2VzID0gbW9kZWwuY2hvaWNlcy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjb3JyZWN0Rm91bmQpIHtcbiAgICAgICAgICAgICAgYy5jb3JyZWN0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjLmNvcnJlY3QpIHtcbiAgICAgICAgICAgICAgY29ycmVjdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBvbk1vZGVsQ2hhbmdlZChtb2RlbCwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvbk1vZGVsQ2hhbmdlZChtb2RlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjb25maWd1cmF0aW9uOiB7IG1pbkFuc3dlckNob2ljZXMgfSA9IHt9IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2hvd1dhcm5pbmcgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8QWxlcnREaWFsb2dcbiAgICAgICAgICBvcGVuPXtzaG93V2FybmluZ31cbiAgICAgICAgICB0aXRsZT1cIldhcm5pbmdcIlxuICAgICAgICAgIHRleHQ9e2BUaGVyZSBjYW4ndCBiZSBsZXNzIHRoYW4gJHttaW5BbnN3ZXJDaG9pY2VzIHx8IDB9IGNob2ljZXMuYH1cbiAgICAgICAgICBvbkNvbmZpcm09eygpID0+IHRoaXMuc2V0U3RhdGUoeyBzaG93V2FybmluZzogZmFsc2UgfSl9XG4gICAgICAgIC8+XG4gICAgICAgIDxEZXNpZ25cbiAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICBvbkNoYW5nZU1vZGVsPXt0aGlzLm9uTW9kZWxDaGFuZ2VkfVxuICAgICAgICAgIG9uUmVtb3ZlQ2hvaWNlPXt0aGlzLm9uUmVtb3ZlQ2hvaWNlfVxuICAgICAgICAgIG9uQ2hvaWNlQ2hhbmdlZD17dGhpcy5vbkNob2ljZUNoYW5nZWR9XG4gICAgICAgICAgb25BZGRDaG9pY2U9e3RoaXMub25BZGRDaG9pY2V9XG4gICAgICAgICAgb25Qcm9tcHRDaGFuZ2VkPXt0aGlzLm9uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICBvblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2VkPXt0aGlzLm9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWR9XG4gICAgICAgIC8+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgU3R5bGVkID0gd2l0aFN0eWxlcyhzdHlsZXMpKE1haW4pO1xuXG5leHBvcnQgZGVmYXVsdCBTdHlsZWQ7XG4iXX0=
@@ -1,18 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.generateValidationMessage = void 0;
7
-
8
- var generateValidationMessage = function generateValidationMessage(config) {
9
- var minAnswerChoices = config.minAnswerChoices,
10
- maxAnswerChoices = config.maxAnswerChoices;
11
- var answerChoicesMessage = "\nThere should be at least ".concat(minAnswerChoices, " ") + (maxAnswerChoices ? "and at most ".concat(maxAnswerChoices, " ") : '') + 'answer choices defined.' + '\nEvery answer choice should be non-blank and unique.';
12
- var correctAnswerMessage = '\nA correct answer must be defined.';
13
- var message = 'Validation requirements:' + answerChoicesMessage + correctAnswerMessage;
14
- return message;
15
- };
16
-
17
- exports.generateValidationMessage = generateValidationMessage;
18
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlIiwiY29uZmlnIiwibWluQW5zd2VyQ2hvaWNlcyIsIm1heEFuc3dlckNob2ljZXMiLCJhbnN3ZXJDaG9pY2VzTWVzc2FnZSIsImNvcnJlY3RBbnN3ZXJNZXNzYWdlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFPLElBQU1BLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBNEIsQ0FBQ0MsTUFBRCxFQUFZO0FBQ25ELE1BQVFDLGdCQUFSLEdBQStDRCxNQUEvQyxDQUFRQyxnQkFBUjtBQUFBLE1BQTBCQyxnQkFBMUIsR0FBK0NGLE1BQS9DLENBQTBCRSxnQkFBMUI7QUFFQSxNQUFNQyxvQkFBb0IsR0FDeEIscUNBQThCRixnQkFBOUIsVUFDQ0MsZ0JBQWdCLHlCQUFrQkEsZ0JBQWxCLFNBQXdDLEVBRHpELElBRUEseUJBRkEsR0FHQSx1REFKRjtBQU1BLE1BQU1FLG9CQUFvQixHQUFHLHFDQUE3QjtBQUVBLE1BQU1DLE9BQU8sR0FBRyw2QkFBNkJGLG9CQUE3QixHQUFvREMsb0JBQXBFO0FBRUEsU0FBT0MsT0FBUDtBQUNELENBZE0iLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZSA9IChjb25maWcpID0+IHtcbiAgY29uc3QgeyBtaW5BbnN3ZXJDaG9pY2VzLCBtYXhBbnN3ZXJDaG9pY2VzIH0gPSBjb25maWc7XG5cbiAgY29uc3QgYW5zd2VyQ2hvaWNlc01lc3NhZ2UgPVxuICAgIGBcXG5UaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgJHttaW5BbnN3ZXJDaG9pY2VzfSBgICtcbiAgICAobWF4QW5zd2VyQ2hvaWNlcyA/IGBhbmQgYXQgbW9zdCAke21heEFuc3dlckNob2ljZXN9IGAgOiAnJykgK1xuICAgICdhbnN3ZXIgY2hvaWNlcyBkZWZpbmVkLicgK1xuICAgICdcXG5FdmVyeSBhbnN3ZXIgY2hvaWNlIHNob3VsZCBiZSBub24tYmxhbmsgYW5kIHVuaXF1ZS4nO1xuXG4gIGNvbnN0IGNvcnJlY3RBbnN3ZXJNZXNzYWdlID0gJ1xcbkEgY29ycmVjdCBhbnN3ZXIgbXVzdCBiZSBkZWZpbmVkLic7XG5cbiAgY29uc3QgbWVzc2FnZSA9ICdWYWxpZGF0aW9uIHJlcXVpcmVtZW50czonICsgYW5zd2VyQ2hvaWNlc01lc3NhZ2UgKyBjb3JyZWN0QW5zd2VyTWVzc2FnZTtcblxuICByZXR1cm4gbWVzc2FnZTtcbn07XG4iXX0=