@pie-lib/charting 5.36.3-next.2 → 5.36.4-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 (143) hide show
  1. package/CHANGELOG.md +17 -96
  2. package/lib/__tests__/axes.test.js +129 -0
  3. package/lib/__tests__/chart-setup.test.js +57 -0
  4. package/lib/__tests__/chart-type.test.js +25 -0
  5. package/lib/__tests__/chart.test.js +103 -0
  6. package/lib/__tests__/grid.test.js +39 -0
  7. package/lib/__tests__/mark-label.test.js +46 -0
  8. package/lib/__tests__/utils.js +56 -0
  9. package/lib/__tests__/utils.test.js +186 -0
  10. package/lib/actions-button.js +61 -91
  11. package/lib/actions-button.js.map +1 -1
  12. package/lib/axes.js +163 -239
  13. package/lib/axes.js.map +1 -1
  14. package/lib/bars/__tests__/bar.test.js +53 -0
  15. package/lib/bars/__tests__/histogram.test.js +53 -0
  16. package/lib/bars/__tests__/utils.js +50 -0
  17. package/lib/bars/bar.js +14 -42
  18. package/lib/bars/bar.js.map +1 -1
  19. package/lib/bars/common/__tests__/bars.test.js +76 -0
  20. package/lib/bars/common/__tests__/utils.js +50 -0
  21. package/lib/bars/common/bars.js +62 -138
  22. package/lib/bars/common/bars.js.map +1 -1
  23. package/lib/bars/common/correct-check-icon.js +6 -7
  24. package/lib/bars/common/correct-check-icon.js.map +1 -1
  25. package/lib/bars/histogram.js +14 -42
  26. package/lib/bars/histogram.js.map +1 -1
  27. package/lib/chart-setup.js +120 -196
  28. package/lib/chart-setup.js.map +1 -1
  29. package/lib/chart-type.js +53 -44
  30. package/lib/chart-type.js.map +1 -1
  31. package/lib/chart-types.js +2 -11
  32. package/lib/chart-types.js.map +1 -1
  33. package/lib/chart.js +74 -152
  34. package/lib/chart.js.map +1 -1
  35. package/lib/common/__tests__/drag-handle.test.js +74 -0
  36. package/lib/common/__tests__/utils.js +50 -0
  37. package/lib/common/correctness-indicators.js +110 -53
  38. package/lib/common/correctness-indicators.js.map +1 -1
  39. package/lib/common/drag-handle.js +66 -109
  40. package/lib/common/drag-handle.js.map +1 -1
  41. package/lib/common/drag-icon.js +13 -13
  42. package/lib/common/drag-icon.js.map +1 -1
  43. package/lib/common/styles.js +7 -25
  44. package/lib/common/styles.js.map +1 -1
  45. package/lib/grid.js +44 -84
  46. package/lib/grid.js.map +1 -1
  47. package/lib/index.js +1 -7
  48. package/lib/index.js.map +1 -1
  49. package/lib/key-legend.js +64 -88
  50. package/lib/key-legend.js.map +1 -1
  51. package/lib/line/__tests__/line-cross.test.js +47 -0
  52. package/lib/line/__tests__/line-dot.test.js +47 -0
  53. package/lib/line/__tests__/utils.js +56 -0
  54. package/lib/line/common/__tests__/drag-handle.test.js +74 -0
  55. package/lib/line/common/__tests__/line.test.js +92 -0
  56. package/lib/line/common/__tests__/utils.js +50 -0
  57. package/lib/line/common/drag-handle.js +73 -101
  58. package/lib/line/common/drag-handle.js.map +1 -1
  59. package/lib/line/common/line.js +51 -97
  60. package/lib/line/common/line.js.map +1 -1
  61. package/lib/line/line-cross.js +80 -90
  62. package/lib/line/line-cross.js.map +1 -1
  63. package/lib/line/line-dot.js +59 -77
  64. package/lib/line/line-dot.js.map +1 -1
  65. package/lib/mark-label.js +85 -120
  66. package/lib/mark-label.js.map +1 -1
  67. package/lib/plot/__tests__/dot.test.js +53 -0
  68. package/lib/plot/__tests__/line.test.js +53 -0
  69. package/lib/plot/__tests__/utils.js +50 -0
  70. package/lib/plot/common/__tests__/plot.test.js +79 -0
  71. package/lib/plot/common/__tests__/utils.js +50 -0
  72. package/lib/plot/common/plot.js +91 -149
  73. package/lib/plot/common/plot.js.map +1 -1
  74. package/lib/plot/dot.js +33 -59
  75. package/lib/plot/dot.js.map +1 -1
  76. package/lib/plot/line.js +40 -65
  77. package/lib/plot/line.js.map +1 -1
  78. package/lib/tool-menu.js +48 -84
  79. package/lib/tool-menu.js.map +1 -1
  80. package/lib/utils.js +32 -87
  81. package/lib/utils.js.map +1 -1
  82. package/package.json +22 -24
  83. package/src/__tests__/axes.test.jsx +85 -100
  84. package/src/__tests__/chart-type.test.jsx +5 -11
  85. package/src/__tests__/chart.test.jsx +41 -50
  86. package/src/__tests__/grid.test.jsx +23 -11
  87. package/src/__tests__/mark-label.test.jsx +13 -11
  88. package/src/__tests__/utils.js +8 -2
  89. package/src/actions-button.jsx +44 -39
  90. package/src/axes.jsx +67 -81
  91. package/src/bars/__tests__/bar.test.jsx +19 -11
  92. package/src/bars/__tests__/histogram.test.jsx +19 -12
  93. package/src/bars/common/__tests__/bars.test.jsx +23 -24
  94. package/src/bars/common/bars.jsx +42 -69
  95. package/src/bars/common/correct-check-icon.jsx +5 -0
  96. package/src/chart-setup.jsx +75 -88
  97. package/src/chart-type.js +45 -22
  98. package/src/chart.jsx +19 -34
  99. package/src/common/__tests__/drag-handle.test.jsx +16 -45
  100. package/src/common/correctness-indicators.jsx +91 -13
  101. package/src/common/drag-handle.jsx +44 -64
  102. package/src/common/drag-icon.jsx +9 -2
  103. package/src/common/styles.js +1 -1
  104. package/src/grid.jsx +10 -14
  105. package/src/key-legend.jsx +62 -60
  106. package/src/line/__tests__/line-cross.test.jsx +16 -13
  107. package/src/line/__tests__/line-dot.test.jsx +16 -13
  108. package/src/line/__tests__/utils.js +8 -2
  109. package/src/line/common/__tests__/drag-handle.test.jsx +20 -45
  110. package/src/line/common/__tests__/line.test.jsx +27 -30
  111. package/src/line/common/drag-handle.jsx +61 -55
  112. package/src/line/common/line.jsx +21 -11
  113. package/src/line/line-cross.js +39 -14
  114. package/src/line/line-dot.js +27 -32
  115. package/src/mark-label.jsx +51 -47
  116. package/src/plot/__tests__/dot.test.jsx +19 -12
  117. package/src/plot/__tests__/line.test.jsx +19 -12
  118. package/src/plot/common/__tests__/plot.test.jsx +23 -24
  119. package/src/plot/common/plot.jsx +29 -24
  120. package/src/plot/dot.js +11 -4
  121. package/src/plot/line.js +16 -8
  122. package/src/tool-menu.jsx +26 -30
  123. package/src/utils.js +13 -9
  124. package/esm/index.css +0 -847
  125. package/esm/index.js +0 -231130
  126. package/esm/index.js.map +0 -1
  127. package/esm/package.json +0 -3
  128. package/src/__tests__/__snapshots__/axes.test.jsx.snap +0 -569
  129. package/src/__tests__/__snapshots__/chart-type.test.jsx.snap +0 -14
  130. package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -595
  131. package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -72
  132. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -73
  133. package/src/bars/__tests__/__snapshots__/bar.test.jsx.snap +0 -43
  134. package/src/bars/__tests__/__snapshots__/histogram.test.jsx.snap +0 -45
  135. package/src/bars/common/__tests__/__snapshots__/bars.test.jsx.snap +0 -110
  136. package/src/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -48
  137. package/src/line/__tests__/__snapshots__/line-cross.test.jsx.snap +0 -45
  138. package/src/line/__tests__/__snapshots__/line-dot.test.jsx.snap +0 -45
  139. package/src/line/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -49
  140. package/src/line/common/__tests__/__snapshots__/line.test.jsx.snap +0 -143
  141. package/src/plot/__tests__/__snapshots__/dot.test.jsx.snap +0 -45
  142. package/src/plot/__tests__/__snapshots__/line.test.jsx.snap +0 -45
  143. package/src/plot/common/__tests__/__snapshots__/plot.test.jsx.snap +0 -97
