@pie-lib/config-ui 12.0.0-beta.5 → 12.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/CHANGELOG.json +8 -1653
  2. package/CHANGELOG.md +345 -4
  3. package/LICENSE.md +5 -0
  4. package/NEXT.CHANGELOG.json +1 -0
  5. package/lib/__tests__/alert-dialog.test.js +262 -0
  6. package/lib/__tests__/checkbox.test.js +227 -0
  7. package/lib/__tests__/choice-utils.test.js +14 -0
  8. package/lib/__tests__/form-section.test.js +252 -0
  9. package/lib/__tests__/help.test.js +270 -0
  10. package/lib/__tests__/input.test.js +268 -0
  11. package/lib/__tests__/langs.test.js +541 -0
  12. package/lib/__tests__/number-text-field-custom.test.js +362 -0
  13. package/lib/__tests__/number-text-field.test.js +421 -0
  14. package/lib/__tests__/radio-with-label.test.js +233 -0
  15. package/lib/__tests__/settings-panel.test.js +184 -0
  16. package/lib/__tests__/settings.test.js +653 -0
  17. package/lib/__tests__/tabs.test.js +211 -0
  18. package/lib/__tests__/two-choice.test.js +124 -0
  19. package/lib/__tests__/with-stateful-model.test.js +221 -0
  20. package/lib/alert-dialog.js +41 -11
  21. package/lib/alert-dialog.js.map +1 -1
  22. package/lib/checkbox.js +59 -49
  23. package/lib/checkbox.js.map +1 -1
  24. package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
  25. package/lib/choice-configuration/__tests__/index.test.js +253 -0
  26. package/lib/choice-configuration/feedback-menu.js +25 -27
  27. package/lib/choice-configuration/feedback-menu.js.map +1 -1
  28. package/lib/choice-configuration/index.js +183 -186
  29. package/lib/choice-configuration/index.js.map +1 -1
  30. package/lib/choice-utils.js +6 -8
  31. package/lib/choice-utils.js.map +1 -1
  32. package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
  33. package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
  34. package/lib/feedback-config/feedback-selector.js +70 -74
  35. package/lib/feedback-config/feedback-selector.js.map +1 -1
  36. package/lib/feedback-config/group.js +23 -26
  37. package/lib/feedback-config/group.js.map +1 -1
  38. package/lib/feedback-config/index.js +42 -45
  39. package/lib/feedback-config/index.js.map +1 -1
  40. package/lib/form-section.js +32 -26
  41. package/lib/form-section.js.map +1 -1
  42. package/lib/help.js +38 -48
  43. package/lib/help.js.map +1 -1
  44. package/lib/index.js +2 -3
  45. package/lib/index.js.map +1 -1
  46. package/lib/input.js +13 -18
  47. package/lib/input.js.map +1 -1
  48. package/lib/inputs.js +59 -68
  49. package/lib/inputs.js.map +1 -1
  50. package/lib/langs.js +57 -71
  51. package/lib/langs.js.map +1 -1
  52. package/lib/layout/__tests__/config.layout.test.js +70 -0
  53. package/lib/layout/__tests__/layout-content.test.js +6 -0
  54. package/lib/layout/config-layout.js +79 -48
  55. package/lib/layout/config-layout.js.map +1 -1
  56. package/lib/layout/index.js +1 -1
  57. package/lib/layout/index.js.map +1 -1
  58. package/lib/layout/layout-contents.js +59 -61
  59. package/lib/layout/layout-contents.js.map +1 -1
  60. package/lib/layout/settings-box.js +26 -34
  61. package/lib/layout/settings-box.js.map +1 -1
  62. package/lib/mui-box/index.js +42 -51
  63. package/lib/mui-box/index.js.map +1 -1
  64. package/lib/number-text-field-custom.js +152 -90
  65. package/lib/number-text-field-custom.js.map +1 -1
  66. package/lib/number-text-field.js +75 -64
  67. package/lib/number-text-field.js.map +1 -1
  68. package/lib/radio-with-label.js +31 -17
  69. package/lib/radio-with-label.js.map +1 -1
  70. package/lib/settings/display-size.js +17 -21
  71. package/lib/settings/display-size.js.map +1 -1
  72. package/lib/settings/index.js +14 -20
  73. package/lib/settings/index.js.map +1 -1
  74. package/lib/settings/panel.js +141 -142
  75. package/lib/settings/panel.js.map +1 -1
  76. package/lib/settings/settings-radio-label.js +30 -17
  77. package/lib/settings/settings-radio-label.js.map +1 -1
  78. package/lib/settings/toggle.js +40 -26
  79. package/lib/settings/toggle.js.map +1 -1
  80. package/lib/tabs/index.js +19 -31
  81. package/lib/tabs/index.js.map +1 -1
  82. package/lib/tags-input/__tests__/index.test.js +183 -0
  83. package/lib/tags-input/index.js +50 -62
  84. package/lib/tags-input/index.js.map +1 -1
  85. package/lib/two-choice.js +34 -44
  86. package/lib/two-choice.js.map +1 -1
  87. package/lib/with-stateful-model.js +9 -13
  88. package/lib/with-stateful-model.js.map +1 -1
  89. package/package.json +14 -11
  90. package/src/__tests__/alert-dialog.test.jsx +283 -0
  91. package/src/__tests__/checkbox.test.jsx +249 -0
  92. package/src/__tests__/choice-utils.test.js +12 -0
  93. package/src/__tests__/form-section.test.jsx +334 -0
  94. package/src/__tests__/help.test.jsx +184 -0
  95. package/src/__tests__/input.test.jsx +192 -0
  96. package/src/__tests__/langs.test.jsx +457 -0
  97. package/src/__tests__/number-text-field-custom.test.jsx +438 -0
  98. package/src/__tests__/number-text-field.test.jsx +341 -0
  99. package/src/__tests__/radio-with-label.test.jsx +259 -0
  100. package/src/__tests__/settings-panel.test.js +187 -0
  101. package/src/__tests__/settings.test.jsx +515 -0
  102. package/src/__tests__/tabs.test.jsx +193 -0
  103. package/src/__tests__/two-choice.test.js +110 -0
  104. package/src/__tests__/with-stateful-model.test.jsx +145 -0
  105. package/src/alert-dialog.jsx +30 -8
  106. package/src/checkbox.jsx +43 -37
  107. package/src/choice-configuration/__tests__/feedback-menu.test.jsx +163 -0
  108. package/src/choice-configuration/__tests__/index.test.jsx +234 -0
  109. package/src/choice-configuration/feedback-menu.jsx +6 -6
  110. package/src/choice-configuration/index.jsx +208 -199
  111. package/src/feedback-config/__tests__/feedback-config.test.jsx +141 -0
  112. package/src/feedback-config/__tests__/feedback-selector.test.jsx +97 -0
  113. package/src/feedback-config/feedback-selector.jsx +50 -55
  114. package/src/feedback-config/group.jsx +21 -22
  115. package/src/feedback-config/index.jsx +27 -29
  116. package/src/form-section.jsx +26 -18
  117. package/src/help.jsx +20 -28
  118. package/src/input.jsx +1 -1
  119. package/src/inputs.jsx +35 -44
  120. package/src/langs.jsx +41 -46
  121. package/src/layout/__tests__/config.layout.test.jsx +59 -0
  122. package/src/layout/__tests__/layout-content.test.jsx +3 -0
  123. package/src/layout/config-layout.jsx +53 -23
  124. package/src/layout/layout-contents.jsx +38 -40
  125. package/src/layout/settings-box.jsx +16 -19
  126. package/src/mui-box/index.jsx +35 -43
  127. package/src/number-text-field-custom.jsx +117 -65
  128. package/src/number-text-field.jsx +51 -34
  129. package/src/radio-with-label.jsx +26 -10
  130. package/src/settings/display-size.jsx +12 -11
  131. package/src/settings/index.js +2 -1
  132. package/src/settings/panel.jsx +101 -92
  133. package/src/settings/settings-radio-label.jsx +26 -10
  134. package/src/settings/toggle.jsx +37 -18
  135. package/src/tabs/index.jsx +8 -8
  136. package/src/tags-input/__tests__/index.test.jsx +113 -0
  137. package/src/tags-input/index.jsx +35 -38
  138. package/src/two-choice.jsx +15 -19
  139. package/README.md +0 -12
