@kepler.gl/components 3.1.0 → 3.1.2

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/dist/common/checkbox.js +14 -5
  2. package/dist/common/data-table/header-cell.d.ts +1 -0
  3. package/dist/common/data-table/header-cell.js +2 -2
  4. package/dist/common/data-table/index.d.ts +1 -0
  5. package/dist/common/data-table/index.js +5 -1
  6. package/dist/common/file-uploader/file-drop.d.ts +1 -32
  7. package/dist/common/file-uploader/file-drop.js +152 -167
  8. package/dist/common/histogram-plot.js +13 -13
  9. package/dist/common/icons/index.js +1 -1
  10. package/dist/common/index.d.ts +1 -1
  11. package/dist/common/index.js +3 -3
  12. package/dist/common/item-selector/chickleted-input.js +5 -2
  13. package/dist/common/item-selector/dropdown-list.d.ts +3 -3
  14. package/dist/common/item-selector/dropdown-list.js +6 -7
  15. package/dist/common/item-selector/dropdown-select.js +8 -3
  16. package/dist/common/item-selector/item-selector.d.ts +1 -1
  17. package/dist/common/item-selector/item-selector.js +5 -2
  18. package/dist/common/item-selector/typeahead.d.ts +1 -1
  19. package/dist/common/item-selector/typeahead.js +8 -3
  20. package/dist/common/range-brush.js +6 -6
  21. package/dist/common/range-slider.js +7 -7
  22. package/dist/common/slider/slider-bar-handle.d.ts +2 -2
  23. package/dist/common/slider/slider-bar-handle.js +4 -4
  24. package/dist/common/slider/slider-handle.d.ts +3 -3
  25. package/dist/common/slider/slider-handle.js +11 -11
  26. package/dist/common/slider/slider.d.ts +3 -3
  27. package/dist/common/slider/slider.js +6 -6
  28. package/dist/common/styled-components.d.ts +4 -3
  29. package/dist/common/styled-components.js +47 -12
  30. package/dist/geocoder/geocoder.d.ts +7 -0
  31. package/dist/geocoder/geocoder.js +19 -11
  32. package/dist/geocoder-panel.d.ts +2 -2
  33. package/dist/geocoder-panel.js +64 -91
  34. package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
  35. package/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
  36. package/dist/hooks/use-legend-position.d.ts +2 -10
  37. package/dist/hooks/use-legend-position.js +12 -6
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.js +4 -4
  40. package/dist/kepler-gl.js +3 -13
  41. package/dist/loading-indicator.d.ts +2 -2
  42. package/dist/loading-indicator.js +5 -5
  43. package/dist/map/map-control.d.ts +2 -0
  44. package/dist/map/map-control.js +3 -3
  45. package/dist/map/map-legend-panel.d.ts +3 -1
  46. package/dist/map/map-legend-panel.js +23 -30
  47. package/dist/map-container.js +12 -10
  48. package/dist/modal-container.js +8 -8
  49. package/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
  50. package/dist/side-panel/common/dataset-title.js +4 -4
  51. package/dist/side-panel/common/types.d.ts +1 -1
  52. package/dist/side-panel/common/types.js +1 -1
  53. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +3 -3
  54. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +7 -7
  55. package/dist/side-panel/layer-manager.js +84 -108
  56. package/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
  57. package/dist/side-panel/layer-panel/color-palette.d.ts +2 -2
  58. package/dist/side-panel/layer-panel/color-palette.js +6 -6
  59. package/dist/side-panel/layer-panel/color-range-selector.js +10 -11
  60. package/dist/side-panel/layer-panel/color-selector.js +9 -5
  61. package/dist/side-panel/layer-panel/custom-palette.js +7 -4
  62. package/dist/side-panel/layer-panel/dataset-section.js +3 -3
  63. package/dist/side-panel/layer-panel/layer-config-group.js +5 -2
  64. package/dist/side-panel/layer-panel/layer-configurator.js +6 -8
  65. package/dist/side-panel/layer-panel/layer-list.js +5 -5
  66. package/dist/side-panel/layer-panel/layer-panel-header.js +9 -5
  67. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
  68. package/dist/side-panel/map-manager.js +76 -101
  69. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +3 -3
  70. package/dist/side-panel/map-style-panel/map-layer-group-item.js +4 -4
  71. package/dist/side-panel/panel-header-action.js +8 -8
  72. package/dist/side-panel/panel-view-list-toggle.d.ts +1 -1
  73. package/dist/side-panel/panel-view-list-toggle.js +3 -3
  74. package/package.json +16 -16
@@ -1,175 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = void 0;
8
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
- var _react = _interopRequireDefault(require("react"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
15
11
  var _window = _interopRequireDefault(require("global/window"));
16
- 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)); }
17
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
14
+ // SPDX-License-Identifier: MIT
18
15
  // Copyright contributors to the kepler.gl project
16
+
19
17
  /**
20
18
  * Copied from https://github.com/sarink/react-file-drop
21
19
  * For React 16.8 compatibility
22
20
  */
23
- /** @typedef {import('./file-drop').FileDropProps} FileDropProps */
24
- /** @augments React.PureComponent<FileDropProps> */
25
- var FileDrop = /*#__PURE__*/function (_React$PureComponent) {
26
- function FileDrop() {
27
- var _this;
28
- (0, _classCallCheck2["default"])(this, FileDrop);
29
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
30
- args[_key] = arguments[_key];
31
- }
32
- _this = _callSuper(this, FileDrop, [].concat(args));
33
- (0, _defineProperty2["default"])(_this, "frameDragCounter", 0);
34
- (0, _defineProperty2["default"])(_this, "state", {
35
- draggingOverFrame: false,
36
- draggingOverTarget: false
37
- });
38
- (0, _defineProperty2["default"])(_this, "resetDragging", function () {
39
- _this.frameDragCounter = 0;
40
- _this.setState({
41
- draggingOverFrame: false,
42
- draggingOverTarget: false
43
- });
44
- });
45
- (0, _defineProperty2["default"])(_this, "handleWindowDragOverOrDrop", function (event) {
46
- // This prevents the browser from trying to load whatever file the user dropped on the window
47
- event.preventDefault();
48
- });
49
- (0, _defineProperty2["default"])(_this, "handleFrameDrag", function (event) {
50
- // Only allow dragging of files
51
- if (!FileDrop.eventHasFiles(event)) return;
52
21
 
53
- // We are listening for events on the 'frame', so every time the user drags over any element in the frame's tree,
54
- // the event bubbles up to the frame. By keeping count of how many "dragenters" we get, we can tell if they are still
55
- // "draggingOverFrame" (b/c you get one "dragenter" initially, and one "dragenter"/one "dragleave" for every bubble)
56
- // This is far better than a "dragover" handler, which would be calling `setState` continuously.
57
- _this.frameDragCounter += event.type === 'dragenter' ? 1 : -1;
58
- if (_this.frameDragCounter === 1) {
59
- _this.setState({
60
- draggingOverFrame: true
61
- });
62
- if (_this.props.onFrameDragEnter) _this.props.onFrameDragEnter(event);
63
- return;
64
- }
65
- if (_this.frameDragCounter === 0) {
66
- _this.setState({
67
- draggingOverFrame: false
68
- });
69
- if (_this.props.onFrameDragLeave) _this.props.onFrameDragLeave(event);
70
- return;
71
- }
72
- });
73
- (0, _defineProperty2["default"])(_this, "handleFrameDrop", function (event) {
74
- event.preventDefault();
75
- if (!_this.state.draggingOverTarget) {
76
- _this.resetDragging();
77
- if (_this.props.onFrameDrop) _this.props.onFrameDrop(event);
78
- }
79
- });
80
- (0, _defineProperty2["default"])(_this, "handleDragOver", function (event) {
81
- if (FileDrop.eventHasFiles(event)) {
82
- _this.setState({
83
- draggingOverTarget: true
84
- });
85
- if (!FileDrop.isIE() && _this.props.dropEffect) event.dataTransfer.dropEffect = _this.props.dropEffect;
86
- if (_this.props.onDragOver) _this.props.onDragOver(event);
87
- }
88
- });
89
- (0, _defineProperty2["default"])(_this, "handleDragLeave", function (event) {
90
- _this.setState({
91
- draggingOverTarget: false
92
- });
93
- if (_this.props.onDragLeave) _this.props.onDragLeave(event);
94
- });
95
- (0, _defineProperty2["default"])(_this, "handleDrop", function (event) {
96
- if (_this.props.onDrop && FileDrop.eventHasFiles(event)) {
97
- var files = event.dataTransfer ? event.dataTransfer.files : null;
98
- _this.props.onDrop(files, event);
99
- }
100
- _this.resetDragging();
101
- });
102
- (0, _defineProperty2["default"])(_this, "stopFrameListeners", function (frame) {
103
- if (frame) {
104
- frame.removeEventListener('dragenter', _this.handleFrameDrag);
105
- frame.removeEventListener('dragleave', _this.handleFrameDrag);
106
- frame.removeEventListener('drop', _this.handleFrameDrop);
107
- }
108
- });
109
- (0, _defineProperty2["default"])(_this, "startFrameListeners", function (frame) {
110
- if (frame) {
111
- frame.addEventListener('dragenter', _this.handleFrameDrag);
112
- frame.addEventListener('dragleave', _this.handleFrameDrag);
113
- frame.addEventListener('drop', _this.handleFrameDrop);
114
- }
115
- });
116
- return _this;
117
- }
118
- (0, _inherits2["default"])(FileDrop, _React$PureComponent);
119
- return (0, _createClass2["default"])(FileDrop, [{
120
- key: "componentDidMount",
121
- value: function componentDidMount() {
122
- this.startFrameListeners(this.props.frame);
123
- this.resetDragging();
124
- _window["default"].addEventListener('dragover', this.handleWindowDragOverOrDrop);
125
- _window["default"].addEventListener('drop', this.handleWindowDragOverOrDrop);
126
- }
127
- }, {
128
- key: "componentDidUpdate",
129
- value: function componentDidUpdate(prevProps) {
130
- if (prevProps.frame !== this.props.frame) {
131
- this.resetDragging();
132
- this.stopFrameListeners(prevProps.frame);
133
- this.startFrameListeners(this.props.frame);
134
- }
135
- }
136
- }, {
137
- key: "componentWillUnmount",
138
- value: function componentWillUnmount() {
139
- this.stopFrameListeners(this.props.frame);
140
- _window["default"].removeEventListener('dragover', this.handleWindowDragOverOrDrop);
141
- _window["default"].removeEventListener('drop', this.handleWindowDragOverOrDrop);
142
- }
143
- }, {
144
- key: "render",
145
- value: function render() {
146
- var _this$props = this.props,
147
- children = _this$props.children,
148
- className = _this$props.className,
149
- targetClassName = _this$props.targetClassName,
150
- draggingOverFrameClassName = _this$props.draggingOverFrameClassName,
151
- draggingOverTargetClassName = _this$props.draggingOverTargetClassName;
152
- var _this$state = this.state,
153
- draggingOverTarget = _this$state.draggingOverTarget,
154
- draggingOverFrame = _this$state.draggingOverFrame;
155
- var fileDropTargetClassName = targetClassName;
156
- if (draggingOverFrame) fileDropTargetClassName += " ".concat(draggingOverFrameClassName);
157
- if (draggingOverTarget) fileDropTargetClassName += " ".concat(draggingOverTargetClassName);
158
- return /*#__PURE__*/_react["default"].createElement("div", {
159
- className: className,
160
- onDragOver: this.handleDragOver,
161
- onDragLeave: this.handleDragLeave,
162
- onDrop: this.handleDrop
163
- }, /*#__PURE__*/_react["default"].createElement("div", {
164
- className: fileDropTargetClassName
165
- }, children));
166
- }
167
- }]);
168
- }(_react["default"].PureComponent);
169
- (0, _defineProperty2["default"])(FileDrop, "isIE", function () {
22
+ var isIE = function isIE() {
170
23
  return _window["default"] && _window["default"].navigator && ((_window["default"].navigator.userAgent || []).includes('MSIE') || (_window["default"].navigator.appVersion || []).includes('Trident/'));
171
- });
172
- (0, _defineProperty2["default"])(FileDrop, "eventHasFiles", function (event) {
24
+ };
25
+ var eventHasFiles = function eventHasFiles(event) {
173
26
  // In most browsers this is an array, but in IE11 it's an Object :(
174
27
 
175
28
  var hasFiles = false;
@@ -183,14 +36,146 @@ var FileDrop = /*#__PURE__*/function (_React$PureComponent) {
183
36
  }
184
37
  }
185
38
  return hasFiles;
186
- });
187
- (0, _defineProperty2["default"])(FileDrop, "defaultProps", {
188
- dropEffect: 'copy',
189
- frame: _window["default"] ? _window["default"].document : undefined,
190
- className: 'file-drop',
191
- targetClassName: 'file-drop-target',
192
- draggingOverFrameClassName: 'file-drop-dragging-over-frame',
193
- draggingOverTargetClassName: 'file-drop-dragging-over-target'
194
- });
39
+ };
40
+ var FileDrop = function FileDrop(_ref) {
41
+ var _ref$dropEffect = _ref.dropEffect,
42
+ dropEffect = _ref$dropEffect === void 0 ? 'copy' : _ref$dropEffect,
43
+ _ref$frame = _ref.frame,
44
+ frame = _ref$frame === void 0 ? _window["default"] ? _window["default"].document : undefined : _ref$frame,
45
+ _ref$className = _ref.className,
46
+ className = _ref$className === void 0 ? 'file-drop' : _ref$className,
47
+ _ref$targetClassName = _ref.targetClassName,
48
+ targetClassName = _ref$targetClassName === void 0 ? 'file-drop-target' : _ref$targetClassName,
49
+ _ref$draggingOverFram = _ref.draggingOverFrameClassName,
50
+ draggingOverFrameClassName = _ref$draggingOverFram === void 0 ? 'file-drop-dragging-over-frame' : _ref$draggingOverFram,
51
+ _ref$draggingOverTarg = _ref.draggingOverTargetClassName,
52
+ draggingOverTargetClassName = _ref$draggingOverTarg === void 0 ? 'file-drop-dragging-over-target' : _ref$draggingOverTarg,
53
+ onDragOver = _ref.onDragOver,
54
+ onDragLeave = _ref.onDragLeave,
55
+ onDrop = _ref.onDrop,
56
+ onFrameDragEnter = _ref.onFrameDragEnter,
57
+ onFrameDragLeave = _ref.onFrameDragLeave,
58
+ onFrameDrop = _ref.onFrameDrop,
59
+ children = _ref.children;
60
+ var _useState = (0, _react.useState)(false),
61
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
62
+ draggingOverTarget = _useState2[0],
63
+ setDraggingOverTarget = _useState2[1];
64
+ var _useState3 = (0, _react.useState)(false),
65
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
66
+ draggingOverFrame = _useState4[0],
67
+ setDraggingOverFrame = _useState4[1];
68
+ var _useState5 = (0, _react.useState)(0),
69
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
70
+ frameDragCounter = _useState6[0],
71
+ setFrameDragCounter = _useState6[1];
72
+ var prevFrame = (0, _react.useRef)(frame);
73
+ (0, _react.useEffect)(function () {
74
+ // componentDidMount
75
+ startFrameListeners(frame);
76
+ resetDragging();
77
+ _window["default"].addEventListener('dragover', handleWindowDragOverOrDrop);
78
+ _window["default"].addEventListener('drop', handleWindowDragOverOrDrop);
79
+ return function () {
80
+ // componentWillUnmount
81
+ stopFrameListeners(frame);
82
+ _window["default"].removeEventListener('dragover', handleWindowDragOverOrDrop);
83
+ _window["default"].removeEventListener('drop', handleWindowDragOverOrDrop);
84
+ };
85
+
86
+ // eslint-disable-next-line react-hooks/exhaustive-deps
87
+ }, []);
88
+ var resetDragging = (0, _react.useCallback)(function () {
89
+ setFrameDragCounter(0);
90
+ setDraggingOverTarget(false);
91
+ setDraggingOverFrame(false);
92
+ }, []);
93
+ var handleWindowDragOverOrDrop = (0, _react.useCallback)(function (event) {
94
+ // This prevents the browser from trying to load whatever file the user dropped on the window
95
+ event.preventDefault();
96
+ }, []);
97
+ var handleFrameDrag = (0, _react.useCallback)(function (event) {
98
+ // Only allow dragging of files
99
+ if (!eventHasFiles(event)) return;
100
+
101
+ // We are listening for events on the 'frame', so every time the user drags over any element in the frame's tree,
102
+ // the event bubbles up to the frame. By keeping count of how many "dragenters" we get, we can tell if they are still
103
+ // "draggingOverFrame" (b/c you get one "dragenter" initially, and one "dragenter"/one "dragleave" for every bubble)
104
+ // This is far better than a "dragover" handler, which would be calling `setState` continuously.
105
+ var newDragCounterValue = frameDragCounter + (event.type === 'dragenter' ? 1 : -1);
106
+ setFrameDragCounter(newDragCounterValue);
107
+ if (newDragCounterValue === 1) {
108
+ setDraggingOverFrame(true);
109
+ if (onFrameDragEnter) onFrameDragEnter(event);
110
+ return;
111
+ }
112
+ if (newDragCounterValue === 0) {
113
+ setDraggingOverFrame(false);
114
+ if (onFrameDragLeave) onFrameDragLeave(event);
115
+ return;
116
+ }
117
+ }, [frameDragCounter, setDraggingOverFrame, onFrameDragEnter, onFrameDragLeave]);
118
+ var handleFrameDrop = (0, _react.useCallback)(function (event) {
119
+ event.preventDefault();
120
+ if (!draggingOverTarget) {
121
+ resetDragging();
122
+ if (onFrameDrop) onFrameDrop(event);
123
+ }
124
+ }, [onFrameDrop, draggingOverTarget, resetDragging]);
125
+ var handleDragOver = (0, _react.useCallback)(function (event) {
126
+ if (eventHasFiles(event)) {
127
+ setDraggingOverTarget(true);
128
+ if (!isIE() && dropEffect) event.dataTransfer.dropEffect = dropEffect;
129
+ if (onDragOver) onDragOver(event);
130
+ }
131
+ }, [dropEffect, onDragOver]);
132
+ var handleDragLeave = (0, _react.useCallback)(function (event) {
133
+ setDraggingOverTarget(false);
134
+ if (onDragLeave) onDragLeave(event);
135
+ }, [onDragLeave]);
136
+ var handleDrop = (0, _react.useCallback)(function (event) {
137
+ if (onDrop && eventHasFiles(event)) {
138
+ var files = event.dataTransfer ? event.dataTransfer.files : null;
139
+ onDrop(files, event);
140
+ }
141
+ resetDragging();
142
+ }, [onDrop, resetDragging]);
143
+ var stopFrameListeners = (0, _react.useCallback)(function (frame) {
144
+ if (frame) {
145
+ frame.removeEventListener('dragenter', handleFrameDrag);
146
+ frame.removeEventListener('dragleave', handleFrameDrag);
147
+ frame.removeEventListener('drop', handleFrameDrop);
148
+ }
149
+ }, [handleFrameDrag, handleFrameDrop]);
150
+ var startFrameListeners = (0, _react.useCallback)(function (frame) {
151
+ if (frame) {
152
+ frame.addEventListener('dragenter', handleFrameDrag);
153
+ frame.addEventListener('dragleave', handleFrameDrag);
154
+ frame.addEventListener('drop', handleFrameDrop);
155
+ }
156
+ }, [handleFrameDrag, handleFrameDrop]);
157
+ (0, _react.useEffect)(function () {
158
+ // componentDidUpdate
159
+ if (prevFrame.current !== frame) {
160
+ resetDragging();
161
+ stopFrameListeners(prevFrame.current);
162
+ startFrameListeners(frame);
163
+ prevFrame.current = frame;
164
+ }
165
+ }, [frame, resetDragging, stopFrameListeners, startFrameListeners]);
166
+
167
+ // Render
168
+ var fileDropTargetClassName = targetClassName;
169
+ if (draggingOverFrame) fileDropTargetClassName += " ".concat(draggingOverFrameClassName);
170
+ if (draggingOverTarget) fileDropTargetClassName += " ".concat(draggingOverTargetClassName);
171
+ return /*#__PURE__*/_react["default"].createElement("div", {
172
+ className: className,
173
+ onDragOver: handleDragOver,
174
+ onDragLeave: handleDragLeave,
175
+ onDrop: handleDrop
176
+ }, /*#__PURE__*/_react["default"].createElement("div", {
177
+ className: fileDropTargetClassName
178
+ }, children));
179
+ };
195
180
  var _default = exports["default"] = FileDrop;
