@pie-lib/charting 5.17.0-beta.0 → 5.17.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 (74) hide show
  1. package/CHANGELOG.json +1 -581
  2. package/CHANGELOG.md +149 -43
  3. package/package.json +5 -5
  4. package/src/__tests__/__snapshots__/axes.test.jsx.snap +1 -0
  5. package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -18
  6. package/src/__tests__/__snapshots__/grid.test.jsx.snap +61 -17
  7. package/src/__tests__/axes.test.jsx +0 -5
  8. package/src/__tests__/chart.test.jsx +8 -0
  9. package/src/actions-button.jsx +109 -0
  10. package/src/axes.jsx +5 -31
  11. package/src/bars/common/bars.jsx +8 -10
  12. package/src/chart-setup.jsx +1 -1
  13. package/src/chart.jsx +31 -26
  14. package/src/common/drag-handle.jsx +3 -3
  15. package/src/common/styles.js +1 -1
  16. package/src/grid.jsx +38 -13
  17. package/src/index.js +2 -1
  18. package/src/key-legend.jsx +75 -0
  19. package/src/line/common/drag-handle.jsx +3 -9
  20. package/src/line/common/line.jsx +2 -6
  21. package/src/line/line-cross.js +29 -2
  22. package/src/line/line-dot.js +36 -19
  23. package/src/mark-label.jsx +7 -2
  24. package/src/plot/common/plot.jsx +8 -5
  25. package/src/tool-menu.jsx +1 -1
  26. package/lib/__tests__/axes.test.js +0 -181
  27. package/lib/__tests__/chart-setup.test.js +0 -58
  28. package/lib/__tests__/chart-type.test.js +0 -42
  29. package/lib/__tests__/chart.test.js +0 -108
  30. package/lib/__tests__/grid.test.js +0 -48
  31. package/lib/__tests__/mark-label.test.js +0 -57
  32. package/lib/__tests__/utils.js +0 -56
  33. package/lib/__tests__/utils.test.js +0 -197
  34. package/lib/axes.js +0 -643
  35. package/lib/bars/__tests__/bar.test.js +0 -62
  36. package/lib/bars/__tests__/histogram.test.js +0 -64
  37. package/lib/bars/__tests__/utils.js +0 -56
  38. package/lib/bars/bar.js +0 -86
  39. package/lib/bars/common/__tests__/bars.test.js +0 -100
  40. package/lib/bars/common/__tests__/utils.js +0 -56
  41. package/lib/bars/common/bars.js +0 -301
  42. package/lib/bars/histogram.js +0 -87
  43. package/lib/chart-setup.js +0 -458
  44. package/lib/chart-type.js +0 -71
  45. package/lib/chart-types.js +0 -31
  46. package/lib/chart.js +0 -438
  47. package/lib/common/__tests__/drag-handle.test.js +0 -134
  48. package/lib/common/__tests__/utils.js +0 -56
  49. package/lib/common/drag-handle.js +0 -175
  50. package/lib/common/drag-icon.js +0 -52
  51. package/lib/common/styles.js +0 -40
  52. package/lib/grid.js +0 -104
  53. package/lib/index.js +0 -40
  54. package/lib/line/__tests__/line-cross.test.js +0 -64
  55. package/lib/line/__tests__/line-dot.test.js +0 -64
  56. package/lib/line/__tests__/utils.js +0 -56
  57. package/lib/line/common/__tests__/drag-handle.test.js +0 -134
  58. package/lib/line/common/__tests__/line.test.js +0 -128
  59. package/lib/line/common/__tests__/utils.js +0 -56
  60. package/lib/line/common/drag-handle.js +0 -157
  61. package/lib/line/common/line.js +0 -261
  62. package/lib/line/line-cross.js +0 -168
  63. package/lib/line/line-dot.js +0 -131
  64. package/lib/mark-label.js +0 -255
  65. package/lib/plot/__tests__/dot.test.js +0 -64
  66. package/lib/plot/__tests__/line.test.js +0 -64
  67. package/lib/plot/__tests__/utils.js +0 -56
  68. package/lib/plot/common/__tests__/plot.test.js +0 -103
  69. package/lib/plot/common/__tests__/utils.js +0 -56
  70. package/lib/plot/common/plot.js +0 -280
  71. package/lib/plot/dot.js +0 -123
  72. package/lib/plot/line.js +0 -152
  73. package/lib/tool-menu.js +0 -142
  74. package/lib/utils.js +0 -244
