@pie-lib/graphing-solution-set 3.1.0-next.0 → 3.1.0-next.4

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 (104) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/package.json +9 -9
  3. package/lib/__tests__/graph-with-controls.test.js +0 -199
  4. package/lib/__tests__/graph.test.js +0 -114
  5. package/lib/__tests__/grid.test.js +0 -29
  6. package/lib/__tests__/labels.test.js +0 -45
  7. package/lib/__tests__/mark-label.test.js +0 -133
  8. package/lib/__tests__/toggle-bar.test.js +0 -89
  9. package/lib/__tests__/tool-menu.test.js +0 -41
  10. package/lib/__tests__/undo-redo.test.js +0 -31
  11. package/lib/__tests__/use-debounce.test.js +0 -24
  12. package/lib/__tests__/utils.js +0 -70
  13. package/lib/__tests__/utils.test.js +0 -123
  14. package/lib/axis/__tests__/arrow.test.js +0 -60
  15. package/lib/axis/__tests__/axes.test.js +0 -162
  16. package/lib/axis/arrow.js +0 -79
  17. package/lib/axis/arrow.js.map +0 -1
  18. package/lib/axis/axes.js +0 -325
  19. package/lib/axis/axes.js.map +0 -1
  20. package/lib/axis/index.js +0 -21
  21. package/lib/axis/index.js.map +0 -1
  22. package/lib/bg.js +0 -111
  23. package/lib/bg.js.map +0 -1
  24. package/lib/container/actions.js +0 -18
  25. package/lib/container/actions.js.map +0 -1
  26. package/lib/container/index.js +0 -120
  27. package/lib/container/index.js.map +0 -1
  28. package/lib/container/marks.js +0 -22
  29. package/lib/container/marks.js.map +0 -1
  30. package/lib/container/middleware.js +0 -19
  31. package/lib/container/middleware.js.map +0 -1
  32. package/lib/container/reducer.js +0 -18
  33. package/lib/container/reducer.js.map +0 -1
  34. package/lib/coordinates-label.js +0 -77
  35. package/lib/coordinates-label.js.map +0 -1
  36. package/lib/graph-with-controls.js +0 -298
  37. package/lib/graph-with-controls.js.map +0 -1
  38. package/lib/graph.js +0 -354
  39. package/lib/graph.js.map +0 -1
  40. package/lib/grid-setup.js +0 -406
  41. package/lib/grid-setup.js.map +0 -1
  42. package/lib/grid.js +0 -131
  43. package/lib/grid.js.map +0 -1
  44. package/lib/index.js +0 -40
  45. package/lib/index.js.map +0 -1
  46. package/lib/labels.js +0 -199
  47. package/lib/labels.js.map +0 -1
  48. package/lib/mark-label.js +0 -159
  49. package/lib/mark-label.js.map +0 -1
  50. package/lib/toggle-bar.js +0 -248
  51. package/lib/toggle-bar.js.map +0 -1
  52. package/lib/tool-menu.js +0 -218
  53. package/lib/tool-menu.js.map +0 -1
  54. package/lib/tools/index.js +0 -24
  55. package/lib/tools/index.js.map +0 -1
  56. package/lib/tools/line/__tests__/component.test.js +0 -45
  57. package/lib/tools/line/component.js +0 -92
  58. package/lib/tools/line/component.js.map +0 -1
  59. package/lib/tools/line/index.js +0 -11
  60. package/lib/tools/line/index.js.map +0 -1
  61. package/lib/tools/polygon/__tests__/component.test.js +0 -81
  62. package/lib/tools/polygon/__tests__/index.test.js +0 -92
  63. package/lib/tools/polygon/__tests__/line.test.js +0 -30
  64. package/lib/tools/polygon/__tests__/polygon.test.js +0 -61
  65. package/lib/tools/polygon/component.js +0 -360
  66. package/lib/tools/polygon/component.js.map +0 -1
  67. package/lib/tools/polygon/index.js +0 -89
  68. package/lib/tools/polygon/index.js.map +0 -1
  69. package/lib/tools/polygon/line.js +0 -114
  70. package/lib/tools/polygon/line.js.map +0 -1
  71. package/lib/tools/polygon/polygon.js +0 -131
  72. package/lib/tools/polygon/polygon.js.map +0 -1
  73. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -45
  74. package/lib/tools/shared/arrow-head.js +0 -62
  75. package/lib/tools/shared/arrow-head.js.map +0 -1
  76. package/lib/tools/shared/line/__tests__/index.test.js +0 -129
  77. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -64
  78. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -83
  79. package/lib/tools/shared/line/index.js +0 -541
  80. package/lib/tools/shared/line/index.js.map +0 -1
  81. package/lib/tools/shared/line/line-path.js +0 -121
  82. package/lib/tools/shared/line/line-path.js.map +0 -1
  83. package/lib/tools/shared/line/with-root-edge.js +0 -121
  84. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  85. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -127
  86. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -122
  87. package/lib/tools/shared/point/arrow-point.js +0 -86
  88. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  89. package/lib/tools/shared/point/arrow.js +0 -70
  90. package/lib/tools/shared/point/arrow.js.map +0 -1
  91. package/lib/tools/shared/point/base-point.js +0 -137
  92. package/lib/tools/shared/point/base-point.js.map +0 -1
  93. package/lib/tools/shared/point/index.js +0 -80
  94. package/lib/tools/shared/point/index.js.map +0 -1
  95. package/lib/tools/shared/styles.js +0 -26
  96. package/lib/tools/shared/styles.js.map +0 -1
  97. package/lib/tools/shared/types.js +0 -15
  98. package/lib/tools/shared/types.js.map +0 -1
  99. package/lib/undo-redo.js +0 -67
  100. package/lib/undo-redo.js.map +0 -1
  101. package/lib/use-debounce.js +0 -25
  102. package/lib/use-debounce.js.map +0 -1
  103. package/lib/utils.js +0 -239
  104. package/lib/utils.js.map +0 -1