196
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl93aW5kb3ciLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIkZpbGVEcm9wIiwiX1JlYWN0JFB1cmVDb21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkcmFnZ2luZ092ZXJGcmFtZSIsImRyYWdnaW5nT3ZlclRhcmdldCIsImZyYW1lRHJhZ0NvdW50ZXIiLCJzZXRTdGF0ZSIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJldmVudEhhc0ZpbGVzIiwidHlwZSIsInByb3BzIiwib25GcmFtZURyYWdFbnRlciIsIm9uRnJhbWVEcmFnTGVhdmUiLCJzdGF0ZSIsInJlc2V0RHJhZ2dpbmciLCJvbkZyYW1lRHJvcCIsImlzSUUiLCJkcm9wRWZmZWN0IiwiZGF0YVRyYW5zZmVyIiwib25EcmFnT3ZlciIsIm9uRHJhZ0xlYXZlIiwib25Ecm9wIiwiZmlsZXMiLCJmcmFtZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVGcmFtZURyYWciLCJoYW5kbGVGcmFtZURyb3AiLCJhZGRFdmVudExpc3RlbmVyIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImNvbXBvbmVudERpZE1vdW50Iiwic3RhcnRGcmFtZUxpc3RlbmVycyIsIldpbmRvdyIsImhhbmRsZVdpbmRvd0RyYWdPdmVyT3JEcm9wIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwic3RvcEZyYW1lTGlzdGVuZXJzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiLCJfdGhpcyRwcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwidGFyZ2V0Q2xhc3NOYW1lIiwiZHJhZ2dpbmdPdmVyRnJhbWVDbGFzc05hbWUiLCJkcmFnZ2luZ092ZXJUYXJnZXRDbGFzc05hbWUiLCJfdGhpcyRzdGF0ZSIsImZpbGVEcm9wVGFyZ2V0Q2xhc3NOYW1lIiwiY3JlYXRlRWxlbWVudCIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJhZ0xlYXZlIiwiaGFuZGxlRHJvcCIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImluY2x1ZGVzIiwiYXBwVmVyc2lvbiIsImhhc0ZpbGVzIiwidHlwZXMiLCJrZXlPckluZGV4IiwiZG9jdW1lbnQiLCJ1bmRlZmluZWQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL2ZpbGUtdXBsb2FkZXIvZmlsZS1kcm9wLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXJpbmsvcmVhY3QtZmlsZS1kcm9wXG4gKiBGb3IgUmVhY3QgMTYuOCBjb21wYXRpYmlsaXR5XG4gKi9cbmltcG9ydCBSZWFjdCwge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcblxuZXhwb3J0IHR5cGUgRmlsZURyb3BQcm9wcyA9IHtcbiAgZHJvcEVmZmVjdD86ICdjb3B5JyB8ICdtb3ZlJyB8ICdsaW5rJyB8ICdub25lJztcbiAgZnJhbWU/OiB0eXBlb2YgZG9jdW1lbnQgfCB0eXBlb2YgV2luZG93IHwgSFRNTEVsZW1lbnQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdGFyZ2V0Q2xhc3NOYW1lPzogc3RyaW5nO1xuICBkcmFnZ2luZ092ZXJGcmFtZUNsYXNzTmFtZT86IHN0cmluZztcbiAgZHJhZ2dpbmdPdmVyVGFyZ2V0Q2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkRyYWdPdmVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIG9uRHJhZ0xlYXZlPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIG9uRHJvcD86IChmaWxlTGlzdDogRmlsZUxpc3QsIGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIG9uRnJhbWVEcmFnRW50ZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgb25GcmFtZURyYWdMZWF2ZT86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBvbkZyYW1lRHJvcD86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2ZpbGUtZHJvcCcpLkZpbGVEcm9wUHJvcHN9IEZpbGVEcm9wUHJvcHMgKi9cblxuLyoqIEBhdWdtZW50cyBSZWFjdC5QdXJlQ29tcG9uZW50PEZpbGVEcm9wUHJvcHM+ICovXG5jbGFzcyBGaWxlRHJvcCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8RmlsZURyb3BQcm9wcz4ge1xuICBzdGF0aWMgaXNJRSA9ICgpID0+XG4gICAgV2luZG93ICYmXG4gICAgV2luZG93Lm5hdmlnYXRvciAmJlxuICAgICgoV2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgfHwgW10pLmluY2x1ZGVzKCdNU0lFJykgfHxcbiAgICAgIChXaW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24gfHwgW10pLmluY2x1ZGVzKCdUcmlkZW50LycpKTtcblxuICBzdGF0aWMgZXZlbnRIYXNGaWxlcyA9IGV2ZW50ID0+IHtcbiAgICAvLyBJbiBtb3N0IGJyb3dzZXJzIHRoaXMgaXMgYW4gYXJyYXksIGJ1dCBpbiBJRTExIGl0J3MgYW4gT2JqZWN0IDooXG5cbiAgICBsZXQgaGFzRmlsZXMgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcztcbiAgICAgIGZvciAoY29uc3Qga2V5T3JJbmRleCBpbiB0eXBlcykge1xuICAgICAgICBpZiAodHlwZXNba2V5T3JJbmRleF0gPT09ICdGaWxlcycpIHtcbiAgICAgICAgICBoYXNGaWxlcyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc0ZpbGVzO1xuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZHJvcEVmZmVjdDogJ2NvcHknLFxuICAgIGZyYW1lOiBXaW5kb3cgPyBXaW5kb3cuZG9jdW1lbnQgOiB1bmRlZmluZWQsXG4gICAgY2xhc3NOYW1lOiAnZmlsZS1kcm9wJyxcbiAgICB0YXJnZXRDbGFzc05hbWU6ICdmaWxlLWRyb3AtdGFyZ2V0JyxcbiAgICBkcmFnZ2luZ092ZXJGcmFtZUNsYXNzTmFtZTogJ2ZpbGUtZHJvcC1kcmFnZ2luZy1vdmVyLWZyYW1lJyxcbiAgICBkcmFnZ2luZ092ZXJUYXJnZXRDbGFzc05hbWU6ICdmaWxlLWRyb3AtZHJhZ2dpbmctb3Zlci10YXJnZXQnXG4gIH07XG5cbiAgZnJhbWVEcmFnQ291bnRlciA9IDA7XG4gIHN0YXRlID0ge2RyYWdnaW5nT3ZlckZyYW1lOiBmYWxzZSwgZHJhZ2dpbmdPdmVyVGFyZ2V0OiBmYWxzZX07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5zdGFydEZyYW1lTGlzdGVuZXJzKHRoaXMucHJvcHMuZnJhbWUpO1xuICAgIHRoaXMucmVzZXREcmFnZ2luZygpO1xuICAgIFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuaGFuZGxlV2luZG93RHJhZ092ZXJPckRyb3ApO1xuICAgIFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5oYW5kbGVXaW5kb3dEcmFnT3Zlck9yRHJvcCk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHByZXZQcm9wcy5mcmFtZSAhPT0gdGhpcy5wcm9wcy5mcmFtZSkge1xuICAgICAgdGhpcy5yZXNldERyYWdnaW5nKCk7XG4gICAgICB0aGlzLnN0b3BGcmFtZUxpc3RlbmVycyhwcmV2UHJvcHMuZnJhbWUpO1xuICAgICAgdGhpcy5zdGFydEZyYW1lTGlzdGVuZXJzKHRoaXMucHJvcHMuZnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuc3RvcEZyYW1lTGlzdGVuZXJzKHRoaXMucHJvcHMuZnJhbWUpO1xuICAgIFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMuaGFuZGxlV2luZG93RHJhZ092ZXJPckRyb3ApO1xuICAgIFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5oYW5kbGVXaW5kb3dEcmFnT3Zlck9yRHJvcCk7XG4gIH1cblxuICByZXNldERyYWdnaW5nID0gKCkgPT4ge1xuICAgIHRoaXMuZnJhbWVEcmFnQ291bnRlciA9IDA7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZHJhZ2dpbmdPdmVyRnJhbWU6IGZhbHNlLCBkcmFnZ2luZ092ZXJUYXJnZXQ6IGZhbHNlfSk7XG4gIH07XG5cbiAgaGFuZGxlV2luZG93RHJhZ092ZXJPckRyb3AgPSBldmVudCA9PiB7XG4gICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgYnJvd3NlciBmcm9tIHRyeWluZyB0byBsb2FkIHdoYXRldmVyIGZpbGUgdGhlIHVzZXIgZHJvcHBlZCBvbiB0aGUgd2luZG93XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICBoYW5kbGVGcmFtZURyYWcgPSBldmVudCA9PiB7XG4gICAgLy8gT25seSBhbGxvdyBkcmFnZ2luZyBvZiBmaWxlc1xuICAgIGlmICghRmlsZURyb3AuZXZlbnRIYXNGaWxlcyhldmVudCkpIHJldHVybjtcblxuICAgIC8vIFdlIGFyZSBsaXN0ZW5pbmcgZm9yIGV2ZW50cyBvbiB0aGUgJ2ZyYW1lJywgc28gZXZlcnkgdGltZSB0aGUgdXNlciBkcmFncyBvdmVyIGFueSBlbGVtZW50IGluIHRoZSBmcmFtZSdzIHRyZWUsXG4gICAgLy8gdGhlIGV2ZW50IGJ1YmJsZXMgdXAgdG8gdGhlIGZyYW1lLiBCeSBrZWVwaW5nIGNvdW50IG9mIGhvdyBtYW55IFwiZHJhZ2VudGVyc1wiIHdlIGdldCwgd2UgY2FuIHRlbGwgaWYgdGhleSBhcmUgc3RpbGxcbiAgICAvLyBcImRyYWdnaW5nT3ZlckZyYW1lXCIgKGIvYyB5b3UgZ2V0IG9uZSBcImRyYWdlbnRlclwiIGluaXRpYWxseSwgYW5kIG9uZSBcImRyYWdlbnRlclwiL29uZSBcImRyYWdsZWF2ZVwiIGZvciBldmVyeSBidWJibGUpXG4gICAgLy8gVGhpcyBpcyBmYXIgYmV0dGVyIHRoYW4gYSBcImRyYWdvdmVyXCIgaGFuZGxlciwgd2hpY2ggd291bGQgYmUgY2FsbGluZyBgc2V0U3RhdGVgIGNvbnRpbnVvdXNseS5cbiAgICB0aGlzLmZyYW1lRHJhZ0NvdW50ZXIgKz0gZXZlbnQudHlwZSA9PT0gJ2RyYWdlbnRlcicgPyAxIDogLTE7XG5cbiAgICBpZiAodGhpcy5mcmFtZURyYWdDb3VudGVyID09PSAxKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtkcmFnZ2luZ092ZXJGcmFtZTogdHJ1ZX0pO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25GcmFtZURyYWdFbnRlcikgdGhpcy5wcm9wcy5vbkZyYW1lRHJhZ0VudGVyKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mcmFtZURyYWdDb3VudGVyID09PSAwKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtkcmFnZ2luZ092ZXJGcmFtZTogZmFsc2V9KTtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRnJhbWVEcmFnTGVhdmUpIHRoaXMucHJvcHMub25GcmFtZURyYWdMZWF2ZShldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZUZyYW1lRHJvcCA9IGV2ZW50ID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5zdGF0ZS5kcmFnZ2luZ092ZXJUYXJnZXQpIHtcbiAgICAgIHRoaXMucmVzZXREcmFnZ2luZygpO1xuICAgICAgaWYgKHRoaXMucHJvcHMub25GcmFtZURyb3ApIHRoaXMucHJvcHMub25GcmFtZURyb3AoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICBoYW5kbGVEcmFnT3ZlciA9IGV2ZW50ID0+IHtcbiAgICBpZiAoRmlsZURyb3AuZXZlbnRIYXNGaWxlcyhldmVudCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2RyYWdnaW5nT3ZlclRhcmdldDogdHJ1ZX0pO1xuICAgICAgaWYgKCFGaWxlRHJvcC5pc0lFKCkgJiYgdGhpcy5wcm9wcy5kcm9wRWZmZWN0KVxuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IHRoaXMucHJvcHMuZHJvcEVmZmVjdDtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ092ZXIpIHRoaXMucHJvcHMub25EcmFnT3ZlcihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZURyYWdMZWF2ZSA9IGV2ZW50ID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtkcmFnZ2luZ092ZXJUYXJnZXQ6IGZhbHNlfSk7XG4gICAgaWYgKHRoaXMucHJvcHMub25EcmFnTGVhdmUpIHRoaXMucHJvcHMub25EcmFnTGVhdmUoZXZlbnQpO1xuICB9O1xuXG4gIGhhbmRsZURyb3AgPSBldmVudCA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMub25Ecm9wICYmIEZpbGVEcm9wLmV2ZW50SGFzRmlsZXMoZXZlbnQpKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2ZlciA/IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyA6IG51bGw7XG4gICAgICB0aGlzLnByb3BzLm9uRHJvcChmaWxlcywgZXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLnJlc2V0RHJhZ2dpbmcoKTtcbiAgfTtcblxuICBzdG9wRnJhbWVMaXN0ZW5lcnMgPSBmcmFtZSA9PiB7XG4gICAgaWYgKGZyYW1lKSB7XG4gICAgICBmcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCB0aGlzLmhhbmRsZUZyYW1lRHJhZyk7XG4gICAgICBmcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCB0aGlzLmhhbmRsZUZyYW1lRHJhZyk7XG4gICAgICBmcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5oYW5kbGVGcmFtZURyb3ApO1xuICAgIH1cbiAgfTtcblxuICBzdGFydEZyYW1lTGlzdGVuZXJzID0gZnJhbWUgPT4ge1xuICAgIGlmIChmcmFtZSkge1xuICAgICAgZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VudGVyJywgdGhpcy5oYW5kbGVGcmFtZURyYWcpO1xuICAgICAgZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgdGhpcy5oYW5kbGVGcmFtZURyYWcpO1xuICAgICAgZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMuaGFuZGxlRnJhbWVEcm9wKTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgdGFyZ2V0Q2xhc3NOYW1lLFxuICAgICAgZHJhZ2dpbmdPdmVyRnJhbWVDbGFzc05hbWUsXG4gICAgICBkcmFnZ2luZ092ZXJUYXJnZXRDbGFzc05hbWVcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7ZHJhZ2dpbmdPdmVyVGFyZ2V0LCBkcmFnZ2luZ092ZXJGcmFtZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgbGV0IGZpbGVEcm9wVGFyZ2V0Q2xhc3NOYW1lID0gdGFyZ2V0Q2xhc3NOYW1lO1xuICAgIGlmIChkcmFnZ2luZ092ZXJGcmFtZSkgZmlsZURyb3BUYXJnZXRDbGFzc05hbWUgKz0gYCAke2RyYWdnaW5nT3ZlckZyYW1lQ2xhc3NOYW1lfWA7XG4gICAgaWYgKGRyYWdnaW5nT3ZlclRhcmdldCkgZmlsZURyb3BUYXJnZXRDbGFzc05hbWUgKz0gYCAke2RyYWdnaW5nT3ZlclRhcmdldENsYXNzTmFtZX1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIG9uRHJhZ092ZXI9e3RoaXMuaGFuZGxlRHJhZ092ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXt0aGlzLmhhbmRsZURyYWdMZWF2ZX1cbiAgICAgICAgb25Ecm9wPXt0aGlzLmhhbmRsZURyb3B9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtmaWxlRHJvcFRhcmdldENsYXNzTmFtZX0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlRHJvcDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU9BLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFtQyxTQUFBRSxXQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE9BQUFFLGdCQUFBLGFBQUFGLENBQUEsT0FBQUcsMkJBQUEsYUFBQUosQ0FBQSxFQUFBSyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQU4sQ0FBQSxFQUFBQyxDQUFBLFlBQUFDLGdCQUFBLGFBQUFILENBQUEsRUFBQVEsV0FBQSxJQUFBUCxDQUFBLENB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
181
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfd2luZG93IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsImlzSUUiLCJXaW5kb3ciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJpbmNsdWRlcyIsImFwcFZlcnNpb24iLCJldmVudEhhc0ZpbGVzIiwiZXZlbnQiLCJoYXNGaWxlcyIsImRhdGFUcmFuc2ZlciIsInR5cGVzIiwia2V5T3JJbmRleCIsIkZpbGVEcm9wIiwiX3JlZiIsIl9yZWYkZHJvcEVmZmVjdCIsImRyb3BFZmZlY3QiLCJfcmVmJGZyYW1lIiwiZnJhbWUiLCJkb2N1bWVudCIsInVuZGVmaW5lZCIsIl9yZWYkY2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwiX3JlZiR0YXJnZXRDbGFzc05hbWUiLCJ0YXJnZXRDbGFzc05hbWUiLCJfcmVmJGRyYWdnaW5nT3ZlckZyYW0iLCJkcmFnZ2luZ092ZXJGcmFtZUNsYXNzTmFtZSIsIl9yZWYkZHJhZ2dpbmdPdmVyVGFyZyIsImRyYWdnaW5nT3ZlclRhcmdldENsYXNzTmFtZSIsIm9uRHJhZ092ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJvcCIsIm9uRnJhbWVEcmFnRW50ZXIiLCJvbkZyYW1lRHJhZ0xlYXZlIiwib25GcmFtZURyb3AiLCJjaGlsZHJlbiIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImRyYWdnaW5nT3ZlclRhcmdldCIsInNldERyYWdnaW5nT3ZlclRhcmdldCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZHJhZ2dpbmdPdmVyRnJhbWUiLCJzZXREcmFnZ2luZ092ZXJGcmFtZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiZnJhbWVEcmFnQ291bnRlciIsInNldEZyYW1lRHJhZ0NvdW50ZXIiLCJwcmV2RnJhbWUiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJzdGFydEZyYW1lTGlzdGVuZXJzIiwicmVzZXREcmFnZ2luZyIsImFkZEV2ZW50TGlzdGVuZXIiLCJoYW5kbGVXaW5kb3dEcmFnT3Zlck9yRHJvcCIsInN0b3BGcmFtZUxpc3RlbmVycyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1c2VDYWxsYmFjayIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlRnJhbWVEcmFnIiwibmV3RHJhZ0NvdW50ZXJWYWx1ZSIsInR5cGUiLCJoYW5kbGVGcmFtZURyb3AiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZURyb3AiLCJmaWxlcyIsImN1cnJlbnQiLCJmaWxlRHJvcFRhcmdldENsYXNzTmFtZSIsImNvbmNhdCIsImNyZWF0ZUVsZW1lbnQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL2ZpbGUtdXBsb2FkZXIvZmlsZS1kcm9wLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXJpbmsvcmVhY3QtZmlsZS1kcm9wXG4gKiBGb3IgUmVhY3QgMTYuOCBjb21wYXRpYmlsaXR5XG4gKi9cbmltcG9ydCBSZWFjdCwge1JlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcblxuY29uc3QgaXNJRSA9ICgpID0+XG4gIFdpbmRvdyAmJlxuICBXaW5kb3cubmF2aWdhdG9yICYmXG4gICgoV2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgfHwgW10pLmluY2x1ZGVzKCdNU0lFJykgfHxcbiAgICAoV2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uIHx8IFtdKS5pbmNsdWRlcygnVHJpZGVudC8nKSk7XG5cbmNvbnN0IGV2ZW50SGFzRmlsZXMgPSBldmVudCA9PiB7XG4gIC8vIEluIG1vc3QgYnJvd3NlcnMgdGhpcyBpcyBhbiBhcnJheSwgYnV0IGluIElFMTEgaXQncyBhbiBPYmplY3QgOihcblxuICBsZXQgaGFzRmlsZXMgPSBmYWxzZTtcbiAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgIGNvbnN0IHR5cGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzO1xuICAgIGZvciAoY29uc3Qga2V5T3JJbmRleCBpbiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVzW2tleU9ySW5kZXhdID09PSAnRmlsZXMnKSB7XG4gICAgICAgIGhhc0ZpbGVzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBoYXNGaWxlcztcbn07XG5cbmV4cG9ydCB0eXBlIEZpbGVEcm9wUHJvcHMgPSB7XG4gIGRyb3BFZmZlY3Q/OiAnY29weScgfCAnbW92ZScgfCAnbGluaycgfCAnbm9uZSc7XG4gIGZyYW1lPzogdHlwZW9mIGRvY3VtZW50IHwgdHlwZW9mIFdpbmRvdyB8IEhUTUxFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRhcmdldENsYXNzTmFtZT86IHN0cmluZztcbiAgZHJhZ2dpbmdPdmVyRnJhbWVDbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRyYWdnaW5nT3ZlclRhcmdldENsYXNzTmFtZT86IHN0cmluZztcbiAgb25EcmFnT3Zlcj86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBvbkRyYWdMZWF2ZT86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBvbkRyb3A/OiAoZmlsZUxpc3Q6IEZpbGVMaXN0LCBldmVudDogYW55KSA9PiB2b2lkO1xuICBvbkZyYW1lRHJhZ0VudGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIG9uRnJhbWVEcmFnTGVhdmU/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgb25GcmFtZURyb3A/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG59O1xuXG5jb25zdCBGaWxlRHJvcCA9ICh7XG4gIGRyb3BFZmZlY3QgPSAnY29weScsXG4gIGZyYW1lID0gV2luZG93ID8gV2luZG93LmRvY3VtZW50IDogdW5kZWZpbmVkLFxuICBjbGFzc05hbWUgPSAnZmlsZS1kcm9wJyxcbiAgdGFyZ2V0Q2xhc3NOYW1lID0gJ2ZpbGUtZHJvcC10YXJnZXQnLFxuICBkcmFnZ2luZ092ZXJGcmFtZUNsYXNzTmFtZSA9ICdmaWxlLWRyb3AtZHJhZ2dpbmctb3Zlci1mcmFtZScsXG4gIGRyYWdnaW5nT3ZlclRhcmdldENsYXNzTmFtZSA9ICdmaWxlLWRyb3AtZHJhZ2dpbmctb3Zlci10YXJnZXQnLFxuICBvbkRyYWdPdmVyLFxuICBvbkRyYWdMZWF2ZSxcbiAgb25Ecm9wLFxuICBvbkZyYW1lRHJhZ0VudGVyLFxuICBvbkZyYW1lRHJhZ0xlYXZlLFxuICBvbkZyYW1lRHJvcCxcbiAgY2hpbGRyZW5cbn06IEZpbGVEcm9wUHJvcHMpID0+IHtcbiAgY29uc3QgW2RyYWdnaW5nT3ZlclRhcmdldCwgc2V0RHJhZ2dpbmdPdmVyVGFyZ2V0XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2RyYWdnaW5nT3ZlckZyYW1lLCBzZXREcmFnZ2luZ092ZXJGcmFtZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtmcmFtZURyYWdDb3VudGVyLCBzZXRGcmFtZURyYWdDb3VudGVyXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHByZXZGcmFtZSA9IHVzZVJlZihmcmFtZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBjb21wb25lbnREaWRNb3VudFxuICAgIHN0YXJ0RnJhbWVMaXN0ZW5lcnMoZnJhbWUpO1xuICAgIHJlc2V0RHJhZ2dpbmcoKTtcbiAgICBXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBoYW5kbGVXaW5kb3dEcmFnT3Zlck9yRHJvcCk7XG4gICAgV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBoYW5kbGVXaW5kb3dEcmFnT3Zlck9yRHJvcCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnRcbiAgICAgIHN0b3BGcmFtZUxpc3RlbmVycyhmcmFtZSk7XG4gICAgICBXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBoYW5kbGVXaW5kb3dEcmFnT3Zlck9yRHJvcCk7XG4gICAgICBXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIGhhbmRsZVdpbmRvd0RyYWdPdmVyT3JEcm9wKTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3QgcmVzZXREcmFnZ2luZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRGcmFtZURyYWdDb3VudGVyKDApO1xuICAgIHNldERyYWdnaW5nT3ZlclRhcmdldChmYWxzZSk7XG4gICAgc2V0RHJhZ2dpbmdPdmVyRnJhbWUoZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlV2luZG93RHJhZ092ZXJPckRyb3AgPSB1c2VDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgYnJvd3NlciBmcm9tIHRyeWluZyB0byBsb2FkIHdoYXRldmVyIGZpbGUgdGhlIHVzZXIgZHJvcHBlZCBvbiB0aGUgd2luZG93XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUZyYW1lRHJhZyA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIC8vIE9ubHkgYWxsb3cgZHJhZ2dpbmcgb2YgZmlsZXNcbiAgICAgIGlmICghZXZlbnRIYXNGaWxlcyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gV2UgYXJlIGxpc3RlbmluZyBmb3IgZXZlbnRzIG9uIHRoZSAnZnJhbWUnLCBzbyBldmVyeSB0aW1lIHRoZSB1c2VyIGRyYWdzIG92ZXIgYW55IGVsZW1lbnQgaW4gdGhlIGZyYW1lJ3MgdHJlZSxcbiAgICAgIC8vIHRoZSBldmVudCBidWJibGVzIHVwIHRvIHRoZSBmcmFtZS4gQnkga2VlcGluZyBjb3VudCBvZiBob3cgbWFueSBcImRyYWdlbnRlcnNcIiB3ZSBnZXQsIHdlIGNhbiB0ZWxsIGlmIHRoZXkgYXJlIHN0aWxsXG4gICAgICAvLyBcImRyYWdnaW5nT3ZlckZyYW1lXCIgKGIvYyB5b3UgZ2V0IG9uZSBcImRyYWdlbnRlclwiIGluaXRpYWxseSwgYW5kIG9uZSBcImRyYWdlbnRlclwiL29uZSBcImRyYWdsZWF2ZVwiIGZvciBldmVyeSBidWJibGUpXG4gICAgICAvLyBUaGlzIGlzIGZhciBiZXR0ZXIgdGhhbiBhIFwiZHJhZ292ZXJcIiBoYW5kbGVyLCB3aGljaCB3b3VsZCBiZSBjYWxsaW5nIGBzZXRTdGF0ZWAgY29udGludW91c2x5LlxuICAgICAgY29uc3QgbmV3RHJhZ0NvdW50ZXJWYWx1ZSA9IGZyYW1lRHJhZ0NvdW50ZXIgKyAoZXZlbnQudHlwZSA9PT0gJ2RyYWdlbnRlcicgPyAxIDogLTEpO1xuICAgICAgc2V0RnJhbWVEcmFnQ291bnRlcihuZXdEcmFnQ291bnRlclZhbHVlKTtcblxuICAgICAgaWYgKG5ld0RyYWdDb3VudGVyVmFsdWUgPT09IDEpIHtcbiAgICAgICAgc2V0RHJhZ2dpbmdPdmVyRnJhbWUodHJ1ZSk7XG4gICAgICAgIGlmIChvbkZyYW1lRHJhZ0VudGVyKSBvbkZyYW1lRHJhZ0VudGVyKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3RHJhZ0NvdW50ZXJWYWx1ZSA9PT0gMCkge1xuICAgICAgICBzZXREcmFnZ2luZ092ZXJGcmFtZShmYWxzZSk7XG4gICAgICAgIGlmIChvbkZyYW1lRHJhZ0xlYXZlKSBvbkZyYW1lRHJhZ0xlYXZlKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2ZyYW1lRHJhZ0NvdW50ZXIsIHNldERyYWdnaW5nT3ZlckZyYW1lLCBvbkZyYW1lRHJhZ0VudGVyLCBvbkZyYW1lRHJhZ0xlYXZlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUZyYW1lRHJvcCA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoIWRyYWdnaW5nT3ZlclRhcmdldCkge1xuICAgICAgICByZXNldERyYWdnaW5nKCk7XG4gICAgICAgIGlmIChvbkZyYW1lRHJvcCkgb25GcmFtZURyb3AoZXZlbnQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uRnJhbWVEcm9wLCBkcmFnZ2luZ092ZXJUYXJnZXQsIHJlc2V0RHJhZ2dpbmddXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlRHJhZ092ZXIgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnRIYXNGaWxlcyhldmVudCkpIHtcbiAgICAgICAgc2V0RHJhZ2dpbmdPdmVyVGFyZ2V0KHRydWUpO1xuICAgICAgICBpZiAoIWlzSUUoKSAmJiBkcm9wRWZmZWN0KSBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IGRyb3BFZmZlY3Q7XG4gICAgICAgIGlmIChvbkRyYWdPdmVyKSBvbkRyYWdPdmVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkcm9wRWZmZWN0LCBvbkRyYWdPdmVyXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIHNldERyYWdnaW5nT3ZlclRhcmdldChmYWxzZSk7XG5cbiAgICAgIGlmIChvbkRyYWdMZWF2ZSkgb25EcmFnTGVhdmUoZXZlbnQpO1xuICAgIH0sXG4gICAgW29uRHJhZ0xlYXZlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSB1c2VDYWxsYmFjayhcbiAgICBldmVudCA9PiB7XG4gICAgICBpZiAob25Ecm9wICYmIGV2ZW50SGFzRmlsZXMoZXZlbnQpKSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyID8gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzIDogbnVsbDtcbiAgICAgICAgb25Ecm9wKGZpbGVzLCBldmVudCk7XG4gICAgICB9XG4gICAgICByZXNldERyYWdnaW5nKCk7XG4gICAgfSxcbiAgICBbb25Ecm9wLCByZXNldERyYWdnaW5nXVxuICApO1xuXG4gIGNvbnN0IHN0b3BGcmFtZUxpc3RlbmVycyA9IHVzZUNhbGxiYWNrKFxuICAgIGZyYW1lID0+IHtcbiAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICBmcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnZW50ZXInLCBoYW5kbGVGcmFtZURyYWcpO1xuICAgICAgICBmcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBoYW5kbGVGcmFtZURyYWcpO1xuICAgICAgICBmcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgaGFuZGxlRnJhbWVEcm9wKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVGcmFtZURyYWcsIGhhbmRsZUZyYW1lRHJvcF1cbiAgKTtcblxuICBjb25zdCBzdGFydEZyYW1lTGlzdGVuZXJzID0gdXNlQ2FsbGJhY2soXG4gICAgZnJhbWUgPT4ge1xuICAgICAgaWYgKGZyYW1lKSB7XG4gICAgICAgIGZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIGhhbmRsZUZyYW1lRHJhZyk7XG4gICAgICAgIGZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIGhhbmRsZUZyYW1lRHJhZyk7XG4gICAgICAgIGZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBoYW5kbGVGcmFtZURyb3ApO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUZyYW1lRHJhZywgaGFuZGxlRnJhbWVEcm9wXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gY29tcG9uZW50RGlkVXBkYXRlXG4gICAgaWYgKHByZXZGcmFtZS5jdXJyZW50ICE9PSBmcmFtZSkge1xuICAgICAgcmVzZXREcmFnZ2luZygpO1xuICAgICAgc3RvcEZyYW1lTGlzdGVuZXJzKHByZXZGcmFtZS5jdXJyZW50KTtcbiAgICAgIHN0YXJ0RnJhbWVMaXN0ZW5lcnMoZnJhbWUpO1xuXG4gICAgICBwcmV2RnJhbWUuY3VycmVudCA9IGZyYW1lO1xuICAgIH1cbiAgfSwgW2ZyYW1lLCByZXNldERyYWdnaW5nLCBzdG9wRnJhbWVMaXN0ZW5lcnMsIHN0YXJ0RnJhbWVMaXN0ZW5lcnNdKTtcblxuICAvLyBSZW5kZXJcbiAgbGV0IGZpbGVEcm9wVGFyZ2V0Q2xhc3NOYW1lID0gdGFyZ2V0Q2xhc3NOYW1lO1xuICBpZiAoZHJhZ2dpbmdPdmVyRnJhbWUpIGZpbGVEcm9wVGFyZ2V0Q2xhc3NOYW1lICs9IGAgJHtkcmFnZ2luZ092ZXJGcmFtZUNsYXNzTmFtZX1gO1xuICBpZiAoZHJhZ2dpbmdPdmVyVGFyZ2V0KSBmaWxlRHJvcFRhcmdldENsYXNzTmFtZSArPSBgICR7ZHJhZ2dpbmdPdmVyVGFyZ2V0Q2xhc3NOYW1lfWA7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIG9uRHJhZ092ZXI9e2hhbmRsZURyYWdPdmVyfVxuICAgICAgb25EcmFnTGVhdmU9e2hhbmRsZURyYWdMZWF2ZX1cbiAgICAgIG9uRHJvcD17aGFuZGxlRHJvcH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17ZmlsZURyb3BUYXJnZXRDbGFzc05hbWV9PntjaGlsZHJlbn08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVEcm9wO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFPQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBbUMsU0FBQUcseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFMLHdCQUFBSyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBUm5DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBSUEsSUFBTVcsSUFBSSxHQUFHLFNBQVBBLElBQUlBLENBQUE7RUFBQSxPQUNSQyxrQkFBTSxJQUNOQSxrQkFBTSxDQUFDQyxTQUFTLEtBQ2YsQ0FBQ0Qsa0JBQU0sQ0FBQ0MsU0FBUyxDQUFDQyxTQUFTLElBQUksRUFBRSxFQUFFQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQ2xELENBQUNILGtCQUFNLENBQUNDLFNBQVMsQ0FBQ0csVUFBVSxJQUFJLEVBQUUsRUFBRUQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFFN0QsSUFBTUUsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFHQyxLQUFLLEVBQUk7RUFDN0I7O0VBRUEsSUFBSUMsUUFBUSxHQUFHLEtBQUs7RUFDcEIsSUFBSUQsS0FBSyxDQUFDRSxZQUFZLEVBQUU7SUFDdEIsSUFBTUMsS0FBSyxHQUFHSCxLQUFLLENBQUNFLFlBQVksQ0FBQ0MsS0FBSztJQUN0QyxLQUFLLElBQU1DLFVBQVUsSUFBSUQsS0FBSyxFQUFFO01BQzlCLElBQUlBLEtBQUssQ0FBQ0MsVUFBVSxDQUFDLEtBQUssT0FBTyxFQUFFO1FBQ2pDSCxRQUFRLEdBQUcsSUFBSTtRQUNmO01BQ0Y7SUFDRjtFQUNGO0VBQ0EsT0FBT0EsUUFBUTtBQUNqQixDQUFDO0FBa0JELElBQU1JLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFBQyxJQUFBLEVBY087RUFBQSxJQUFBQyxlQUFBLEdBQUFELElBQUEsQ0FibkJFLFVBQVU7SUFBVkEsVUFBVSxHQUFBRCxlQUFBLGNBQUcsTUFBTSxHQUFBQSxlQUFBO0lBQUFFLFVBQUEsR0FBQUgsSUFBQSxDQUNuQkksS0FBSztJQUFMQSxLQUFLLEdBQUFELFVBQUEsY0FBR2Ysa0JBQU0sR0FBR0Esa0JBQU0sQ0FBQ2lCLFFBQVEsR0FBR0MsU0FBUyxHQUFBSCxVQUFBO0lBQUFJLGNBQUEsR0FBQVAsSUFBQSxDQUM1Q1EsU0FBUztJQUFUQSxTQUFTLEdBQUFELGNBQUEsY0FBRyxXQUFXLEdBQUFBLGNBQUE7SUFBQUUsb0JBQUEsR0FBQVQsSUFBQSxDQUN2QlUsZUFBZTtJQUFmQSxlQUFlLEdBQUFELG9CQUFBLGNBQUcsa0JBQWtCLEdBQUFBLG9CQUFBO0lBQUFFLHFCQUFBLEdBQUFYLElBQUEsQ0FDcENZLDBCQUEwQjtJQUExQkEsMEJBQTBCLEdBQUFELHFCQUFBLGNBQUcsK0JBQStCLEdBQUFBLHFCQUFBO0lBQUFFLHFCQUFBLEdBQUFiLElBQUEsQ0FDNURjLDJCQUEyQjtJQUEzQkEsMkJBQTJCLEdBQUFELHFCQUFBLGNBQUcsZ0NBQWdDLEdBQUFBLHFCQUFBO0lBQzlERSxVQUFVLEdBQUFmLElBQUEsQ0FBVmUsVUFBVTtJQUNWQyxXQUFXLEdBQUFoQixJQUFBLENBQVhnQixXQUFXO0lBQ1hDLE1BQU0sR0FBQWpCLElBQUEsQ0FBTmlCLE1BQU07SUFDTkMsZ0JBQWdCLEdBQUFsQixJQUFBLENBQWhCa0IsZ0JBQWdCO0lBQ2hCQyxnQkFBZ0IsR0FBQW5CLElBQUEsQ0FBaEJtQixnQkFBZ0I7SUFDaEJDLFdBQVcsR0FBQXBCLElBQUEsQ0FBWG9CLFdBQVc7SUFDWEMsUUFBUSxHQUFBckIsSUFBQSxDQUFScUIsUUFBUTtFQUVSLElBQUFDLFNBQUEsR0FBb0QsSUFBQUMsZUFBUSxFQUFDLEtBQUssQ0FBQztJQUFBQyxVQUFBLE9BQUFDLGVBQUEsYUFBQUgsU0FBQTtJQUE1REksa0JBQWtCLEdBQUFGLFVBQUE7SUFBRUcscUJBQXFCLEdBQUFILFVBQUE7RUFDaEQsSUFBQUksVUFBQSxHQUFrRCxJQUFBTCxlQUFRLEVBQUMsS0FBSyxDQUFDO0lBQUFNLFVBQUEsT0FBQUosZUFBQSxhQUFBRyxVQUFBO0lBQTFERSxpQkFBaUIsR0FBQUQsVUFBQTtJQUFFRSxvQkFBb0IsR0FBQUYsVUFBQTtFQUM5QyxJQUFBRyxVQUFBLEdBQWdELElBQUFULGVBQVEsRUFBQyxDQUFDLENBQUM7SUFBQVUsVUFBQSxPQUFBUixlQUFBLGFBQUFPLFVBQUE7SUFBcERFLGdCQUFnQixHQUFBRCxVQUFBO0lBQUVFLG1CQUFtQixHQUFBRixVQUFBO0VBRTVDLElBQU1HLFNBQVMsR0FBRyxJQUFBQyxhQUFNLEVBQUNqQyxLQUFLLENBQUM7RUFFL0IsSUFBQWtDLGdCQUFTLEVBQUMsWUFBTTtJQUNkO0lBQ0FDLG1CQUFtQixDQUFDbkMsS0FBSyxDQUFDO0lBQzFCb0MsYUFBYSxDQUFDLENBQUM7SUFDZnBELGtCQUFNLENBQUNxRCxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUVDLDBCQUEwQixDQUFDO0lBQy9EdEQsa0JBQU0sQ0FBQ3FELGdCQUFnQixDQUFDLE1BQU0sRUFBRUMsMEJBQTBCLENBQUM7SUFFM0QsT0FBTyxZQUFNO01BQ1g7TUFDQUMsa0JBQWtCLENBQUN2QyxLQUFLLENBQUM7TUFDekJoQixrQkFBTSxDQUFDd0QsbUJBQW1CLENBQUMsVUFBVSxFQUFFRiwwQkFBMEIsQ0FBQztNQUNsRXRELGtCQUFNLENBQUN3RCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUVGLDBCQUEwQixDQUFDO0lBQ2hFLENBQUM7O0lBRUQ7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTUYsYUFBYSxHQUFHLElBQUFLLGtCQUFXLEVBQUMsWUFBTTtJQUN0Q1YsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQ3RCUixxQkFBcUIsQ0FBQyxLQUFLLENBQUM7SUFDNUJJLG9CQUFvQixDQUFDLEtBQUssQ0FBQztFQUM3QixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTVcsMEJBQTBCLEdBQUcsSUFBQUcsa0JBQVcsRUFBQyxVQUFBbkQsS0FBSyxFQUFJO0lBQ3REO0lBQ0FBLEtBQUssQ0FBQ29ELGNBQWMsQ0FBQyxDQUFDO0VBQ3hCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNQyxlQUFlLEdBQUcsSUFBQUYsa0JBQVcsRUFDakMsVUFBQW5ELEtBQUssRUFBSTtJQUNQO0lBQ0EsSUFBSSxDQUFDRCxhQUFhLENBQUNDLEtBQUssQ0FBQyxFQUFFOztJQUUzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBLElBQU1zRCxtQkFBbUIsR0FBR2QsZ0JBQWdCLElBQUl4QyxLQUFLLENBQUN1RCxJQUFJLEtBQUssV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRmQsbUJBQW1CLENBQUNhLG1CQUFtQixDQUFDO0lBRXhDLElBQUlBLG1CQUFtQixLQUFLLENBQUMsRUFBRTtNQUM3QmpCLG9CQUFvQixDQUFDLElBQUksQ0FBQztNQUMxQixJQUFJYixnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUN4QixLQUFLLENBQUM7TUFDN0M7SUFDRjtJQUVBLElBQUlzRCxtQkFBbUIsS0FBSyxDQUFDLEVBQUU7TUFDN0JqQixvQkFBb0IsQ0FBQyxLQUFLLENBQUM7TUFDM0IsSUFBSVosZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDekIsS0FBSyxDQUFDO01BQzdDO0lBQ0Y7RUFDRixDQUFDLEVBQ0QsQ0FBQ3dDLGdCQUFnQixFQUFFSCxvQkFBb0IsRUFBRWIsZ0JBQWdCLEVBQUVDLGdCQUFnQixDQUM3RSxDQUFDO0VBRUQsSUFBTStCLGVBQWUsR0FBRyxJQUFBTCxrQkFBVyxFQUNqQyxVQUFBbkQsS0FBSyxFQUFJO0lBQ1BBLEtBQUssQ0FBQ29ELGNBQWMsQ0FBQyxDQUFDO0lBQ3RCLElBQUksQ0FBQ3BCLGtCQUFrQixFQUFFO01BQ3ZCYyxhQUFhLENBQUMsQ0FBQztNQUNmLElBQUlwQixXQUFXLEVBQUVBLFdBQVcsQ0FBQzFCLEtBQUssQ0FBQztJQUNyQztFQUNGLENBQUMsRUFDRCxDQUFDMEIsV0FBVyxFQUFFTSxrQkFBa0IsRUFBRWMsYUFBYSxDQUNqRCxDQUFDO0VBRUQsSUFBTVcsY0FBYyxHQUFHLElBQUFOLGtCQUFXLEVBQ2hDLFVBQUFuRCxLQUFLLEVBQUk7SUFDUCxJQUFJRCxhQUFhLENBQUNDLEtBQUssQ0FBQyxFQUFFO01BQ3hCaUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO01BQzNCLElBQUksQ0FBQ3hDLElBQUksQ0FBQyxDQUFDLElBQUllLFVBQVUsRUFBRVIsS0FBSyxDQUFDRSxZQUFZLENBQUNNLFVBQVUsR0FBR0EsVUFBVTtNQUNyRSxJQUFJYSxVQUFVLEVBQUVBLFVBQVUsQ0FBQ3JCLEtBQUssQ0FBQztJQUNuQztFQUNGLENBQUMsRUFDRCxDQUFDUSxVQUFVLEVBQUVhLFVBQVUsQ0FDekIsQ0FBQztFQUVELElBQU1xQyxlQUFlLEdBQUcsSUFBQVAsa0JBQVcsRUFDakMsVUFBQW5ELEtBQUssRUFBSTtJQUNQaUMscUJBQXFCLENBQUMsS0FBSyxDQUFDO0lBRTVCLElBQUlYLFdBQVcsRUFBRUEsV0FBVyxDQUFDdEIsS0FBSyxDQUFDO0VBQ3JDLENBQUMsRUFDRCxDQUFDc0IsV0FBVyxDQUNkLENBQUM7RUFFRCxJQUFNcUMsVUFBVSxHQUFHLElBQUFSLGtCQUFXLEVBQzVCLFVBQUFuRCxLQUFLLEVBQUk7SUFDUCxJQUFJdUIsTUFBTSxJQUFJeEIsYUFBYSxDQUFDQyxLQUFLLENBQUMsRUFBRTtNQUNsQyxJQUFNNEQsS0FBSyxHQUFHNUQsS0FBSyxDQUFDRSxZQUFZLEdBQUdGLEtBQUssQ0FBQ0UsWUFBWSxDQUFDMEQsS0FBSyxHQUFHLElBQUk7TUFDbEVyQyxNQUFNLENBQUNxQyxLQUFLLEVBQUU1RCxLQUFLLENBQUM7SUFDdEI7SUFDQThDLGFBQWEsQ0FBQyxDQUFDO0VBQ2pCLENBQUMsRUFDRCxDQUFDdkIsTUFBTSxFQUFFdUIsYUFBYSxDQUN4QixDQUFDO0VBRUQsSUFBTUcsa0JBQWtCLEdBQUcsSUFBQUUsa0JBQVcsRUFDcEMsVUFBQXpDLEtBQUssRUFBSTtJQUNQLElBQUlBLEtBQUssRUFBRTtNQUNUQSxLQUFLLENBQUN3QyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUVHLGVBQWUsQ0FBQztNQUN2RDNDLEtBQUssQ0FBQ3dDLG1CQUFtQixDQUFDLFdBQVcsRUFBRUcsZUFBZSxDQUFDO01BQ3ZEM0MsS0FBSyxDQUFDd0MsbUJBQW1CLENBQUMsTUFBTSxFQUFFTSxlQUFlLENBQUM7SUFDcEQ7RUFDRixDQUFDLEVBQ0QsQ0FBQ0gsZUFBZSxFQUFFRyxlQUFlLENBQ25DLENBQUM7RUFFRCxJQUFNWCxtQkFBbUIsR0FBRyxJQUFBTSxrQkFBVyxFQUNyQyxVQUFBekMsS0FBSyxFQUFJO0lBQ1AsSUFBSUEsS0FBSyxFQUFFO01BQ1RBLEtBQUssQ0FBQ3FDLGdCQUFnQixDQUFDLFdBQVcsRUFBRU0sZUFBZSxDQUFDO01BQ3BEM0MsS0FBSyxDQUFDcUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFTSxlQUFlLENBQUM7TUFDcEQzQyxLQUFLLENBQUNxQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUVTLGVBQWUsQ0FBQztJQUNqRDtFQUNGLENBQUMsRUFDRCxDQUFDSCxlQUFlLEVBQUVHLGVBQWUsQ0FDbkMsQ0FBQztFQUVELElBQUFaLGdCQUFTLEVBQUMsWUFBTTtJQUNkO0lBQ0EsSUFBSUYsU0FBUyxDQUFDbUIsT0FBTyxLQUFLbkQsS0FBSyxFQUFFO01BQy9Cb0MsYUFBYSxDQUFDLENBQUM7TUFDZkcsa0JBQWtCLENBQUNQLFNBQVMsQ0FBQ21CLE9BQU8sQ0FBQztNQUNyQ2hCLG1CQUFtQixDQUFDbkMsS0FBSyxDQUFDO01BRTFCZ0MsU0FBUyxDQUFDbUIsT0FBTyxHQUFHbkQsS0FBSztJQUMzQjtFQUNGLENBQUMsRUFBRSxDQUFDQSxLQUFLLEVBQUVvQyxhQUFhLEVBQUVHLGtCQUFrQixFQUFFSixtQkFBbUIsQ0FBQyxDQUFDOztFQUVuRTtFQUNBLElBQUlpQix1QkFBdUIsR0FBRzlDLGVBQWU7RUFDN0MsSUFBSW9CLGlCQUFpQixFQUFFMEIsdUJBQXVCLFFBQUFDLE1BQUEsQ0FBUTdDLDBCQUEwQixDQUFFO0VBQ2xGLElBQUljLGtCQUFrQixFQUFFOEIsdUJBQXVCLFFBQUFDLE1BQUEsQ0FBUTNDLDJCQUEyQixDQUFFO0VBRXBGLG9CQUNFcEQsTUFBQSxZQUFBZ0csYUFBQTtJQUNFbEQsU0FBUyxFQUFFQSxTQUFVO0lBQ3JCTyxVQUFVLEVBQUVvQyxjQUFlO0lBQzNCbkMsV0FBVyxFQUFFb0MsZUFBZ0I7SUFDN0JuQyxNQUFNLEVBQUVvQztFQUFXLGdCQUVuQjNGLE1BQUEsWUFBQWdHLGFBQUE7SUFBS2xELFNBQVMsRUFBRWdEO0VBQXdCLEdBQUVuQyxRQUFjLENBQ3JELENBQUM7QUFFVixDQUFDO0FBQUMsSUFBQXNDLFFBQUEsR0FBQUMsT0FBQSxjQUVhN0QsUUFBUSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -37,10 +37,10 @@ var HistogramBreakLine = _styledComponents["default"].g(_templateObject3 || (_te
37
37
  });