package/lib/chart.js DELETED
@@ -1,438 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = exports.Chart = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
26
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
-
28
- var _react = _interopRequireDefault(require("react"));
29
-
30
- var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
- var _styles = require("@material-ui/core/styles");
33
-
34
- var _classnames = _interopRequireDefault(require("classnames"));
35
-
36
- var _plot = require("@pie-lib/plot");
37
-
38
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
39
-
40
- var _grid = _interopRequireDefault(require("./grid"));
41
-
42
- var _axes = _interopRequireDefault(require("./axes"));
43
-
44
- var _debug = _interopRequireDefault(require("debug"));
45
-
46
- var _renderUi = require("@pie-lib/render-ui");
47
-
48
- var _utils = require("./utils");
49
-
50
- var _toolMenu = _interopRequireDefault(require("./tool-menu"));
51
-
52
- var _chartTypes = _interopRequireDefault(require("./chart-types"));
53
-
54
- var _configUi = require("@pie-lib/config-ui");
55
-
56
- var _translator = _interopRequireDefault(require("@pie-lib/translator"));
57
-
58
- 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; }
59
-
60
- 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; }
61
-
62
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
63
-
64
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
65
-
66
- var translator = _translator["default"].translator;
67
- var log = (0, _debug["default"])('pie-lib:charts:chart');
68
-
69
- var Chart = /*#__PURE__*/function (_React$Component) {
70
- (0, _inherits2["default"])(Chart, _React$Component);
71
-
72
- var _super = _createSuper(Chart);
73
-
74
- function Chart(props) {
75
- var _this;
76
-
77
- (0, _classCallCheck2["default"])(this, Chart);
78
- _this = _super.call(this, props);
79
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
80
- charts: [_chartTypes["default"].Bar(), _chartTypes["default"].Histogram(), _chartTypes["default"].LineDot(), _chartTypes["default"].LineCross(), _chartTypes["default"].DotPlot(), _chartTypes["default"].LinePlot()],
81
- autoFocus: false
82
- });
83
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleAlertDialog", function (open, callback) {
84
- return _this.setState({
85
- dialog: {
86
- open: open
87
- }
88
- }, callback);
89
- });
90
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getChart", function () {
91
- var charts = _this.props.charts || _this.state.charts;
92
- var chartType = _this.props.chartType;
93
- var ChartComponent = null;
94
- var chart = null;
95
-
96
- if (chartType) {
97
- chart = charts && charts.find(function (chart) {
98
- return chart.type === chartType;
99
- });
100
- ChartComponent = chart && chart.Component;
101
- } else {
102
- chart = charts && charts[0];
103
- ChartComponent = chart && chart.Component;
104
- chartType = chart && chart.type;
105
- }
106
-
107
- return {
108
- type: chartType,
109
- ChartComponent: ChartComponent
110
- };
111
- });
112
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeData", function (data) {
113
- var onDataChange = _this.props.onDataChange;
114
- onDataChange(data);
115
- });
116
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeCategory", function (index, newCategory) {
117
- var integerIndex = parseInt(index, 10);
118
-
119
- if (integerIndex >= 0) {
120
- var _this$props = _this.props,
121
- data = _this$props.data,
122
- onDataChange = _this$props.onDataChange;
123
- data[integerIndex] = _objectSpread(_objectSpread({}, data[integerIndex]), newCategory);
124
- onDataChange(data);
125
- }
126
- });
127
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "addCategory", function () {
128
- var _this$props2 = _this.props,
129
- onDataChange = _this$props2.onDataChange,
130
- data = _this$props2.data,
131
- categoryDefaultLabel = _this$props2.categoryDefaultLabel,
132
- defineChart = _this$props2.defineChart,
133
- categoryDefaults = _this$props2.categoryDefaults,
134
- language = _this$props2.language;
135
-
136
- if ((data || []).length > 19) {
137
- _this.setState({
138
- dialog: {
139
- open: true,
140
- title: translator.t('common:warning', {
141
- lng: language
142
- }),
143
- text: translator.t('charting.reachedLimit_other', {
144
- count: 20,
145
- lng: language
146
- }),
147
- onConfirm: function onConfirm() {
148
- return _this.handleAlertDialog(false);
149
- }
150
- }
151
- });
152
- } else {
153
- _this.setState({
154
- autoFocus: true
155
- });
156
-
157
- onDataChange([].concat((0, _toConsumableArray2["default"])(data), [{
158
- inDefineChart: defineChart,
159
- label: categoryDefaultLabel || translator.t('charting.newLabel', {
160
- lng: language
161
- }),
162
- value: 0,
163
- deletable: true,
164
- editable: categoryDefaults ? categoryDefaults === null || categoryDefaults === void 0 ? void 0 : categoryDefaults.editable : true,
165
- interactive: categoryDefaults ? categoryDefaults === null || categoryDefaults === void 0 ? void 0 : categoryDefaults.interactive : true
166
- }]));
167
- }
168
- });
169
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getFilteredCategories", function () {
170
- var _this$props3 = _this.props,
171
- data = _this$props3.data,
172
- defineChart = _this$props3.defineChart;
173
- return data ? data.map(function (d) {
174
- return _objectSpread(_objectSpread({}, d), {}, {
175
- deletable: defineChart || d.deletable
176
- });
177
- }) : [];
178
- });
179
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "resetAutoFocus", function () {
180
- _this.setState({
181
- autoFocus: false
182
- });
183
- });
184
- _this.state = {
185
- dialog: {
186
- open: false
187
- }
188
- };
189
- _this.maskUid = _this.generateMaskId();
190
- return _this;
191
- }
192
-
193
- (0, _createClass2["default"])(Chart, [{
194
- key: "generateMaskId",
195
- value: function generateMaskId() {
196
- return 'chart-' + (Math.random() * 10000).toFixed();
197
- }
198
- }, {
199
- key: "render",
200
- value: function render() {
201
- var _this2 = this;
202
-
203
- var _this$props4 = this.props,
204
- classes = _this$props4.classes,
205
- className = _this$props4.className,
206
- _this$props4$domain = _this$props4.domain,
207
- domain = _this$props4$domain === void 0 ? {} : _this$props4$domain,
208
- _this$props4$range = _this$props4.range,
209
- range = _this$props4$range === void 0 ? {} : _this$props4$range,
210
- chartingOptions = _this$props4.chartingOptions,
211
- size = _this$props4.size,
212
- title = _this$props4.title,
213
- onChangeTitle = _this$props4.onChangeTitle,
214
- onChangeLabels = _this$props4.onChangeLabels,
215
- labelsPlaceholders = _this$props4.labelsPlaceholders,
216
- titlePlaceholder = _this$props4.titlePlaceholder,
217
- addCategoryEnabled = _this$props4.addCategoryEnabled,
218
- changeInteractiveEnabled = _this$props4.changeInteractiveEnabled,
219
- changeEditableEnabled = _this$props4.changeEditableEnabled,
220
- showPixelGuides = _this$props4.showPixelGuides,
221
- error = _this$props4.error,
222
- _this$props4$mathMlOp = _this$props4.mathMlOptions,
223
- mathMlOptions = _this$props4$mathMlOp === void 0 ? {} : _this$props4$mathMlOp,
224
- language = _this$props4.language,
225
- labelsCharactersLimit = _this$props4.labelsCharactersLimit;
226
- var chartType = this.props.chartType;
227
- var dialog = this.state.dialog;
228
- var defineChart = this.props.defineChart || false;
229
-
230
- var _ref = size || {},
231
- width = _ref.width,
232
- height = _ref.height;
233
-
234
- var labels = {
235
- left: (range === null || range === void 0 ? void 0 : range.label) || '',
236
- bottom: (domain === null || domain === void 0 ? void 0 : domain.label) || ''
237
- };
238
-
239
- var _this$getChart = this.getChart(),
240
- ChartComponent = _this$getChart.ChartComponent;
241
-
242
- var categories = this.getFilteredCategories();
243
- var correctValues = (0, _utils.getDomainAndRangeByChartType)(domain, range, chartType);
244
-
245
- var _getGridLinesAndAxisB = (0, _utils.getGridLinesAndAxisByChartType)(correctValues.range, chartType),
246
- verticalLines = _getGridLinesAndAxisB.verticalLines,
247
- horizontalLines = _getGridLinesAndAxisB.horizontalLines,
248
- leftAxis = _getGridLinesAndAxisB.leftAxis;
249
-
250
- var common = {
251
- graphProps: (0, _plot.createGraphProps)(correctValues.domain, correctValues.range, size, function () {
252
- return _this2.rootNode;
253
- })
254
- };
255
- log('[render] common:', common);
256
- var maskSize = {
257
- x: -10,
258
- y: -75,
259
- width: width + 20,
260
- height: height + 80
261
- };
262
- var scale = common.graphProps.scale;
263
- var xBand = (0, _utils.dataToXBand)(scale.x, categories, width, chartType);
264
-
265
- if (!ChartComponent) {
266
- return null;
267
- }
268
-
269
- var bandWidth = xBand.bandwidth(); // for chartType "line", bandWidth will be 0, so we have to calculate it
270
-
271
- var barWidth = bandWidth || scale.x(correctValues.domain.max) / categories.length;
272
- var increaseHeight = defineChart ? 160 : 60; // if there are many categories, we have to rotate their names in order to fit
273
- // and we have to add extra value on top of some items
274
-
275
- var top = (0, _utils.getTopPadding)(barWidth);
276
- var rootCommon = (0, _cloneDeep["default"])(common);
277
- rootCommon.graphProps.size.height += top + increaseHeight;
278
- return /*#__PURE__*/_react["default"].createElement("div", {
279
- className: (0, _classnames["default"])(classes.chart, classes.chartBox, className)
280
- }, /*#__PURE__*/_react["default"].createElement("div", {
281
- className: classes.controls
282
- }, /*#__PURE__*/_react["default"].createElement(_toolMenu["default"], {
283
- className: classes.toolMenu,
284
- disabled: !addCategoryEnabled,
285
- addCategory: function addCategory() {
286
- return _this2.addCategory();
287
- },
288
- language: language
289
- })), /*#__PURE__*/_react["default"].createElement(_plot.Root, (0, _extends2["default"])({
290
- title: title,
291
- onChangeTitle: onChangeTitle,
292
- disabledTitle: !defineChart,
293
- showTitle: true,
294
- showLabels: true,
295
- labels: labels,
296
- onChangeLabels: onChangeLabels,
297
- labelsPlaceholders: labelsPlaceholders,
298
- titlePlaceholder: titlePlaceholder,
299
- defineChart: defineChart,
300
- disabledLabels: !defineChart,
301
- isChart: true,
302
- showPixelGuides: showPixelGuides,
303
- rootRef: function rootRef(r) {
304
- return _this2.rootNode = r;
305
- },
306
- mathMlOptions: mathMlOptions,
307
- labelsCharactersLimit: labelsCharactersLimit
308
- }, rootCommon), /*#__PURE__*/_react["default"].createElement(_grid["default"], (0, _extends2["default"])({}, common, {
309
- xBand: xBand,
310
- rowTickValues: horizontalLines,
311
- columnTickValues: verticalLines
312
- })), /*#__PURE__*/_react["default"].createElement(_axes["default"], (0, _extends2["default"])({
313
- autoFocus: this.state.autoFocus,
314
- onAutoFocusUsed: this.resetAutoFocus
315
- }, common, {
316
- defineChart: defineChart,
317
- categories: categories,
318
- xBand: xBand,
319
- leftAxis: leftAxis,
320
- onChange: this.changeData,
321
- onChangeCategory: this.changeCategory,
322
- chartingOptions: chartingOptions,
323
- changeInteractiveEnabled: changeInteractiveEnabled,
324
- changeEditableEnabled: changeEditableEnabled,
325
- top: top,
326
- error: error
327
- })), /*#__PURE__*/_react["default"].createElement("mask", {
328
- id: "".concat(this.maskUid)
329
- }, /*#__PURE__*/_react["default"].createElement("rect", (0, _extends2["default"])({}, maskSize, {
330
- fill: "white"
331
- }))), /*#__PURE__*/_react["default"].createElement("g", {
332
- id: "marks",
333
- mask: "url('#".concat(this.maskUid, "')")
334
- }, /*#__PURE__*/_react["default"].createElement(ChartComponent, (0, _extends2["default"])({}, common, {
335
- data: categories,
336
- height: rootCommon.graphProps.size.height,
337
- defineChart: defineChart,
338
- onChange: this.changeData,
339
- onChangeCategory: this.changeCategory
340
- })))), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
341
- open: dialog.open,
342
- title: dialog.title,
343
- text: dialog.text,
344
- onClose: dialog.onClose,
345
- onConfirm: dialog.onConfirm
346
- }));
347
- }
348
- }]);
349
- return Chart;
350
- }(_react["default"].Component);
351
-
352
- exports.Chart = Chart;
353
- (0, _defineProperty2["default"])(Chart, "propTypes", {
354
- classes: _propTypes["default"].object.isRequired,
355
- className: _propTypes["default"].string,
356
- chartType: _propTypes["default"].string.isRequired,
357
- size: _propTypes["default"].shape({
358
- width: _propTypes["default"].number,
359
- height: _propTypes["default"].number
360
- }),
361
- domain: _propTypes["default"].shape({
362
- label: _propTypes["default"].string,
363
- min: _propTypes["default"].number,
364
- max: _propTypes["default"].number,
365
- axisLabel: _propTypes["default"].string
366
- }),
367
- data: _propTypes["default"].arrayOf(_propTypes["default"].shape({
368
- label: _propTypes["default"].string,
369
- value: _propTypes["default"].number
370
- })),
371
- range: _propTypes["default"].shape({
372
- label: _propTypes["default"].string,
373
- min: _propTypes["default"].number,
374
- max: _propTypes["default"].number,
375
- step: _propTypes["default"].number,
376
- labelStep: _propTypes["default"].number,
377
- axisLabel: _propTypes["default"].string
378
- }),
379
- charts: _propTypes["default"].array,
380
- labelsPlaceholders: _propTypes["default"].object,
381
- title: _propTypes["default"].string,
382
- titlePlaceholder: _propTypes["default"].string,
383
- onDataChange: _propTypes["default"].func,
384
- onChangeLabels: _propTypes["default"].func,
385
- onChangeTitle: _propTypes["default"].func,
386
- error: _propTypes["default"].any,
387
- addCategoryEnabled: _propTypes["default"].bool,
388
- showPixelGuides: _propTypes["default"].bool,
389
- categoryDefaultLabel: _propTypes["default"].string,
390
- categoryDefaults: _propTypes["default"].object,
391
- defineChart: _propTypes["default"].bool,
392
- theme: _propTypes["default"].object,
393
- chartingOptions: _propTypes["default"].object,
394
- changeInteractiveEnabled: _propTypes["default"].bool,
395
- changeEditableEnabled: _propTypes["default"].bool,
396
- language: _propTypes["default"].string,
397
- mathMlOptions: _propTypes["default"].object,
398
- labelsCharactersLimit: _propTypes["default"].number
399
- });
400
- (0, _defineProperty2["default"])(Chart, "defaultProps", {
401
- size: {
402
- width: 480,
403
- height: 480
404
- }
405
- });
406
-
407
- var styles = function styles(theme) {
408
- return {
409
- graphBox: {
410
- transform: 'translate(60px, 35px)'
411
- },
412
- controls: {
413
- display: 'flex',
414
- justifyContent: 'space-between',
415
- padding: theme.spacing.unit,
416
- backgroundColor: _renderUi.color.primaryLight(),
417
- '& button': {
418
- fontSize: theme.typography.fontSize
419
- }
420
- },
421
- svg: {
422
- overflow: 'visible'
423
- },
424
- toolMenu: {
425
- minHeight: '36px'
426
- },
427
- chartBox: {
428
- width: 'min-content'
429
- }
430
- };
431
- };
432
-
433
- var _default = (0, _styles.withStyles)(styles, {
434
- withTheme: true
435
- })(Chart);
436
-
437
- exports["default"] = _default;
438
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFydC5qc3giXSwibmFtZXMiOlsidHJhbnNsYXRvciIsIlRyYW5zbGF0b3IiLCJsb2ciLCJDaGFydCIsInByb3BzIiwiY2hhcnRzIiwiY2hhcnRUeXBlcyIsIkJhciIsIkhpc3RvZ3JhbSIsIkxpbmVEb3QiLCJMaW5lQ3Jvc3MiLCJEb3RQbG90IiwiTGluZVBsb3QiLCJhdXRvRm9jdXMiLCJvcGVuIiwiY2FsbGJhY2siLCJzZXRTdGF0ZSIsImRpYWxvZyIsInN0YXRlIiwiY2hhcnRUeXBlIiwiQ2hhcnRDb21wb25lbnQiLCJjaGFydCIsImZpbmQiLCJ0eXBlIiwiQ29tcG9uZW50IiwiZGF0YSIsIm9uRGF0YUNoYW5nZSIsImluZGV4IiwibmV3Q2F0ZWdvcnkiLCJpbnRlZ2VySW5kZXgiLCJwYXJzZUludCIsImNhdGVnb3J5RGVmYXVsdExhYmVsIiwiZGVmaW5lQ2hhcnQiLCJjYXRlZ29yeURlZmF1bHRzIiwibGFuZ3VhZ2UiLCJsZW5ndGgiLCJ0aXRsZSIsInQiLCJsbmciLCJ0ZXh0IiwiY291bnQiLCJvbkNvbmZpcm0iLCJoYW5kbGVBbGVydERpYWxvZyIsImluRGVmaW5lQ2hhcnQiLCJsYWJlbCIsInZhbHVlIiwiZGVsZXRhYmxlIiwiZWRpdGFibGUiLCJpbnRlcmFjdGl2ZSIsIm1hcCIsImQiLCJtYXNrVWlkIiwiZ2VuZXJhdGVNYXNrSWQiLCJNYXRoIiwicmFuZG9tIiwidG9GaXhlZCIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJkb21haW4iLCJyYW5nZSIsImNoYXJ0aW5nT3B0aW9ucyIsInNpemUiLCJvbkNoYW5nZVRpdGxlIiwib25DaGFuZ2VMYWJlbHMiLCJsYWJlbHNQbGFjZWhvbGRlcnMiLCJ0aXRsZVBsYWNlaG9sZGVyIiwiYWRkQ2F0ZWdvcnlFbmFibGVkIiwiY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkIiwiY2hhbmdlRWRpdGFibGVFbmFibGVkIiwic2hvd1BpeGVsR3VpZGVzIiwiZXJyb3IiLCJtYXRoTWxPcHRpb25zIiwibGFiZWxzQ2hhcmFjdGVyc0xpbWl0Iiwid2lkdGgiLCJoZWlnaHQiLCJsYWJlbHMiLCJsZWZ0IiwiYm90dG9tIiwiZ2V0Q2hhcnQiLCJjYXRlZ29yaWVzIiwiZ2V0RmlsdGVyZWRDYXRlZ29yaWVzIiwiY29ycmVjdFZhbHVlcyIsInZlcnRpY2FsTGluZXMiLCJob3Jpem9udGFsTGluZXMiLCJsZWZ0QXhpcyIsImNvbW1vbiIsImdyYXBoUHJvcHMiLCJyb290Tm9kZSIsIm1hc2tTaXplIiwieCIsInkiLCJzY2FsZSIsInhCYW5kIiwiYmFuZFdpZHRoIiwiYmFuZHdpZHRoIiwiYmFyV2lkdGgiLCJtYXgiLCJpbmNyZWFzZUhlaWdodCIsInRvcCIsInJvb3RDb21tb24iLCJjaGFydEJveCIsImNvbnRyb2xzIiwidG9vbE1lbnUiLCJhZGRDYXRlZ29yeSIsInIiLCJyZXNldEF1dG9Gb2N1cyIsImNoYW5nZURhdGEiLCJjaGFuZ2VDYXRlZ29yeSIsIm9uQ2xvc2UiLCJSZWFjdCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJzaGFwZSIsIm51bWJlciIsIm1pbiIsImF4aXNMYWJlbCIsImFycmF5T2YiLCJzdGVwIiwibGFiZWxTdGVwIiwiYXJyYXkiLCJmdW5jIiwiYW55IiwiYm9vbCIsInRoZW1lIiwic3R5bGVzIiwiZ3JhcGhCb3giLCJ0cmFuc2Zvcm0iLCJkaXNwbGF5IiwianVzdGlmeUNvbnRlbnQiLCJwYWRkaW5nIiwic3BhY2luZyIsInVuaXQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjb2xvciIsInByaW1hcnlMaWdodCIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsInN2ZyIsIm92ZXJmbG93IiwibWluSGVpZ2h0Iiwid2l0aFRoZW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7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QUFDTyxPQUFOLENBQWNDLElBSGY7QUFJUkMsTUFBQUEsZUFBZSxFQUFFQyxnQkFBTUMsWUFBTixFQUpUO0FBS1Isa0JBQVk7QUFDVkMsUUFBQUEsUUFBUSxFQUFFWixLQUFLLENBQUNhLFVBQU4sQ0FBaUJEO0FBRGpCO0FBTEosS0FKZTtBQWF6QkUsSUFBQUEsR0FBRyxFQUFFO0FBQ0hDLE1BQUFBLFFBQVEsRUFBRTtBQURQLEtBYm9CO0FBZ0J6QnRDLElBQUFBLFFBQVEsRUFBRTtBQUNSdUMsTUFBQUEsU0FBUyxFQUFFO0FBREgsS0FoQmU7QUFtQnpCekMsSUFBQUEsUUFBUSxFQUFFO0FBQ1IzQixNQUFBQSxLQUFLLEVBQUU7QUFEQztBQW5CZSxHQUFaO0FBQUEsQ0FBZjs7ZUF3QmUsd0JBQVdxRCxNQUFYLEVBQW1CO0FBQUVnQixFQUFBQSxTQUFTLEVBQUU7QUFBYixDQUFuQixFQUF3QzNJLEtBQXhDLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBSb290LCBjcmVhdGVHcmFwaFByb3BzIH0gZnJvbSAnQHBpZS1saWIvcGxvdCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuaW1wb3J0IENoYXJ0R3JpZCBmcm9tICcuL2dyaWQnO1xuaW1wb3J0IENoYXJ0QXhlcyBmcm9tICcuL2F4ZXMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IGNvbG9yIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCB7IGRhdGFUb1hCYW5kLCBnZXREb21haW5BbmRSYW5nZUJ5Q2hhcnRUeXBlLCBnZXRHcmlkTGluZXNBbmRBeGlzQnlDaGFydFR5cGUsIGdldFRvcFBhZGRpbmcgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBUb29sTWVudSBmcm9tICcuL3Rvb2wtbWVudSc7XG5pbXBvcnQgY2hhcnRUeXBlcyBmcm9tICcuL2NoYXJ0LXR5cGVzJztcbmltcG9ydCB7IEFsZXJ0RGlhbG9nIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcbmltcG9ydCBUcmFuc2xhdG9yIGZyb20gJ0BwaWUtbGliL3RyYW5zbGF0b3InO1xuXG5jb25zdCB7IHRyYW5zbGF0b3IgfSA9IFRyYW5zbGF0b3I7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOmNoYXJ0czpjaGFydCcpO1xuXG5leHBvcnQgY2xhc3MgQ2hhcnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGlhbG9nOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWFza1VpZCA9IHRoaXMuZ2VuZXJhdGVNYXNrSWQoKTtcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjaGFydFR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBzaXplOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgZG9tYWluOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBtYXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBheGlzTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgZGF0YTogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHsgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyIH0pKSxcbiAgICByYW5nZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbWluOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgbWF4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgc3RlcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxhYmVsU3RlcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGF4aXNMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgICBjaGFydHM6IFByb3BUeXBlcy5hcnJheSxcbiAgICBsYWJlbHNQbGFjZWhvbGRlcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGl0bGVQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkRhdGFDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlTGFiZWxzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZVRpdGxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBlcnJvcjogUHJvcFR5cGVzLmFueSxcbiAgICBhZGRDYXRlZ29yeUVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dQaXhlbEd1aWRlczogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2F0ZWdvcnlEZWZhdWx0TGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2F0ZWdvcnlEZWZhdWx0czogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZpbmVDaGFydDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2hhcnRpbmdPcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2hhbmdlRWRpdGFibGVFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYW5ndWFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtYXRoTWxPcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxhYmVsc0NoYXJhY3RlcnNMaW1pdDogUHJvcFR5cGVzLm51bWJlcixcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHNpemU6IHtcbiAgICAgIHdpZHRoOiA0ODAsXG4gICAgICBoZWlnaHQ6IDQ4MCxcbiAgICB9LFxuICB9O1xuXG4gIHN0YXRlID0ge1xuICAgIGNoYXJ0czogW1xuICAgICAgY2hhcnRUeXBlcy5CYXIoKSxcbiAgICAgIGNoYXJ0VHlwZXMuSGlzdG9ncmFtKCksXG4gICAgICBjaGFydFR5cGVzLkxpbmVEb3QoKSxcbiAgICAgIGNoYXJ0VHlwZXMuTGluZUNyb3NzKCksXG4gICAgICBjaGFydFR5cGVzLkRvdFBsb3QoKSxcbiAgICAgIGNoYXJ0VHlwZXMuTGluZVBsb3QoKSxcbiAgICBdLFxuICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gIH07XG5cbiAgZ2VuZXJhdGVNYXNrSWQoKSB7XG4gICAgcmV0dXJuICdjaGFydC0nICsgKE1hdGgucmFuZG9tKCkgKiAxMDAwMCkudG9GaXhlZCgpO1xuICB9XG5cbiAgaGFuZGxlQWxlcnREaWFsb2cgPSAob3BlbiwgY2FsbGJhY2spID0+XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgZGlhbG9nOiB7IG9wZW4gfSxcbiAgICAgIH0sXG4gICAgICBjYWxsYmFjayxcbiAgICApO1xuXG4gIGdldENoYXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGNoYXJ0cyA9IHRoaXMucHJvcHMuY2hhcnRzIHx8IHRoaXMuc3RhdGUuY2hhcnRzO1xuICAgIGxldCB7IGNoYXJ0VHlwZSB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgQ2hhcnRDb21wb25lbnQgPSBudWxsO1xuICAgIGxldCBjaGFydCA9IG51bGw7XG5cbiAgICBpZiAoY2hhcnRUeXBlKSB7XG4gICAgICBjaGFydCA9IGNoYXJ0cyAmJiBjaGFydHMuZmluZCgoY2hhcnQpID0+IGNoYXJ0LnR5cGUgPT09IGNoYXJ0VHlwZSk7XG4gICAgICBDaGFydENvbXBvbmVudCA9IGNoYXJ0ICYmIGNoYXJ0LkNvbXBvbmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhcnQgPSBjaGFydHMgJiYgY2hhcnRzWzBdO1xuICAgICAgQ2hhcnRDb21wb25lbnQgPSBjaGFydCAmJiBjaGFydC5Db21wb25lbnQ7XG4gICAgICBjaGFydFR5cGUgPSBjaGFydCAmJiBjaGFydC50eXBlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBjaGFydFR5cGUsXG4gICAgICBDaGFydENvbXBvbmVudCxcbiAgICB9O1xuICB9O1xuXG4gIGNoYW5nZURhdGEgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHsgb25EYXRhQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgb25EYXRhQ2hhbmdlKGRhdGEpO1xuICB9O1xuXG4gIGNoYW5nZUNhdGVnb3J5ID0gKGluZGV4LCBuZXdDYXRlZ29yeSkgPT4ge1xuICAgIGNvbnN0IGludGVnZXJJbmRleCA9IHBhcnNlSW50KGluZGV4LCAxMCk7XG5cbiAgICBpZiAoaW50ZWdlckluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IHsgZGF0YSwgb25EYXRhQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgICAgZGF0YVtpbnRlZ2VySW5kZXhdID0ge1xuICAgICAgICAuLi5kYXRhW2ludGVnZXJJbmRleF0sXG4gICAgICAgIC4uLm5ld0NhdGVnb3J5LFxuICAgICAgfTtcblxuICAgICAgb25EYXRhQ2hhbmdlKGRhdGEpO1xuICAgIH1cbiAgfTtcblxuICBhZGRDYXRlZ29yeSA9ICgpID0+IHtcbiAgICBjb25zdCB7IG9uRGF0YUNoYW5nZSwgZGF0YSwgY2F0ZWdvcnlEZWZhdWx0TGFiZWwsIGRlZmluZUNoYXJ0LCBjYXRlZ29yeURlZmF1bHRzLCBsYW5ndWFnZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICgoZGF0YSB8fCBbXSkubGVuZ3RoID4gMTkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkaWFsb2c6IHtcbiAgICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICAgIHRpdGxlOiB0cmFuc2xhdG9yLnQoJ2NvbW1vbjp3YXJuaW5nJywgeyBsbmc6IGxhbmd1YWdlIH0pLFxuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0b3IudCgnY2hhcnRpbmcucmVhY2hlZExpbWl0X290aGVyJywgeyBjb3VudDogMjAsIGxuZzogbGFuZ3VhZ2UgfSksXG4gICAgICAgICAgb25Db25maXJtOiAoKSA9PiB0aGlzLmhhbmRsZUFsZXJ0RGlhbG9nKGZhbHNlKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgYXV0b0ZvY3VzOiB0cnVlIH0pO1xuICAgICAgb25EYXRhQ2hhbmdlKFtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAge1xuICAgICAgICAgIGluRGVmaW5lQ2hhcnQ6IGRlZmluZUNoYXJ0LFxuICAgICAgICAgIGxhYmVsOiBjYXRlZ29yeURlZmF1bHRMYWJlbCB8fCB0cmFuc2xhdG9yLnQoJ2NoYXJ0aW5nLm5ld0xhYmVsJywgeyBsbmc6IGxhbmd1YWdlIH0pLFxuICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgIGRlbGV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBlZGl0YWJsZTogY2F0ZWdvcnlEZWZhdWx0cyA/IGNhdGVnb3J5RGVmYXVsdHM/LmVkaXRhYmxlIDogdHJ1ZSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogY2F0ZWdvcnlEZWZhdWx0cyA/IGNhdGVnb3J5RGVmYXVsdHM/LmludGVyYWN0aXZlIDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfTtcblxuICBnZXRGaWx0ZXJlZENhdGVnb3JpZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBkZWZpbmVDaGFydCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiBkYXRhXG4gICAgICA/IGRhdGEubWFwKChkKSA9PiAoe1xuICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgZGVsZXRhYmxlOiBkZWZpbmVDaGFydCB8fCBkLmRlbGV0YWJsZSxcbiAgICAgICAgfSkpXG4gICAgICA6IFtdO1xuICB9O1xuXG4gIHJlc2V0QXV0b0ZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBhdXRvRm9jdXM6IGZhbHNlIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc2VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZG9tYWluID0ge30sXG4gICAgICByYW5nZSA9IHt9LFxuICAgICAgY2hhcnRpbmdPcHRpb25zLFxuICAgICAgc2l6ZSxcbiAgICAgIHRpdGxlLFxuICAgICAgb25DaGFuZ2VUaXRsZSxcbiAgICAgIG9uQ2hhbmdlTGFiZWxzLFxuICAgICAgbGFiZWxzUGxhY2Vob2xkZXJzLFxuICAgICAgdGl0bGVQbGFjZWhvbGRlcixcbiAgICAgIGFkZENhdGVnb3J5RW5hYmxlZCxcbiAgICAgIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCxcbiAgICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZCxcbiAgICAgIHNob3dQaXhlbEd1aWRlcyxcbiAgICAgIGVycm9yLFxuICAgICAgbWF0aE1sT3B0aW9ucyA9IHt9LFxuICAgICAgbGFuZ3VhZ2UsXG4gICAgICBsYWJlbHNDaGFyYWN0ZXJzTGltaXQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IHsgY2hhcnRUeXBlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBkaWFsb2cgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgZGVmaW5lQ2hhcnQgPSB0aGlzLnByb3BzLmRlZmluZUNoYXJ0IHx8IGZhbHNlO1xuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaXplIHx8IHt9O1xuICAgIGNvbnN0IGxhYmVscyA9IHsgbGVmdDogcmFuZ2U/LmxhYmVsIHx8ICcnLCBib3R0b206IGRvbWFpbj8ubGFiZWwgfHwgJycgfTtcblxuICAgIGNvbnN0IHsgQ2hhcnRDb21wb25lbnQgfSA9IHRoaXMuZ2V0Q2hhcnQoKTtcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5nZXRGaWx0ZXJlZENhdGVnb3JpZXMoKTtcblxuICAgIGNvbnN0IGNvcnJlY3RWYWx1ZXMgPSBnZXREb21haW5BbmRSYW5nZUJ5Q2hhcnRUeXBlKGRvbWFpbiwgcmFuZ2UsIGNoYXJ0VHlwZSk7XG5cbiAgICBjb25zdCB7IHZlcnRpY2FsTGluZXMsIGhvcml6b250YWxMaW5lcywgbGVmdEF4aXMgfSA9IGdldEdyaWRMaW5lc0FuZEF4aXNCeUNoYXJ0VHlwZShjb3JyZWN0VmFsdWVzLnJhbmdlLCBjaGFydFR5cGUpO1xuICAgIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAgIGdyYXBoUHJvcHM6IGNyZWF0ZUdyYXBoUHJvcHMoY29ycmVjdFZhbHVlcy5kb21haW4sIGNvcnJlY3RWYWx1ZXMucmFuZ2UsIHNpemUsICgpID0+IHRoaXMucm9vdE5vZGUpLFxuICAgIH07XG5cbiAgICBsb2coJ1tyZW5kZXJdIGNvbW1vbjonLCBjb21tb24pO1xuXG4gICAgY29uc3QgbWFza1NpemUgPSB7IHg6IC0xMCwgeTogLTc1LCB3aWR0aDogd2lkdGggKyAyMCwgaGVpZ2h0OiBoZWlnaHQgKyA4MCB9O1xuICAgIGNvbnN0IHsgc2NhbGUgfSA9IGNvbW1vbi5ncmFwaFByb3BzO1xuICAgIGNvbnN0IHhCYW5kID0gZGF0YVRvWEJhbmQoc2NhbGUueCwgY2F0ZWdvcmllcywgd2lkdGgsIGNoYXJ0VHlwZSk7XG5cbiAgICBpZiAoIUNoYXJ0Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBiYW5kV2lkdGggPSB4QmFuZC5iYW5kd2lkdGgoKTtcbiAgICAvLyBmb3IgY2hhcnRUeXBlIFwibGluZVwiLCBiYW5kV2lkdGggd2lsbCBiZSAwLCBzbyB3ZSBoYXZlIHRvIGNhbGN1bGF0ZSBpdFxuICAgIGNvbnN0IGJhcldpZHRoID0gYmFuZFdpZHRoIHx8IHNjYWxlLngoY29ycmVjdFZhbHVlcy5kb21haW4ubWF4KSAvIGNhdGVnb3JpZXMubGVuZ3RoO1xuICAgIGNvbnN0IGluY3JlYXNlSGVpZ2h0ID0gZGVmaW5lQ2hhcnQgPyAxNjAgOiA2MDtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBtYW55IGNhdGVnb3JpZXMsIHdlIGhhdmUgdG8gcm90YXRlIHRoZWlyIG5hbWVzIGluIG9yZGVyIHRvIGZpdFxuICAgIC8vIGFuZCB3ZSBoYXZlIHRvIGFkZCBleHRyYSB2YWx1ZSBvbiB0b3Agb2Ygc29tZSBpdGVtc1xuICAgIGNvbnN0IHRvcCA9IGdldFRvcFBhZGRpbmcoYmFyV2lkdGgpO1xuICAgIGNvbnN0IHJvb3RDb21tb24gPSBjbG9uZURlZXAoY29tbW9uKTtcbiAgICByb290Q29tbW9uLmdyYXBoUHJvcHMuc2l6ZS5oZWlnaHQgKz0gdG9wICsgaW5jcmVhc2VIZWlnaHQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5jaGFydCwgY2xhc3Nlcy5jaGFydEJveCwgY2xhc3NOYW1lKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRyb2xzfT5cbiAgICAgICAgICA8VG9vbE1lbnVcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy50b29sTWVudX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshYWRkQ2F0ZWdvcnlFbmFibGVkfVxuICAgICAgICAgICAgYWRkQ2F0ZWdvcnk9eygpID0+IHRoaXMuYWRkQ2F0ZWdvcnkoKX1cbiAgICAgICAgICAgIGxhbmd1YWdlPXtsYW5ndWFnZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8Um9vdFxuICAgICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgICBvbkNoYW5nZVRpdGxlPXtvbkNoYW5nZVRpdGxlfVxuICAgICAgICAgIGRpc2FibGVkVGl0bGU9eyFkZWZpbmVDaGFydH1cbiAgICAgICAgICBzaG93VGl0bGU9e3RydWV9XG4gICAgICAgICAgc2hvd0xhYmVscz17dHJ1ZX1cbiAgICAgICAgICBsYWJlbHM9e2xhYmVsc31cbiAgICAgICAgICBvbkNoYW5nZUxhYmVscz17b25DaGFuZ2VMYWJlbHN9XG4gICAgICAgICAgbGFiZWxzUGxhY2Vob2xkZXJzPXtsYWJlbHNQbGFjZWhvbGRlcnN9XG4gICAgICAgICAgdGl0bGVQbGFjZWhvbGRlcj17dGl0bGVQbGFjZWhvbGRlcn1cbiAgICAgICAgICBkZWZpbmVDaGFydD17ZGVmaW5lQ2hhcnR9XG4gICAgICAgICAgZGlzYWJsZWRMYWJlbHM9eyFkZWZpbmVDaGFydH1cbiAgICAgICAgICBpc0NoYXJ0PXt0cnVlfVxuICAgICAgICAgIHNob3dQaXhlbEd1aWRlcz17c2hvd1BpeGVsR3VpZGVzfVxuICAgICAgICAgIHJvb3RSZWY9eyhyKSA9PiAodGhpcy5yb290Tm9kZSA9IHIpfVxuICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgbGFiZWxzQ2hhcmFjdGVyc0xpbWl0PXtsYWJlbHNDaGFyYWN0ZXJzTGltaXR9XG4gICAgICAgICAgey4uLnJvb3RDb21tb259XG4gICAgICAgID5cbiAgICAgICAgICA8Q2hhcnRHcmlkIHsuLi5jb21tb259IHhCYW5kPXt4QmFuZH0gcm93VGlja1ZhbHVlcz17aG9yaXpvbnRhbExpbmVzfSBjb2x1bW5UaWNrVmFsdWVzPXt2ZXJ0aWNhbExpbmVzfSAvPlxuICAgICAgICAgIDxDaGFydEF4ZXNcbiAgICAgICAgICAgIGF1dG9Gb2N1cz17dGhpcy5zdGF0ZS5hdXRvRm9jdXN9XG4gICAgICAgICAgICBvbkF1dG9Gb2N1c1VzZWQ9e3RoaXMucmVzZXRBdXRvRm9jdXN9XG4gICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgZGVmaW5lQ2hhcnQ9e2RlZmluZUNoYXJ0fVxuICAgICAgICAgICAgY2F0ZWdvcmllcz17Y2F0ZWdvcmllc31cbiAgICAgICAgICAgIHhCYW5kPXt4QmFuZH1cbiAgICAgICAgICAgIGxlZnRBeGlzPXtsZWZ0QXhpc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmNoYW5nZURhdGF9XG4gICAgICAgICAgICBvbkNoYW5nZUNhdGVnb3J5PXt0aGlzLmNoYW5nZUNhdGVnb3J5fVxuICAgICAgICAgICAgY2hhcnRpbmdPcHRpb25zPXtjaGFydGluZ09wdGlvbnN9XG4gICAgICAgICAgICBjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQ9e2NoYW5nZUludGVyYWN0aXZlRW5hYmxlZH1cbiAgICAgICAgICAgIGNoYW5nZUVkaXRhYmxlRW5hYmxlZD17Y2hhbmdlRWRpdGFibGVFbmFibGVkfVxuICAgICAgICAgICAgdG9wPXt0b3B9XG4gICAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bWFzayBpZD17YCR7dGhpcy5tYXNrVWlkfWB9PlxuICAgICAgICAgICAgPHJlY3Qgey4uLm1hc2tTaXplfSBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgIDwvbWFzaz5cbiAgICAgICAgICA8ZyBpZD1cIm1hcmtzXCIgbWFzaz17YHVybCgnIyR7dGhpcy5tYXNrVWlkfScpYH0+XG4gICAgICAgICAgICA8Q2hhcnRDb21wb25lbnRcbiAgICAgICAgICAgICAgey4uLmNvbW1vbn1cbiAgICAgICAgICAgICAgZGF0YT17Y2F0ZWdvcmllc31cbiAgICAgICAgICAgICAgaGVpZ2h0PXtyb290Q29tbW9uLmdyYXBoUHJvcHMuc2l6ZS5oZWlnaHR9XG4gICAgICAgICAgICAgIGRlZmluZUNoYXJ0PXtkZWZpbmVDaGFydH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuY2hhbmdlRGF0YX1cbiAgICAgICAgICAgICAgb25DaGFuZ2VDYXRlZ29yeT17dGhpcy5jaGFuZ2VDYXRlZ29yeX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9nPlxuICAgICAgICA8L1Jvb3Q+XG4gICAgICAgIDxBbGVydERpYWxvZ1xuICAgICAgICAgIG9wZW49e2RpYWxvZy5vcGVufVxuICAgICAgICAgIHRpdGxlPXtkaWFsb2cudGl0bGV9XG4gICAgICAgICAgdGV4dD17ZGlhbG9nLnRleHR9XG4gICAgICAgICAgb25DbG9zZT17ZGlhbG9nLm9uQ2xvc2V9XG4gICAgICAgICAgb25Db25maXJtPXtkaWFsb2cub25Db25maXJtfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBzdHlsZXMgPSAodGhlbWUpID0+ICh7XG4gIGdyYXBoQm94OiB7XG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDYwcHgsIDM1cHgpJyxcbiAgfSxcbiAgY29udHJvbHM6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBwYWRkaW5nOiB0aGVtZS5zcGFjaW5nLnVuaXQsXG4gICAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5wcmltYXJ5TGlnaHQoKSxcbiAgICAnJiBidXR0b24nOiB7XG4gICAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSxcbiAgICB9LFxuICB9LFxuICBzdmc6IHtcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB9LFxuICB0b29sTWVudToge1xuICAgIG1pbkhlaWdodDogJzM2cHgnLFxuICB9LFxuICBjaGFydEJveDoge1xuICAgIHdpZHRoOiAnbWluLWNvbnRlbnQnLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXMoc3R5bGVzLCB7IHdpdGhUaGVtZTogdHJ1ZSB9KShDaGFydCk7XG4iXX0=
@@ -1,134 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
-
7
- var _build = require("enzyme/build");
8
-
9
- var _react = _interopRequireDefault(require("react"));
10
-
11
- var _dragHandle = _interopRequireDefault(require("../drag-handle"));
12
-
13
- var _plot = require("@pie-lib/plot");
14
-
15
- var _utils = require("./utils");
16
-
17
- var _utils2 = require("../../utils");
18
-
19
- 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; }
20
-
21
- 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; }
22
-
23
- jest.mock('../../utils', function () {
24
- var _jest$requireActual = jest.requireActual('../../utils'),
25
- point = _jest$requireActual.point;
26
-
27
- return {
28
- bounds: jest.fn(),
29
- point: point
30
- };
31
- });
32
- jest.mock('@pie-lib/plot', function () {
33
- var _jest$requireActual2 = jest.requireActual('@pie-lib/plot'),
34
- types = _jest$requireActual2.types,
35
- utils = _jest$requireActual2.utils;
36
-
37
- return {
38
- gridDraggable: jest.fn(function (opts) {
39
- return function (Comp) {
40
- return Comp;
41
- };
42
- }),
43
- types: types,
44
- utils: utils
45
- };
46
- });
47
- describe('BasePoint', function () {
48
- var w;
49
- var onChange = jest.fn();
50
-
51
- var wrapper = function wrapper(extras) {
52
- var defaults = {
53
- classes: {},
54
- className: 'className',
55
- onChange: onChange,
56
- graphProps: (0, _utils.graphProps)(),
57
- x: 0,
58
- y: 0,
59
- width: 100
60
- };
61
-
62
- var props = _objectSpread(_objectSpread({}, defaults), extras);
63
-
64
- return (0, _build.shallow)( /*#__PURE__*/_react["default"].createElement(_dragHandle["default"], props));
65
- };
66
-
67
- describe('snapshot', function () {
68
- it('renders', function () {
69
- w = wrapper();
70
- expect(w).toMatchSnapshot();
71
- });
72
- });
73
- describe('gridDraggable options', function () {
74
- var opts;
75
- var domain;
76
- var range;
77
- beforeEach(function () {
78
- domain = {
79
- min: 0,
80
- max: 1,
81
- step: 1
82
- };
83
- range = {
84
- min: 0,
85
- max: 1,
86
- step: 1
87
- };
88
- var w = wrapper();
89
- opts = _plot.gridDraggable.mock.calls[0][0];
90
- });
91
- describe('bounds', function () {
92
- it('calls utils.bounds with area', function () {
93
- var result = opts.bounds({
94
- x: 0,
95
- y: 0
96
- }, {
97
- domain: domain,
98
- range: range
99
- });
100
- expect(result).toEqual({
101
- left: 0,
102
- top: 1,
103
- bottom: 0,
104
- right: 1
105
- });
106
- });
107
- });
108
- describe('anchorPoint', function () {
109
- it('returns x/y', function () {
110
- var result = opts.anchorPoint({
111
- x: 0,
112
- y: 0
113
- });
114
- expect(result).toEqual({
115
- x: 0,
116
- y: 0
117
- });
118
- });
119
- });
120
- describe('fromDelta', function () {
121
- it('returns y coordinate of a new point from the x/y + delta', function () {
122
- var result = opts.fromDelta({
123
- x: -1,
124
- y: 0
125
- }, {
126
- x: 1,
127
- y: 3
128
- });
129
- expect(result).toEqual(3);
130
- });
131
- });
132
- });
133
- });
134
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vX190ZXN0c19fL2RyYWctaGFuZGxlLnRlc3QuanN4Il0sIm5hbWVzIjpbImplc3QiLCJtb2NrIiwicmVxdWlyZUFjdHVhbCIsInBvaW50IiwiYm91bmRzIiwiZm4iLCJ0eXBlcyIsInV0aWxzIiwiZ3JpZERyYWdnYWJsZSIsIm9wdHMiLCJDb21wIiwiZGVzY3JpYmUiLCJ3Iiwib25DaGFuZ2UiLCJ3cmFwcGVyIiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwiZ3JhcGhQcm9wcyIsIngiLCJ5Iiwid2lkdGgiLCJwcm9wcyIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwiZG9tYWluIiwicmFuZ2UiLCJiZWZvcmVFYWNoIiwibWluIiwibWF4Iiwic3RlcCIsImNhbGxzIiwicmVzdWx0IiwidG9FcXVhbCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImFuY2hvclBvaW50IiwiZnJvbURlbHRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVLGFBQVYsRUFBeUIsWUFBTTtBQUM3Qiw0QkFBa0JELElBQUksQ0FBQ0UsYUFBTCxDQUFtQixhQUFuQixDQUFsQjtBQUFBLE1BQVFDLEtBQVIsdUJBQVFBLEtBQVI7O0FBQ0EsU0FBTztBQUNMQyxJQUFBQSxNQUFNLEVBQUVKLElBQUksQ0FBQ0ssRUFBTCxFQURIO0FBRUxGLElBQUFBLEtBQUssRUFBTEE7QUFGSyxHQUFQO0FBSUQsQ0FORDtBQVFBSCxJQUFJLENBQUNDLElBQUwsQ0FBVSxlQUFWLEVBQTJCLFlBQU07QUFDL0IsNkJBQXlCRCxJQUFJLENBQUNFLGFBQUwsQ0FBbUIsZUFBbkIsQ0FBekI7QUFBQSxNQUFRSSxLQUFSLHdCQUFRQSxLQUFSO0FBQUEsTUFBZUMsS0FBZix3QkFBZUEsS0FBZjs7QUFDQSxTQUFPO0FB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QUFBLEVBQUUsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFDdEIsWUFBTVUsTUFBTSxHQUFHekIsSUFBSSxDQUFDK0IsV0FBTCxDQUFpQjtBQUFFcEIsVUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsVUFBQUEsQ0FBQyxFQUFFO0FBQVgsU0FBakIsQ0FBZjtBQUNBSSxRQUFBQSxNQUFNLENBQUNTLE1BQUQsQ0FBTixDQUFlQyxPQUFmLENBQXVCO0FBQUVmLFVBQUFBLENBQUMsRUFBRSxDQUFMO0FBQVFDLFVBQUFBLENBQUMsRUFBRTtBQUFYLFNBQXZCO0FBQ0QsT0FIQyxDQUFGO0FBSUQsS0FMTyxDQUFSO0FBT0FWLElBQUFBLFFBQVEsQ0FBQyxXQUFELEVBQWMsWUFBTTtBQUMxQmEsTUFBQUEsRUFBRSxDQUFDLDBEQUFELEVBQTZELFlBQU07QUFDbkUsWUFBTVUsTUFBTSxHQUFHekIsSUFBSSxDQUFDZ0MsU0FBTCxDQUFlO0FBQUVyQixVQUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFOO0FBQVNDLFVBQUFBLENBQUMsRUFBRTtBQUFaLFNBQWYsRUFBZ0M7QUFBRUQsVUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsVUFBQUEsQ0FBQyxFQUFFO0FBQVgsU0FBaEMsQ0FBZjtBQUNBSSxRQUFBQSxNQUFNLENBQUNTLE1BQUQsQ0FBTixDQUFlQyxPQUFmLENBQXVCLENBQXZCO0FBQ0QsT0FIQyxDQUFGO0FBSUQsS0FMTyxDQUFSO0FBTUQsR0F2Q08sQ0FBUjtBQXdDRCxDQS9ETyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZS9idWlsZCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IERyYWdIYW5kbGUgZnJvbSAnLi4vZHJhZy1oYW5kbGUnO1xuaW1wb3J0IHsgZ3JpZERyYWdnYWJsZSB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IHsgZ3JhcGhQcm9wcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5qZXN0Lm1vY2soJy4uLy4uL3V0aWxzJywgKCkgPT4ge1xuICBjb25zdCB7IHBvaW50IH0gPSBqZXN0LnJlcXVpcmVBY3R1YWwoJy4uLy4uL3V0aWxzJyk7XG4gIHJldHVybiB7XG4gICAgYm91bmRzOiBqZXN0LmZuKCksXG4gICAgcG9pbnQsXG4gIH07XG59KTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9wbG90JywgKCkgPT4ge1xuICBjb25zdCB7IHR5cGVzLCB1dGlscyB9ID0gamVzdC5yZXF1aXJlQWN0dWFsKCdAcGllLWxpYi9wbG90Jyk7XG4gIHJldHVybiB7XG4gICAgZ3JpZERyYWdnYWJsZTogamVzdC5mbigob3B0cykgPT4gKENvbXApID0+IENvbXApLFxuICAgIHR5cGVzLFxuICAgIHV0aWxzLFxuICB9O1xufSk7XG5cbmRlc2NyaWJlKCdCYXNlUG9pbnQnLCAoKSA9PiB7XG4gIGxldCB3O1xuICBsZXQgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHdyYXBwZXIgPSAoZXh0cmFzKSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIGdyYXBoUHJvcHM6IGdyYXBoUHJvcHMoKSxcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDEwMCxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cywgLi4uZXh0cmFzIH07XG4gICAgcmV0dXJuIHNoYWxsb3coPERyYWdIYW5kbGUgey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3NuYXBzaG90JywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzJywgKCkgPT4ge1xuICAgICAgdyA9IHdyYXBwZXIoKTtcbiAgICAgIGV4cGVjdCh3KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdncmlkRHJhZ2dhYmxlIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgbGV0IG9wdHM7XG4gICAgbGV0IGRvbWFpbjtcbiAgICBsZXQgcmFuZ2U7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBkb21haW4gPSB7XG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgbWF4OiAxLFxuICAgICAgICBzdGVwOiAxLFxuICAgICAgfTtcbiAgICAgIHJhbmdlID0ge1xuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1heDogMSxcbiAgICAgICAgc3RlcDogMSxcbiAgICAgIH07XG4gICAgICBjb25zdCB3ID0gd3JhcHBlcigpO1xuICAgICAgb3B0cyA9IGdyaWREcmFnZ2FibGUubW9jay5jYWxsc1swXVswXTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdib3VuZHMnLCAoKSA9PiB7XG4gICAgICBpdCgnY2FsbHMgdXRpbHMuYm91bmRzIHdpdGggYXJlYScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0cy5ib3VuZHMoeyB4OiAwLCB5OiAwIH0sIHsgZG9tYWluLCByYW5nZSB9KTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgbGVmdDogMCwgdG9wOiAxLCBib3R0b206IDAsIHJpZ2h0OiAxIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2FuY2hvclBvaW50JywgKCkgPT4ge1xuICAgICAgaXQoJ3JldHVybnMgeC95JywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRzLmFuY2hvclBvaW50KHsgeDogMCwgeTogMCB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHg6IDAsIHk6IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmcm9tRGVsdGEnLCAoKSA9PiB7XG4gICAgICBpdCgncmV0dXJucyB5IGNvb3JkaW5hdGUgb2YgYSBuZXcgcG9pbnQgZnJvbSB0aGUgeC95ICsgZGVsdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdHMuZnJvbURlbHRhKHsgeDogLTEsIHk6IDAgfSwgeyB4OiAxLCB5OiAzIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKDMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=