@@ -8,59 +8,57 @@ exports["default"] = exports.ChoiceConfiguration = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
12
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
14
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
15
  var _react = _interopRequireDefault(require("react"));
17
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
18
- var _styles = require("@material-ui/core/styles");
19
- var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
20
- var _classnames = _interopRequireDefault(require("classnames"));
17
+ var _styles = require("@mui/material/styles");
18
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
19
+ var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
20
+ var _SubdirectoryArrowRight = _interopRequireDefault(require("@mui/icons-material/SubdirectoryArrowRight"));
21
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
21
22
  var _renderUi = require("@pie-lib/render-ui");
22
- var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
23
23
  var _inputs = require("../inputs");
24
24
  var _feedbackMenu = _interopRequireDefault(require("./feedback-menu"));
25
- var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
26
- var _SubdirectoryArrowRight = _interopRequireDefault(require("@material-ui/icons/SubdirectoryArrowRight"));
27
- var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
28
- 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; }
29
- 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; }
30
- 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); }; }
31
- 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; } }
32
- var EditableHtmlContainer = (0, _styles.withStyles)(function (theme) {
25
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
26
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
28
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // import EditableHtml from '@pie-lib/editable-html-tip-tap';
29
+ // - mathquill error window not defined
30
+ var EditableHtml;
31
+ if (typeof window !== 'undefined') {
32
+ EditableHtml = require('@pie-lib/editable-html-tip-tap')['default'];
33
+ }
34
+ var StyledEditorHolder = (0, _styles.styled)('div')(function (_ref) {
35
+ var theme = _ref.theme;
33
36
  return {
34
- labelContainer: {},
35
- editorHolder: {
36
- marginTop: theme.spacing.unit * 2
37
- }
37
+ marginTop: theme.spacing(2)
38
38
  };
39
- })(function (_ref) {
40
- var label = _ref.label,
41
- classes = _ref.classes,
42
- onChange = _ref.onChange,
43
- value = _ref.value,
44
- className = _ref.className,
45
- imageSupport = _ref.imageSupport,
46
- disableImageAlignmentButtons = _ref.disableImageAlignmentButtons,
47
- disabled = _ref.disabled,
48
- spellCheck = _ref.spellCheck,
49
- nonEmpty = _ref.nonEmpty,
50
- toolbarOpts = _ref.toolbarOpts,
51
- error = _ref.error,
52
- maxImageWidth = _ref.maxImageWidth,
53
- maxImageHeight = _ref.maxImageHeight,
54
- uploadSoundSupport = _ref.uploadSoundSupport,
55
- _ref$mathMlOptions = _ref.mathMlOptions,
56
- mathMlOptions = _ref$mathMlOptions === void 0 ? {} : _ref$mathMlOptions;
57
- var names = (0, _classnames["default"])(classes.labelContainer, className);
39
+ });
40
+ var EditableHtmlContainer = function EditableHtmlContainer(_ref2) {
41
+ var label = _ref2.label,
42
+ onChange = _ref2.onChange,
43
+ value = _ref2.value,
44
+ className = _ref2.className,
45
+ imageSupport = _ref2.imageSupport,
46
+ disableImageAlignmentButtons = _ref2.disableImageAlignmentButtons,
47
+ disabled = _ref2.disabled,
48
+ spellCheck = _ref2.spellCheck,
49
+ nonEmpty = _ref2.nonEmpty,
50
+ pluginOpts = _ref2.pluginOpts,
51
+ toolbarOpts = _ref2.toolbarOpts,
52
+ error = _ref2.error,
53
+ maxImageWidth = _ref2.maxImageWidth,
54
+ maxImageHeight = _ref2.maxImageHeight,
55
+ uploadSoundSupport = _ref2.uploadSoundSupport,
56
+ _ref2$mathMlOptions = _ref2.mathMlOptions,
57
+ mathMlOptions = _ref2$mathMlOptions === void 0 ? {} : _ref2$mathMlOptions;
58
58
  return /*#__PURE__*/_react["default"].createElement(_renderUi.InputContainer, {
59
59
  label: label,
60
- className: names
61
- }, /*#__PURE__*/_react["default"].createElement("div", {
62
- className: classes.editorHolder
63
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
60
+ className: className
61
+ }, /*#__PURE__*/_react["default"].createElement(StyledEditorHolder, null, /*#__PURE__*/_react["default"].createElement(EditableHtml, {
64
62
  markup: value || '',
65
63
  disabled: disabled,
66
64
  spellCheck: spellCheck,
@@ -68,7 +66,7 @@ var EditableHtmlContainer = (0, _styles.withStyles)(function (theme) {
68
66
  onChange: onChange,
69
67
  imageSupport: imageSupport,
70
68
  disableImageAlignmentButtons: disableImageAlignmentButtons,
71
- className: classes.editor,
69
+ pluginProps: pluginOpts || {},
72
70
  toolbarOpts: toolbarOpts,
73
71
  error: error,
74
72
  maxImageWidth: maxImageWidth,
@@ -81,51 +79,54 @@ var EditableHtmlContainer = (0, _styles.withStyles)(function (theme) {
81
79
  }],
82
80
  mathMlOptions: mathMlOptions
83
81
  })));
82
+ };
83
+ var StyledFeedbackContainer = (0, _styles.styled)('div')(function () {
84
+ return {
85
+ position: 'relative'
86
+ };
84
87
  });
85
- var Feedback = (0, _styles.withStyles)(function (theme) {
88
+ var StyledArrowIcon = (0, _styles.styled)(_SubdirectoryArrowRight["default"])(function (_ref3) {
89
+ var theme = _ref3.theme;
86
90
  return {
87
- text: {
88
- width: '100%'
89
- },
90
- feedbackContainer: {
91
- position: 'relative'
92
- },
93
- arrowIcon: {
94
- fill: theme.palette.grey[400],
95
- left: -56,
96
- position: 'absolute',
97
- top: 20
98
- }
91
+ fill: theme.palette.grey[400],
92
+ left: -56,
93
+ position: 'absolute',
94
+ top: 40
99
95
  };
100
- })(function (_ref2) {
101
- var value = _ref2.value,
102
- onChange = _ref2.onChange,
103
- type = _ref2.type,
104
- correct = _ref2.correct,
105
- classes = _ref2.classes,
106
- defaults = _ref2.defaults,
107
- toolbarOpts = _ref2.toolbarOpts,
108
- _ref2$mathMlOptions = _ref2.mathMlOptions,
109
- mathMlOptions = _ref2$mathMlOptions === void 0 ? {} : _ref2$mathMlOptions;
96
+ });
97
+ var StyledTextField = (0, _styles.styled)(_TextField["default"])(function (_ref4) {
98
+ var theme = _ref4.theme;
99
+ return {
100
+ width: '100%',
101
+ marginTop: theme.spacing(2)
102
+ };
103
+ });
104
+ var StyledEditableHtmlContainer = (0, _styles.styled)(EditableHtmlContainer)(function (_ref5) {
105
+ var theme = _ref5.theme;
106
+ return {
107
+ width: '100%',
108
+ marginTop: theme.spacing(2)
109
+ };
110
+ });
111
+ var Feedback = function Feedback(_ref6) {
112
+ var value = _ref6.value,
113
+ onChange = _ref6.onChange,
114
+ type = _ref6.type,
115
+ correct = _ref6.correct,
116
+ defaults = _ref6.defaults,
117
+ toolbarOpts = _ref6.toolbarOpts,
118
+ _ref6$mathMlOptions = _ref6.mathMlOptions,
119
+ mathMlOptions = _ref6$mathMlOptions === void 0 ? {} : _ref6$mathMlOptions;
110
120
  if (!type || type === 'none') {
111
121
  return null;
112
122
  } else if (type === 'default') {
113
- return /*#__PURE__*/_react["default"].createElement("div", {
114
- className: classes.feedbackContainer
115
- }, /*#__PURE__*/_react["default"].createElement(_SubdirectoryArrowRight["default"], {
116
- className: classes.arrowIcon
117
- }), /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
118
- className: classes.text,
123
+ return /*#__PURE__*/_react["default"].createElement(StyledFeedbackContainer, null, /*#__PURE__*/_react["default"].createElement(StyledArrowIcon, null), /*#__PURE__*/_react["default"].createElement(StyledTextField, {
119
124
  label: "Feedback Text",
120
- value: correct ? defaults.correct : defaults.incorrect
125
+ value: correct ? defaults.correct : defaults.incorrect,
126
+ variant: "standard"
121
127
  }));
122
128
  } else {
123
- return /*#__PURE__*/_react["default"].createElement("div", {
124
- className: classes.feedbackContainer
125
- }, /*#__PURE__*/_react["default"].createElement(_SubdirectoryArrowRight["default"], {
126
- className: classes.arrowIcon
127
- }), /*#__PURE__*/_react["default"].createElement(EditableHtmlContainer, {
128
- className: classes.text,
129
+ return /*#__PURE__*/_react["default"].createElement(StyledFeedbackContainer, null, /*#__PURE__*/_react["default"].createElement(StyledArrowIcon, null), /*#__PURE__*/_react["default"].createElement(StyledEditableHtmlContainer, {
129
130
  label: "Feedback Text",
130
131
  value: value,
131
132
  onChange: onChange,
@@ -133,18 +134,86 @@ var Feedback = (0, _styles.withStyles)(function (theme) {
133
134
  mathMlOptions: mathMlOptions
134
135
  }));
135
136
  }
137
+ };
138
+ var StyledIndex = (0, _styles.styled)('span')(function (_ref7) {
139
+ var theme = _ref7.theme;
140
+ return {
141
+ paddingRight: theme.spacing(1),
142
+ paddingTop: theme.spacing(3)
143
+ };
136
144
  });
137
- var ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
138
- (0, _inherits2["default"])(ChoiceConfiguration, _React$Component);
139
- var _super = _createSuper(ChoiceConfiguration);
145
+ var StyledTopRow = (0, _styles.styled)('div')(function () {
146
+ return {
147
+ display: 'flex',
148
+ alignItems: 'center'
149
+ };
150
+ });
151
+ var StyledToggle = (0, _styles.styled)('div')(function (_ref8) {
152
+ var theme = _ref8.theme;
153
+ return {
154
+ flex: '0 1 auto',
155
+ paddingTop: theme.spacing(0.5),
156
+ paddingBottom: 0,
157
+ marginRight: 0,
158
+ marginLeft: theme.spacing(1)
159
+ };
160
+ });
161
+ var StyledFeedback = (0, _styles.styled)('div')(function (_ref9) {
162
+ var theme = _ref9.theme;
163
+ return {
164
+ flex: '0 1 auto',
165
+ paddingTop: theme.spacing(2),
166
+ paddingLeft: 0,
167
+ marginLeft: 0,
168
+ marginRight: theme.spacing(1)
169
+ };
170
+ });
171
+ var StyledFeedbackIcon = (0, _styles.styled)('div')(function () {
172
+ return {
173
+ margin: 0,
174
+ width: 'inherit'
175
+ };
176
+ });
177
+ var StyledDeleteIcon = (0, _styles.styled)('div')(function () {
178
+ return {
179
+ margin: 0,
180
+ width: 'inherit'
181
+ };
182
+ });
183
+ var StyledDelete = (0, _styles.styled)('div')(function (_ref0) {
184
+ var theme = _ref0.theme;
185
+ return {
186
+ flex: '0 1 auto',
187
+ paddingTop: theme.spacing(2),
188
+ paddingLeft: 0,
189
+ marginLeft: 0
190
+ };
191
+ });
192
+ var StyledMiddleColumn = (0, _styles.styled)('div')(function (_ref1) {
193
+ var theme = _ref1.theme;
194
+ return {
195
+ display: 'flex',
196
+ flex: 1,
197
+ flexDirection: 'column',
198
+ marginRight: theme.spacing(1)
199
+ };
200
+ });
201
+ var StyledErrorText = (0, _styles.styled)('div')(function (_ref10) {
202
+ var theme = _ref10.theme;
203
+ return {
204
+ fontSize: theme.typography.fontSize - 2,
205
+ color: theme.palette.error.main
206
+ };
207
+ });
208
+ var ChoiceConfiguration = exports.ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
140
209
  function ChoiceConfiguration() {
141
210
  var _this;
142
211
  (0, _classCallCheck2["default"])(this, ChoiceConfiguration);
143
212
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
144
213
  args[_key] = arguments[_key];
145
214
  }
146
- _this = _super.call.apply(_super, [this].concat(args));
147
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_changeFn", function (key) {
215
+ _this = _callSuper(this, ChoiceConfiguration, [].concat(args));
216
+ (0, _defineProperty2["default"])(_this, "_changeFn", function (key) {
148
217
  return function (update) {
149
218
  var _this$props = _this.props,
150
219
  data = _this$props.data,
@@ -154,8 +223,8 @@ var ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
154
223
  }
155
224
  };
156
225
  });
157
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLabelChange", _this._changeFn('label'));
158
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onCheckedChange", function (event) {
226
+ (0, _defineProperty2["default"])(_this, "onLabelChange", _this._changeFn('label'));
227
+ (0, _defineProperty2["default"])(_this, "onCheckedChange", function (event) {
159
228
  var correct = event.target.checked;
160
229
  var _this$props2 = _this.props,
161
230
  data = _this$props2.data,
@@ -166,7 +235,7 @@ var ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
166
235
  }));
167
236
  }
168
237
  });
169
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onFeedbackValueChange", function (v) {
238
+ (0, _defineProperty2["default"])(_this, "onFeedbackValueChange", function (v) {
170
239
  var _this$props3 = _this.props,
171
240
  data = _this$props3.data,
172
241
  onChange = _this$props3.onChange;
@@ -180,7 +249,7 @@ var ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
180
249
  feedback: fb
181
250
  }));
182
251
  });
183
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onFeedbackTypeChange", function (t) {
252
+ (0, _defineProperty2["default"])(_this, "onFeedbackTypeChange", function (t) {
184
253
  var _this$props4 = _this.props,
185
254
  data = _this$props4.data,
186
255
  onChange = _this$props4.onChange;
@@ -196,12 +265,12 @@ var ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
196
265
  });
197
266
  return _this;
198
267
  }
199
- (0, _createClass2["default"])(ChoiceConfiguration, [{
268
+ (0, _inherits2["default"])(ChoiceConfiguration, _React$Component);
269
+ return (0, _createClass2["default"])(ChoiceConfiguration, [{
200
270
  key: "render",
201
271
  value: function render() {
202
272
  var _this$props5 = this.props,
203
273
  data = _this$props5.data,
204
- classes = _this$props5.classes,
205
274
  mode = _this$props5.mode,
206
275
  onDelete = _this$props5.onDelete,
207
276
  defaultFeedback = _this$props5.defaultFeedback,
@@ -216,31 +285,24 @@ var ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
216
285
  nonEmpty = _this$props5.nonEmpty,
217
286
  allowFeedBack = _this$props5.allowFeedBack,
218
287
  allowDelete = _this$props5.allowDelete,
288
+ pluginOpts = _this$props5.pluginOpts,
219
289
  toolbarOpts = _this$props5.toolbarOpts,
220
290
  error = _this$props5.error,
221
291
  noCorrectAnswerError = _this$props5.noCorrectAnswerError,
222
292
  uploadSoundSupport = _this$props5.uploadSoundSupport,
293
+ maxImageWidth = _this$props5.maxImageWidth,
294
+ maxImageHeight = _this$props5.maxImageHeight,
223
295
  _this$props5$mathMlOp = _this$props5.mathMlOptions,
224
296
  mathMlOptions = _this$props5$mathMlOp === void 0 ? {} : _this$props5$mathMlOp;
225
297
  var InputToggle = mode === 'checkbox' ? _inputs.InputCheckbox : _inputs.InputRadio;
226
- var names = (0, _classnames["default"])(classes.choiceConfiguration, className);
227
- return /*#__PURE__*/_react["default"].createElement("div", {
228
- className: names
229
- }, /*#__PURE__*/_react["default"].createElement("div", {
230
- className: classes.topRow
231
- }, index > 0 && /*#__PURE__*/_react["default"].createElement("span", {
232
- className: classes.index,
298
+ return /*#__PURE__*/_react["default"].createElement(StyledTopRow, null, index > 0 && /*#__PURE__*/_react["default"].createElement(StyledIndex, {
233
299
  type: "title"
234
- }, useLetterOrdering ? String.fromCharCode(96 + index).toUpperCase() : index), /*#__PURE__*/_react["default"].createElement(InputToggle, {
235
- className: classes.toggle,
300
+ }, useLetterOrdering ? String.fromCharCode(96 + index).toUpperCase() : index), /*#__PURE__*/_react["default"].createElement(StyledToggle, null, /*#__PURE__*/_react["default"].createElement(InputToggle, {
236
301
  onChange: this.onCheckedChange,
237
302
  label: !noLabels ? 'Correct' : '',
238
303
  checked: !!data.correct,
239
304
  error: noCorrectAnswerError
240
- }), /*#__PURE__*/_react["default"].createElement("div", {
241
- className: classes.middleColumn
242
- }, /*#__PURE__*/_react["default"].createElement(EditableHtmlContainer, {
243
- className: classes.input,
305
+ })), /*#__PURE__*/_react["default"].createElement(StyledMiddleColumn, null, /*#__PURE__*/_react["default"].createElement(EditableHtmlContainer, {
244
306
  label: !noLabels ? 'Label' : '',
245
307
  value: data.label,
246
308
  onChange: this.onLabelChange,
@@ -249,41 +311,34 @@ var ChoiceConfiguration = /*#__PURE__*/function (_React$Component) {
249
311
  disabled: disabled,
250
312
  spellCheck: spellCheck,
251
313
  nonEmpty: nonEmpty,
314
+ pluginOpts: pluginOpts,
252
315
  toolbarOpts: toolbarOpts,
253
316
  error: error,
254
317
  uploadSoundSupport: uploadSoundSupport,
255
- mathMlOptions: mathMlOptions
256
- }), error && /*#__PURE__*/_react["default"].createElement("div", {
257
- className: classes.errorText
258
- }, error), allowFeedBack && /*#__PURE__*/_react["default"].createElement(Feedback, (0, _extends2["default"])({}, data.feedback, {
318
+ mathMlOptions: mathMlOptions,
319
+ maxImageWidth: maxImageWidth,
320
+ maxImageHeight: maxImageHeight
321
+ }), error && /*#__PURE__*/_react["default"].createElement(StyledErrorText, null, error), allowFeedBack && /*#__PURE__*/_react["default"].createElement(Feedback, (0, _extends2["default"])({}, data.feedback, {
259
322
  correct: data.correct,
260
323
  defaults: defaultFeedback,
261
324
  onChange: this.onFeedbackValueChange,
262
325
  toolbarOpts: toolbarOpts
263
- }))), allowFeedBack && /*#__PURE__*/_react["default"].createElement(_renderUi.InputContainer, {
264
- className: classes.feedback,
326
+ }))), allowFeedBack && /*#__PURE__*/_react["default"].createElement(StyledFeedback, null, /*#__PURE__*/_react["default"].createElement(_renderUi.InputContainer, {
265
327
  label: !noLabels ? 'Feedback' : ''
266
- }, /*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
328
+ }, /*#__PURE__*/_react["default"].createElement(StyledFeedbackIcon, null, /*#__PURE__*/_react["default"].createElement(_feedbackMenu["default"], {
267
329
  onChange: this.onFeedbackTypeChange,
268
- value: data.feedback,
269
- classes: {
270
- icon: classes.feedbackIcon
271
- }
272
- })), allowDelete && /*#__PURE__*/_react["default"].createElement(_renderUi.InputContainer, {
273
- className: classes["delete"],
330
+ value: data.feedback
331
+ })))), allowDelete && /*#__PURE__*/_react["default"].createElement(StyledDelete, null, /*#__PURE__*/_react["default"].createElement(_renderUi.InputContainer, {
274
332
  label: !noLabels ? 'Delete' : ''
275
- }, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
333
+ }, /*#__PURE__*/_react["default"].createElement(StyledDeleteIcon, null, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
276
334
  "aria-label": "delete",
277
- className: classes.deleteIcon,
278
- onClick: onDelete
279
- }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null)))));
335
+ onClick: onDelete,
336
+ size: "large"
337
+ }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null))))));
280
338
  }
281
339
  }]);
282
- return ChoiceConfiguration;
283
340
  }(_react["default"].Component);