38
38
  var BarUnmemoized = _styledComponents["default"].rect(function (_ref) {
39
39
  var theme = _ref.theme,
40
- inRange = _ref.inRange,
41
- isOverlay = _ref.isOverlay,
42
- color = _ref.color;
43
- return "\n ".concat(isOverlay ? "fill: ".concat(color !== null && color !== void 0 ? color : theme.histogramOverlayColor, ";") : inRange ? "fill: ".concat(color !== null && color !== void 0 ? color : theme.histogramFillInRange, ";") : "fill: ".concat(color ? (0, _d3Color.hcl)(color).darker() : theme.histogramFillOutRange, ";"), "\n");
40
+ $inRange = _ref.$inRange,
41
+ $isOverlay = _ref.$isOverlay,
42
+ $color = _ref.$color;
43
+ return "\n ".concat($isOverlay ? "fill: ".concat($color !== null && $color !== void 0 ? $color : theme.histogramOverlayColor, ";") : $inRange ? "fill: ".concat($color !== null && $color !== void 0 ? $color : theme.histogramFillInRange, ";") : "fill: ".concat($color ? (0, _d3Color.hcl)($color).darker() : theme.histogramFillOutRange, ";"), "\n");
44
44
  });
45
45
  var Bar = /*#__PURE__*/_react["default"].memo(BarUnmemoized);