@@ -1,116 +1,141 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.resetValues = exports["default"] = void 0;
11
-
12
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
-
16
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
12
  var _react = _interopRequireWildcard(require("react"));
19
-
20
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
21
-
22
14
  var _renderUi = require("@pie-lib/render-ui");
23
-
24
- var _styles = require("@material-ui/core/styles");
25
-
26
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
27
-
15
+ var _styles = require("@mui/material/styles");
16
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
28
17
  var _chartType = _interopRequireDefault(require("./chart-type"));
29
-
30
18
  var _configUi = require("@pie-lib/config-ui");
31
-
32
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
-
34
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
-
36
- 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; }
37
-
38
- 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; }
39
-
40
- var resetValues = function resetValues(data, updateModel, range, onChange, model) {
19
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
+ 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; }
21
+ 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; }
22
+ var resetValues = exports.resetValues = function resetValues(data, updateModel, range, onChange, model) {
41
23
  (data || []).forEach(function (d) {
42
24
  var d_value_scaled = Math.round(d.value * 10);
43
25
  var range_step_scaled = Math.round(range.step * 10);
44
26
  var remainder_scaled = d_value_scaled % range_step_scaled;
45
27
  var remainder = remainder_scaled / 10;
46
-
47
28
  if (d.value > range.max || remainder !== 0) {
48
29
  d.value = 0;
49
30
  }
50
31
  });
51
-
52
32
  if (updateModel) {
53
33
  onChange(_objectSpread(_objectSpread({}, model), {}, {
54
34
  data: data
55
35
  }));
56
36
  }
57
37
  };
58
-
59
- exports.resetValues = resetValues;
60
-
38
+ var StyledWrapper = (0, _styles.styled)('div')(function () {
39
+ return {
40
+ width: '450px'
41
+ };
42
+ });
43
+ var StyledContent = (0, _styles.styled)('div')(function (_ref) {
44
+ var theme = _ref.theme;
45
+ return {
46
+ display: 'flex',
47
+ flexDirection: 'column',
48
+ width: '100%',
49
+ marginTop: theme.spacing(3)
50
+ };
51
+ });
52
+ var StyledColumnView = (0, _styles.styled)('div')(function () {
53
+ return {
54
+ display: 'flex',
55
+ flexDirection: 'column',
56
+ alignItems: 'center'
57
+ };
58
+ });
59
+ var StyledRowView = (0, _styles.styled)('div')(function () {
60
+ return {
61
+ display: 'flex',
62
+ justifyContent: 'space-around',
63
+ alignItems: 'center'
64
+ };
65
+ });
66
+ var StyledTextField = (0, _styles.styled)(_configUi.NumberTextFieldCustom)(function (_ref2) {
67
+ var theme = _ref2.theme;
68
+ return {
69
+ width: '130px',
70
+ margin: "".concat(theme.spacing(1), " ").concat(theme.spacing(0.5))
71
+ };
72
+ });
73
+ var StyledMediumTextField = (0, _styles.styled)(_configUi.NumberTextFieldCustom)(function (_ref3) {
74
+ var theme = _ref3.theme;
75
+ return {
76
+ width: '160px',
77
+ margin: "".concat(theme.spacing(1), " ").concat(theme.spacing(0.5))
78
+ };
79
+ });
80
+ var StyledDimensions = (0, _styles.styled)('div')(function (_ref4) {
81
+ var theme = _ref4.theme;
82
+ return {
83
+ display: 'flex',
84
+ justifyContent: 'space-between',
85
+ alignItems: 'center',
86
+ margin: "".concat(theme.spacing(3), " 0")
87
+ };
88
+ });
89
+ var StyledDisabled = (0, _styles.styled)(_Typography["default"])(function () {
90
+ return {
91
+ color: _renderUi.color.disabled()
92
+ };
93
+ });
61
94
  var ConfigureChartPanel = function ConfigureChartPanel(props) {
62
- var classes = props.classes,
63
- model = props.model,
64
- onChange = props.onChange,
65
- chartDimensions = props.chartDimensions,
66
- _props$gridValues = props.gridValues,
67
- gridValues = _props$gridValues === void 0 ? {} : _props$gridValues,
68
- _props$labelValues = props.labelValues,
69
- labelValues = _props$labelValues === void 0 ? {} : _props$labelValues,
70
- _props$studentNewCate = props.studentNewCategoryDefaultLabel,
71
- studentNewCategoryDefaultLabel = _props$studentNewCate === void 0 ? {} : _props$studentNewCate,
72
- _props$availableChart = props.availableChartTypes,
73
- availableChartTypes = _props$availableChart === void 0 ? {} : _props$availableChart,
74
- chartTypeLabel = props.chartTypeLabel;
75
-
95
+ var model = props.model,
96
+ onChange = props.onChange,
97
+ chartDimensions = props.chartDimensions,
98
+ _props$gridValues = props.gridValues,
99
+ gridValues = _props$gridValues === void 0 ? {} : _props$gridValues,
100
+ _props$labelValues = props.labelValues,
101
+ labelValues = _props$labelValues === void 0 ? {} : _props$labelValues,
102
+ _props$studentNewCate = props.studentNewCategoryDefaultLabel,
103
+ studentNewCategoryDefaultLabel = _props$studentNewCate === void 0 ? {} : _props$studentNewCate,
104
+ _props$availableChart = props.availableChartTypes,
105
+ availableChartTypes = _props$availableChart === void 0 ? {} : _props$availableChart,
106
+ chartTypeLabel = props.chartTypeLabel;
76
107
  var _useState = (0, _react.useState)({
77
- open: false,
78
- title: '',
79
- text: '',
80
- onClose: null,
81
- onConfirm: null
82
- }),
83
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
84
- alertDialog = _useState2[0],
85
- setAlertDialog = _useState2[1];
86
-
108
+ open: false,
109
+ title: '',
110
+ text: '',
111
+ onClose: null,
112
+ onConfirm: null
113
+ }),
114
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
115
+ alertDialog = _useState2[0],
116
+ setAlertDialog = _useState2[1];
87
117
  var _useState3 = (0, _react.useState)(false),