284
- exports.ChoiceConfiguration = ChoiceConfiguration;
285
341
  (0, _defineProperty2["default"])(ChoiceConfiguration, "propTypes", {
286
- classes: _propTypes["default"].object.isRequired,
287
342
  noLabels: _propTypes["default"].bool,
288
343
  useLetterOrdering: _propTypes["default"].bool,
289
344
  className: _propTypes["default"].string,
@@ -313,8 +368,11 @@ exports.ChoiceConfiguration = ChoiceConfiguration;
313
368
  allowDelete: _propTypes["default"].bool,
314
369
  noCorrectAnswerError: _propTypes["default"].string,
315
370
  spellCheck: _propTypes["default"].bool,
371
+ pluginOpts: _propTypes["default"].object,
316
372
  toolbarOpts: _propTypes["default"].object,
317
- uploadSoundSupport: _propTypes["default"].object
373
+ uploadSoundSupport: _propTypes["default"].object,
374
+ maxImageWidth: _propTypes["default"].number,
375
+ maxImageHeight: _propTypes["default"].number
318
376
  });
319
377
  (0, _defineProperty2["default"])(ChoiceConfiguration, "defaultProps", {
320
378
  index: -1,
@@ -323,66 +381,5 @@ exports.ChoiceConfiguration = ChoiceConfiguration;
323
381
  allowFeedBack: true,
324
382
  allowDelete: true
325
383
  });