46
46
  Bar.displayName = 'Bar';
@@ -140,9 +140,9 @@ function HistogramPlotFactory() {
140
140
  var inRange = isBarInRange(bar, idx, list, domain, value);
141
141
  var wRatio = inRange ? histogramStyle.highlightW : histogramStyle.unHighlightedW;
142
142
  return /*#__PURE__*/_react["default"].createElement(Bar, {
143
- isOverlay: false,
144
- inRange: inRange,
145
- color: HISTOGRAM_MASK_FGCOLOR,
143
+ $isOverlay: false,
144
+ $inRange: inRange,
145
+ $color: HISTOGRAM_MASK_FGCOLOR,
146
146
  key: "mask-".concat(idx),
147
147
  height: y(bar[countProp]),
148
148
  width: barWidth * wRatio,
@@ -167,8 +167,8 @@ function HistogramPlotFactory() {
167
167
  var inRange = isBarInRange(bar, idx, list, domain, value);
168
168
  var wRatio = inRange ? histogramStyle.highlightW : histogramStyle.unHighlightedW;
169
169
  return /*#__PURE__*/_react["default"].createElement(Bar, {
170
- inRange: inRange,
171
- isOverlay: true,
170
+ $inRange: inRange,
171
+ $isOverlay: true,
172
172
  key: "bar-".concat(idx),
173
173
  height: maskHeight,
174
174
  width: barWidth * wRatio,
@@ -201,9 +201,9 @@ function HistogramPlotFactory() {
201
201
  var startX = x(undefinedToZero(bar.x0)) + barWidth * i + barWidth * (1 - wRatio) / 2;
202
202
  if (startX > 0 && startX + barWidth * histogramStyle.unHighlightedW <= width) {
203
203
  return /*#__PURE__*/_react["default"].createElement(Bar, {
204
- isOverlay: false,
205
- inRange: inRange,
206
- color: colorsByGroup === null || colorsByGroup === void 0 ? void 0 : colorsByGroup[key],
204
+ $isOverlay: false,
205
+ $inRange: inRange,
206
+ $color: colorsByGroup === null || colorsByGroup === void 0 ? void 0 : colorsByGroup[key],
207
207
  key: "bar-".concat(idx),
208
208
  height: y(bar[countProp]),
209
209
  width: barWidth * wRatio,
@@ -231,4 +231,4 @@ function HistogramPlotFactory() {
231
231
  return HistogramPlotWithGroups;
232
232
  }
233
233
  var _default = exports["default"] = HistogramPlotFactory;
234
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfZDNTY2FsZSIsIl9kM0NvbG9yIiwiX2QzQXJyYXkiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkhJU1RPR1JBTV9NQVNLX01PREUiLCJleHBvcnRzIiwiTm9NYXNrIiwiTWFzayIsIk1hc2tXaXRoT3ZlcmxheSIsIkhJU1RPR1JBTV9NQVNLX0JHQ09MT1IiLCJISVNUT0dSQU1fTUFTS19GR0NPTE9SIiwiaGlzdG9ncmFtU3R5bGUiLCJoaWdobGlnaHRXIiwidW5IaWdobGlnaHRlZFciLCJIaXN0b2dyYW1XcmFwcGVyIiwic3R5bGVkIiwic3ZnIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJIaXN0b2dyYW1NYXNrUmVjdCIsInJlY3QiLCJwcm9wcyIsInRoZW1lIiwicGFuZWxCYWNrZ3JvdW5kIiwiSGlzdG9ncmFtQnJlYWtMaW5lIiwiZyIsImhpc3RvZ3JhbUJyZWFrTGluZUNvbG9yIiwiQmFyVW5tZW1vaXplZCIsIl9yZWYiLCJpblJhbmdlIiwiaXNPdmVybGF5IiwiY29sb3IiLCJjb25jYXQiLCJoaXN0b2dyYW1PdmVybGF5Q29sb3IiLCJoaXN0b2dyYW1GaWxsSW5SYW5nZSIsImhjbCIsImRhcmtlciIsImhpc3RvZ3JhbUZpbGxPdXRSYW5nZSIsIkJhciIsIlJlYWN0IiwibWVtbyIsImRpc3BsYXlOYW1lIiwiaXNCYXJJblJhbmdlIiwiYmFyIiwiaW5kZXgiLCJsaXN0IiwiZmlsdGVyRG9tYWluIiwiZmlsdGVyVmFsdWUiLCJ4MENvbmRpdGlvbiIsIngwIiwieDFDb25kaXRpb24iLCJsZW5ndGgiLCJ4MSIsIkhpc3RvZ3JhbVBsb3RGYWN0b3J5IiwiSGlzdG9ncmFtUGxvdCIsIl9yZWYyIiwid2lkdGgiLCJoZWlnaHQiLCJoaXN0b2dyYW1zQnlHcm91cCIsImNvbG9yc0J5R3JvdXAiLCJfcmVmMiRpc01hc2tlZCIsImlzTWFza2VkIiwiX3JlZjIkY291bnRQcm9wIiwiY291bnRQcm9wIiwibWFyZ2luIiwiaXNSYW5nZWQiLCJyYW5nZSIsInZhbHVlIiwiYnJ1c2hDb21wb25lbnQiLCJicmVha0xpbmVzIiwidW5kZWZpbmVkVG9aZXJvIiwieCIsImdyb3VwS2V5cyIsInVzZU1lbW8iLCJrZXlzIiwiZmlsdGVyIiwia2V5IiwiX2hpc3RvZ3JhbXNCeUdyb3VwJGtlIiwiZG9tYWluIiwiX21pbiIsIl9tYXgiLCJtaW4iLCJtYXgiLCJiYXJXaWR0aCIsIm1heEdyb3VwIiwicmVkdWNlIiwiYWNjdSIsIl9pZHgiLCJzdGRCaW5JZHgiLCJ4U3RlcCIsIm1heEJpbnMiLCJzY2FsZUxpbmVhciIsInkiLCJNYXRoIiwiTnVtYmVyIiwiZCIsIm1hc2tlZEhpc3RvZ3JhbSIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsImlkIiwiZmlsbCIsImNsYXNzTmFtZSIsImZpbHRlcmVkQmlucyIsIm1hcCIsImlkeCIsIndSYXRpbyIsInRyYW5zZm9ybSIsIm1hc2siLCJiaW5zIiwiZmlsdGVyQmFyIiwibWFza0hlaWdodCIsInBvcyIsInN0cm9rZURhc2hhcnJheSIsInN0YXJ0WCIsInJ4IiwicnkiLCJIaXN0b2dyYW1QbG90V2l0aEdyb3VwcyIsImdyb3VwcyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9oaXN0b2dyYW0tcGxvdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50LCB1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3NjYWxlTGluZWFyfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge2hjbH0gZnJvbSAnZDMtY29sb3InO1xuaW1wb3J0IHttaW4sIG1heH0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7Qmluc30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbi8vIGNsaXBwaW5nIG1hc2sgY29uc3RhbnRzXG5leHBvcnQgY29uc3QgSElTVE9HUkFNX01BU0tfTU9ERSA9IHtcbiAgTm9NYXNrOiAwLFxuICBNYXNrOiAxLFxuICBNYXNrV2l0aE92ZXJsYXk6IDJcbn07XG5jb25zdCBISVNUT0dSQU1fTUFTS19CR0NPTE9SID0gJyNGRkZGRkYnO1xuY29uc3QgSElTVE9HUkFNX01BU0tfRkdDT0xPUiA9ICcjMDAwMDAwJztcblxuY29uc3QgaGlzdG9ncmFtU3R5bGUgPSB7XG4gIGhpZ2hsaWdodFc6IDAuNyxcbiAgdW5IaWdobGlnaHRlZFc6IDAuNFxufTtcblxuY29uc3QgSGlzdG9ncmFtV3JhcHBlciA9IHN0eWxlZC5zdmdgXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuYDtcblxuY29uc3QgSGlzdG9ncmFtTWFza1JlY3QgPSBzdHlsZWQucmVjdGBcbiAgZmlsbDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5wYW5lbEJhY2tncm91bmR9O1xuYDtcblxuY29uc3QgSGlzdG9ncmFtQnJlYWtMaW5lID0gc3R5bGVkLmdgXG4gIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oaXN0b2dyYW1CcmVha0xpbmVDb2xvcn07XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbmA7XG5cbnR5cGUgQmFyVHlwZSA9IHtcbiAgaW5SYW5nZTogYm9vbGVhbjtcbiAgaXNPdmVybGF5OiBib29sZWFuO1xufTtcbmNvbnN0IEJhclVubWVtb2l6ZWQgPSBzdHlsZWQucmVjdDxCYXJUeXBlPihcbiAgKHt0aGVtZSwgaW5SYW5nZSwgaXNPdmVybGF5LCBjb2xvcn0pID0+IGBcbiAgJHtcbiAgICBpc092ZXJsYXlcbiAgICAgID8gYGZpbGw6ICR7Y29sb3IgPz8gdGhlbWUuaGlzdG9ncmFtT3ZlcmxheUNvbG9yfTtgXG4gICAgICA6IGluUmFuZ2VcbiAgICAgID8gYGZpbGw6ICR7Y29sb3IgPz8gdGhlbWUuaGlzdG9ncmFtRmlsbEluUmFuZ2V9O2BcbiAgICAgIDogYGZpbGw6ICR7Y29sb3IgPyBoY2woY29sb3IpLmRhcmtlcigpIDogdGhlbWUuaGlzdG9ncmFtRmlsbE91dFJhbmdlfTtgXG4gIH1cbmBcbik7XG5jb25zdCBCYXIgPSBSZWFjdC5tZW1vKEJhclVubWVtb2l6ZWQpO1xuQmFyLmRpc3BsYXlOYW1lID0gJ0Jhcic7XG5cbmNvbnN0IGlzQmFySW5SYW5nZSA9IChcbiAgYmFyOiB7eDA6IG51bWJlcjsgeDE6IG51bWJlcn0sXG4gIGluZGV4OiBudW1iZXIsXG4gIGxpc3Q6IGFueVtdLFxuICBmaWx0ZXJEb21haW46IGFueVtdLFxuICBmaWx0ZXJWYWx1ZTogYW55W11cbikgPT4ge1xuICAvLyBmaXJzdFxuICAvLyBpZiB4MCA8PSBkb21haW5bMF0gYW5kIGN1cnJlbnQgdmFsdWVbMF0gd2Fzbid0IGNoYW5nZWQgZnJvbSB0aGUgb3JpZ2luYWwgZG9tYWluXG4gIGNvbnN0IHgwQ29uZGl0aW9uID1cbiAgICBpbmRleCA9PT0gMCA/IGJhci54MCA8PSBmaWx0ZXJEb21haW5bMF0gJiYgZmlsdGVyRG9tYWluWzBdID09PSBmaWx0ZXJWYWx1ZVswXSA6IGZhbHNlO1xuICAvLyBMYXN0XG4gIC8vIGlmIHgxID49IGRvbWFpblsxXSBhbmQgY3VycmVudCB2YWx1ZVsxXSB3YXNuJ3QgY2hhbmdlZCBmcm9tIHRoZSBvcmlnaW5hbCBkb21haW5cbiAgY29uc3QgeDFDb25kaXRpb24gPVxuICAgIGluZGV4ID09PSBsaXN0Lmxlbmd0aCAtIDFcbiAgICAgID8gYmFyLngxID49IGZpbHRlckRvbWFpblsxXSAmJiBmaWx0ZXJEb21haW5bMV0gPT09IGZpbHRlclZhbHVlWzFdXG4gICAgICA6IGZhbHNlO1xuICByZXR1cm4gKHgwQ29uZGl0aW9uIHx8IGJhci54MCA+PSBmaWx0ZXJWYWx1ZVswXSkgJiYgKHgxQ29uZGl0aW9uIHx8IGJhci54MSA8PSBmaWx0ZXJWYWx1ZVsxXSk7XG59O1xuXG5leHBvcnQgdHlwZSBIaXN0b2dyYW1NYXNrTW9kZVR5cGUgPSB7XG4gIE5vTWFzazogbnVtYmVyO1xuICBNYXNrOiBudW1iZXI7XG4gIE1hc2tXaXRoT3ZlcmxheTogbnVtYmVyO1xufTtcblxuaW50ZXJmYWNlIEhpc3RvZ3JhbVBsb3RQcm9wcyB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBtYXJnaW46IHt0b3A6IG51bWJlcjsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgcmlnaHQ6IG51bWJlcn07XG4gIGlzUmFuZ2VkPzogYm9vbGVhbjtcbiAgdmFsdWU6IG51bWJlcltdO1xuICBpc01hc2tlZD86IG51bWJlcjtcbiAgYnJ1c2hDb21wb25lbnQ/OiBSZWFjdEVsZW1lbnQ7XG4gIGhpc3RvZ3JhbXNCeUdyb3VwOiBCaW5zO1xuICBjb2xvcnNCeUdyb3VwPzogbnVsbCB8IHtbZGF0YUlkOiBzdHJpbmddOiBzdHJpbmd9O1xuICBjb3VudFByb3A/OiBzdHJpbmc7XG4gIHJhbmdlPzogbnVtYmVyW107XG4gIGJyZWFrTGluZXM/OiBudW1iZXJbXTtcbn1cblxuZnVuY3Rpb24gSGlzdG9ncmFtUGxvdEZhY3RvcnkoKSB7XG4gIGNvbnN0IEhpc3RvZ3JhbVBsb3QgPSAoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBoaXN0b2dyYW1zQnlHcm91cCxcbiAgICBjb2xvcnNCeUdyb3VwLFxuICAgIGlzTWFza2VkID0gSElTVE9HUkFNX01BU0tfTU9ERS5Ob01hc2ssXG4gICAgY291bnRQcm9wID0gJ2NvdW50JyxcbiAgICBtYXJnaW4sXG4gICAgaXNSYW5nZWQsXG4gICAgcmFuZ2UsXG4gICAgdmFsdWUsXG4gICAgYnJ1c2hDb21wb25lbnQsXG4gICAgYnJlYWtMaW5lc1xuICB9OiBIaXN0b2dyYW1QbG90UHJvcHMpID0+IHtcbiAgICBjb25zdCB1bmRlZmluZWRUb1plcm8gPSAoeDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiAoeCA/IHggOiAwKTtcbiAgICBjb25zdCBncm91cEtleXMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgT2JqZWN0LmtleXMoaGlzdG9ncmFtc0J5R3JvdXApXG4gICAgICAgICAgLy8gb25seSBrZWVwIG5vbi1lbXB0eSBncm91cHNcbiAgICAgICAgICAuZmlsdGVyKGtleSA9PiBoaXN0b2dyYW1zQnlHcm91cFtrZXldPy5sZW5ndGggPiAwKSxcbiAgICAgIFtoaXN0b2dyYW1zQnlHcm91cF1cbiAgICApO1xuXG4gICAgY29uc3QgZG9tYWluID0gdXNlTWVtbyhcbiAgICAgICgpID0+XG4gICAgICAgIHJhbmdlID8/IFtcbiAgICAgICAgICBtaW4oZ3JvdXBLZXlzLCBrZXkgPT4gaGlzdG9ncmFtc0J5R3JvdXBba2V5XVswXS54MCkgPz8gMCxcbiAgICAgICAgICBtYXgoZ3JvdXBLZXlzLCBrZXkgPT4gaGlzdG9ncmFtc0J5R3JvdXBba2V5XVtoaXN0b2dyYW1zQnlHcm91cFtrZXldLmxlbmd0aCAtIDFdLngxKSA/PyAwXG4gICAgICAgIF0sXG4gICAgICBbcmFuZ2UsIGhpc3RvZ3JhbXNCeUdyb3VwLCBncm91cEtleXNdXG4gICAgKTtcblxuICAgIGNvbnN0IGJhcldpZHRoID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAoZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgICAvLyBmaW5kIGhpc3RvZ3JhbXNCeUdyb3VwIHdpdGggbWF4IG51bWJlciBvZiBiaW5zXG4gICAgICBjb25zdCBtYXhHcm91cCA9IGdyb3VwS2V5cy5yZWR1Y2UoKGFjY3UsIGtleSwgX2lkeCkgPT4ge1xuICAgICAgICBpZiAoaGlzdG9ncmFtc0J5R3JvdXBba2V5XS5sZW5ndGggPiBhY2N1Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBoaXN0b2dyYW1zQnlHcm91cFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfSwgaGlzdG9ncmFtc0J5R3JvdXBbZ3JvdXBLZXlzWzBdXSk7XG5cbiAgICAgIC8vIGZpbmQgdGhlIGJpbiBmb3IgbWVhc3VyaW5nIHN0ZXBcbiAgICAgIGNvbnN0IHN0ZEJpbklkeCA9IG1heEdyb3VwLmxlbmd0aCA+IDEgPyAxIDogMDtcbiAgICAgIGNvbnN0IHhTdGVwID0gbWF4R3JvdXBbc3RkQmluSWR4XS54MSAtIG1heEdyb3VwW3N0ZEJpbklkeF0ueDA7XG4gICAgICBjb25zdCBtYXhCaW5zID0gKGRvbWFpblsxXSAtIGRvbWFpblswXSkgLyB4U3RlcDtcbiAgICAgIGlmICghbWF4QmlucykgcmV0dXJuIDA7XG4gICAgICByZXR1cm4gd2lkdGggLyBtYXhCaW5zIC8gKGlzTWFza2VkID8gMSA6IGdyb3VwS2V5cy5sZW5ndGgpO1xuICAgIH0sIFtoaXN0b2dyYW1zQnlHcm91cCwgZG9tYWluLCBncm91cEtleXMsIHdpZHRoLCBpc01hc2tlZF0pO1xuXG4gICAgY29uc3QgeCA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiBzY2FsZUxpbmVhcigpLmRvbWFpbihkb21haW4pLnJhbmdlKFtiYXJXaWR0aCwgd2lkdGhdKSxcbiAgICAgIFtkb21haW4sIHdpZHRoLCBiYXJXaWR0aF1cbiAgICApO1xuXG4gICAgY29uc3QgeSA9IHVzZU1lbW8oXG4gICAgICAoKSA9PlxuICAgICAgICBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgLmRvbWFpbihbXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgIE51bWJlcihtYXgoZ3JvdXBLZXlzLCBrZXkgPT4gbWF4KGhpc3RvZ3JhbXNCeUdyb3VwW2tleV0sIGQgPT4gZFtjb3VudFByb3BdKSkpLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgICAucmFuZ2UoWzAsIGhlaWdodF0pLFxuICAgICAgW2hpc3RvZ3JhbXNCeUdyb3VwLCBncm91cEtleXMsIGhlaWdodCwgY291bnRQcm9wXVxuICAgICk7XG5cbiAgICBpZiAoZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWFza2VkSGlzdG9ncmFtID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEhpc3RvZ3JhbVdyYXBwZXJcbiAgICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXtoZWlnaHR9XG4gICAgICAgICAgc3R5bGU9e3ttYXJnaW46IGAke21hcmdpbi50b3B9cHggJHttYXJnaW4ucmlnaHR9cHggJHttYXJnaW4uYm90dG9tfXB4ICR7bWFyZ2luLmxlZnR9cHhgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgPG1hc2sgaWQ9XCJoaXN0b2dyYW0tbWFza1wiPlxuICAgICAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgICAgIHg9XCIwXCJcbiAgICAgICAgICAgICAgICB5PVwiMFwiXG4gICAgICAgICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0ICsgbWFyZ2luLmJvdHRvbX1cbiAgICAgICAgICAgICAgICBmaWxsPXtISVNUT0dSQU1fTUFTS19CR0NPTE9SfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZyBrZXk9XCJmaWx0ZXJlZC1iaW5zXCIgY2xhc3NOYW1lPVwiaGlzdG9ncmFtLWJhcnNcIj5cbiAgICAgICAgICAgICAgICB7aGlzdG9ncmFtc0J5R3JvdXAuZmlsdGVyZWRCaW5zLm1hcCgoYmFyLCBpZHgsIGxpc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluUmFuZ2UgPSBpc0JhckluUmFuZ2UoYmFyLCBpZHgsIGxpc3QsIGRvbWFpbiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgd1JhdGlvID0gaW5SYW5nZVxuICAgICAgICAgICAgICAgICAgICA/IGhpc3RvZ3JhbVN0eWxlLmhpZ2hsaWdodFdcbiAgICAgICAgICAgICAgICAgICAgOiBoaXN0b2dyYW1TdHlsZS51bkhpZ2hsaWdodGVkVztcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxCYXJcbiAgICAgICAgICAgICAgICAgICAgICBpc092ZXJsYXk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgIGluUmFuZ2U9e2luUmFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9e0hJU1RPR1JBTV9NQVNLX0ZHQ09MT1J9XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgbWFzay0ke2lkeH1gfVxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17eShiYXJbY291bnRQcm9wXSl9XG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2JhcldpZHRoICogd1JhdGlvfVxuICAgICAgICAgICAgICAgICAgICAgIHg9e3goYmFyLngwKSArIChiYXJXaWR0aCAqICgxIC0gd1JhdGlvKSkgLyAyfVxuICAgICAgICAgICAgICAgICAgICAgIHk9e2hlaWdodCAtIHkoYmFyW2NvdW50UHJvcF0pfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9tYXNrPlxuICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCwwKVwiPlxuICAgICAgICAgICAgPEhpc3RvZ3JhbU1hc2tSZWN0XG4gICAgICAgICAgICAgIHg9XCIwXCJcbiAgICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICBoZWlnaHQ9e2hlaWdodCArIG1hcmdpbi5ib3R0b219XG4gICAgICAgICAgICAgIG1hc2s9XCJ1cmwoI2hpc3RvZ3JhbS1tYXNrKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgICB7aXNNYXNrZWQgPT09IEhJU1RPR1JBTV9NQVNLX01PREUuTWFza1dpdGhPdmVybGF5ICYmIChcbiAgICAgICAgICAgIDxnIGtleT1cImJpbnNcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCwwKVwiIGNsYXNzTmFtZT1cIm92ZXJsYXktaGlzdG9ncmFtLWJhcnNcIj5cbiAgICAgICAgICAgICAge2hpc3RvZ3JhbXNCeUdyb3VwLmJpbnMubWFwKChiYXIsIGlkeCwgbGlzdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckJhciA9IGhpc3RvZ3JhbXNCeUdyb3VwLmZpbHRlcmVkQmluc1tpZHhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tIZWlnaHQgPSBmaWx0ZXJCYXJcbiAgICAgICAgICAgICAgICAgID8geShiYXJbY291bnRQcm9wXSkgLSB5KGZpbHRlckJhcltjb3VudFByb3BdKVxuICAgICAgICAgICAgICAgICAgOiB5KGJhcltjb3VudFByb3BdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpblJhbmdlID0gaXNCYXJJblJhbmdlKGJhciwgaWR4LCBsaXN0LCBkb21haW4sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB3UmF0aW8gPSBpblJhbmdlID8gaGlzdG9ncmFtU3R5bGUuaGlnaGxpZ2h0VyA6IGhpc3RvZ3JhbVN0eWxlLnVuSGlnaGxpZ2h0ZWRXO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8QmFyXG4gICAgICAgICAgICAgICAgICAgIGluUmFuZ2U9e2luUmFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGlzT3ZlcmxheT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtgYmFyLSR7aWR4fWB9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17bWFza0hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2JhcldpZHRoICogd1JhdGlvfVxuICAgICAgICAgICAgICAgICAgICB4PXt4KGJhci54MCkgKyAoYmFyV2lkdGggKiAoMSAtIHdSYXRpbykpIC8gMn1cbiAgICAgICAgICAgICAgICAgICAgeT17aGVpZ2h0IC0geShiYXJbY291bnRQcm9wXSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPEhpc3RvZ3JhbUJyZWFrTGluZT5cbiAgICAgICAgICAgIHsoYnJlYWtMaW5lcyA/PyBbXSkubWFwKChwb3MsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxwYXRoIGtleT17YG1hc2stbGluZS0ke2lkeH1gfSBzdHJva2VEYXNoYXJyYXk9XCI0LDRcIiBkPXtgTSR7cG9zfSwgMCBsMCAxMDBgfSAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9IaXN0b2dyYW1CcmVha0xpbmU+XG4gICAgICAgICAgPGcgdHJhbnNmb3JtPXtgdHJhbnNsYXRlKCR7aXNSYW5nZWQgPyAwIDogYmFyV2lkdGggLyAyfSwgMClgfT57YnJ1c2hDb21wb25lbnR9PC9nPlxuICAgICAgICA8L0hpc3RvZ3JhbVdyYXBwZXI+XG4gICAgICApO1xuICAgIH07XG5cbiAgICByZXR1cm4gaXNNYXNrZWQgPyAoXG4gICAgICBtYXNrZWRIaXN0b2dyYW0oKVxuICAgICkgOiAoXG4gICAgICA8SGlzdG9ncmFtV3JhcHBlclxuICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgIGhlaWdodD17aGVpZ2h0fVxuICAgICAgICBzdHlsZT17e21hcmdpbjogYCR7bWFyZ2luLnRvcH1weCAke21hcmdpbi5yaWdodH1weCAke21hcmdpbi5ib3R0b219cHggJHttYXJnaW4ubGVmdH1weGB9fVxuICAgICAgPlxuICAgICAgICA8Zz5cbiAgICAgICAgICB7Z3JvdXBLZXlzLm1hcCgoa2V5LCBpKSA9PiAoXG4gICAgICAgICAgICA8ZyBrZXk9e2tleX0gY2xhc3NOYW1lPVwiaGlzdG9ncmFtLWJhcnNcIj5cbiAgICAgICAgICAgICAge2hpc3RvZ3JhbXNCeUdyb3VwW2tleV0ubWFwKChiYXIsIGlkeCwgbGlzdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluUmFuZ2UgPSBpc0JhckluUmFuZ2UoYmFyLCBpZHgsIGxpc3QsIGRvbWFpbiwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgd1JhdGlvID0gaW5SYW5nZSA/IGhpc3RvZ3JhbVN0eWxlLmhpZ2hsaWdodFcgOiBoaXN0b2dyYW1TdHlsZS51bkhpZ2hsaWdodGVkVztcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFggPVxuICAgICAgICAgICAgICAgICAgeCh1bmRlZmluZWRUb1plcm8oYmFyLngwKSkgKyBiYXJXaWR0aCAqIGkgKyAoYmFyV2lkdGggKiAoMSAtIHdSYXRpbykpIC8gMjtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRYID4gMCAmJiBzdGFydFggKyBiYXJXaWR0aCAqIGhpc3RvZ3JhbVN0eWxlLnVuSGlnaGxpZ2h0ZWRXIDw9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8QmFyXG4gICAgICAgICAgICAgICAgICAgICAgaXNPdmVybGF5PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICBpblJhbmdlPXtpblJhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnNCeUdyb3VwPy5ba2V5XX1cbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiYXItJHtpZHh9YH1cbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3koYmFyW2NvdW50UHJvcF0pfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aCAqIHdSYXRpb31cbiAgICAgICAgICAgICAgICAgICAgICB4PXtzdGFydFh9XG4gICAgICAgICAgICAgICAgICAgICAgcng9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgcnk9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgeT17aGVpZ2h0IC0geShiYXJbY291bnRQcm9wXSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2c+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgdHJhbnNmb3JtPXtgdHJhbnNsYXRlKCR7aXNSYW5nZWQgPyAwIDogYmFyV2lkdGggLyAyfSwgMClgfT57YnJ1c2hDb21wb25lbnR9PC9nPlxuICAgICAgPC9IaXN0b2dyYW1XcmFwcGVyPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgSGlzdG9ncmFtUGxvdFdpdGhHcm91cHMgPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgZ3JvdXBzID0gdXNlTWVtbyhcbiAgICAgICgpID0+IChwcm9wcy5oaXN0b2dyYW1zQnlHcm91cCA/IE9iamVjdC5rZXlzKHByb3BzLmhpc3RvZ3JhbXNCeUdyb3VwKSA6IG51bGwpLFxuICAgICAgW3Byb3BzLmhpc3RvZ3JhbXNCeUdyb3VwXVxuICAgICk7XG5cbiAgICBpZiAoIWdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gPEhpc3RvZ3JhbVBsb3Qgey4uLnByb3BzfSAvPjtcbiAgfTtcblxuICByZXR1cm4gSGlzdG9ncmFtUGxvdFdpdGhHcm91cHM7XG59XG5leHBvcnQgZGVmYXVsdCBIaXN0b2dyYW1QbG90RmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUwsT0FBQTtBQUF1QyxJQUFBTSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBUHZDO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVgsd0JBQUFXLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFB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
234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfZDNTY2FsZSIsIl9kM0NvbG9yIiwiX2QzQXJyYXkiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkhJU1RPR1JBTV9NQVNLX01PREUiLCJleHBvcnRzIiwiTm9NYXNrIiwiTWFzayIsIk1hc2tXaXRoT3ZlcmxheSIsIkhJU1RPR1JBTV9NQVNLX0JHQ09MT1IiLCJISVNUT0dSQU1fTUFTS19GR0NPTE9SIiwiaGlzdG9ncmFtU3R5bGUiLCJoaWdobGlnaHRXIiwidW5IaWdobGlnaHRlZFciLCJIaXN0b2dyYW1XcmFwcGVyIiwic3R5bGVkIiwic3ZnIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJIaXN0b2dyYW1NYXNrUmVjdCIsInJlY3QiLCJwcm9wcyIsInRoZW1lIiwicGFuZWxCYWNrZ3JvdW5kIiwiSGlzdG9ncmFtQnJlYWtMaW5lIiwiZyIsImhpc3RvZ3JhbUJyZWFrTGluZUNvbG9yIiwiQmFyVW5tZW1vaXplZCIsIl9yZWYiLCIkaW5SYW5nZSIsIiRpc092ZXJsYXkiLCIkY29sb3IiLCJjb25jYXQiLCJoaXN0b2dyYW1PdmVybGF5Q29sb3IiLCJoaXN0b2dyYW1GaWxsSW5SYW5nZSIsImhjbCIsImRhcmtlciIsImhpc3RvZ3JhbUZpbGxPdXRSYW5nZSIsIkJhciIsIlJlYWN0IiwibWVtbyIsImRpc3BsYXlOYW1lIiwiaXNCYXJJblJhbmdlIiwiYmFyIiwiaW5kZXgiLCJsaXN0IiwiZmlsdGVyRG9tYWluIiwiZmlsdGVyVmFsdWUiLCJ4MENvbmRpdGlvbiIsIngwIiwieDFDb25kaXRpb24iLCJsZW5ndGgiLCJ4MSIsIkhpc3RvZ3JhbVBsb3RGYWN0b3J5IiwiSGlzdG9ncmFtUGxvdCIsIl9yZWYyIiwid2lkdGgiLCJoZWlnaHQiLCJoaXN0b2dyYW1zQnlHcm91cCIsImNvbG9yc0J5R3JvdXAiLCJfcmVmMiRpc01hc2tlZCIsImlzTWFza2VkIiwiX3JlZjIkY291bnRQcm9wIiwiY291bnRQcm9wIiwibWFyZ2luIiwiaXNSYW5nZWQiLCJyYW5nZSIsInZhbHVlIiwiYnJ1c2hDb21wb25lbnQiLCJicmVha0xpbmVzIiwidW5kZWZpbmVkVG9aZXJvIiwieCIsImdyb3VwS2V5cyIsInVzZU1lbW8iLCJrZXlzIiwiZmlsdGVyIiwia2V5IiwiX2hpc3RvZ3JhbXNCeUdyb3VwJGtlIiwiZG9tYWluIiwiX21pbiIsIl9tYXgiLCJtaW4iLCJtYXgiLCJiYXJXaWR0aCIsIm1heEdyb3VwIiwicmVkdWNlIiwiYWNjdSIsIl9pZHgiLCJzdGRCaW5JZHgiLCJ4U3RlcCIsIm1heEJpbnMiLCJzY2FsZUxpbmVhciIsInkiLCJNYXRoIiwiTnVtYmVyIiwiZCIsIm1hc2tlZEhpc3RvZ3JhbSIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsImlkIiwiZmlsbCIsImNsYXNzTmFtZSIsImZpbHRlcmVkQmlucyIsIm1hcCIsImlkeCIsImluUmFuZ2UiLCJ3UmF0aW8iLCJ0cmFuc2Zvcm0iLCJtYXNrIiwiYmlucyIsImZpbHRlckJhciIsIm1hc2tIZWlnaHQiLCJwb3MiLCJzdHJva2VEYXNoYXJyYXkiLCJzdGFydFgiLCJyeCIsInJ5IiwiSGlzdG9ncmFtUGxvdFdpdGhHcm91cHMiLCJncm91cHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vaGlzdG9ncmFtLXBsb3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudCwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtzY2FsZUxpbmVhcn0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHtoY2x9IGZyb20gJ2QzLWNvbG9yJztcbmltcG9ydCB7bWluLCBtYXh9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge0JpbnN9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG4vLyBjbGlwcGluZyBtYXNrIGNvbnN0YW50c1xuZXhwb3J0IGNvbnN0IEhJU1RPR1JBTV9NQVNLX01PREUgPSB7XG4gIE5vTWFzazogMCxcbiAgTWFzazogMSxcbiAgTWFza1dpdGhPdmVybGF5OiAyXG59O1xuY29uc3QgSElTVE9HUkFNX01BU0tfQkdDT0xPUiA9ICcjRkZGRkZGJztcbmNvbnN0IEhJU1RPR1JBTV9NQVNLX0ZHQ09MT1IgPSAnIzAwMDAwMCc7XG5cbmNvbnN0IGhpc3RvZ3JhbVN0eWxlID0ge1xuICBoaWdobGlnaHRXOiAwLjcsXG4gIHVuSGlnaGxpZ2h0ZWRXOiAwLjRcbn07XG5cbmNvbnN0IEhpc3RvZ3JhbVdyYXBwZXIgPSBzdHlsZWQuc3ZnYFxuICBvdmVyZmxvdzogdmlzaWJsZTtcbmA7XG5cbmNvbnN0IEhpc3RvZ3JhbU1hc2tSZWN0ID0gc3R5bGVkLnJlY3RgXG4gIGZpbGw6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kfTtcbmA7XG5cbmNvbnN0IEhpc3RvZ3JhbUJyZWFrTGluZSA9IHN0eWxlZC5nYFxuICBzdHJva2U6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaGlzdG9ncmFtQnJlYWtMaW5lQ29sb3J9O1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG5gO1xuXG50eXBlIEJhclR5cGUgPSB7XG4gICRpblJhbmdlOiBib29sZWFuO1xuICAkaXNPdmVybGF5OiBib29sZWFuO1xuICAkY29sb3I/OiBzdHJpbmc7XG59O1xuY29uc3QgQmFyVW5tZW1vaXplZCA9IHN0eWxlZC5yZWN0PEJhclR5cGU+KFxuICAoe3RoZW1lLCAkaW5SYW5nZSwgJGlzT3ZlcmxheSwgJGNvbG9yfSkgPT4gYFxuICAke1xuICAgICRpc092ZXJsYXlcbiAgICAgID8gYGZpbGw6ICR7JGNvbG9yID8/IHRoZW1lLmhpc3RvZ3JhbU92ZXJsYXlDb2xvcn07YFxuICAgICAgOiAkaW5SYW5nZVxuICAgICAgPyBgZmlsbDogJHskY29sb3IgPz8gdGhlbWUuaGlzdG9ncmFtRmlsbEluUmFuZ2V9O2BcbiAgICAgIDogYGZpbGw6ICR7JGNvbG9yID8gaGNsKCRjb2xvcikuZGFya2VyKCkgOiB0aGVtZS5oaXN0b2dyYW1GaWxsT3V0UmFuZ2V9O2BcbiAgfVxuYFxuKTtcbmNvbnN0IEJhciA9IFJlYWN0Lm1lbW8oQmFyVW5tZW1vaXplZCk7XG5CYXIuZGlzcGxheU5hbWUgPSAnQmFyJztcblxuY29uc3QgaXNCYXJJblJhbmdlID0gKFxuICBiYXI6IHt4MDogbnVtYmVyOyB4MTogbnVtYmVyfSxcbiAgaW5kZXg6IG51bWJlcixcbiAgbGlzdDogYW55W10sXG4gIGZpbHRlckRvbWFpbjogYW55W10sXG4gIGZpbHRlclZhbHVlOiBhbnlbXVxuKSA9PiB7XG4gIC8vIGZpcnN0XG4gIC8vIGlmIHgwIDw9IGRvbWFpblswXSBhbmQgY3VycmVudCB2YWx1ZVswXSB3YXNuJ3QgY2hhbmdlZCBmcm9tIHRoZSBvcmlnaW5hbCBkb21haW5cbiAgY29uc3QgeDBDb25kaXRpb24gPVxuICAgIGluZGV4ID09PSAwID8gYmFyLngwIDw9IGZpbHRlckRvbWFpblswXSAmJiBmaWx0ZXJEb21haW5bMF0gPT09IGZpbHRlclZhbHVlWzBdIDogZmFsc2U7XG4gIC8vIExhc3RcbiAgLy8gaWYgeDEgPj0gZG9tYWluWzFdIGFuZCBjdXJyZW50IHZhbHVlWzFdIHdhc24ndCBjaGFuZ2VkIGZyb20gdGhlIG9yaWdpbmFsIGRvbWFpblxuICBjb25zdCB4MUNvbmRpdGlvbiA9XG4gICAgaW5kZXggPT09IGxpc3QubGVuZ3RoIC0gMVxuICAgICAgPyBiYXIueDEgPj0gZmlsdGVyRG9tYWluWzFdICYmIGZpbHRlckRvbWFpblsxXSA9PT0gZmlsdGVyVmFsdWVbMV1cbiAgICAgIDogZmFsc2U7XG4gIHJldHVybiAoeDBDb25kaXRpb24gfHwgYmFyLngwID49IGZpbHRlclZhbHVlWzBdKSAmJiAoeDFDb25kaXRpb24gfHwgYmFyLngxIDw9IGZpbHRlclZhbHVlWzFdKTtcbn07XG5cbmV4cG9ydCB0eXBlIEhpc3RvZ3JhbU1hc2tNb2RlVHlwZSA9IHtcbiAgTm9NYXNrOiBudW1iZXI7XG4gIE1hc2s6IG51bWJlcjtcbiAgTWFza1dpdGhPdmVybGF5OiBudW1iZXI7XG59O1xuXG5pbnRlcmZhY2UgSGlzdG9ncmFtUGxvdFByb3BzIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIG1hcmdpbjoge3RvcDogbnVtYmVyOyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyByaWdodDogbnVtYmVyfTtcbiAgaXNSYW5nZWQ/OiBib29sZWFuO1xuICB2YWx1ZTogbnVtYmVyW107XG4gIGlzTWFza2VkPzogbnVtYmVyO1xuICBicnVzaENvbXBvbmVudD86IFJlYWN0RWxlbWVudDtcbiAgaGlzdG9ncmFtc0J5R3JvdXA6IEJpbnM7XG4gIGNvbG9yc0J5R3JvdXA/OiBudWxsIHwge1tkYXRhSWQ6IHN0cmluZ106IHN0cmluZ307XG4gIGNvdW50UHJvcD86IHN0cmluZztcbiAgcmFuZ2U/OiBudW1iZXJbXTtcbiAgYnJlYWtMaW5lcz86IG51bWJlcltdO1xufVxuXG5mdW5jdGlvbiBIaXN0b2dyYW1QbG90RmFjdG9yeSgpIHtcbiAgY29uc3QgSGlzdG9ncmFtUGxvdCA9ICh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGhpc3RvZ3JhbXNCeUdyb3VwLFxuICAgIGNvbG9yc0J5R3JvdXAsXG4gICAgaXNNYXNrZWQgPSBISVNUT0dSQU1fTUFTS19NT0RFLk5vTWFzayxcbiAgICBjb3VudFByb3AgPSAnY291bnQnLFxuICAgIG1hcmdpbixcbiAgICBpc1JhbmdlZCxcbiAgICByYW5nZSxcbiAgICB2YWx1ZSxcbiAgICBicnVzaENvbXBvbmVudCxcbiAgICBicmVha0xpbmVzXG4gIH06IEhpc3RvZ3JhbVBsb3RQcm9wcykgPT4ge1xuICAgIGNvbnN0IHVuZGVmaW5lZFRvWmVybyA9ICh4OiBudW1iZXIgfCB1bmRlZmluZWQpID0+ICh4ID8geCA6IDApO1xuICAgIGNvbnN0IGdyb3VwS2V5cyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyhoaXN0b2dyYW1zQnlHcm91cClcbiAgICAgICAgICAvLyBvbmx5IGtlZXAgbm9uLWVtcHR5IGdyb3Vwc1xuICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IGhpc3RvZ3JhbXNCeUdyb3VwW2tleV0/Lmxlbmd0aCA+IDApLFxuICAgICAgW2hpc3RvZ3JhbXNCeUdyb3VwXVxuICAgICk7XG5cbiAgICBjb25zdCBkb21haW4gPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmFuZ2UgPz8gW1xuICAgICAgICAgIG1pbihncm91cEtleXMsIGtleSA9PiBoaXN0b2dyYW1zQnlHcm91cFtrZXldWzBdLngwKSA/PyAwLFxuICAgICAgICAgIG1heChncm91cEtleXMsIGtleSA9PiBoaXN0b2dyYW1zQnlHcm91cFtrZXldW2hpc3RvZ3JhbXNCeUdyb3VwW2tleV0ubGVuZ3RoIC0gMV0ueDEpID8/IDBcbiAgICAgICAgXSxcbiAgICAgIFtyYW5nZSwgaGlzdG9ncmFtc0J5R3JvdXAsIGdyb3VwS2V5c11cbiAgICApO1xuXG4gICAgY29uc3QgYmFyV2lkdGggPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmIChncm91cEtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICAgIC8vIGZpbmQgaGlzdG9ncmFtc0J5R3JvdXAgd2l0aCBtYXggbnVtYmVyIG9mIGJpbnNcbiAgICAgIGNvbnN0IG1heEdyb3VwID0gZ3JvdXBLZXlzLnJlZHVjZSgoYWNjdSwga2V5LCBfaWR4KSA9PiB7XG4gICAgICAgIGlmIChoaXN0b2dyYW1zQnlHcm91cFtrZXldLmxlbmd0aCA+IGFjY3UubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGhpc3RvZ3JhbXNCeUdyb3VwW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCBoaXN0b2dyYW1zQnlHcm91cFtncm91cEtleXNbMF1dKTtcblxuICAgICAgLy8gZmluZCB0aGUgYmluIGZvciBtZWFzdXJpbmcgc3RlcFxuICAgICAgY29uc3Qgc3RkQmluSWR4ID0gbWF4R3JvdXAubGVuZ3RoID4gMSA/IDEgOiAwO1xuICAgICAgY29uc3QgeFN0ZXAgPSBtYXhHcm91cFtzdGRCaW5JZHhdLngxIC0gbWF4R3JvdXBbc3RkQmluSWR4XS54MDtcbiAgICAgIGNvbnN0IG1heEJpbnMgPSAoZG9tYWluWzFdIC0gZG9tYWluWzBdKSAvIHhTdGVwO1xuICAgICAgaWYgKCFtYXhCaW5zKSByZXR1cm4gMDtcbiAgICAgIHJldHVybiB3aWR0aCAvIG1heEJpbnMgLyAoaXNNYXNrZWQgPyAxIDogZ3JvdXBLZXlzLmxlbmd0aCk7XG4gICAgfSwgW2hpc3RvZ3JhbXNCeUdyb3VwLCBkb21haW4sIGdyb3VwS2V5cywgd2lkdGgsIGlzTWFza2VkXSk7XG5cbiAgICBjb25zdCB4ID0gdXNlTWVtbyhcbiAgICAgICgpID0+IHNjYWxlTGluZWFyKCkuZG9tYWluKGRvbWFpbikucmFuZ2UoW2JhcldpZHRoLCB3aWR0aF0pLFxuICAgICAgW2RvbWFpbiwgd2lkdGgsIGJhcldpZHRoXVxuICAgICk7XG5cbiAgICBjb25zdCB5ID0gdXNlTWVtbyhcbiAgICAgICgpID0+XG4gICAgICAgIHNjYWxlTGluZWFyKClcbiAgICAgICAgICAuZG9tYWluKFtcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgICAgTnVtYmVyKG1heChncm91cEtleXMsIGtleSA9PiBtYXgoaGlzdG9ncmFtc0J5R3JvdXBba2V5XSwgZCA9PiBkW2NvdW50UHJvcF0pKSksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICAgIC5yYW5nZShbMCwgaGVpZ2h0XSksXG4gICAgICBbaGlzdG9ncmFtc0J5R3JvdXAsIGdyb3VwS2V5cywgaGVpZ2h0LCBjb3VudFByb3BdXG4gICAgKTtcblxuICAgIGlmIChncm91cEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXNrZWRIaXN0b2dyYW0gPSAoKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SGlzdG9ncmFtV3JhcHBlclxuICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICBoZWlnaHQ9e2hlaWdodH1cbiAgICAgICAgICBzdHlsZT17e21hcmdpbjogYCR7bWFyZ2luLnRvcH1weCAke21hcmdpbi5yaWdodH1weCAke21hcmdpbi5ib3R0b219cHggJHttYXJnaW4ubGVmdH1weGB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICA8bWFzayBpZD1cImhpc3RvZ3JhbS1tYXNrXCI+XG4gICAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgICAgIHk9XCIwXCJcbiAgICAgICAgICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXtoZWlnaHQgKyBtYXJnaW4uYm90dG9tfVxuICAgICAgICAgICAgICAgIGZpbGw9e0hJU1RPR1JBTV9NQVNLX0JHQ09MT1J9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxnIGtleT1cImZpbHRlcmVkLWJpbnNcIiBjbGFzc05hbWU9XCJoaXN0b2dyYW0tYmFyc1wiPlxuICAgICAgICAgICAgICAgIHtoaXN0b2dyYW1zQnlHcm91cC5maWx0ZXJlZEJpbnMubWFwKChiYXIsIGlkeCwgbGlzdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaW5SYW5nZSA9IGlzQmFySW5SYW5nZShiYXIsIGlkeCwgbGlzdCwgZG9tYWluLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCB3UmF0aW8gPSBpblJhbmdlXG4gICAgICAgICAgICAgICAgICAgID8gaGlzdG9ncmFtU3R5bGUuaGlnaGxpZ2h0V1xuICAgICAgICAgICAgICAgICAgICA6IGhpc3RvZ3JhbVN0eWxlLnVuSGlnaGxpZ2h0ZWRXO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJhclxuICAgICAgICAgICAgICAgICAgICAgICRpc092ZXJsYXk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICRpblJhbmdlPXtpblJhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICRjb2xvcj17SElTVE9HUkFNX01BU0tfRkdDT0xPUn1cbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BtYXNrLSR7aWR4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXt5KGJhcltjb3VudFByb3BdKX1cbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17YmFyV2lkdGggKiB3UmF0aW99XG4gICAgICAgICAgICAgICAgICAgICAgeD17eChiYXIueDApICsgKGJhcldpZHRoICogKDEgLSB3UmF0aW8pKSAvIDJ9XG4gICAgICAgICAgICAgICAgICAgICAgeT17aGVpZ2h0IC0geShiYXJbY291bnRQcm9wXSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICA8L21hc2s+XG4gICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLDApXCI+XG4gICAgICAgICAgICA8SGlzdG9ncmFtTWFza1JlY3RcbiAgICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgICB5PVwiMFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0ICsgbWFyZ2luLmJvdHRvbX1cbiAgICAgICAgICAgICAgbWFzaz1cInVybCgjaGlzdG9ncmFtLW1hc2spXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9nPlxuICAgICAgICAgIHtpc01hc2tlZCA9PT0gSElTVE9HUkFNX01BU0tfTU9ERS5NYXNrV2l0aE92ZXJsYXkgJiYgKFxuICAgICAgICAgICAgPGcga2V5PVwiYmluc1wiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLDApXCIgY2xhc3NOYW1lPVwib3ZlcmxheS1oaXN0b2dyYW0tYmFyc1wiPlxuICAgICAgICAgICAgICB7aGlzdG9ncmFtc0J5R3JvdXAuYmlucy5tYXAoKGJhciwgaWR4LCBsaXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQmFyID0gaGlzdG9ncmFtc0J5R3JvdXAuZmlsdGVyZWRCaW5zW2lkeF07XG4gICAgICAgICAgICAgICAgY29uc3QgbWFza0hlaWdodCA9IGZpbHRlckJhclxuICAgICAgICAgICAgICAgICAgPyB5KGJhcltjb3VudFByb3BdKSAtIHkoZmlsdGVyQmFyW2NvdW50UHJvcF0pXG4gICAgICAgICAgICAgICAgICA6IHkoYmFyW2NvdW50UHJvcF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluUmFuZ2UgPSBpc0JhckluUmFuZ2UoYmFyLCBpZHgsIGxpc3QsIGRvbWFpbiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdSYXRpbyA9IGluUmFuZ2UgPyBoaXN0b2dyYW1TdHlsZS5oaWdobGlnaHRXIDogaGlzdG9ncmFtU3R5bGUudW5IaWdobGlnaHRlZFc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxCYXJcbiAgICAgICAgICAgICAgICAgICAgJGluUmFuZ2U9e2luUmFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICRpc092ZXJsYXk9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIGtleT17YGJhci0ke2lkeH1gfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e21hc2tIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aCAqIHdSYXRpb31cbiAgICAgICAgICAgICAgICAgICAgeD17eChiYXIueDApICsgKGJhcldpZHRoICogKDEgLSB3UmF0aW8pKSAvIDJ9XG4gICAgICAgICAgICAgICAgICAgIHk9e2hlaWdodCAtIHkoYmFyW2NvdW50UHJvcF0pfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxIaXN0b2dyYW1CcmVha0xpbmU+XG4gICAgICAgICAgICB7KGJyZWFrTGluZXMgPz8gW10pLm1hcCgocG9zLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8cGF0aCBrZXk9e2BtYXNrLWxpbmUtJHtpZHh9YH0gc3Ryb2tlRGFzaGFycmF5PVwiNCw0XCIgZD17YE0ke3Bvc30sIDAgbDAgMTAwYH0gLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvSGlzdG9ncmFtQnJlYWtMaW5lPlxuICAgICAgICAgIDxnIHRyYW5zZm9ybT17YHRyYW5zbGF0ZSgke2lzUmFuZ2VkID8gMCA6IGJhcldpZHRoIC8gMn0sIDApYH0+e2JydXNoQ29tcG9uZW50fTwvZz5cbiAgICAgICAgPC9IaXN0b2dyYW1XcmFwcGVyPlxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGlzTWFza2VkID8gKFxuICAgICAgbWFza2VkSGlzdG9ncmFtKClcbiAgICApIDogKFxuICAgICAgPEhpc3RvZ3JhbVdyYXBwZXJcbiAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICBoZWlnaHQ9e2hlaWdodH1cbiAgICAgICAgc3R5bGU9e3ttYXJnaW46IGAke21hcmdpbi50b3B9cHggJHttYXJnaW4ucmlnaHR9cHggJHttYXJnaW4uYm90dG9tfXB4ICR7bWFyZ2luLmxlZnR9cHhgfX1cbiAgICAgID5cbiAgICAgICAgPGc+XG4gICAgICAgICAge2dyb3VwS2V5cy5tYXAoKGtleSwgaSkgPT4gKFxuICAgICAgICAgICAgPGcga2V5PXtrZXl9IGNsYXNzTmFtZT1cImhpc3RvZ3JhbS1iYXJzXCI+XG4gICAgICAgICAgICAgIHtoaXN0b2dyYW1zQnlHcm91cFtrZXldLm1hcCgoYmFyLCBpZHgsIGxpc3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpblJhbmdlID0gaXNCYXJJblJhbmdlKGJhciwgaWR4LCBsaXN0LCBkb21haW4sIHZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHdSYXRpbyA9IGluUmFuZ2UgPyBoaXN0b2dyYW1TdHlsZS5oaWdobGlnaHRXIDogaGlzdG9ncmFtU3R5bGUudW5IaWdobGlnaHRlZFc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRYID1cbiAgICAgICAgICAgICAgICAgIHgodW5kZWZpbmVkVG9aZXJvKGJhci54MCkpICsgYmFyV2lkdGggKiBpICsgKGJhcldpZHRoICogKDEgLSB3UmF0aW8pKSAvIDI7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0WCA+IDAgJiYgc3RhcnRYICsgYmFyV2lkdGggKiBoaXN0b2dyYW1TdHlsZS51bkhpZ2hsaWdodGVkVyA8PSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJhclxuICAgICAgICAgICAgICAgICAgICAgICRpc092ZXJsYXk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICRpblJhbmdlPXtpblJhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICRjb2xvcj17Y29sb3JzQnlHcm91cD8uW2tleV19XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgYmFyLSR7aWR4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXt5KGJhcltjb3VudFByb3BdKX1cbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17YmFyV2lkdGggKiB3UmF0aW99XG4gICAgICAgICAgICAgICAgICAgICAgeD17c3RhcnRYfVxuICAgICAgICAgICAgICAgICAgICAgIHJ4PXsxfVxuICAgICAgICAgICAgICAgICAgICAgIHJ5PXsxfVxuICAgICAgICAgICAgICAgICAgICAgIHk9e2hlaWdodCAtIHkoYmFyW2NvdW50UHJvcF0pfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2c+XG4gICAgICAgIDxnIHRyYW5zZm9ybT17YHRyYW5zbGF0ZSgke2lzUmFuZ2VkID8gMCA6IGJhcldpZHRoIC8gMn0sIDApYH0+e2JydXNoQ29tcG9uZW50fTwvZz5cbiAgICAgIDwvSGlzdG9ncmFtV3JhcHBlcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IEhpc3RvZ3JhbVBsb3RXaXRoR3JvdXBzID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IGdyb3VwcyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiAocHJvcHMuaGlzdG9ncmFtc0J5R3JvdXAgPyBPYmplY3Qua2V5cyhwcm9wcy5oaXN0b2dyYW1zQnlHcm91cCkgOiBudWxsKSxcbiAgICAgIFtwcm9wcy5oaXN0b2dyYW1zQnlHcm91cF1cbiAgICApO1xuXG4gICAgaWYgKCFncm91cHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIDxIaXN0b2dyYW1QbG90IHsuLi5wcm9wc30gLz47XG4gIH07XG5cbiAgcmV0dXJuIEhpc3RvZ3JhbVBsb3RXaXRoR3JvdXBzO1xufVxuZXhwb3J0IGRlZmF1bHQgSGlzdG9ncmFtUGxvdEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFMLE9BQUE7QUFBdUMsSUFBQU0sZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQVB2QztBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFYLHdCQUFBVyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxD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