88
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
89
- open = _useState4[0],
90
- setOpen = _useState4[1];
91
-
118
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
119
+ open = _useState4[0],
120
+ setOpen = _useState4[1];
92
121
  var _useState5 = (0, _react.useState)(''),
93
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
94
- rangeKey = _useState6[0],
95
- setRangeKey = _useState6[1];
96
-
122
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
123
+ rangeKey = _useState6[0],
124
+ setRangeKey = _useState6[1];
97
125
  var _useState7 = (0, _react.useState)(0),
98
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
99
- resetValue = _useState8[0],
100
- setResetValue = _useState8[1];
101
-
126
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
127
+ resetValue = _useState8[0],
128
+ setResetValue = _useState8[1];
102
129
  var _model$range = model.range,
103
- range = _model$range === void 0 ? {} : _model$range,
104
- correctAnswer = model.correctAnswer,
105
- changeInteractiveEnabled = model.changeInteractiveEnabled,
106
- changeEditableEnabled = model.changeEditableEnabled;
130
+ range = _model$range === void 0 ? {} : _model$range,
131
+ correctAnswer = model.correctAnswer,
132
+ changeInteractiveEnabled = model.changeInteractiveEnabled,
133
+ changeEditableEnabled = model.changeEditableEnabled;
107
134
  var size = model.graph;
108
-
109
- var _ref = chartDimensions || {},
110
- showInConfigPanel = _ref.showInConfigPanel,
111
- width = _ref.width,
112
- height = _ref.height;
113
-
135
+ var _ref5 = chartDimensions || {},
136
+ showInConfigPanel = _ref5.showInConfigPanel,
137
+ width = _ref5.width,
138
+ height = _ref5.height;
114
139
  var widthConstraints = {
115
140
  min: width !== null && width !== void 0 && width.min ? Math.max(50, width.min) : 50,
116
141
  max: width !== null && width !== void 0 && width.max ? Math.min(700, width.max) : 700,
@@ -133,19 +158,14 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
133
158
  min: 0,
134
159
  max: 10000
135
160
  };
136
-
137
- var stepConfig = /*#__PURE__*/_react["default"].createElement("div", {
138
- className: classes.rowView
139
- }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, (0, _extends2["default"])({
140
- className: classes.mediumTextField,
161
+ var stepConfig = /*#__PURE__*/_react["default"].createElement(StyledRowView, null, /*#__PURE__*/_react["default"].createElement(StyledMediumTextField, (0, _extends2["default"])({
141
162
  label: "Grid Interval",
142
163
  value: range.step,
143
164
  variant: "outlined",
144
165
  onChange: function onChange(e, v) {
145
166
  return onRangeChanged('step', v, e);
146
167
  }
147
- }, gridOptions)), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, (0, _extends2["default"])({
148
- className: classes.mediumTextField,
168
+ }, gridOptions)), /*#__PURE__*/_react["default"].createElement(StyledMediumTextField, (0, _extends2["default"])({
149
169
  label: 'Label Interval',
150
170
  value: range.labelStep,
151
171
  variant: 'outlined',
@@ -153,53 +173,40 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
153
173
  return onRangeChanged('labelStep', v, e);
154
174
  }
155
175
  }, labelOptions)));
156
-
157
- var handleAlertDialog = function handleAlertDialog(openStatus, callback) {
176
+ var handleAlertDialog = function handleAlertDialog(openStatus) {
158
177
  setAlertDialog(function (prevState) {
159
178
  return _objectSpread(_objectSpread({}, prevState), {}, {
160
179
  open: openStatus
161
180
  });
162
- }, function () {
163
- if (callback) {
164
- callback();
165
- }
166
181
  });
167
182
  setOpen(openStatus);
168
183
  };
169
-
170
184
  var setPropertiesToFalse = function setPropertiesToFalse(data, property) {
171
185
  return data.map(function (obj) {
172
- if (obj.hasOwnProperty(property)) {
186
+ if (Object.prototype.hasOwnProperty.call(obj, property)) {
173
187
  obj[property] = property == 'interactive' ? true : false;
174
188
  }
175
-
176
189
  return obj;
177
190
  });
178
191
  };
179
-
180
192
  var removeOutOfRangeValues = function removeOutOfRangeValues(updateModel) {
181
193
  var correctAnswer = model.correctAnswer,
182
- data = model.data;
183
-
194
+ data = model.data;
184
195
  if (changeInteractiveEnabled === false) {
185
196
  setPropertiesToFalse(data, 'interactive');
186
197
  }
187
-
188
198
  if (changeEditableEnabled === false) {
189
199
  setPropertiesToFalse(data, 'editable');
190
200
  }
191
-
192
201
  resetValues(data, updateModel, range, onChange, model);
193
202
  resetValues(correctAnswer.data, false, range, onChange, model);
194
203
  };
195
-
196
204
  var setCategoryDefaultLabel = function setCategoryDefaultLabel() {
197
205
  var studentCategoryDefaultLabel = studentNewCategoryDefaultLabel === null || studentNewCategoryDefaultLabel === void 0 ? void 0 : studentNewCategoryDefaultLabel.label;
198
206
  onChange(_objectSpread(_objectSpread({}, model), {}, {
199
207
  studentCategoryDefaultLabel: studentCategoryDefaultLabel
200
208
  }));
201
209
  };
202
-
203
210
  var rangeProps = function rangeProps(chartType) {
204
211
  return chartType.includes('Plot') ? {
205
212
  min: 3,
@@ -209,32 +216,26 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
209
216
  max: 10000
210
217
  };
211
218
  };
212
-
213
219
  var onSizeChanged = function onSizeChanged(key, value) {
214
220
  var graph = _objectSpread(_objectSpread({}, size), {}, (0, _defineProperty2["default"])({}, key, value));
215
-
216
221
  onChange(_objectSpread(_objectSpread({}, model), {}, {
217
222
  graph: graph
218
223
  }));
219
224
  };
220
-
221
225
  var isOutOfRange = function isOutOfRange(data, range) {
222
226
  return (data || []).find(function (d) {
223
227
  return d.value > range.max || d.value - range.step * Math.floor(d.value / range.step) !== 0;
224
228
  });
225
229
  };
226
-
227
230
  var onRangeChanged = function onRangeChanged(key, value, e) {
228
231
  // use reset values to restore range to initial values
229
232
  setResetValue(range[key]);
230
233
  setRangeKey(key);
231
234
  range[key] = value;
232
-
233
235
  if (key === 'max' || key === 'step') {
234
236
  // check if current chart values are invalid for given range step/max
235
237
  var outOfRange = isOutOfRange(model.data, range) || isOutOfRange(model.correctAnswer.data, range);
236
-
237
- if (outOfRange && JSON.stringify(e) !== '{}') {
238
+ if (outOfRange && e !== null && e !== void 0 && e.target) {
238
239
  setOpen(true);
239
240
  } else {
240
241
  onChange(_objectSpread(_objectSpread({}, model), {}, {
@@ -247,7 +248,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
247
248
  }));
248
249
  }
249
250
  };
250
-
251
251
  (0, _react.useEffect)(function () {
252
252
  removeOutOfRangeValues(true);
253
253
  setCategoryDefaultLabel();
@@ -260,10 +260,11 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
260
260
  text: 'This change will remove values defined for one or more categories',
261
261
  onConfirm: function onConfirm() {
262
262
  removeOutOfRangeValues();
263
- handleAlertDialog(false, onChange(_objectSpread(_objectSpread({}, model), {}, {
263
+ handleAlertDialog(false);
264
+ onChange(_objectSpread(_objectSpread({}, model), {}, {
264
265
  range: range,
265
266
  correctAnswer: correctAnswer
266
- })));
267
+ }));
267
268
  },
268
269
  onClose: function onClose() {
269
270
  range[rangeKey] = resetValue;
@@ -273,7 +274,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
273
274
  }
274
275
  }, [open]);
275
276
  var isValidPlot = range.step === 1 && range.labelStep === 1 && 3 <= range.max && range.max <= 10;
276
-
277
277
  var getPlotConfiguration = function getPlotConfiguration() {
278
278
  rangeProps.min = 3;
279
279
  rangeProps.max = 10;
@@ -284,7 +284,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
284
284
  range: range
285
285
  }));
286
286
  };
287
-
288
287
  var onChartTypeChange = function onChartTypeChange(chartType) {
289
288
  if (chartType.includes('Plot')) {
290
289
  // The selected chart type does not support the current chart configuration
@@ -296,10 +295,11 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
296
295
  onConfirm: function onConfirm() {
297
296
  getPlotConfiguration();
298
297
  removeOutOfRangeValues();
299
- handleAlertDialog(false, onChange(_objectSpread(_objectSpread({}, model), {}, {
298
+ handleAlertDialog(false);
299
+ onChange(_objectSpread(_objectSpread({}, model), {}, {
300
300
  range: range,
301
301
  chartType: chartType
302
- })));
302
+ }));
303
303
  },
304
304
  onClose: function onClose() {
305
305
  handleAlertDialog(false);
@@ -307,7 +307,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
307
307
  });
308
308
  return;
309
309
  }
310
-
311
310
  rangeProps.min = 3;
312
311
  rangeProps.max = 10;
313
312
  onChange(_objectSpread(_objectSpread({}, model), {}, {
@@ -315,29 +314,20 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
315
314
  }));
316
315
  return;
317
316
  }
318
-
319
317
  onChange(_objectSpread(_objectSpread({}, model), {}, {
320
318
  chartType: chartType
321
319
  }));
322
320
  };