326
- var styles = function styles(theme) {
327
- return {
328
- index: {
329
- paddingRight: theme.spacing.unit,
330
- paddingTop: theme.spacing.unit * 3.5
331
- },
332
- choiceConfiguration: {},
333
- topRow: {
334
- display: 'flex'
335
- },
336
- value: {
337
- flex: '0.5',
338
- paddingRight: theme.spacing.unit
339
- },
340
- editorHolder: {
341
- marginTop: theme.spacing.unit * 2
342
- },
343
- toggle: {
344
- flex: '0 1 auto',
345
- paddingTop: theme.spacing.unit / 2,
346
- paddingBottom: 0,
347
- marginRight: 0,
348
- marginLeft: theme.spacing.unit
349
- },
350
- feedback: {
351
- flex: '0 1 auto',
352
- paddingTop: theme.spacing.unit * 2,
353
- paddingLeft: 0,
354
- marginLeft: 0,
355
- marginRight: theme.spacing.unit
356
- },
357
- feedbackIcon: {
358
- margin: 0,
359
- width: 'inherit'
360
- },
361
- deleteIcon: {
362
- margin: 0,
363
- width: 'inherit'
364
- },
365
- "delete": {
366
- flex: '0 1 auto',
367
- paddingTop: theme.spacing.unit * 2,
368
- paddingLeft: 0,
369
- marginLeft: 0
370
- },
371
- middleColumn: {
372
- display: 'flex',
373
- flex: 1,
374
- flexDirection: 'column',
375
- marginRight: theme.spacing.unit
376
- },
377
- input: {
378
- marginRight: 0
379
- },
380
- errorText: {
381
- fontSize: theme.typography.fontSize - 2,
382
- color: theme.palette.error.main
383
- }
384
- };
385
- };
386
- var _default = (0, _styles.withStyles)(styles)(ChoiceConfiguration);
387
- exports["default"] = _default;
388
- //# sourceMappingURL=index.js.map
384
+ var _default = exports["default"] = ChoiceConfiguration;
385
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfc3R5bGVzIiwiX1RleHRGaWVsZCIsIl9EZWxldGUiLCJfU3ViZGlyZWN0b3J5QXJyb3dSaWdodCIsIl9JY29uQnV0dG9uIiwiX3JlbmRlclVpIiwiX2lucHV0cyIsIl9mZWVkYmFja01lbnUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIkVkaXRhYmxlSHRtbCIsIndpbmRvdyIsIlN0eWxlZEVkaXRvckhvbGRlciIsInN0eWxlZCIsIl9yZWYiLCJ0aGVtZSIsIm1hcmdpblRvcCIsInNwYWNpbmciLCJFZGl0YWJsZUh0bWxDb250YWluZXIiLCJfcmVmMiIsImxhYmVsIiwib25DaGFuZ2UiLCJ2YWx1ZSIsImNsYXNzTmFtZSIsImltYWdlU3VwcG9ydCIsImRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnMiLCJkaXNhYmxlZCIsInNwZWxsQ2hlY2siLCJub25FbXB0eSIsInBsdWdpbk9wdHMiLCJ0b29sYmFyT3B0cyIsImVycm9yIiwibWF4SW1hZ2VXaWR0aCIsIm1heEltYWdlSGVpZ2h0IiwidXBsb2FkU291bmRTdXBwb3J0IiwiX3JlZjIkbWF0aE1sT3B0aW9ucyIsIm1hdGhNbE9wdGlvbnMiLCJjcmVhdGVFbGVtZW50IiwiSW5wdXRDb250YWluZXIiLCJtYXJrdXAiLCJwbHVnaW5Qcm9wcyIsImxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzIiwibGFuZ3VhZ2UiLCJTdHlsZWRGZWVkYmFja0NvbnRhaW5lciIsInBvc2l0aW9uIiwiU3R5bGVkQXJyb3dJY29uIiwiQXJyb3dSaWdodCIsIl9yZWYzIiwiZmlsbCIsInBhbGV0dGUiLCJncmV5IiwibGVmdCIsInRvcCIsIlN0eWxlZFRleHRGaWVsZCIsIlRleHRGaWVsZCIsIl9yZWY0Iiwid2lkdGgiLCJTdHlsZWRFZGl0YWJsZUh0bWxDb250YWluZXIiLCJfcmVmNSIsIkZlZWRiYWNrIiwiX3JlZjYiLCJ0eXBlIiwiY29ycmVjdCIsImRlZmF1bHRzIiwiX3JlZjYkbWF0aE1sT3B0aW9ucyIsImluY29ycmVjdCIsInZhcmlhbnQiLCJTdHlsZWRJbmRleCIsIl9yZWY3IiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ1RvcCIsIlN0eWxlZFRvcFJvdyIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiU3R5bGVkVG9nZ2xlIiwiX3JlZjgiLCJmbGV4IiwicGFkZGluZ0JvdHRvbSIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsIlN0eWxlZEZlZWRiYWNrIiwiX3JlZjkiLCJwYWRkaW5nTGVmdCIsIlN0eWxlZEZlZWRiYWNrSWNvbiIsIm1hcmdpbiIsIlN0eWxlZERlbGV0ZUljb24iLCJTdHlsZWREZWxldGUiLCJfcmVmMCIsIlN0eWxlZE1pZGRsZUNvbHVtbiIsIl9yZWYxIiwiZmxleERpcmVjdGlvbiIsIlN0eWxlZEVycm9yVGV4dCIsIl9yZWYxMCIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsImNvbG9yIiwibWFpbiIsIkNob2ljZUNvbmZpZ3VyYXRpb24iLCJleHBvcnRzIiwiX1JlYWN0JENvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0Iiwia2V5IiwidXBkYXRlIiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsImRhdGEiLCJfY2hhbmdlRm4iLCJldmVudCIsInRhcmdldCIsImNoZWNrZWQiLCJfdGhpcyRwcm9wczIiLCJ2IiwiX3RoaXMkcHJvcHMzIiwiZmVlZGJhY2siLCJmYiIsIl90aGlzJHByb3BzNCIsInVuZGVmaW5lZCIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwicmVuZGVyIiwiX3RoaXMkcHJvcHM1IiwibW9kZSIsIm9uRGVsZXRlIiwiZGVmYXVsdEZlZWRiYWNrIiwiaW5kZXgiLCJub0xhYmVscyIsInVzZUxldHRlck9yZGVyaW5nIiwiYWxsb3dGZWVkQmFjayIsImFsbG93RGVsZXRlIiwibm9Db3JyZWN0QW5zd2VyRXJyb3IiLCJfdGhpcyRwcm9wczUkbWF0aE1sT3AiLCJJbnB1dFRvZ2dsZSIsIklucHV0Q2hlY2tib3giLCJJbnB1dFJhZGlvIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwidG9VcHBlckNhc2UiLCJvbkNoZWNrZWRDaGFuZ2UiLCJvbkxhYmVsQ2hhbmdlIiwiX2V4dGVuZHMyIiwib25GZWVkYmFja1ZhbHVlQ2hhbmdlIiwib25GZWVkYmFja1R5cGVDaGFuZ2UiLCJvbkNsaWNrIiwic2l6ZSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiYm9vbCIsInN0cmluZyIsIm9uZU9mIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsInNoYXBlIiwiZnVuYyIsIm51bWJlciIsImFkZCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nob2ljZS1jb25maWd1cmF0aW9uL2luZGV4LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCBUZXh0RmllbGQgZnJvbSAnQG11aS9tYXRlcmlhbC9UZXh0RmllbGQnO1xuaW1wb3J0IEFjdGlvbkRlbGV0ZSBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0RlbGV0ZSc7XG5pbXBvcnQgQXJyb3dSaWdodCBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL1N1YmRpcmVjdG9yeUFycm93UmlnaHQnO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSAnQG11aS9tYXRlcmlhbC9JY29uQnV0dG9uJztcbmltcG9ydCB7IElucHV0Q29udGFpbmVyIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbi8vIGltcG9ydCBFZGl0YWJsZUh0bWwgZnJvbSAnQHBpZS1saWIvZWRpdGFibGUtaHRtbC10aXAtdGFwJztcbmltcG9ydCB7IElucHV0Q2hlY2tib3gsIElucHV0UmFkaW8gfSBmcm9tICcuLi9pbnB1dHMnO1xuaW1wb3J0IEZlZWRiYWNrTWVudSBmcm9tICcuL2ZlZWRiYWNrLW1lbnUnO1xuXG4vLyAtIG1hdGhxdWlsbCBlcnJvciB3aW5kb3cgbm90IGRlZmluZWRcbmxldCBFZGl0YWJsZUh0bWw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgRWRpdGFibGVIdG1sID0gcmVxdWlyZSgnQHBpZS1saWIvZWRpdGFibGUtaHRtbC10aXAtdGFwJylbJ2RlZmF1bHQnXTtcbn1cblxuY29uc3QgU3R5bGVkRWRpdG9ySG9sZGVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG59KSk7XG5cbmNvbnN0IEVkaXRhYmxlSHRtbENvbnRhaW5lciA9ICh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgdmFsdWUsXG4gIGNsYXNzTmFtZSxcbiAgaW1hZ2VTdXBwb3J0LFxuICBkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zLFxuICBkaXNhYmxlZCxcbiAgc3BlbGxDaGVjayxcbiAgbm9uRW1wdHksXG4gIHBsdWdpbk9wdHMsXG4gIHRvb2xiYXJPcHRzLFxuICBlcnJvcixcbiAgbWF4SW1hZ2VXaWR0aCxcbiAgbWF4SW1hZ2VIZWlnaHQsXG4gIHVwbG9hZFNvdW5kU3VwcG9ydCxcbiAgbWF0aE1sT3B0aW9ucyA9IHt9LFxufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxJbnB1dENvbnRhaW5lciBsYWJlbD17bGFiZWx9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIDxTdHlsZWRFZGl0b3JIb2xkZXI+XG4gICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICBtYXJrdXA9e3ZhbHVlIHx8ICcnfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrfVxuICAgICAgICAgIG5vbkVtcHR5PXtub25FbXB0eX1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgaW1hZ2VTdXBwb3J0PXtpbWFnZVN1cHBvcnR9XG4gICAgICAgICAgZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9ucz17ZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9uc31cbiAgICAgICAgICBwbHVnaW5Qcm9wcz17cGx1Z2luT3B0cyB8fCB7fX1cbiAgICAgICAgICB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9XG4gICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgIG1heEltYWdlV2lkdGg9e21heEltYWdlV2lkdGh9XG4gICAgICAgICAgbWF4SW1hZ2VIZWlnaHQ9e21heEltYWdlSGVpZ2h0fVxuICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgIGxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzPXtbeyBsYW5ndWFnZTogJ3NwYW5pc2gnIH0sIHsgbGFuZ3VhZ2U6ICdzcGVjaWFsJyB9XX1cbiAgICAgICAgICBtYXRoTWxPcHRpb25zPXttYXRoTWxPcHRpb25zfVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRFZGl0b3JIb2xkZXI+XG4gICAgPC9JbnB1dENvbnRhaW5lcj5cbiAgKTtcbn07XG5cbmNvbnN0IFN0eWxlZEZlZWRiYWNrQ29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSgoKSA9PiAoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbn0pKTtcblxuY29uc3QgU3R5bGVkQXJyb3dJY29uID0gc3R5bGVkKEFycm93UmlnaHQpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGZpbGw6IHRoZW1lLnBhbGV0dGUuZ3JleVs0MDBdLFxuICBsZWZ0OiAtNTYsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0b3A6IDQwLFxufSkpO1xuXG5jb25zdCBTdHlsZWRUZXh0RmllbGQgPSBzdHlsZWQoVGV4dEZpZWxkKSgoeyB0aGVtZSB9KSA9PiAoe1xuICB3aWR0aDogJzEwMCUnLFxuICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG59KSk7XG5cbmNvbnN0IFN0eWxlZEVkaXRhYmxlSHRtbENvbnRhaW5lciA9IHN0eWxlZChFZGl0YWJsZUh0bWxDb250YWluZXIpKCh7IHRoZW1lIH0pID0+ICh7XG4gIHdpZHRoOiAnMTAwJScsXG4gIG1hcmdpblRvcDogdGhlbWUuc3BhY2luZygyKSxcbn0pKTtcblxuY29uc3QgRmVlZGJhY2sgPSAoeyB2YWx1ZSwgb25DaGFuZ2UsIHR5cGUsIGNvcnJlY3QsIGRlZmF1bHRzLCB0b29sYmFyT3B0cywgbWF0aE1sT3B0aW9ucyA9IHt9IH0pID0+IHtcbiAgaWYgKCF0eXBlIHx8IHR5cGUgPT09ICdub25lJykge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkRmVlZGJhY2tDb250YWluZXI+XG4gICAgICAgIDxTdHlsZWRBcnJvd0ljb24gLz5cbiAgICAgICAgPFN0eWxlZFRleHRGaWVsZFxuICAgICAgICAgIGxhYmVsPVwiRmVlZGJhY2sgVGV4dFwiXG4gICAgICAgICAgdmFsdWU9e2NvcnJlY3QgPyBkZWZhdWx0cy5jb3JyZWN0IDogZGVmYXVsdHMuaW5jb3JyZWN0fVxuICAgICAgICAgIHZhcmlhbnQ9XCJzdGFuZGFyZFwiXG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZEZlZWRiYWNrQ29udGFpbmVyPlxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRGZWVkYmFja0NvbnRhaW5lcj5cbiAgICAgICAgPFN0eWxlZEFycm93SWNvbiAvPlxuICAgICAgICA8U3R5bGVkRWRpdGFibGVIdG1sQ29udGFpbmVyXG4gICAgICAgICAgbGFiZWw9XCJGZWVkYmFjayBUZXh0XCJcbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICBtYXRoTWxPcHRpb25zPXttYXRoTWxPcHRpb25zfVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRGZWVkYmFja0NvbnRhaW5lcj5cbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBTdHlsZWRJbmRleCA9IHN0eWxlZCgnc3BhbicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIHBhZGRpbmdSaWdodDogdGhlbWUuc3BhY2luZygxKSxcbiAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygzKSxcbn0pKTtcblxuY29uc3QgU3R5bGVkVG9wUm93ID0gc3R5bGVkKCdkaXYnKSgoKSA9PiAoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxufSkpO1xuXG5jb25zdCBTdHlsZWRUb2dnbGUgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGZsZXg6ICcwIDEgYXV0bycsXG4gIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcoMC41KSxcbiAgcGFkZGluZ0JvdHRvbTogMCxcbiAgbWFyZ2luUmlnaHQ6IDAsXG4gIG1hcmdpbkxlZnQ6IHRoZW1lLnNwYWNpbmcoMSksXG59KSk7XG5cbmNvbnN0IFN0eWxlZEZlZWRiYWNrID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBmbGV4OiAnMCAxIGF1dG8nLFxuICBwYWRkaW5nVG9wOiB0aGVtZS5zcGFjaW5nKDIpLFxuICBwYWRkaW5nTGVmdDogMCxcbiAgbWFyZ2luTGVmdDogMCxcbiAgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMSksXG59KSk7XG5cbmNvbnN0IFN0eWxlZEZlZWRiYWNrSWNvbiA9IHN0eWxlZCgnZGl2JykoKCkgPT4gKHtcbiAgbWFyZ2luOiAwLFxuICB3aWR0aDogJ2luaGVyaXQnLFxufSkpO1xuXG5jb25zdCBTdHlsZWREZWxldGVJY29uID0gc3R5bGVkKCdkaXYnKSgoKSA9PiAoe1xuICBtYXJnaW46IDAsXG4gIHdpZHRoOiAnaW5oZXJpdCcsXG59KSk7XG5cbmNvbnN0IFN0eWxlZERlbGV0ZSA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgZmxleDogJzAgMSBhdXRvJyxcbiAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygyKSxcbiAgcGFkZGluZ0xlZnQ6IDAsXG4gIG1hcmdpbkxlZnQ6IDAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZE1pZGRsZUNvbHVtbiA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4OiAxLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMSksXG59KSk7XG5cbmNvbnN0IFN0eWxlZEVycm9yVGV4dCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFNpemUgLSAyLFxuICBjb2xvcjogdGhlbWUucGFsZXR0ZS5lcnJvci5tYWluLFxufSkpO1xuXG5leHBvcnQgY2xhc3MgQ2hvaWNlQ29uZmlndXJhdGlvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbm9MYWJlbHM6IFByb3BUeXBlcy5ib29sLFxuICAgIHVzZUxldHRlck9yZGVyaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFsnY2hlY2tib3gnLCAncmFkaW8nXSksXG4gICAgZGVmYXVsdEZlZWRiYWNrOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG5vbkVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBjb3JyZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGZlZWRiYWNrOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIG9uRGVsZXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgaW1hZ2VTdXBwb3J0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgZGVsZXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIH0pLFxuICAgIGRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnM6IFByb3BUeXBlcy5ib29sLFxuICAgIGFsbG93RmVlZEJhY2s6IFByb3BUeXBlcy5ib29sLFxuICAgIGFsbG93RGVsZXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBub0NvcnJlY3RBbnN3ZXJFcnJvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzcGVsbENoZWNrOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwbHVnaW5PcHRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvb2xiYXJPcHRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHVwbG9hZFNvdW5kU3VwcG9ydDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtYXhJbWFnZVdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1heEltYWdlSGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgaW5kZXg6IC0xLFxuICAgIG5vTGFiZWxzOiBmYWxzZSxcbiAgICB1c2VMZXR0ZXJPcmRlcmluZzogZmFsc2UsXG4gICAgYWxsb3dGZWVkQmFjazogdHJ1ZSxcbiAgICBhbGxvd0RlbGV0ZTogdHJ1ZSxcbiAgfTtcblxuICBfY2hhbmdlRm4gPSAoa2V5KSA9PiAodXBkYXRlKSA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoeyAuLi5kYXRhLCBba2V5XTogdXBkYXRlIH0pO1xuICAgIH1cbiAgfTtcblxuICBvbkxhYmVsQ2hhbmdlID0gdGhpcy5fY2hhbmdlRm4oJ2xhYmVsJyk7XG5cbiAgb25DaGVja2VkQ2hhbmdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgY29ycmVjdCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgIGNvbnN0IHsgZGF0YSwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKHsgLi4uZGF0YSwgY29ycmVjdCB9KTtcbiAgICB9XG4gIH07XG5cbiAgb25GZWVkYmFja1ZhbHVlQ2hhbmdlID0gKHYpID0+IHtcbiAgICBjb25zdCB7IGRhdGEsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKGRhdGEuZmVlZGJhY2sudHlwZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmYiA9IHsgLi4uZGF0YS5mZWVkYmFjaywgdmFsdWU6IHYgfTtcblxuICAgIGlmIChvbkNoYW5nZSkgb25DaGFuZ2UoeyAuLi5kYXRhLCBmZWVkYmFjazogZmIgfSk7XG4gIH07XG5cbiAgb25GZWVkYmFja1R5cGVDaGFuZ2UgPSAodCkgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZmIgPSB7IC4uLmRhdGEuZmVlZGJhY2ssIHR5cGU6IHQgfTtcblxuICAgIGlmIChmYi50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgZmIudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKG9uQ2hhbmdlKSBvbkNoYW5nZSh7IC4uLmRhdGEsIGZlZWRiYWNrOiBmYiB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIG1vZGUsXG4gICAgICBvbkRlbGV0ZSxcbiAgICAgIGRlZmF1bHRGZWVkYmFjayxcbiAgICAgIGluZGV4LFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgbm9MYWJlbHMsXG4gICAgICB1c2VMZXR0ZXJPcmRlcmluZyxcbiAgICAgIGltYWdlU3VwcG9ydCxcbiAgICAgIGRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnMsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNwZWxsQ2hlY2ssXG4gICAgICBub25FbXB0eSxcbiAgICAgIGFsbG93RmVlZEJhY2ssXG4gICAgICBhbGxvd0RlbGV0ZSxcbiAgICAgIHBsdWdpbk9wdHMsXG4gICAgICB0b29sYmFyT3B0cyxcbiAgICAgIGVycm9yLFxuICAgICAgbm9Db3JyZWN0QW5zd2VyRXJyb3IsXG4gICAgICB1cGxvYWRTb3VuZFN1cHBvcnQsXG4gICAgICBtYXhJbWFnZVdpZHRoLFxuICAgICAgbWF4SW1hZ2VIZWlnaHQsXG4gICAgICBtYXRoTWxPcHRpb25zID0ge30sXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBJbnB1dFRvZ2dsZSA9IG1vZGUgPT09ICdjaGVja2JveCcgPyBJbnB1dENoZWNrYm94IDogSW5wdXRSYWRpbztcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkVG9wUm93PlxuICAgICAgICB7aW5kZXggPiAwICYmIChcbiAgICAgICAgICA8U3R5bGVkSW5kZXggdHlwZT1cInRpdGxlXCI+XG4gICAgICAgICAgICB7dXNlTGV0dGVyT3JkZXJpbmcgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKDk2ICsgaW5kZXgpLnRvVXBwZXJDYXNlKCkgOiBpbmRleH1cbiAgICAgICAgICA8L1N0eWxlZEluZGV4PlxuICAgICAgICApfVxuXG4gICAgICAgIDxTdHlsZWRUb2dnbGU+XG4gICAgICAgICAgPElucHV0VG9nZ2xlXG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoZWNrZWRDaGFuZ2V9XG4gICAgICAgICAgICBsYWJlbD17IW5vTGFiZWxzID8gJ0NvcnJlY3QnIDogJyd9XG4gICAgICAgICAgICBjaGVja2VkPXshIWRhdGEuY29ycmVjdH1cbiAgICAgICAgICAgIGVycm9yPXtub0NvcnJlY3RBbnN3ZXJFcnJvcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZFRvZ2dsZT5cblxuICAgICAgICA8U3R5bGVkTWlkZGxlQ29sdW1uPlxuICAgICAgICAgIDxFZGl0YWJsZUh0bWxDb250YWluZXJcbiAgICAgICAgICAgIGxhYmVsPXshbm9MYWJlbHMgPyAnTGFiZWwnIDogJyd9XG4gICAgICAgICAgICB2YWx1ZT17ZGF0YS5sYWJlbH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uTGFiZWxDaGFuZ2V9XG4gICAgICAgICAgICBpbWFnZVN1cHBvcnQ9e2ltYWdlU3VwcG9ydH1cbiAgICAgICAgICAgIGRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnM9e2Rpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnN9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrfVxuICAgICAgICAgICAgbm9uRW1wdHk9e25vbkVtcHR5fVxuICAgICAgICAgICAgcGx1Z2luT3B0cz17cGx1Z2luT3B0c31cbiAgICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgICAgbWF0aE1sT3B0aW9ucz17bWF0aE1sT3B0aW9uc31cbiAgICAgICAgICAgIG1heEltYWdlV2lkdGg9e21heEltYWdlV2lkdGh9XG4gICAgICAgICAgICBtYXhJbWFnZUhlaWdodD17bWF4SW1hZ2VIZWlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZXJyb3IgJiYgPFN0eWxlZEVycm9yVGV4dD57ZXJyb3J9PC9TdHlsZWRFcnJvclRleHQ+fVxuXG4gICAgICAgICAge2FsbG93RmVlZEJhY2sgJiYgKFxuICAgICAgICAgICAgPEZlZWRiYWNrXG4gICAgICAgICAgICAgIHsuLi5kYXRhLmZlZWRiYWNrfVxuICAgICAgICAgICAgICBjb3JyZWN0PXtkYXRhLmNvcnJlY3R9XG4gICAgICAgICAgICAgIGRlZmF1bHRzPXtkZWZhdWx0RmVlZGJhY2t9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uRmVlZGJhY2tWYWx1ZUNoYW5nZX1cbiAgICAgICAgICAgICAgdG9vbGJhck9wdHM9e3Rvb2xiYXJPcHRzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1N0eWxlZE1pZGRsZUNvbHVtbj5cblxuICAgICAgICB7YWxsb3dGZWVkQmFjayAmJiAoXG4gICAgICAgICAgPFN0eWxlZEZlZWRiYWNrPlxuICAgICAgICAgICAgPElucHV0Q29udGFpbmVyIGxhYmVsPXshbm9MYWJlbHMgPyAnRmVlZGJhY2snIDogJyd9PlxuICAgICAgICAgICAgICA8U3R5bGVkRmVlZGJhY2tJY29uPlxuICAgICAgICAgICAgICAgIDxGZWVkYmFja01lbnUgb25DaGFuZ2U9e3RoaXMub25GZWVkYmFja1R5cGVDaGFuZ2V9IHZhbHVlPXtkYXRhLmZlZWRiYWNrfSAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZEZlZWRiYWNrSWNvbj5cbiAgICAgICAgICAgIDwvSW5wdXRDb250YWluZXI+XG4gICAgICAgICAgPC9TdHlsZWRGZWVkYmFjaz5cbiAgICAgICAgKX1cblxuICAgICAgICB7YWxsb3dEZWxldGUgJiYgKFxuICAgICAgICAgIDxTdHlsZWREZWxldGU+XG4gICAgICAgICAgICA8SW5wdXRDb250YWluZXIgbGFiZWw9eyFub0xhYmVscyA/ICdEZWxldGUnIDogJyd9PlxuICAgICAgICAgICAgICA8U3R5bGVkRGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICA8SWNvbkJ1dHRvbiBhcmlhLWxhYmVsPVwiZGVsZXRlXCIgb25DbGljaz17b25EZWxldGV9IHNpemU9XCJsYXJnZVwiPlxuICAgICAgICAgICAgICAgICAgPEFjdGlvbkRlbGV0ZSAvPlxuICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9TdHlsZWREZWxldGVJY29uPlxuICAgICAgICAgICAgPC9JbnB1dENvbnRhaW5lcj5cbiAgICAgICAgICA8L1N0eWxlZERlbGV0ZT5cbiAgICAgICAgKX1cbiAgICAgIDwvU3R5bGVkVG9wUm93PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hvaWNlQ29uZmlndXJhdGlvbjtcbiJdLCJtYXBw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