@@ -1,541 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.styles = exports.lineToolComponent = exports.lineTool = exports.lineBase = void 0;
8
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
- var _react = _interopRequireDefault(require("react"));
16
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
17
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
18
- var _point = require("../point");
19
- var _plot = require("@pie-lib/plot");
20
- var _propTypes = _interopRequireDefault(require("prop-types"));
21
- var _styles = require("../styles");
22
- var _reactDom = _interopRequireDefault(require("react-dom"));
23
- var _markLabel = _interopRequireDefault(require("../../../mark-label"));
24
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
25
- var _renderUi = require("@pie-lib/render-ui");
26
- var _utils = require("../../../utils");
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; })(); }
29
- 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; }
30
- 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; }
31
- var lineTool = exports.lineTool = function lineTool(type, Component) {
32
- return function () {
33
- return {
34
- type: type,
35
- Component: Component,
36
- addPoint: function addPoint(point, mark) {
37
- if (mark && (0, _utils.equalPoints)(mark.root, point)) {
38
- return mark;
39
- }
40
- if (!mark) {
41
- return {
42
- type: type,
43
- building: true,
44
- from: point
45
- };
46
- }
47
- if ((0, _utils.equalPoints)(point, mark.from)) {
48
- return _objectSpread({}, mark);
49
- }
50
- return _objectSpread(_objectSpread({}, mark), {}, {
51
- building: false,
52
- to: point
53
- });
54
- }
55
- };
56
- };
57
- };
58
- var lineToolComponent = exports.lineToolComponent = function lineToolComponent(Component) {
59
- var _LineToolComponent;
60
- return _LineToolComponent = /*#__PURE__*/function (_React$Component) {
61
- function LineToolComponent(props) {
62
- var _this;
63
- (0, _classCallCheck2["default"])(this, LineToolComponent);
64
- _this = _callSuper(this, LineToolComponent, [props]);
65
- (0, _defineProperty2["default"])(_this, "startDrag", function () {
66
- return _this.setState({
67
- mark: _objectSpread({}, _this.props.mark)
68
- });
69
- });
70
- (0, _defineProperty2["default"])(_this, "stopDrag", function () {
71
- var _this$props = _this.props,
72
- onChange = _this$props.onChange,
73
- mark = _this$props.mark;
74
- var update = _objectSpread({}, _this.state.mark);
75
- _this.setState({
76
- mark: undefined
77
- }, function () {
78
- var type = update.type;
79
- var shouldNotChange = type && (type === 'parabola' || type === 'sine' || type === 'absolute' || type === 'exponential') && (0, _utils.sameAxes)(update.from, update.to);
80
- if (!shouldNotChange && type && type === 'exponential' && update.from && update.to) {
81
- shouldNotChange = update.from.y === 0 || update.to.y === 0 || update.from.y * update.to.y < 0;
82
- }
83
- if (!(0, _isEqual["default"])(mark, update) && !shouldNotChange) {
84
- onChange(mark, update);
85
- }
86
- });
87
- });
88
- (0, _defineProperty2["default"])(_this, "changeMark", function (_ref) {
89
- var from = _ref.from,
90
- to = _ref.to,
91
- middle = _ref.middle;
92
- var mark = _objectSpread(_objectSpread({}, _this.state.mark), {}, {
93
- from: from,
94
- to: to
95
- });
96
- if (middle) {
97
- mark = _objectSpread(_objectSpread({}, mark), {}, {
98
- middle: middle
99
- });
100
- }
101
- _this.setState({
102
- mark: mark
103
- });
104
- });
105
- (0, _defineProperty2["default"])(_this, "changeMarkProps", function (_ref2) {
106
- var from = _ref2.from,
107
- to = _ref2.to,
108
- middle = _ref2.middle;
109
- var _this$props2 = _this.props,
110
- onChange = _this$props2.onChange,
111
- mark = _this$props2.mark;
112
- var update = _objectSpread(_objectSpread({}, mark), _this.state.mark);
113
- if (from) {
114
- update = _objectSpread(_objectSpread({}, update), {}, {
115
- from: from
116
- });
117
- }
118
- if (to) {
119
- update = _objectSpread(_objectSpread({}, update), {}, {
120
- to: to
121
- });
122
- }
123
- if (middle) {
124
- update = _objectSpread(_objectSpread({}, update), {}, {
125
- middle: middle
126
- });
127
- }
128
- if (!(0, _isEqual["default"])(mark, update)) {
129
- onChange(mark, update);
130
- }
131
- });
132
- _this.state = {};
133
- return _this;
134
- }
135
- (0, _inherits2["default"])(LineToolComponent, _React$Component);
136
- return (0, _createClass2["default"])(LineToolComponent, [{
137
- key: "render",
138
- value: function render() {
139
- var _this$props3 = this.props,
140
- graphProps = _this$props3.graphProps,
141
- onClick = _this$props3.onClick,
142
- labelNode = _this$props3.labelNode,
143
- labelModeEnabled = _this$props3.labelModeEnabled,
144
- coordinatesOnHover = _this$props3.coordinatesOnHover,
145
- gssLineData = _this$props3.gssLineData;
146
- var mark = this.state.mark ? this.state.mark : this.props.mark;
147
- var from = (0, _cloneDeep["default"])(mark.from);
148
- var to = (0, _cloneDeep["default"])(mark.to);
149
- var middle = (0, _cloneDeep["default"])(mark.middle);
150
-
151
- // SET DISABLED
152
- // if it's a background mark, we need to force disable it
153
- if (from && mark.isBackground) {
154
- from.disabled = true;
155
- }
156
- if (to && mark.isBackground) {
157
- to.disabled = true;
158
- }
159
- if (middle && mark.isBackground) {
160
- middle.disabled = true;
161
- }
162
- return /*#__PURE__*/_react["default"].createElement(Component, {
163
- disabled: mark.disabled,
164
- coordinatesOnHover: coordinatesOnHover,
165
- correctness: mark.correctness,
166
- from: from,
167
- to: to,
168
- middle: middle,
169
- graphProps: graphProps,
170
- fill: mark && mark.fill,
171
- gssLineData: gssLineData,
172
- onChange: this.changeMark,
173
- changeMarkProps: this.changeMarkProps,
174
- onClick: onClick,
175
- onDragStart: this.startDrag,
176
- onDragStop: this.stopDrag,
177
- labelNode: labelNode,
178
- labelModeEnabled: labelModeEnabled
179
- });
180
- }
181
- }]);
182
- }(_react["default"].Component), (0, _defineProperty2["default"])(_LineToolComponent, "propTypes", _objectSpread(_objectSpread({}, _plot.types.ToolPropTypeFields), {}, {
183
- graphProps: _plot.types.GraphPropsType.isRequired
184
- })), _LineToolComponent;
185
- };
186
- var dragOpts = function dragOpts() {
187
- return {
188
- bounds: function bounds(props, _ref3) {
189
- var domain = _ref3.domain,
190
- range = _ref3.range;
191
- var area = _plot.utils.lineToArea(props.from, props.to);
192
- return _plot.utils.bounds(area, domain, range);
193
- },
194
- anchorPoint: function anchorPoint(props) {
195
- var from = props.from;
196
- return from;
197
- },
198
- fromDelta: function fromDelta(props, delta) {
199
- var from = props.from,
200
- to = props.to;
201
- return {
202
- from: _plot.utils.point(from).add(_plot.utils.point(delta)),
203
- to: _plot.utils.point(to).add(_plot.utils.point(delta))
204
- };
205
- }
206
- };
207
- };
208
- var lineBase = exports.lineBase = function lineBase(Comp, opts) {
209
- var DraggableComp = (0, _plot.gridDraggable)(dragOpts())(Comp);
210
- var FromPoint = opts && opts.from ? opts.from : _point.BasePoint;
211
- var ToPoint = opts && opts.to ? opts.to : _point.BasePoint;
212
- var LineBase = /*#__PURE__*/function (_React$Component2) {
213
- function LineBase() {
214
- var _this2;
215
- (0, _classCallCheck2["default"])(this, LineBase);
216
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
217
- args[_key] = arguments[_key];
218
- }
219
- _this2 = _callSuper(this, LineBase, [].concat(args));
220
- (0, _defineProperty2["default"])(_this2, "onChangePoint", function (point) {
221
- var _this2$props = _this2.props,
222
- middle = _this2$props.middle,
223
- onChange = _this2$props.onChange;
224
- var from = point.from,
225
- to = point.to;
226
-
227
- // because point.from.label and point.to.label can be different
228
- if (!(0, _utils.equalPoints)(from, to)) {
229
- if (middle) {
230
- point.middle = _objectSpread(_objectSpread({}, middle), (0, _utils.getMiddleOfTwoPoints)(from, to));
231
- }
232
- onChange(point);
233
- }
234
- });
235
- (0, _defineProperty2["default"])(_this2, "dragComp", function (_ref4) {
236
- var draggedFrom = _ref4.from,
237
- draggedTo = _ref4.to;
238
- var _this2$props2 = _this2.props,
239
- from = _this2$props2.from,
240
- to = _this2$props2.to,
241
- onChange = _this2$props2.onChange,
242
- middle = _this2$props2.middle;
243
- if (from.label) {
244
- draggedFrom.label = from.label;
245
- }
246
- if (to.label) {
247
- draggedTo.label = to.label;
248
- }
249
- var updated = {
250
- from: draggedFrom,
251
- to: draggedTo
252
- };
253
- if (middle) {
254
- updated.middle = _objectSpread(_objectSpread({}, middle), (0, _utils.getMiddleOfTwoPoints)(draggedFrom, draggedTo));
255
- }
256
- onChange(updated);
257
- });
258
- (0, _defineProperty2["default"])(_this2, "dragFrom", function (draggedFrom) {
259
- var _this2$props3 = _this2.props,
260
- from = _this2$props3.from,
261
- to = _this2$props3.to;
262
- if (from.label) {
263
- draggedFrom.label = from.label;
264
- }
265
- if (!(0, _utils.equalPoints)(draggedFrom, to)) {
266
- _this2.onChangePoint({
267
- from: draggedFrom,
268
- to: to
269
- });
270
- }
271
- });
272
- (0, _defineProperty2["default"])(_this2, "dragTo", function (draggedTo) {
273
- var _this2$props4 = _this2.props,
274
- from = _this2$props4.from,
275
- to = _this2$props4.to;
276
- if (to.label) {
277
- draggedTo.label = to.label;
278
- }
279
- if (!(0, _utils.equalPoints)(from, draggedTo)) {
280
- _this2.onChangePoint({
281
- from: from,
282
- to: draggedTo
283
- });
284
- }
285
- });
286
- (0, _defineProperty2["default"])(_this2, "labelChange", function (point, type) {
287
- var changeMarkProps = _this2.props.changeMarkProps;
288
- var update = _objectSpread({}, point);
289
- if (!point.label || (0, _isEmpty["default"])(point.label)) {
290
- delete update.label;
291
- }
292
- changeMarkProps((0, _defineProperty2["default"])({}, type, update));
293
- });
294
- (0, _defineProperty2["default"])(_this2, "clickPoint", function (point, type, data) {
295
- var _this2$props5 = _this2.props,
296
- changeMarkProps = _this2$props5.changeMarkProps,
297
- disabled = _this2$props5.disabled,
298
- from = _this2$props5.from,
299
- to = _this2$props5.to,
300
- labelModeEnabled = _this2$props5.labelModeEnabled,
301
- onClick = _this2$props5.onClick;
302
- if (!labelModeEnabled) {
303
- onClick(point || data);
304
- return;
305
- }
306
- if (disabled) {
307
- return;
308
- }
309
- if (type === 'middle' && !point && from && to) {
310
- point = _objectSpread(_objectSpread({}, point), (0, _utils.getMiddleOfTwoPoints)(from, to));
311
- }
312
- changeMarkProps((0, _defineProperty2["default"])({
313
- from: from,
314
- to: to
315
- }, type, _objectSpread({
316
- label: ''
317
- }, point)));
318
- if (_this2.input[type]) {
319
- _this2.input[type].focus();
320
- }
321
- });
322
- // IMPORTANT, do not remove
323
- (0, _defineProperty2["default"])(_this2, "input", {});
324
- return _this2;
325
- }
326
- (0, _inherits2["default"])(LineBase, _React$Component2);
327
- return (0, _createClass2["default"])(LineBase, [{
328
- key: "render",
329
- value: function render() {
330
- var _this3 = this;
331
- var _this$props4 = this.props,
332
- coordinatesOnHover = _this$props4.coordinatesOnHover,
333
- graphProps = _this$props4.graphProps,
334
- fill = _this$props4.fill,
335
- gssLineData = _this$props4.gssLineData,
336
- onDragStart = _this$props4.onDragStart,
337
- onDragStop = _this$props4.onDragStop,
338
- from = _this$props4.from,
339
- to = _this$props4.to,
340
- middle = _this$props4.middle,
341
- disabled = _this$props4.disabled,
342
- correctness = _this$props4.correctness,
343
- onClick = _this$props4.onClick,
344
- labelNode = _this$props4.labelNode,
345
- labelModeEnabled = _this$props4.labelModeEnabled;
346
- var common = {
347
- graphProps: graphProps,
348
- fill: fill,
349
- onDragStart: onDragStart,
350
- onDragStop: onDragStop,
351
- disabled: disabled,
352
- correctness: correctness,
353
- onClick: onClick
354
- };
355
- if (gssLineData && gssLineData.selectedTool === 'solutionSet') {
356
- //removing dragging option for line if solution set is clicked.
357
- common = {
358
- graphProps: graphProps,
359
- fill: fill,
360
- disabled: disabled,
361
- correctness: correctness,
362
- onClick: onClick
363
- };
364
- }
365
- var angle = to ? _plot.trig.toDegrees(_plot.trig.angle(from, to)) : 0;
366
- var fromLabelNode = null;
367
- var toLabelNode = null;
368
- var lineLabelNode = null;
369
- if (labelNode) {
370
- if (from && Object.prototype.hasOwnProperty.call(from, 'label')) {
371
- fromLabelNode = /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
372
- inputRef: function inputRef(r) {
373
- return _this3.input.from = r;
374
- },
375
- disabled: !labelModeEnabled,
376
- mark: from,
377
- graphProps: graphProps,
378
- onChange: function onChange(label) {
379
- return _this3.labelChange(_objectSpread(_objectSpread({}, from), {}, {
380
- label: label
381
- }), 'from');
382
- }
383
- }), labelNode);
384
- }
385
- if (to && Object.prototype.hasOwnProperty.call(to, 'label')) {
386
- toLabelNode = /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
387
- inputRef: function inputRef(r) {
388
- return _this3.input.to = r;
389
- },
390
- disabled: !labelModeEnabled,
391
- mark: to,
392
- graphProps: graphProps,
393
- onChange: function onChange(label) {
394
- return _this3.labelChange(_objectSpread(_objectSpread({}, to), {}, {
395
- label: label
396
- }), 'to');
397
- }
398
- }), labelNode);
399
- }
400
- if (middle && Object.prototype.hasOwnProperty.call(middle, 'label')) {
401
- lineLabelNode = /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
402
- inputRef: function inputRef(r) {
403
- return _this3.input.middle = r;
404
- },
405
- disabled: !labelModeEnabled,
406
- mark: middle,
407
- graphProps: graphProps,
408
- onChange: function onChange(label) {
409
- return _this3.labelChange(_objectSpread(_objectSpread({}, middle), {}, {
410
- label: label
411
- }), 'middle');
412
- }
413
- }), labelNode);
414
- }
415
- }
416
- if (gssLineData && gssLineData.selectedTool === 'solutionSet') {
417
- //removing dragging feature of line and point if solution set is true.
418
- return /*#__PURE__*/_react["default"].createElement("g", null, to && /*#__PURE__*/_react["default"].createElement(DraggableComp, (0, _extends2["default"])({
419
- from: from,
420
- to: to,
421
- middle: middle
422
- }, common)), lineLabelNode, /*#__PURE__*/_react["default"].createElement(FromPoint, (0, _extends2["default"])({
423
- x: from.x,
424
- y: from.y,
425
- labelNode: labelNode,
426
- coordinatesOnHover: coordinatesOnHover
427
- }, common)), fromLabelNode, to && /*#__PURE__*/_react["default"].createElement(ToPoint, (0, _extends2["default"])({
428
- x: to.x,
429
- y: to.y,
430
- angle: angle //angle + 45}
431
- ,
432
- labelNode: labelNode,
433
- coordinatesOnHover: coordinatesOnHover
434
- }, common)), toLabelNode);
435
- } else {
436
- return /*#__PURE__*/_react["default"].createElement("g", null, to && /*#__PURE__*/_react["default"].createElement(DraggableComp, (0, _extends2["default"])({
437
- from: from,
438
- to: to,
439
- middle: middle,
440
- onDrag: this.dragComp
441
- }, common, {
442
- onClick: function onClick(data) {
443
- return _this3.clickPoint(middle, 'middle', data);
444
- }
445
- })), lineLabelNode, /*#__PURE__*/_react["default"].createElement(FromPoint, (0, _extends2["default"])({
446
- x: from.x,
447
- y: from.y,
448
- labelNode: labelNode,
449
- coordinatesOnHover: coordinatesOnHover,
450
- onDrag: this.dragFrom
451
- }, common, {
452
- onClick: function onClick(data) {
453
- return _this3.clickPoint(from, 'from', data);
454
- }
455
- })), fromLabelNode, to && /*#__PURE__*/_react["default"].createElement(ToPoint, (0, _extends2["default"])({
456
- x: to.x,
457
- y: to.y,
458
- angle: angle //angle + 45}
459
- ,
460
- labelNode: labelNode,
461
- coordinatesOnHover: coordinatesOnHover,
462
- onDrag: this.dragTo
463
- }, common, {
464
- onClick: function onClick(data) {
465
- return _this3.clickPoint(to, 'to', data);
466
- }
467
- })), toLabelNode);
468
- }
469
- }
470
- }]);
471
- }(_react["default"].Component);
472
- (0, _defineProperty2["default"])(LineBase, "propTypes", {
473
- coordinatesOnHover: _propTypes["default"].bool,
474
- graphProps: _plot.types.GraphPropsType,
475
- from: _plot.types.PointType,
476
- to: _plot.types.PointType,
477
- middle: _plot.types.PointType,
478
- onChange: _propTypes["default"].func,
479
- onDragStart: _propTypes["default"].func,
480
- onDragStop: _propTypes["default"].func,
481
- onClick: _propTypes["default"].func,
482
- correctness: _propTypes["default"].string,
483
- fill: _propTypes["default"].string,
484
- gssLineData: _propTypes["default"].object,
485
- disabled: _propTypes["default"].bool,
486
- labelNode: _propTypes["default"].object,
487
- labelModeEnabled: _propTypes["default"].bool,
488
- changeMarkProps: _propTypes["default"].func
489
- });
490
- return LineBase;
491
- };
492
- var styles = exports.styles = {
493
- line: function line() {
494
- return {
495
- fill: 'transparent',
496
- stroke: _renderUi.color.defaults.BLACK,
497
- strokeWidth: 4,
498
- transition: 'stroke 200ms ease-in, stroke-width 200ms ease-in',
499
- '&:hover': {
500
- strokeWidth: 6,
501
- stroke: _renderUi.color.defaults.BLACK
502
- }
503
- };
504
- },
505
- dashedLine: function dashedLine() {
506
- return {
507
- fill: 'transparent',
508
- stroke: _renderUi.color.defaults.BLACK,
509
- strokeWidth: 4,
510
- transition: 'stroke 200ms ease-in, stroke-width 200ms ease-in',
511
- '&:hover': {
512
- strokeWidth: 6,
513
- stroke: _renderUi.color.defaults.BLACK
514
- },
515
- strokeDasharray: '3,3'
516
- };
517
- },
518
- arrow: function arrow() {
519
- return {
520
- fill: _renderUi.color.defaults.SECONDARY
521
- };
522
- },
523
- disabledArrow: function disabledArrow() {
524
- return _objectSpread({}, (0, _styles.disabled)());
525
- },
526
- disabled: function disabled() {
527
- return _objectSpread(_objectSpread({}, (0, _styles.disabled)('stroke')), {}, {
528
- strokeWidth: 2
529
- });
530
- },
531
- correct: function correct(theme, key) {
532
- return _objectSpread({}, (0, _styles.correct)(key));
533
- },
534
- incorrect: function incorrect(theme, key) {
535
- return _objectSpread({}, (0, _styles.incorrect)(key));
536
- },
537
- missing: function missing(theme, key) {
538
- return _objectSpread({}, (0, _styles.missing)(key));
539
- }
540
- };
541
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9pc0VxdWFsIiwiX2Nsb25lRGVlcCIsIl9wb2ludCIsIl9wbG90IiwiX3Byb3BUeXBlcyIsIl9zdHlsZXMiLCJfcmVhY3REb20iLCJfbWFya0xhYmVsIiwiX2lzRW1wdHkiLCJfcmVuZGVyVWkiLCJfdXRpbHMiLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIm93bktleXMiLCJyIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImxpbmVUb29sIiwiZXhwb3J0cyIsInR5cGUiLCJDb21wb25lbnQiLCJhZGRQb2ludCIsInBvaW50IiwibWFyayIsImVxdWFsUG9pbnRzIiwicm9vdCIsImJ1aWxkaW5nIiwiZnJvbSIsInRvIiwibGluZVRvb2xDb21wb25lbnQiLCJfTGluZVRvb2xDb21wb25lbnQiLCJfUmVhY3QkQ29tcG9uZW50IiwiTGluZVRvb2xDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsInNldFN0YXRlIiwiX3RoaXMkcHJvcHMiLCJvbkNoYW5nZSIsInVwZGF0ZSIsInN0YXRlIiwidW5kZWZpbmVkIiwic2hvdWxkTm90Q2hhbmdlIiwic2FtZUF4ZXMiLCJ5IiwiaXNFcXVhbCIsIl9yZWYiLCJtaWRkbGUiLCJfcmVmMiIsIl90aGlzJHByb3BzMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJyZW5kZXIiLCJfdGhpcyRwcm9wczMiLCJncmFwaFByb3BzIiwib25DbGljayIsImxhYmVsTm9kZSIsImxhYmVsTW9kZUVuYWJsZWQiLCJjb29yZGluYXRlc09uSG92ZXIiLCJnc3NMaW5lRGF0YSIsImNsb25lRGVlcCIsImlzQmFja2dyb3VuZCIsImRpc2FibGVkIiwiY3JlYXRlRWxlbWVudCIsImNvcnJlY3RuZXNzIiwiZmlsbCIsImNoYW5nZU1hcmsiLCJjaGFuZ2VNYXJrUHJvcHMiLCJvbkRyYWdTdGFydCIsInN0YXJ0RHJhZyIsIm9uRHJhZ1N0b3AiLCJzdG9wRHJhZyIsIlJlYWN0IiwidHlwZXMiLCJUb29sUHJvcFR5cGVGaWVsZHMiLCJHcmFwaFByb3BzVHlwZSIsImlzUmVxdWlyZWQiLCJkcmFnT3B0cyIsImJvdW5kcyIsIl9yZWYzIiwiZG9tYWluIiwicmFuZ2UiLCJhcmVhIiwidXRpbHMiLCJsaW5lVG9BcmVhIiwiYW5jaG9yUG9pbnQiLCJmcm9tRGVsdGEiLCJkZWx0YSIsImFkZCIsImxpbmVCYXNlIiwiQ29tcCIsIm9wdHMiLCJEcmFnZ2FibGVDb21wIiwiZ3JpZERyYWdnYWJsZSIsIkZyb21Qb2ludCIsIkJhc2VQb2ludCIsIlRvUG9pbnQiLCJMaW5lQmFzZSIsIl9SZWFjdCRDb21wb25lbnQyIiwiX3RoaXMyIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfdGhpczIkcHJvcHMiLCJnZXRNaWRkbGVPZlR3b1BvaW50cyIsIl9yZWY0IiwiZHJhZ2dlZEZyb20iLCJkcmFnZ2VkVG8iLCJfdGhpczIkcHJvcHMyIiwibGFiZWwiLCJ1cGRhdGVkIiwiX3RoaXMyJHByb3BzMyIsIm9uQ2hhbmdlUG9pbnQiLCJfdGhpczIkcHJvcHM0IiwiaXNFbXB0eSIsImRhdGEiLCJfdGhpczIkcHJvcHM1IiwiaW5wdXQiLCJmb2N1cyIsIl90aGlzMyIsIl90aGlzJHByb3BzNCIsImNvbW1vbiIsInNlbGVjdGVkVG9vbCIsImFuZ2xlIiwidHJpZyIsInRvRGVncmVlcyIsImZyb21MYWJlbE5vZGUiLCJ0b0xhYmVsTm9kZSIsImxpbmVMYWJlbE5vZGUiLCJoYXNPd25Qcm9wZXJ0eSIsIlJlYWN0RE9NIiwiY3JlYXRlUG9ydGFsIiwiaW5wdXRSZWYiLCJsYWJlbENoYW5nZSIsIl9leHRlbmRzMiIsIngiLCJvbkRyYWciLCJkcmFnQ29tcCIsImNsaWNrUG9pbnQiLCJkcmFnRnJvbSIsImRyYWdUbyIsIlByb3BUeXBlcyIsImJvb2wiLCJQb2ludFR5cGUiLCJmdW5jIiwic3RyaW5nIiwib2JqZWN0Iiwic3R5bGVzIiwibGluZSIsInN0cm9rZSIsImNvbG9yIiwiZGVmYXVsdHMiLCJCTEFDSyIsInN0cm9rZVdpZHRoIiwidHJhbnNpdGlvbiIsImRhc2hlZExpbmUiLCJzdHJva2VEYXNoYXJyYXkiLCJhcnJvdyIsIlNFQ09OREFSWSIsImRpc2FibGVkQXJyb3ciLCJjb3JyZWN0IiwidGhlbWUiLCJpbmNvcnJlY3QiLCJtaXNzaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xzL3NoYXJlZC9saW5lL2luZGV4LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uL3BvaW50JztcbmltcG9ydCB7IHR5cGVzLCB1dGlscywgZ3JpZERyYWdnYWJsZSwgdHJpZyB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGRpc2FibGVkLCBjb3JyZWN0LCBpbmNvcnJlY3QsIG1pc3NpbmcgfSBmcm9tICcuLi9zdHlsZXMnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgTWFya0xhYmVsIGZyb20gJy4uLy4uLy4uL21hcmstbGFiZWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHsgY29sb3IgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IHsgZ2V0TWlkZGxlT2ZUd29Qb2ludHMsIGVxdWFsUG9pbnRzLCBzYW1lQXhlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGxpbmVUb29sID0gKHR5cGUsIENvbXBvbmVudCkgPT4gKCkgPT4gKHtcbiAgdHlwZSxcbiAgQ29tcG9uZW50LFxuICBhZGRQb2ludDogKHBvaW50LCBtYXJrKSA9PiB7XG4gICAgaWYgKG1hcmsgJiYgZXF1YWxQb2ludHMobWFyay5yb290LCBwb2ludCkpIHtcbiAgICAgIHJldHVybiBtYXJrO1xuICAgIH1cblxuICAgIGlmICghbWFyaykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgYnVpbGRpbmc6IHRydWUsXG4gICAgICAgIGZyb206IHBvaW50LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZXF1YWxQb2ludHMocG9pbnQsIG1hcmsuZnJvbSkpIHtcbiAgICAgIHJldHVybiB7IC4uLm1hcmsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5tYXJrLCBidWlsZGluZzogZmFsc2UsIHRvOiBwb2ludCB9O1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBsaW5lVG9vbENvbXBvbmVudCA9IChDb21wb25lbnQpID0+IHtcbiAgcmV0dXJuIGNsYXNzIExpbmVUb29sQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgLi4udHlwZXMuVG9vbFByb3BUeXBlRmllbGRzLFxuICAgICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICBzdGFydERyYWcgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHsgbWFyazogeyAuLi50aGlzLnByb3BzLm1hcmsgfSB9KTtcblxuICAgIHN0b3BEcmFnID0gKCkgPT4ge1xuICAgICAgY29uc3QgeyBvbkNoYW5nZSwgbWFyayB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHsgLi4udGhpcy5zdGF0ZS5tYXJrIH07XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrOiB1bmRlZmluZWQgfSwgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHVwZGF0ZTtcbiAgICAgICAgbGV0IHNob3VsZE5vdENoYW5nZSA9XG4gICAgICAgICAgdHlwZSAmJlxuICAgICAgICAgICh0eXBlID09PSAncGFyYWJvbGEnIHx8IHR5cGUgPT09ICdzaW5lJyB8fCB0eXBlID09PSAnYWJzb2x1dGUnIHx8IHR5cGUgPT09ICdleHBvbmVudGlhbCcpICYmXG4gICAgICAgICAgc2FtZUF4ZXModXBkYXRlLmZyb20sIHVwZGF0ZS50byk7XG4gICAgICAgIGlmICghc2hvdWxkTm90Q2hhbmdlICYmIHR5cGUgJiYgdHlwZSA9PT0gJ2V4cG9uZW50aWFsJyAmJiB1cGRhdGUuZnJvbSAmJiB1cGRhdGUudG8pIHtcbiAgICAgICAgICBzaG91bGROb3RDaGFuZ2UgPSB1cGRhdGUuZnJvbS55ID09PSAwIHx8IHVwZGF0ZS50by55ID09PSAwIHx8IHVwZGF0ZS5mcm9tLnkgKiB1cGRhdGUudG8ueSA8IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKG1hcmssIHVwZGF0ZSkgJiYgIXNob3VsZE5vdENoYW5nZSkge1xuICAgICAgICAgIG9uQ2hhbmdlKG1hcmssIHVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjaGFuZ2VNYXJrID0gKHsgZnJvbSwgdG8sIG1pZGRsZSB9KSA9PiB7XG4gICAgICBsZXQgbWFyayA9IHsgLi4udGhpcy5zdGF0ZS5tYXJrLCBmcm9tLCB0byB9O1xuXG4gICAgICBpZiAobWlkZGxlKSB7XG4gICAgICAgIG1hcmsgPSB7IC4uLm1hcmssIG1pZGRsZSB9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgbWFyayB9KTtcbiAgICB9O1xuXG4gICAgY2hhbmdlTWFya1Byb3BzID0gKHsgZnJvbSwgdG8sIG1pZGRsZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IG9uQ2hhbmdlLCBtYXJrIH0gPSB0aGlzLnByb3BzO1xuICAgICAgbGV0IHVwZGF0ZSA9IHsgLi4ubWFyaywgLi4udGhpcy5zdGF0ZS5tYXJrIH07XG5cbiAgICAgIGlmIChmcm9tKSB7XG4gICAgICAgIHVwZGF0ZSA9IHsgLi4udXBkYXRlLCBmcm9tIH07XG4gICAgICB9XG5cbiAgICAgIGlmICh0bykge1xuICAgICAgICB1cGRhdGUgPSB7IC4uLnVwZGF0ZSwgdG8gfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1pZGRsZSkge1xuICAgICAgICB1cGRhdGUgPSB7IC4uLnVwZGF0ZSwgbWlkZGxlIH07XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNFcXVhbChtYXJrLCB1cGRhdGUpKSB7XG4gICAgICAgIG9uQ2hhbmdlKG1hcmssIHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHsgZ3JhcGhQcm9wcywgb25DbGljaywgbGFiZWxOb2RlLCBsYWJlbE1vZGVFbmFibGVkLCBjb29yZGluYXRlc09uSG92ZXIsIGdzc0xpbmVEYXRhIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFyayA9IHRoaXMuc3RhdGUubWFyayA/IHRoaXMuc3RhdGUubWFyayA6IHRoaXMucHJvcHMubWFyaztcblxuICAgICAgY29uc3QgZnJvbSA9IGNsb25lRGVlcChtYXJrLmZyb20pO1xuICAgICAgY29uc3QgdG8gPSBjbG9uZURlZXAobWFyay50byk7XG4gICAgICBjb25zdCBtaWRkbGUgPSBjbG9uZURlZXAobWFyay5taWRkbGUpO1xuXG4gICAgICAvLyBTRVQgRElTQUJMRURcbiAgICAgIC8vIGlmIGl0J3MgYSBiYWNrZ3JvdW5kIG1hcmssIHdlIG5lZWQgdG8gZm9yY2UgZGlzYWJsZSBpdFxuICAgICAgaWYgKGZyb20gJiYgbWFyay5pc0JhY2tncm91bmQpIHtcbiAgICAgICAgZnJvbS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0byAmJiBtYXJrLmlzQmFja2dyb3VuZCkge1xuICAgICAgICB0by5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtaWRkbGUgJiYgbWFyay5pc0JhY2tncm91bmQpIHtcbiAgICAgICAgbWlkZGxlLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbXBvbmVudFxuICAgICAgICAgIGRpc2FibGVkPXttYXJrLmRpc2FibGVkfVxuICAgICAgICAgIGNvb3JkaW5hdGVzT25Ib3Zlcj17Y29vcmRpbmF0ZXNPbkhvdmVyfVxuICAgICAgICAgIGNvcnJlY3RuZXNzPXttYXJrLmNvcnJlY3RuZXNzfVxuICAgICAgICAgIGZyb209e2Zyb219XG4gICAgICAgICAgdG89e3RvfVxuICAgICAgICAgIG1pZGRsZT17bWlkZGxlfVxuICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgZmlsbD17bWFyayAmJiBtYXJrLmZpbGx9XG4gICAgICAgICAgZ3NzTGluZURhdGE9e2dzc0xpbmVEYXRhfVxuICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmNoYW5nZU1hcmt9XG4gICAgICAgICAgY2hhbmdlTWFya1Byb3BzPXt0aGlzLmNoYW5nZU1hcmtQcm9wc31cbiAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgIG9uRHJhZ1N0YXJ0PXt0aGlzLnN0YXJ0RHJhZ31cbiAgICAgICAgICBvbkRyYWdTdG9wPXt0aGlzLnN0b3BEcmFnfVxuICAgICAgICAgIGxhYmVsTm9kZT17bGFiZWxOb2RlfVxuICAgICAgICAgIGxhYmVsTW9kZUVuYWJsZWQ9e2xhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGRyYWdPcHRzID0gKCkgPT4gKHtcbiAgYm91bmRzOiAocHJvcHMsIHsgZG9tYWluLCByYW5nZSB9KSA9PiB7XG4gICAgY29uc3QgYXJlYSA9IHV0aWxzLmxpbmVUb0FyZWEocHJvcHMuZnJvbSwgcHJvcHMudG8pO1xuICAgIHJldHVybiB1dGlscy5ib3VuZHMoYXJlYSwgZG9tYWluLCByYW5nZSk7XG4gIH0sXG4gIGFuY2hvclBvaW50OiAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGZyb20gfSA9IHByb3BzO1xuICAgIHJldHVybiBmcm9tO1xuICB9LFxuICBmcm9tRGVsdGE6IChwcm9wcywgZGVsdGEpID0+IHtcbiAgICBjb25zdCB7IGZyb20sIHRvIH0gPSBwcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogdXRpbHMucG9pbnQoZnJvbSkuYWRkKHV0aWxzLnBvaW50KGRlbHRhKSksXG4gICAgICB0bzogdXRpbHMucG9pbnQodG8pLmFkZCh1dGlscy5wb2ludChkZWx0YSkpLFxuICAgIH07XG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGxpbmVCYXNlID0gKENvbXAsIG9wdHMpID0+IHtcbiAgY29uc3QgRHJhZ2dhYmxlQ29tcCA9IGdyaWREcmFnZ2FibGUoZHJhZ09wdHMoKSkoQ29tcCk7XG5cbiAgY29uc3QgRnJvbVBvaW50ID0gb3B0cyAmJiBvcHRzLmZyb20gPyBvcHRzLmZyb20gOiBCYXNlUG9pbnQ7XG4gIGNvbnN0IFRvUG9pbnQgPSBvcHRzICYmIG9wdHMudG8gPyBvcHRzLnRvIDogQmFzZVBvaW50O1xuXG4gIGNsYXNzIExpbmVCYXNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLFxuICAgICAgZnJvbTogdHlwZXMuUG9pbnRUeXBlLFxuICAgICAgdG86IHR5cGVzLlBvaW50VHlwZSxcbiAgICAgIG1pZGRsZTogdHlwZXMuUG9pbnRUeXBlLFxuICAgICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgb25EcmFnU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgb25EcmFnU3RvcDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGNvcnJlY3RuZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgZmlsbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGdzc0xpbmVEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWxOb2RlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgbGFiZWxNb2RlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBjaGFuZ2VNYXJrUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIH07XG5cbiAgICBvbkNoYW5nZVBvaW50ID0gKHBvaW50KSA9PiB7XG4gICAgICBjb25zdCB7IG1pZGRsZSwgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSBwb2ludDtcblxuICAgICAgLy8gYmVjYXVzZSBwb2ludC5mcm9tLmxhYmVsIGFuZCBwb2ludC50by5sYWJlbCBjYW4gYmUgZGlmZmVyZW50XG4gICAgICBpZiAoIWVxdWFsUG9pbnRzKGZyb20sIHRvKSkge1xuICAgICAgICBpZiAobWlkZGxlKSB7XG4gICAgICAgICAgcG9pbnQubWlkZGxlID0geyAuLi5taWRkbGUsIC4uLmdldE1pZGRsZU9mVHdvUG9pbnRzKGZyb20sIHRvKSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb25DaGFuZ2UocG9pbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkcmFnQ29tcCA9ICh7IGZyb206IGRyYWdnZWRGcm9tLCB0bzogZHJhZ2dlZFRvIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgZnJvbSwgdG8sIG9uQ2hhbmdlLCBtaWRkbGUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmIChmcm9tLmxhYmVsKSB7XG4gICAgICAgIGRyYWdnZWRGcm9tLmxhYmVsID0gZnJvbS5sYWJlbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvLmxhYmVsKSB7XG4gICAgICAgIGRyYWdnZWRUby5sYWJlbCA9IHRvLmxhYmVsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1cGRhdGVkID0geyBmcm9tOiBkcmFnZ2VkRnJvbSwgdG86IGRyYWdnZWRUbyB9O1xuXG4gICAgICBpZiAobWlkZGxlKSB7XG4gICAgICAgIHVwZGF0ZWQubWlkZGxlID0geyAuLi5taWRkbGUsIC4uLmdldE1pZGRsZU9mVHdvUG9pbnRzKGRyYWdnZWRGcm9tLCBkcmFnZ2VkVG8pIH07XG4gICAgICB9XG5cbiAgICAgIG9uQ2hhbmdlKHVwZGF0ZWQpO1xuICAgIH07XG5cbiAgICBkcmFnRnJvbSA9IChkcmFnZ2VkRnJvbSkgPT4ge1xuICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKGZyb20ubGFiZWwpIHtcbiAgICAgICAgZHJhZ2dlZEZyb20ubGFiZWwgPSBmcm9tLmxhYmVsO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVxdWFsUG9pbnRzKGRyYWdnZWRGcm9tLCB0bykpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZVBvaW50KHsgZnJvbTogZHJhZ2dlZEZyb20sIHRvOiB0byB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZHJhZ1RvID0gKGRyYWdnZWRUbykgPT4ge1xuICAgICAgY29uc3QgeyBmcm9tLCB0byB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHRvLmxhYmVsKSB7XG4gICAgICAgIGRyYWdnZWRUby5sYWJlbCA9IHRvLmxhYmVsO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVxdWFsUG9pbnRzKGZyb20sIGRyYWdnZWRUbykpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZVBvaW50KHsgZnJvbTogZnJvbSwgdG86IGRyYWdnZWRUbyB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGFiZWxDaGFuZ2UgPSAocG9pbnQsIHR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHsgY2hhbmdlTWFya1Byb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgdXBkYXRlID0geyAuLi5wb2ludCB9O1xuXG4gICAgICBpZiAoIXBvaW50LmxhYmVsIHx8IGlzRW1wdHkocG9pbnQubGFiZWwpKSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGUubGFiZWw7XG4gICAgICB9XG5cbiAgICAgIGNoYW5nZU1hcmtQcm9wcyh7IFt0eXBlXTogdXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBjbGlja1BvaW50ID0gKHBvaW50LCB0eXBlLCBkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IGNoYW5nZU1hcmtQcm9wcywgZGlzYWJsZWQsIGZyb20sIHRvLCBsYWJlbE1vZGVFbmFibGVkLCBvbkNsaWNrIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAoIWxhYmVsTW9kZUVuYWJsZWQpIHtcbiAgICAgICAgb25DbGljayhwb2ludCB8fCBkYXRhKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ21pZGRsZScgJiYgIXBvaW50ICYmIGZyb20gJiYgdG8pIHtcbiAgICAgICAgcG9pbnQgPSB7IC4uLnBvaW50LCAuLi5nZXRNaWRkbGVPZlR3b1BvaW50cyhmcm9tLCB0bykgfTtcbiAgICAgIH1cblxuICAgICAgY2hhbmdlTWFya1Byb3BzKHsgZnJvbSwgdG8sIFt0eXBlXTogeyBsYWJlbDogJycsIC4uLnBvaW50IH0gfSk7XG5cbiAgICAgIGlmICh0aGlzLmlucHV0W3R5cGVdKSB7XG4gICAgICAgIHRoaXMuaW5wdXRbdHlwZV0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gSU1QT1JUQU5ULCBkbyBub3QgcmVtb3ZlXG4gICAgaW5wdXQgPSB7fTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyLFxuICAgICAgICBncmFwaFByb3BzLFxuICAgICAgICBmaWxsLFxuICAgICAgICBnc3NMaW5lRGF0YSxcbiAgICAgICAgb25EcmFnU3RhcnQsXG4gICAgICAgIG9uRHJhZ1N0b3AsXG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvLFxuICAgICAgICBtaWRkbGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb3JyZWN0bmVzcyxcbiAgICAgICAgb25DbGljayxcbiAgICAgICAgbGFiZWxOb2RlLFxuICAgICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBsZXQgY29tbW9uID0geyBncmFwaFByb3BzLCBmaWxsLCBvbkRyYWdTdGFydCwgb25EcmFnU3RvcCwgZGlzYWJsZWQsIGNvcnJlY3RuZXNzLCBvbkNsaWNrIH07XG4gICAgICBpZiAoZ3NzTGluZURhdGEgJiYgZ3NzTGluZURhdGEuc2VsZWN0ZWRUb29sID09PSAnc29sdXRpb25TZXQnKSB7XG4gICAgICAgIC8vcmVtb3ZpbmcgZHJhZ2dpbmcgb3B0aW9uIGZvciBsaW5lIGlmIHNvbHV0aW9uIHNldCBpcyBjbGlja2VkLlxuICAgICAgICBjb21tb24gPSB7IGdyYXBoUHJvcHMsIGZpbGwsIGRpc2FibGVkLCBjb3JyZWN0bmVzcywgb25DbGljayB9O1xuICAgICAgfVxuICAgICAgY29uc3QgYW5nbGUgPSB0byA/IHRyaWcudG9EZWdyZWVzKHRyaWcuYW5nbGUoZnJvbSwgdG8pKSA6IDA7XG5cbiAgICAgIGxldCBmcm9tTGFiZWxOb2RlID0gbnVsbDtcbiAgICAgIGxldCB0b0xhYmVsTm9kZSA9IG51bGw7XG4gICAgICBsZXQgbGluZUxhYmVsTm9kZSA9IG51bGw7XG5cbiAgICAgIGlmIChsYWJlbE5vZGUpIHtcbiAgICAgICAgaWYgKGZyb20gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sICdsYWJlbCcpKSB7XG4gICAgICAgICAgZnJvbUxhYmVsTm9kZSA9IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dC5mcm9tID0gcil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshbGFiZWxNb2RlRW5hYmxlZH1cbiAgICAgICAgICAgICAgbWFyaz17ZnJvbX1cbiAgICAgICAgICAgICAgZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhsYWJlbCkgPT4gdGhpcy5sYWJlbENoYW5nZSh7IC4uLmZyb20sIGxhYmVsIH0sICdmcm9tJyl9XG4gICAgICAgICAgICAvPixcbiAgICAgICAgICAgIGxhYmVsTm9kZSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0bywgJ2xhYmVsJykpIHtcbiAgICAgICAgICB0b0xhYmVsTm9kZSA9IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dC50byA9IHIpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWxhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgIG1hcms9e3RvfVxuICAgICAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGxhYmVsKSA9PiB0aGlzLmxhYmVsQ2hhbmdlKHsgLi4udG8sIGxhYmVsIH0sICd0bycpfVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaWRkbGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1pZGRsZSwgJ2xhYmVsJykpIHtcbiAgICAgICAgICBsaW5lTGFiZWxOb2RlID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICAgICAgPE1hcmtMYWJlbFxuICAgICAgICAgICAgICBpbnB1dFJlZj17KHIpID0+ICh0aGlzLmlucHV0Lm1pZGRsZSA9IHIpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWxhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgICAgICAgIG1hcms9e21pZGRsZX1cbiAgICAgICAgICAgICAgZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhsYWJlbCkgPT4gdGhpcy5sYWJlbENoYW5nZSh7IC4uLm1pZGRsZSwgbGFiZWwgfSwgJ21pZGRsZScpfVxuICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGdzc0xpbmVEYXRhICYmIGdzc0xpbmVEYXRhLnNlbGVjdGVkVG9vbCA9PT0gJ3NvbHV0aW9uU2V0Jykge1xuICAgICAgICAvL3JlbW92aW5nIGRyYWdnaW5nIGZlYXR1cmUgb2YgbGluZSBhbmQgcG9pbnQgaWYgc29sdXRpb24gc2V0IGlzIHRydWUuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGc+XG4gICAgICAgICAgICB7dG8gJiYgPERyYWdnYWJsZUNvbXAgZnJvbT17ZnJvbX0gdG89e3RvfSBtaWRkbGU9e21pZGRsZX0gey4uLmNvbW1vbn0gLz59XG4gICAgICAgICAgICB7bGluZUxhYmVsTm9kZX1cblxuICAgICAgICAgICAgPEZyb21Qb2ludFxuICAgICAgICAgICAgICB4PXtmcm9tLnh9XG4gICAgICAgICAgICAgIHk9e2Zyb20ueX1cbiAgICAgICAgICAgICAgbGFiZWxOb2RlPXtsYWJlbE5vZGV9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVzT25Ib3Zlcj17Y29vcmRpbmF0ZXNPbkhvdmVyfVxuICAgICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtmcm9tTGFiZWxOb2RlfVxuXG4gICAgICAgICAgICB7dG8gJiYgKFxuICAgICAgICAgICAgICA8VG9Qb2ludFxuICAgICAgICAgICAgICAgIHg9e3RvLnh9XG4gICAgICAgICAgICAgICAgeT17dG8ueX1cbiAgICAgICAgICAgICAgICBhbmdsZT17YW5nbGV9IC8vYW5nbGUgKyA0NX1cbiAgICAgICAgICAgICAgICBsYWJlbE5vZGU9e2xhYmVsTm9kZX1cbiAgICAgICAgICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHt0b0xhYmVsTm9kZX1cbiAgICAgICAgICA8L2c+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxnPlxuICAgICAgICAgICAge3RvICYmIChcbiAgICAgICAgICAgICAgPERyYWdnYWJsZUNvbXBcbiAgICAgICAgICAgICAgICBmcm9tPXtmcm9tfVxuICAgICAgICAgICAgICAgIHRvPXt0b31cbiAgICAgICAgICAgICAgICBtaWRkbGU9e21pZGRsZX1cbiAgICAgICAgICAgICAgICBvbkRyYWc9e3RoaXMuZHJhZ0NvbXB9XG4gICAgICAgICAgICAgICAgey4uLmNvbW1vbn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSkgPT4gdGhpcy5jbGlja1BvaW50KG1pZGRsZSwgJ21pZGRsZScsIGRhdGEpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtsaW5lTGFiZWxOb2RlfVxuXG4gICAgICAgICAgICA8RnJvbVBvaW50XG4gICAgICAgICAgICAgIHg9e2Zyb20ueH1cbiAgICAgICAgICAgICAgeT17ZnJvbS55fVxuICAgICAgICAgICAgICBsYWJlbE5vZGU9e2xhYmVsTm9kZX1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyPXtjb29yZGluYXRlc09uSG92ZXJ9XG4gICAgICAgICAgICAgIG9uRHJhZz17dGhpcy5kcmFnRnJvbX1cbiAgICAgICAgICAgICAgey4uLmNvbW1vbn1cbiAgICAgICAgICAgICAgb25DbGljaz17KGRhdGEpID0+IHRoaXMuY2xpY2tQb2ludChmcm9tLCAnZnJvbScsIGRhdGEpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtmcm9tTGFiZWxOb2RlfVxuXG4gICAgICAgICAgICB7dG8gJiYgKFxuICAgICAgICAgICAgICA8VG9Qb2ludFxuICAgICAgICAgICAgICAgIHg9e3RvLnh9XG4gICAgICAgICAgICAgICAgeT17dG8ueX1cbiAgICAgICAgICAgICAgICBhbmdsZT17YW5nbGV9IC8vYW5nbGUgKyA0NX1cbiAgICAgICAgICAgICAgICBsYWJlbE5vZGU9e2xhYmVsTm9kZX1cbiAgICAgICAgICAgICAgICBjb29yZGluYXRlc09uSG92ZXI9e2Nvb3JkaW5hdGVzT25Ib3Zlcn1cbiAgICAgICAgICAgICAgICBvbkRyYWc9e3RoaXMuZHJhZ1RvfVxuICAgICAgICAgICAgICAgIHsuLi5jb21tb259XG4gICAgICAgICAgICAgICAgb25DbGljaz17KGRhdGEpID0+IHRoaXMuY2xpY2tQb2ludCh0bywgJ3RvJywgZGF0YSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3RvTGFiZWxOb2RlfVxuICAgICAgICAgIDwvZz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGluZUJhc2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc3R5bGVzID0ge1xuICBsaW5lOiAoKSA9PiAoe1xuICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgc3Ryb2tlOiBjb2xvci5kZWZhdWx0cy5CTEFDSyxcbiAgICBzdHJva2VXaWR0aDogNCxcbiAgICB0cmFuc2l0aW9uOiAnc3Ryb2tlIDIwMG1zIGVhc2UtaW4sIHN0cm9rZS13aWR0aCAyMDBtcyBlYXNlLWluJyxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIHN0cm9rZVdpZHRoOiA2LFxuICAgICAgc3Ryb2tlOiBjb2xvci5kZWZhdWx0cy5CTEFDSyxcbiAgICB9LFxuICB9KSxcbiAgZGFzaGVkTGluZTogKCkgPT4gKHtcbiAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgIHN0cm9rZTogY29sb3IuZGVmYXVsdHMuQkxBQ0ssXG4gICAgc3Ryb2tlV2lkdGg6IDQsXG4gICAgdHJhbnNpdGlvbjogJ3N0cm9rZSAyMDBtcyBlYXNlLWluLCBzdHJva2Utd2lkdGggMjAwbXMgZWFzZS1pbicsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBzdHJva2VXaWR0aDogNixcbiAgICAgIHN0cm9rZTogY29sb3IuZGVmYXVsdHMuQkxBQ0ssXG4gICAgfSxcbiAgICBzdHJva2VEYXNoYXJyYXk6ICczLDMnLFxuICB9KSxcbiAgYXJyb3c6ICgpID0+ICh7XG4gICAgZmlsbDogY29sb3IuZGVmYXVsdHMuU0VDT05EQVJZLFxuICB9KSxcbiAgZGlzYWJsZWRBcnJvdzogKCkgPT4gKHtcbiAgICAuLi5kaXNhYmxlZCgpLFxuICB9KSxcbiAgZGlzYWJsZWQ6ICgpID0+ICh7XG4gICAgLi4uZGlzYWJsZWQoJ3N0cm9rZScpLFxuICAgIHN0cm9rZVdpZHRoOiAyLFxuICB9KSxcbiAgY29ycmVjdDogKHRoZW1lLCBrZXkpID0+ICh7XG4gICAgLi4uY29ycmVjdChrZXkpLFxuICB9KSxcbiAgaW5jb3JyZWN0OiAodGhlbWUsIGtleSkgPT4gKHtcbiAgICAuLi5pbmNvcnJlY3Qoa2V5KSxcbiAgfSksXG4gIG1pc3Npbmc6ICh0aGVtZSwga2V5KSA9PiAoe1xuICAgIC4uLm1pc3Npbmcoa2V5KSxcbiAgfSksXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLFNBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQVgsT0FBQTtBQUE2RSxTQUFBWSxXQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE9BQUFFLGdCQUFBLGFBQUFGLENBQUEsT0FBQUcsMkJBQUEsYUFBQUosQ0FBQSxFQUFBSyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQU4sQ0FBQSxFQUFBQyxDQUFBLFlBQUFDLGdC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