323
-
324
- return /*#__PURE__*/_react["default"].createElement("div", {
325
- className: classes.wrapper
326
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
321
+ return /*#__PURE__*/_react["default"].createElement(StyledWrapper, null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
327
322
  variant: 'subtitle1'
328
- }, "Configure Chart"), /*#__PURE__*/_react["default"].createElement("div", {
329
- className: classes.content
330
- }, /*#__PURE__*/_react["default"].createElement("div", {
331
- className: classes.rowView
332
- }, /*#__PURE__*/_react["default"].createElement(_chartType["default"], {
323
+ }, "Configure Chart"), /*#__PURE__*/_react["default"].createElement(StyledContent, null, /*#__PURE__*/_react["default"].createElement(StyledRowView, null, /*#__PURE__*/_react["default"].createElement(_chartType["default"], {
333
324
  value: model.chartType,
334
325
  onChange: function onChange(e) {
335
326
  return onChartTypeChange(e.target.value);
336
327
  },
337
328
  availableChartTypes: availableChartTypes,
338
329
  chartTypeLabel: chartTypeLabel
339
- }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
340
- className: classes.mediumTextField,
330
+ }), /*#__PURE__*/_react["default"].createElement(StyledMediumTextField, {
341
331
  label: "Max Value",
342
332
  value: range.max,
343
333
  min: rangeProps(model.chartType).min,
@@ -346,12 +336,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
346
336
  onChange: function onChange(e, v) {
347
337
  return onRangeChanged('max', v, e);
348
338
  }
349
- })), !model.chartType.includes('Plot') && stepConfig, showInConfigPanel && /*#__PURE__*/_react["default"].createElement("div", {
350
- className: classes.dimensions
351
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, "Dimensions(px)")), /*#__PURE__*/_react["default"].createElement("div", {
352
- className: classes.columnView
353
- }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
354
- className: classes.textField,
339
+ })), !model.chartType.includes('Plot') && stepConfig, showInConfigPanel && /*#__PURE__*/_react["default"].createElement(StyledDimensions, null, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, "Dimensions(px)")), /*#__PURE__*/_react["default"].createElement(StyledColumnView, null, /*#__PURE__*/_react["default"].createElement(StyledTextField, {
355
340
  label: 'Width',
356
341
  value: size.width,
357
342
  min: widthConstraints.min,
@@ -361,12 +346,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
361
346
  onChange: function onChange(e, v) {
362
347
  return onSizeChanged('width', v);
363
348
  }
364
- }), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
365
- className: classes.disabled
366
- }, "Min 50, Max 700")), /*#__PURE__*/_react["default"].createElement("div", {
367
- className: classes.columnView
368
- }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
369
- className: classes.textField,
349
+ }), /*#__PURE__*/_react["default"].createElement(StyledDisabled, null, "Min 50, Max 700")), /*#__PURE__*/_react["default"].createElement(StyledColumnView, null, /*#__PURE__*/_react["default"].createElement(StyledTextField, {
370
350
  label: 'Height',
371
351
  value: size.height,
372
352
  min: heightConstraints.min,
@@ -376,9 +356,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
376
356
  onChange: function onChange(e, v) {
377
357
  return onSizeChanged('height', v);
378
358
  }
379
- }), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
380
- className: classes.disabled
381
- }, "Min 400, Max 700")))), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
359
+ }), /*#__PURE__*/_react["default"].createElement(StyledDisabled, null, "Min 400, Max 700")))), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
382
360
  open: alertDialog.open,
383
361
  title: alertDialog.title,
384
362
  text: alertDialog.text,
@@ -386,9 +364,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
386
364
  onConfirm: alertDialog.onConfirm
387
365
  }));
388
366
  };
389
-
390
367
  ConfigureChartPanel.propTypes = {
391
- classes: _propTypes["default"].object,
392
368
  chartDimensions: _propTypes["default"].object,
393
369
  domain: _propTypes["default"].object,
394
370
  gridValues: _propTypes["default"].object,
@@ -402,57 +378,5 @@ ConfigureChartPanel.propTypes = {
402
378
  availableChartTypes: _propTypes["default"].object,
403
379
  chartTypeLabel: _propTypes["default"].string
404
380
  };
405
-
406
- var styles = function styles(theme) {
407
- return {
408
- wrapper: {
409
- width: '450px'
410
- },
411
- content: {
412
- display: 'flex',
413
- flexDirection: 'column',
414
- width: '100%',
415
- marginTop: theme.spacing.unit * 3
416
- },
417
- columnView: {
418
- display: 'flex',
419
- flexDirection: 'column',
420
- alignItems: 'center'
421
- },
422
- rowView: {
423
- display: 'flex',
424
- justifyContent: 'space-around',
425
- alignItems: 'center'
426
- },
427
- textField: {
428
- width: '130px',
429
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
430
- },
431
- mediumTextField: {
432
- width: '160px',
433
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
434
- },
435
- largeTextField: {
436
- width: '230px',
437
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
438
- },
439
- text: {
440
- fontStyle: 'italic',
441
- margin: "".concat(theme.spacing.unit, "px 0")
442
- },
443
- dimensions: {
444
- display: 'flex',
445
- justifyContent: 'space-between',
446
- alignItems: 'center',
447
- margin: "".concat(theme.spacing.unit * 3, "px 0")
448
- },
449
- disabled: {
450
- color: _renderUi.color.disabled()
451
- }
452
- };
453
- };
454
-
455
- var _default = (0, _styles.withStyles)(styles)(ConfigureChartPanel);
456
-
457
- exports["default"] = _default;
458
- //# sourceMappingURL=chart-setup.js.map
381
+ var _default = exports["default"] = ConfigureChartPanel;
382
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZW5kZXJVaSIsIl9zdHlsZXMiLCJfVHlwb2dyYXBoeSIsIl9jaGFydFR5cGUiLCJfY29uZmlnVWkiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmVzZXRWYWx1ZXMiLCJleHBvcnRzIiwiZGF0YSIsInVwZGF0ZU1vZGVsIiwicmFuZ2UiLCJvbkNoYW5nZSIsIm1vZGVsIiwiZCIsImRfdmFsdWVfc2NhbGVkIiwiTWF0aCIsInJvdW5kIiwidmFsdWUiLCJyYW5nZV9zdGVwX3NjYWxlZCIsInN0ZXAiLCJyZW1haW5kZXJfc2NhbGVkIiwicmVtYWluZGVyIiwibWF4IiwiU3R5bGVkV3JhcHBlciIsInN0eWxlZCIsIndpZHRoIiwiU3R5bGVkQ29udGVudCIsIl9yZWYiLCJ0aGVtZSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwibWFyZ2luVG9wIiwic3BhY2luZyIsIlN0eWxlZENvbHVtblZpZXciLCJhbGlnbkl0ZW1zIiwiU3R5bGVkUm93VmlldyIsImp1c3RpZnlDb250ZW50IiwiU3R5bGVkVGV4dEZpZWxkIiwiTnVtYmVyVGV4dEZpZWxkQ3VzdG9tIiwiX3JlZjIiLCJtYXJnaW4iLCJjb25jYXQiLCJTdHlsZWRNZWRpdW1UZXh0RmllbGQiLCJfcmVmMyIsIlN0eWxlZERpbWVuc2lvbnMiLCJfcmVmNCIsIlN0eWxlZERpc2FibGVkIiwiVHlwb2dyYXBoeSIsImNvbG9yIiwiZGlzYWJsZWQiLCJDb25maWd1cmVDaGFydFBhbmVsIiwicHJvcHMiLCJjaGFydERpbWVuc2lvbnMiLCJfcHJvcHMkZ3JpZFZhbHVlcyIsImdyaWRWYWx1ZXMiLCJfcHJvcHMkbGFiZWxWYWx1ZXMiLCJsYWJlbFZhbHVlcyIsIl9wcm9wcyRzdHVkZW50TmV3Q2F0ZSIsInN0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbCIsIl9wcm9wcyRhdmFpbGFibGVDaGFydCIsImF2YWlsYWJsZUNoYXJ0VHlwZXMiLCJjaGFydFR5cGVMYWJlbCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwib3BlbiIsInRpdGxlIiwidGV4dCIsIm9uQ2xvc2UiLCJvbkNvbmZpcm0iLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiYWxlcnREaWFsb2ciLCJzZXRBbGVydERpYWxvZyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2V0T3BlbiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwicmFuZ2VLZXkiLCJzZXRSYW5nZUtleSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicmVzZXRWYWx1ZSIsInNldFJlc2V0VmFsdWUiLCJfbW9kZWwkcmFuZ2UiLCJjb3JyZWN0QW5zd2VyIiwiY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkIiwiY2hhbmdlRWRpdGFibGVFbmFibGVkIiwic2l6ZSIsImdyYXBoIiwiX3JlZjUiLCJzaG93SW5Db25maWdQYW5lbCIsImhlaWdodCIsIndpZHRoQ29uc3RyYWludHMiLCJtaW4iLCJoZWlnaHRDb25zdHJhaW50cyIsImdyaWRPcHRpb25zIiwiY3VzdG9tVmFsdWVzIiwibGFiZWxPcHRpb25zIiwic3RlcENvbmZpZyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJsYWJlbCIsInZhcmlhbnQiLCJ2Iiwib25SYW5nZUNoYW5nZWQiLCJsYWJlbFN0ZXAiLCJoYW5kbGVBbGVydERpYWxvZyIsIm9wZW5TdGF0dXMiLCJwcmV2U3RhdGUiLCJzZXRQcm9wZXJ0aWVzVG9GYWxzZSIsInByb3BlcnR5IiwibWFwIiwib2JqIiwicHJvdG90eXBlIiwicmVtb3ZlT3V0T2ZSYW5nZVZhbHVlcyIsInNldENhdGVnb3J5RGVmYXVsdExhYmVsIiwic3R1ZGVudENhdGVnb3J5RGVmYXVsdExhYmVsIiwicmFuZ2VQcm9wcyIsImNoYXJ0VHlwZSIsImluY2x1ZGVzIiwib25TaXplQ2hhbmdlZCIsImtleSIsImlzT3V0T2ZSYW5nZSIsImZpbmQiLCJmbG9vciIsIm91dE9mUmFuZ2UiLCJ0YXJnZXQiLCJ1c2VFZmZlY3QiLCJpc1ZhbGlkUGxvdCIsImdldFBsb3RDb25maWd1cmF0aW9uIiwib25DaGFydFR5cGVDaGFuZ2UiLCJBbGVydERpYWxvZyIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImRvbWFpbiIsImZ1bmMiLCJjaGFydERpbWVuc2lvbiIsInN0cmluZyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2NoYXJ0LXNldHVwLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbXVpL21hdGVyaWFsL1R5cG9ncmFwaHknO1xuaW1wb3J0IENoYXJ0VHlwZSBmcm9tICcuL2NoYXJ0LXR5cGUnO1xuaW1wb3J0IHsgTnVtYmVyVGV4dEZpZWxkQ3VzdG9tIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcbmltcG9ydCB7IEFsZXJ0RGlhbG9nIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcblxuZXhwb3J0IGNvbnN0IHJlc2V0VmFsdWVzID0gKGRhdGEsIHVwZGF0ZU1vZGVsLCByYW5nZSwgb25DaGFuZ2UsIG1vZGVsKSA9PiB7XG4gIChkYXRhIHx8IFtdKS5mb3JFYWNoKChkKSA9PiB7XG4gICAgY29uc3QgZF92YWx1ZV9zY2FsZWQgPSBNYXRoLnJvdW5kKGQudmFsdWUgKiAxMCk7XG4gICAgY29uc3QgcmFuZ2Vfc3RlcF9zY2FsZWQgPSBNYXRoLnJvdW5kKHJhbmdlLnN0ZXAgKiAxMCk7XG4gICAgY29uc3QgcmVtYWluZGVyX3NjYWxlZCA9IGRfdmFsdWVfc2NhbGVkICUgcmFuZ2Vfc3RlcF9zY2FsZWQ7XG4gICAgY29uc3QgcmVtYWluZGVyID0gcmVtYWluZGVyX3NjYWxlZCAvIDEwO1xuXG4gICAgaWYgKGQudmFsdWUgPiByYW5nZS5tYXggfHwgcmVtYWluZGVyICE9PSAwKSB7XG4gICAgICBkLnZhbHVlID0gMDtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh1cGRhdGVNb2RlbCkge1xuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIGRhdGEgfSk7XG4gIH1cbn07XG5cbmNvbnN0IFN0eWxlZFdyYXBwZXIgPSBzdHlsZWQoJ2RpdicpKCgpID0+ICh7XG4gIHdpZHRoOiAnNDUwcHgnLFxufSkpO1xuXG5jb25zdCBTdHlsZWRDb250ZW50ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB3aWR0aDogJzEwMCUnLFxuICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMyksXG59KSk7XG5cbmNvbnN0IFN0eWxlZENvbHVtblZpZXcgPSBzdHlsZWQoJ2RpdicpKCgpID0+ICh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxufSkpO1xuXG5jb25zdCBTdHlsZWRSb3dWaWV3ID0gc3R5bGVkKCdkaXYnKSgoKSA9PiAoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG59KSk7XG5cbmNvbnN0IFN0eWxlZFRleHRGaWVsZCA9IHN0eWxlZChOdW1iZXJUZXh0RmllbGRDdXN0b20pKCh7IHRoZW1lIH0pID0+ICh7XG4gIHdpZHRoOiAnMTMwcHgnLFxuICBtYXJnaW46IGAke3RoZW1lLnNwYWNpbmcoMSl9ICR7dGhlbWUuc3BhY2luZygwLjUpfWAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZE1lZGl1bVRleHRGaWVsZCA9IHN0eWxlZChOdW1iZXJUZXh0RmllbGRDdXN0b20pKCh7IHRoZW1lIH0pID0+ICh7XG4gIHdpZHRoOiAnMTYwcHgnLFxuICBtYXJnaW46IGAke3RoZW1lLnNwYWNpbmcoMSl9ICR7dGhlbWUuc3BhY2luZygwLjUpfWAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZERpbWVuc2lvbnMgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIG1hcmdpbjogYCR7dGhlbWUuc3BhY2luZygzKX0gMGAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZERpc2FibGVkID0gc3R5bGVkKFR5cG9ncmFwaHkpKCgpID0+ICh7XG4gIGNvbG9yOiBjb2xvci5kaXNhYmxlZCgpLFxufSkpO1xuXG5jb25zdCBDb25maWd1cmVDaGFydFBhbmVsID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBtb2RlbCxcbiAgICBvbkNoYW5nZSxcbiAgICBjaGFydERpbWVuc2lvbnMsXG4gICAgZ3JpZFZhbHVlcyA9IHt9LFxuICAgIGxhYmVsVmFsdWVzID0ge30sXG4gICAgc3R1ZGVudE5ld0NhdGVnb3J5RGVmYXVsdExhYmVsID0ge30sXG4gICAgYXZhaWxhYmxlQ2hhcnRUeXBlcyA9IHt9LFxuICAgIGNoYXJ0VHlwZUxhYmVsLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFthbGVydERpYWxvZywgc2V0QWxlcnREaWFsb2ddID0gdXNlU3RhdGUoe1xuICAgIG9wZW46IGZhbHNlLFxuICAgIHRpdGxlOiAnJyxcbiAgICB0ZXh0OiAnJyxcbiAgICBvbkNsb3NlOiBudWxsLFxuICAgIG9uQ29uZmlybTogbnVsbCxcbiAgfSk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3JhbmdlS2V5LCBzZXRSYW5nZUtleV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtyZXNldFZhbHVlLCBzZXRSZXNldFZhbHVlXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHsgcmFuZ2UgPSB7fSwgY29ycmVjdEFuc3dlciwgY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkLCBjaGFuZ2VFZGl0YWJsZUVuYWJsZWQgfSA9IG1vZGVsO1xuXG4gIGNvbnN0IHNpemUgPSBtb2RlbC5ncmFwaDtcbiAgY29uc3QgeyBzaG93SW5Db25maWdQYW5lbCwgd2lkdGgsIGhlaWdodCB9ID0gY2hhcnREaW1lbnNpb25zIHx8IHt9O1xuXG4gIGNvbnN0IHdpZHRoQ29uc3RyYWludHMgPSB7XG4gICAgbWluOiB3aWR0aD8ubWluID8gTWF0aC5tYXgoNTAsIHdpZHRoLm1pbikgOiA1MCxcbiAgICBtYXg6IHdpZHRoPy5tYXggPyBNYXRoLm1pbig3MDAsIHdpZHRoLm1heCkgOiA3MDAsXG4gICAgc3RlcDogd2lkdGg/LnN0ZXAgPj0gMSA/IE1hdGgubWluKDIwMCwgd2lkdGguc3RlcCkgOiAyMCxcbiAgfTtcbiAgY29uc3QgaGVpZ2h0Q29uc3RyYWludHMgPSB7XG4gICAgbWluOiBoZWlnaHQ/Lm1pbiA/IE1hdGgubWF4KDQwMCwgaGVpZ2h0Lm1pbikgOiA0MDAsXG4gICAgbWF4OiBoZWlnaHQ/Lm1heCA/IE1hdGgubWluKDcwMCwgaGVpZ2h0Lm1heCkgOiA3MDAsXG4gICAgc3RlcDogaGVpZ2h0Py5zdGVwID49IDEgPyBNYXRoLm1pbigyMDAsIGhlaWdodC5zdGVwKSA6IDIwLFxuICB9O1xuXG4gIGNvbnN0IGdyaWRPcHRpb25zID0gZ3JpZFZhbHVlcyAmJiBncmlkVmFsdWVzLnJhbmdlID8geyBjdXN0b21WYWx1ZXM6IGdyaWRWYWx1ZXMucmFuZ2UgfSA6IHsgbWluOiAwLCBtYXg6IDEwMDAwIH07XG4gIGNvbnN0IGxhYmVsT3B0aW9ucyA9IGxhYmVsVmFsdWVzICYmIGxhYmVsVmFsdWVzLnJhbmdlID8geyBjdXN0b21WYWx1ZXM6IGxhYmVsVmFsdWVzLnJhbmdlIH0gOiB7IG1pbjogMCwgbWF4OiAxMDAwMCB9O1xuXG4gIGNvbnN0IHN0ZXBDb25maWcgPSAoXG4gICAgPFN0eWxlZFJvd1ZpZXc+XG4gICAgICA8U3R5bGVkTWVkaXVtVGV4dEZpZWxkXG4gICAgICAgIGxhYmVsPVwiR3JpZCBJbnRlcnZhbFwiXG4gICAgICAgIHZhbHVlPXtyYW5nZS5zdGVwfVxuICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uUmFuZ2VDaGFuZ2VkKCdzdGVwJywgdiwgZSl9XG4gICAgICAgIHsuLi5ncmlkT3B0aW9uc31cbiAgICAgIC8+XG4gICAgICA8U3R5bGVkTWVkaXVtVGV4dEZpZWxkXG4gICAgICAgIGxhYmVsPXsnTGFiZWwgSW50ZXJ2YWwnfVxuICAgICAgICB2YWx1ZT17cmFuZ2UubGFiZWxTdGVwfVxuICAgICAgICB2YXJpYW50PXsnb3V0bGluZWQnfVxuICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uUmFuZ2VDaGFuZ2VkKCdsYWJlbFN0ZXAnLCB2LCBlKX1cbiAgICAgICAgey4uLmxhYmVsT3B0aW9uc31cbiAgICAgIC8+XG4gICAgPC9TdHlsZWRSb3dWaWV3PlxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUFsZXJ0RGlhbG9nID0gKG9wZW5TdGF0dXMpID0+IHtcbiAgICBzZXRBbGVydERpYWxvZyhcbiAgICAgIChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgb3Blbjogb3BlblN0YXR1cyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBzZXRPcGVuKG9wZW5TdGF0dXMpO1xuICB9O1xuXG4gIGNvbnN0IHNldFByb3BlcnRpZXNUb0ZhbHNlID0gKGRhdGEsIHByb3BlcnR5KSA9PiB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChvYmopID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IHByb3BlcnR5ID09ICdpbnRlcmFjdGl2ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU91dE9mUmFuZ2VWYWx1ZXMgPSAodXBkYXRlTW9kZWwpID0+IHtcbiAgICBjb25zdCB7IGNvcnJlY3RBbnN3ZXIsIGRhdGEgfSA9IG1vZGVsO1xuXG4gICAgaWYgKGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldFByb3BlcnRpZXNUb0ZhbHNlKGRhdGEsICdpbnRlcmFjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VFZGl0YWJsZUVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRQcm9wZXJ0aWVzVG9GYWxzZShkYXRhLCAnZWRpdGFibGUnKTtcbiAgICB9XG5cbiAgICByZXNldFZhbHVlcyhkYXRhLCB1cGRhdGVNb2RlbCwgcmFuZ2UsIG9uQ2hhbmdlLCBtb2RlbCk7XG4gICAgcmVzZXRWYWx1ZXMoY29ycmVjdEFuc3dlci5kYXRhLCBmYWxzZSwgcmFuZ2UsIG9uQ2hhbmdlLCBtb2RlbCk7XG4gIH07XG5cbiAgY29uc3Qgc2V0Q2F0ZWdvcnlEZWZhdWx0TGFiZWwgPSAoKSA9PiB7XG4gICAgY29uc3Qgc3R1ZGVudENhdGVnb3J5RGVmYXVsdExhYmVsID0gc3R1ZGVudE5ld0NhdGVnb3J5RGVmYXVsdExhYmVsPy5sYWJlbDtcblxuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIHN0dWRlbnRDYXRlZ29yeURlZmF1bHRMYWJlbCB9KTtcbiAgfTtcblxuICBjb25zdCByYW5nZVByb3BzID0gKGNoYXJ0VHlwZSkgPT4ge1xuICAgIHJldHVybiBjaGFydFR5cGUuaW5jbHVkZXMoJ1Bsb3QnKSA/IHsgbWluOiAzLCBtYXg6IDEwIH0gOiB7IG1pbjogMC4wNSwgbWF4OiAxMDAwMCB9O1xuICB9O1xuXG4gIGNvbnN0IG9uU2l6ZUNoYW5nZWQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGdyYXBoID0geyAuLi5zaXplLCBba2V5XTogdmFsdWUgfTtcblxuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIGdyYXBoIH0pO1xuICB9O1xuXG4gIGNvbnN0IGlzT3V0T2ZSYW5nZSA9IChkYXRhLCByYW5nZSkgPT5cbiAgICAoZGF0YSB8fCBbXSkuZmluZCgoZCkgPT4gZC52YWx1ZSA+IHJhbmdlLm1heCB8fCBkLnZhbHVlIC0gcmFuZ2Uuc3RlcCAqIE1hdGguZmxvb3IoZC52YWx1ZSAvIHJhbmdlLnN0ZXApICE9PSAwKTtcblxuICBjb25zdCBvblJhbmdlQ2hhbmdlZCA9IChrZXksIHZhbHVlLCBlKSA9PiB7XG4gICAgLy8gdXNlIHJlc2V0IHZhbHVlcyB0byByZXN0b3JlIHJhbmdlIHRvIGluaXRpYWwgdmFsdWVzXG4gICAgc2V0UmVzZXRWYWx1ZShyYW5nZVtrZXldKTtcbiAgICBzZXRSYW5nZUtleShrZXkpO1xuXG4gICAgcmFuZ2Vba2V5XSA9IHZhbHVlO1xuXG4gICAgaWYgKGtleSA9PT0gJ21heCcgfHwga2V5ID09PSAnc3RlcCcpIHtcbiAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgY2hhcnQgdmFsdWVzIGFyZSBpbnZhbGlkIGZvciBnaXZlbiByYW5nZSBzdGVwL21heFxuICAgICAgY29uc3Qgb3V0T2ZSYW5nZSA9IGlzT3V0T2ZSYW5nZShtb2RlbC5kYXRhLCByYW5nZSkgfHwgaXNPdXRPZlJhbmdlKG1vZGVsLmNvcnJlY3RBbnN3ZXIuZGF0YSwgcmFuZ2UpO1xuXG4gICAgICBpZiAob3V0T2ZSYW5nZSAmJiBlPy50YXJnZXQpIHtcbiAgICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIHJhbmdlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZW1vdmVPdXRPZlJhbmdlVmFsdWVzKHRydWUpO1xuICAgIHNldENhdGVnb3J5RGVmYXVsdExhYmVsKCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBzZXRBbGVydERpYWxvZyh7XG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgIHRpdGxlOiAnV2FybmluZycsXG4gICAgICAgIHRleHQ6ICdUaGlzIGNoYW5nZSB3aWxsIHJlbW92ZSB2YWx1ZXMgZGVmaW5lZCBmb3Igb25lIG9yIG1vcmUgY2F0ZWdvcmllcycsXG4gICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgIHJlbW92ZU91dE9mUmFuZ2VWYWx1ZXMoKTtcbiAgICAgICAgICBoYW5kbGVBbGVydERpYWxvZyhmYWxzZSk7XG4gICAgICAgICAgb25DaGFuZ2UoeyAuLi5tb2RlbCwgcmFuZ2UsIGNvcnJlY3RBbnN3ZXIgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICByYW5nZVtyYW5nZUtleV0gPSByZXNldFZhbHVlO1xuICAgICAgICAgIGhhbmRsZUFsZXJ0RGlhbG9nKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW29wZW5dKTtcblxuICBjb25zdCBpc1ZhbGlkUGxvdCA9IHJhbmdlLnN0ZXAgPT09IDEgJiYgcmFuZ2UubGFiZWxTdGVwID09PSAxICYmIDMgPD0gcmFuZ2UubWF4ICYmIHJhbmdlLm1heCA8PSAxMDtcblxuICBjb25zdCBnZXRQbG90Q29uZmlndXJhdGlvbiA9ICgpID0+IHtcbiAgICByYW5nZVByb3BzLm1pbiA9IDM7XG4gICAgcmFuZ2VQcm9wcy5tYXggPSAxMDtcblxuICAgIHJhbmdlLm1heCA9IDEwO1xuICAgIHJhbmdlLnN0ZXAgPSAxO1xuICAgIHJhbmdlLmxhYmVsU3RlcCA9IDE7XG5cbiAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSB9KTtcbiAgfTtcblxuICBjb25zdCBvbkNoYXJ0VHlwZUNoYW5nZSA9IChjaGFydFR5cGUpID0+IHtcbiAgICBpZiAoY2hhcnRUeXBlLmluY2x1ZGVzKCdQbG90JykpIHtcbiAgICAgIC8vIFRoZSBzZWxlY3RlZCBjaGFydCB0eXBlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN1cnJlbnQgY2hhcnQgY29uZmlndXJhdGlvblxuICAgICAgaWYgKCFpc1ZhbGlkUGxvdCkge1xuICAgICAgICBzZXRBbGVydERpYWxvZyh7XG4gICAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogJ1dhcm5pbmcnLFxuICAgICAgICAgIHRleHQ6ICdUaGUgc2VsZWN0ZWQgY2hhcnQgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXJyZW50IGNoYXJ0IGNvbmZpZ3VyYXRpb24uIFJlc2V0IGNoYXJ0IGNvbmZpZ3VyYXRpb24/JyxcbiAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgIGdldFBsb3RDb25maWd1cmF0aW9uKCk7XG4gICAgICAgICAgICByZW1vdmVPdXRPZlJhbmdlVmFsdWVzKCk7XG4gICAgICAgICAgICBoYW5kbGVBbGVydERpYWxvZyhmYWxzZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSwgY2hhcnRUeXBlIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlQWxlcnREaWFsb2coZmFsc2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmFuZ2VQcm9wcy5taW4gPSAzO1xuICAgICAgcmFuZ2VQcm9wcy5tYXggPSAxMDtcblxuICAgICAgb25DaGFuZ2UoeyAuLi5tb2RlbCwgY2hhcnRUeXBlIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoeyAuLi5tb2RlbCwgY2hhcnRUeXBlIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZFdyYXBwZXI+XG4gICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PXsnc3VidGl0bGUxJ30+Q29uZmlndXJlIENoYXJ0PC9UeXBvZ3JhcGh5PlxuICAgICAgPFN0eWxlZENvbnRlbnQ+XG4gICAgICAgIDxTdHlsZWRSb3dWaWV3PlxuICAgICAgICAgIDxDaGFydFR5cGVcbiAgICAgICAgICAgIHZhbHVlPXttb2RlbC5jaGFydFR5cGV9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uQ2hhcnRUeXBlQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIGF2YWlsYWJsZUNoYXJ0VHlwZXM9e2F2YWlsYWJsZUNoYXJ0VHlwZXN9XG4gICAgICAgICAgICBjaGFydFR5cGVMYWJlbD17Y2hhcnRUeXBlTGFiZWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U3R5bGVkTWVkaXVtVGV4dEZpZWxkXG4gICAgICAgICAgICBsYWJlbD1cIk1heCBWYWx1ZVwiXG4gICAgICAgICAgICB2YWx1ZT17cmFuZ2UubWF4fVxuICAgICAgICAgICAgbWluPXtyYW5nZVByb3BzKG1vZGVsLmNoYXJ0VHlwZSkubWlufVxuICAgICAgICAgICAgbWF4PXtyYW5nZVByb3BzKG1vZGVsLmNoYXJ0VHlwZSkubWF4fVxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25SYW5nZUNoYW5nZWQoJ21heCcsIHYsIGUpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkUm93Vmlldz5cbiAgICAgICAgeyFtb2RlbC5jaGFydFR5cGUuaW5jbHVkZXMoJ1Bsb3QnKSAmJiBzdGVwQ29uZmlnfVxuXG4gICAgICAgIHtzaG93SW5Db25maWdQYW5lbCAmJiAoXG4gICAgICAgICAgPFN0eWxlZERpbWVuc2lvbnM+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5EaW1lbnNpb25zKHB4KTwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8U3R5bGVkQ29sdW1uVmlldz5cbiAgICAgICAgICAgICAgPFN0eWxlZFRleHRGaWVsZFxuICAgICAgICAgICAgICAgIGxhYmVsPXsnV2lkdGgnfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtzaXplLndpZHRofVxuICAgICAgICAgICAgICAgIG1pbj17d2lkdGhDb25zdHJhaW50cy5taW59XG4gICAgICAgICAgICAgICAgbWF4PXt3aWR0aENvbnN0cmFpbnRzLm1heH1cbiAgICAgICAgICAgICAgICBzdGVwPXt3aWR0aENvbnN0cmFpbnRzLnN0ZXB9XG4gICAgICAgICAgICAgICAgdmFyaWFudD17J291dGxpbmVkJ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uU2l6ZUNoYW5nZWQoJ3dpZHRoJywgdil9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxTdHlsZWREaXNhYmxlZD5NaW4gNTAsIE1heCA3MDA8L1N0eWxlZERpc2FibGVkPlxuICAgICAgICAgICAgPC9TdHlsZWRDb2x1bW5WaWV3PlxuXG4gICAgICAgICAgICA8U3R5bGVkQ29sdW1uVmlldz5cbiAgICAgICAgICAgICAgPFN0eWxlZFRleHRGaWVsZFxuICAgICAgICAgICAgICAgIGxhYmVsPXsnSGVpZ2h0J31cbiAgICAgICAgICAgICAgICB2YWx1ZT17c2l6ZS5oZWlnaHR9XG4gICAgICAgICAgICAgICAgbWluPXtoZWlnaHRDb25zdHJhaW50cy5taW59XG4gICAgICAgICAgICAgICAgbWF4PXtoZWlnaHRDb25zdHJhaW50cy5tYXh9XG4gICAgICAgICAgICAgICAgc3RlcD17aGVpZ2h0Q29uc3RyYWludHMuc3RlcH1cbiAgICAgICAgICAgICAgICB2YXJpYW50PXsnb3V0bGluZWQnfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25TaXplQ2hhbmdlZCgnaGVpZ2h0Jywgdil9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxTdHlsZWREaXNhYmxlZD5NaW4gNDAwLCBNYXggNzAwPC9TdHlsZWREaXNhYmxlZD5cbiAgICAgICAgICAgIDwvU3R5bGVkQ29sdW1uVmlldz5cbiAgICAgICAgICA8L1N0eWxlZERpbWVuc2lvbnM+XG4gICAgICAgICl9XG4gICAgICA8L1N0eWxlZENvbnRlbnQ+XG5cbiAgICAgIDxBbGVydERpYWxvZ1xuICAgICAgICBvcGVuPXthbGVydERpYWxvZy5vcGVufVxuICAgICAgICB0aXRsZT17YWxlcnREaWFsb2cudGl0bGV9XG4gICAgICAgIHRleHQ9e2FsZXJ0RGlhbG9nLnRleHR9XG4gICAgICAgIG9uQ2xvc2U9e2FsZXJ0RGlhbG9nLm9uQ2xvc2V9XG4gICAgICAgIG9uQ29uZmlybT17YWxlcnREaWFsb2cub25Db25maXJtfVxuICAgICAgLz5cbiAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICk7XG59O1xuXG5Db25maWd1cmVDaGFydFBhbmVsLnByb3BUeXBlcyA9IHtcbiAgY2hhcnREaW1lbnNpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICBkb21haW46IFByb3BUeXBlcy5vYmplY3QsXG4gIGdyaWRWYWx1ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGxhYmVsVmFsdWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtb2RlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICByYW5nZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2hhcnREaW1lbnNpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIHNpemU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgYXZhaWxhYmxlQ2hhcnRUeXBlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2hhcnRUeXBlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb25maWd1cmVDaGFydFBhbmVsO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQVAsT0FBQTtBQUEyRCxTQUFBRCx3QkFBQVMsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQVgsdUJBQUEsWUFBQUEsd0JBQUFTLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEs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