@pie-lib/mask-markup 2.0.0-beta.2 → 2.1.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +1 -871
- package/CHANGELOG.md +296 -2
- package/LICENSE.md +5 -0
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/drag-in-the-blank.test.js +129 -0
- package/lib/__tests__/index.test.js +42 -0
- package/lib/__tests__/mask.test.js +163 -0
- package/lib/__tests__/serialization.test.js +44 -0
- package/lib/__tests__/utils.js +14 -0
- package/lib/__tests__/with-mask.test.js +110 -0
- package/lib/choices/__tests__/index.test.js +101 -0
- package/lib/choices/choice.js +100 -119
- package/lib/choices/choice.js.map +1 -1
- package/lib/choices/index.js +24 -20
- package/lib/choices/index.js.map +1 -1
- package/lib/componentize.js +2 -3
- package/lib/componentize.js.map +1 -1
- package/lib/components/__tests__/blank.test.js +189 -0
- package/lib/components/__tests__/correct-input.test.js +132 -0
- package/lib/components/__tests__/dropdown.test.js +134 -0
- package/lib/components/__tests__/input.test.js +129 -0
- package/lib/components/blank.js +316 -222
- package/lib/components/blank.js.map +1 -1
- package/lib/components/correct-input.js +40 -43
- package/lib/components/correct-input.js.map +1 -1
- package/lib/components/dropdown.js +394 -125
- package/lib/components/dropdown.js.map +1 -1
- package/lib/components/input.js +2 -3
- package/lib/components/input.js.map +1 -1
- package/lib/constructed-response.js +83 -27
- package/lib/constructed-response.js.map +1 -1
- package/lib/customizable.js +44 -0
- package/lib/customizable.js.map +1 -0
- package/lib/drag-in-the-blank.js +155 -62
- package/lib/drag-in-the-blank.js.map +1 -1
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/inline-dropdown.js +5 -4
- package/lib/inline-dropdown.js.map +1 -1
- package/lib/mask.js +90 -57
- package/lib/mask.js.map +1 -1
- package/lib/serialization.js +31 -43
- package/lib/serialization.js.map +1 -1
- package/lib/with-mask.js +49 -21
- package/lib/with-mask.js.map +1 -1
- package/package.json +18 -15
- package/src/__tests__/drag-in-the-blank.test.js +111 -0
- package/src/__tests__/index.test.js +39 -0
- package/src/__tests__/mask.test.js +187 -0
- package/src/__tests__/serialization.test.js +54 -0
- package/src/__tests__/utils.js +1 -0
- package/src/__tests__/with-mask.test.js +76 -0
- package/src/choices/__tests__/index.test.js +75 -0
- package/src/choices/choice.jsx +83 -96
- package/src/choices/index.jsx +11 -5
- package/src/components/__tests__/blank.test.js +138 -0
- package/src/components/__tests__/correct-input.test.js +90 -0
- package/src/components/__tests__/dropdown.test.js +93 -0
- package/src/components/__tests__/input.test.js +102 -0
- package/src/components/blank.jsx +316 -204
- package/src/components/correct-input.jsx +37 -38
- package/src/components/dropdown.jsx +371 -125
- package/src/constructed-response.jsx +71 -18
- package/src/customizable.jsx +35 -0
- package/src/drag-in-the-blank.jsx +152 -40
- package/src/index.js +10 -1
- package/src/inline-dropdown.jsx +2 -0
- package/src/mask.jsx +71 -25
- package/src/serialization.js +22 -34
- package/src/with-mask.jsx +43 -3
- package/README.md +0 -14
- package/lib/new-serialization.js +0 -267
- package/lib/new-serialization.js.map +0 -1
- package/lib/parse-html.js +0 -17
- package/lib/parse-html.js.map +0 -1
- package/lib/test-serializer.js +0 -164
- package/lib/test-serializer.js.map +0 -1
- package/src/new-serialization.jsx +0 -291
- package/src/parse-html.js +0 -8
- package/src/test-serializer.js +0 -163
package/lib/components/blank.js
CHANGED
|
@@ -1,263 +1,357 @@
|
|
|
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
|
-
exports["default"] =
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
12
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
14
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
var _react =
|
|
16
|
-
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
13
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
18
14
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
19
15
|
var _debug = _interopRequireDefault(require("debug"));
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
16
|
+
var _core = require("@dnd-kit/core");
|
|
17
|
+
var _utilities = require("@dnd-kit/utilities");
|
|
18
|
+
var _styles = require("@mui/material/styles");
|
|
19
|
+
var _Chip = _interopRequireDefault(require("@mui/material/Chip"));
|
|
20
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
24
21
|
var _renderUi = require("@pie-lib/render-ui");
|
|
25
|
-
var
|
|
26
|
-
function
|
|
27
|
-
function
|
|
28
|
-
function
|
|
29
|
-
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; } }
|
|
22
|
+
var _colors = require("@mui/material/colors");
|
|
23
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
24
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
30
26
|
var log = (0, _debug["default"])('pie-lib:mask-markup:blank');
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
var StyledContent = (0, _styles.styled)('span')(function (_ref) {
|
|
28
|
+
var dragged = _ref.dragged,
|
|
29
|
+
over = _ref.over;
|
|
30
|
+
return _objectSpread(_objectSpread({
|
|
31
|
+
border: "solid 0px ".concat(_renderUi.color.primary()),
|
|
32
|
+
minWidth: '200px',
|
|
33
|
+
touchAction: 'none',
|
|
34
|
+
overflow: 'hidden',
|
|
35
|
+
whiteSpace: 'nowrap',
|
|
36
|
+
opacity: 1
|
|
37
|
+
}, over && {
|
|
38
|
+
whiteSpace: 'nowrap',
|
|
39
|
+
overflow: 'hidden'
|
|
40
|
+
}), dragged && {
|
|
41
|
+
opacity: 0.5
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
var StyledChip = (0, _styles.styled)(_Chip["default"])(function () {
|
|
34
45
|
return {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
46
|
+
backgroundColor: _renderUi.color.background(),
|
|
47
|
+
border: "2px dashed ".concat(_renderUi.color.text()),
|
|
48
|
+
color: _renderUi.color.text(),
|
|
49
|
+
fontSize: 'inherit',
|
|
50
|
+
maxWidth: '374px',
|
|
51
|
+
position: 'relative',
|
|
52
|
+
borderRadius: '3px',
|
|
53
|
+
'&.over': {
|
|
54
|
+
whiteSpace: 'nowrap',
|
|
39
55
|
overflow: 'hidden'
|
|
40
56
|
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
color: _renderUi.color.text(),
|
|
45
|
-
minWidth: '90px',
|
|
46
|
-
fontSize: 'inherit',
|
|
47
|
-
minHeight: '32px',
|
|
48
|
-
height: 'auto',
|
|
49
|
-
maxWidth: '374px',
|
|
50
|
-
position: 'relative'
|
|
57
|
+
'&.parentOver': {
|
|
58
|
+
border: "1px solid ".concat(_colors.grey[500]),
|
|
59
|
+
backgroundColor: "".concat(_colors.grey[300])
|
|
51
60
|
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// Added for touch devices, for image content.
|
|
55
|
-
// This will prevent the context menu from appearing and not allowing other interactions with the image.
|
|
56
|
-
// If interactions with the image in the token will be requested we should handle only the context Menu.
|
|
57
|
-
pointerEvents: 'none',
|
|
58
|
-
'& img': {
|
|
59
|
-
display: 'block',
|
|
60
|
-
padding: '2px 0'
|
|
61
|
-
}
|
|
61
|
+
'&.correct': {
|
|
62
|
+
border: "solid 1px ".concat(_renderUi.color.correct())
|
|
62
63
|
},
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
opacity: 0
|
|
64
|
+
'&.incorrect': {
|
|
65
|
+
border: "solid 1px ".concat(_renderUi.color.incorrect())
|
|
66
66
|
},
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
'&.Mui-disabled': {
|
|
68
|
+
opacity: 1
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
var StyledChipLabel = (0, _styles.styled)('span')(function () {
|
|
73
|
+
return {
|
|
74
|
+
whiteSpace: 'normal',
|
|
75
|
+
// Added for touch devices, for image content.
|
|
76
|
+
// This will prevent the context menu from appearing and not allowing other interactions with the image.
|
|
77
|
+
// If interactions with the image in the token will be requested we should handle only the context Menu.
|
|
78
|
+
pointerEvents: 'none',
|
|
79
|
+
'& img': {
|
|
80
|
+
display: 'block',
|
|
81
|
+
padding: '2px 0'
|
|
71
82
|
},
|
|
72
|
-
|
|
73
|
-
|
|
83
|
+
// Remove default <p> margins to ensure consistent spacing across all wrapped content (p, span, div, math)
|
|
84
|
+
// Padding for top and bottom will instead be controlled by the container for consistent layout
|
|
85
|
+
// Ensures consistent behavior with pie-api-browser, where marginTop is already removed by a Bootstrap stylesheet
|
|
86
|
+
'& p': {
|
|
87
|
+
marginTop: '0',
|
|
88
|
+
marginBottom: '0'
|
|
74
89
|
},
|
|
75
|
-
|
|
76
|
-
|
|
90
|
+
'& mjx-frac': {
|
|
91
|
+
fontSize: '120% !important'
|
|
77
92
|
},
|
|
78
|
-
over: {
|
|
93
|
+
'&.over': {
|
|
79
94
|
whiteSpace: 'nowrap',
|
|
80
95
|
overflow: 'hidden'
|
|
96
|
+
},
|
|
97
|
+
'&.hidden': {
|
|
98
|
+
color: 'transparent',
|
|
99
|
+
opacity: 0
|
|
100
|
+
},
|
|
101
|
+
'&.dragged': {
|
|
102
|
+
position: 'absolute',
|
|
103
|
+
left: 16,
|
|
104
|
+
maxWidth: '60px'
|
|
81
105
|
}
|
|
82
106
|
};
|
|
83
107
|
});
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
var
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
108
|
+
function BlankContent(_ref2) {
|
|
109
|
+
var _dragItem$choice, _frozenRef$current, _frozenRef$current2;
|
|
110
|
+
var disabled = _ref2.disabled,
|
|
111
|
+
choice = _ref2.choice,
|
|
112
|
+
isOver = _ref2.isOver,
|
|
113
|
+
isDragging = _ref2.isDragging,
|
|
114
|
+
dragItem = _ref2.dragItem,
|
|
115
|
+
correct = _ref2.correct,
|
|
116
|
+
emptyResponseAreaWidth = _ref2.emptyResponseAreaWidth,
|
|
117
|
+
emptyResponseAreaHeight = _ref2.emptyResponseAreaHeight;
|
|
118
|
+
var rootRef = (0, _react.useRef)(null);
|
|
119
|
+
var spanRef = (0, _react.useRef)(null);
|
|
120
|
+
var frozenRef = (0, _react.useRef)(null); // to use during dragging to prevent flickering
|
|
121
|
+
var _useState = (0, _react.useState)({
|
|
122
|
+
height: 0,
|
|
123
|
+
width: 0
|
|
124
|
+
}),
|
|
125
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
126
|
+
dimensions = _useState2[0],
|
|
127
|
+
setDimensions = _useState2[1];
|
|
128
|
+
var handleImageLoad = function handleImageLoad() {
|
|
129
|
+
updateDimensions();
|
|
130
|
+
};
|
|
131
|
+
var handleElements = function handleElements() {
|
|
132
|
+
var _spanRef$current;
|
|
133
|
+
var imageElement = (_spanRef$current = spanRef.current) === null || _spanRef$current === void 0 ? void 0 : _spanRef$current.querySelector('img');
|
|
134
|
+
if (imageElement) {
|
|
135
|
+
imageElement.onload = handleImageLoad;
|
|
136
|
+
} else {
|
|
137
|
+
setTimeout(function () {
|
|
138
|
+
updateDimensions();
|
|
139
|
+
}, 300);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
var updateDimensions = function updateDimensions() {
|
|
143
|
+
if (spanRef.current && rootRef.current) {
|
|
144
|
+
// Temporarily set rootRef width to 'auto' for natural measurement
|
|
145
|
+
rootRef.current.style.width = 'auto';
|
|
146
|
+
|
|
147
|
+
// Get the natural dimensions of the content
|
|
148
|
+
var width = spanRef.current.offsetWidth || 0;
|
|
149
|
+
var height = spanRef.current.offsetHeight || 0;
|
|
150
|
+
var widthWithPadding = width + 24; // 12px padding on each side
|
|
151
|
+
var heightWithPadding = height + 24; // 12px padding on top and bottom
|
|
152
|
+
|
|
153
|
+
var responseAreaWidth = parseFloat(emptyResponseAreaWidth) || 0;
|
|
154
|
+
var responseAreaHeight = parseFloat(emptyResponseAreaHeight) || 0;
|
|
155
|
+
var adjustedWidth = widthWithPadding <= responseAreaWidth ? responseAreaWidth : widthWithPadding;
|
|
156
|
+
var adjustedHeight = heightWithPadding <= responseAreaHeight ? responseAreaHeight : heightWithPadding;
|
|
157
|
+
setDimensions(function (prevState) {
|
|
158
|
+
return {
|
|
159
|
+
width: adjustedWidth > responseAreaWidth ? adjustedWidth : prevState.width,
|
|
160
|
+
height: adjustedHeight > responseAreaHeight ? adjustedHeight : prevState.height
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
rootRef.current.style.width = "".concat(adjustedWidth, "px");
|
|
164
|
+
rootRef.current.style.height = "".concat(adjustedHeight, "px");
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
var getRootDimensions = function getRootDimensions() {
|
|
168
|
+
// Handle potential non-numeric values
|
|
169
|
+
var responseAreaWidth = !isNaN(parseFloat(emptyResponseAreaWidth)) ? parseFloat(emptyResponseAreaWidth) : 0;
|
|
170
|
+
var responseAreaHeight = !isNaN(parseFloat(emptyResponseAreaHeight)) ? parseFloat(emptyResponseAreaHeight) : 0;
|
|
171
|
+
var rootStyle = {
|
|
172
|
+
height: dimensions.height || responseAreaHeight,
|
|
173
|
+
width: dimensions.width || responseAreaWidth
|
|
93
174
|
};
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
setTimeout(function () {
|
|
111
|
-
_this2.setState({
|
|
112
|
-
height: _this2.spanRef.offsetHeight
|
|
113
|
-
});
|
|
114
|
-
}, 300);
|
|
115
|
-
}
|
|
175
|
+
|
|
176
|
+
// add minWidth, minHeight if width and height are not defined
|
|
177
|
+
return _objectSpread(_objectSpread(_objectSpread({}, rootStyle), responseAreaWidth ? {} : {
|
|
178
|
+
minWidth: 90
|
|
179
|
+
}), responseAreaHeight ? {} : {
|
|
180
|
+
minHeight: 32
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
(0, _react.useEffect)(function () {
|
|
184
|
+
handleElements();
|
|
185
|
+
}, []);
|
|
186
|
+
|
|
187
|
+
// Render math for the placeholder/preview when dragging over
|
|
188
|
+
(0, _react.useEffect)(function () {
|
|
189
|
+
if (rootRef.current) {
|
|
190
|
+
(0, _mathRendering.renderMath)(rootRef.current);
|
|
116
191
|
}
|
|
117
|
-
},
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
192
|
+
}, [isOver, dragItem === null || dragItem === void 0 || (_dragItem$choice = dragItem.choice) === null || _dragItem$choice === void 0 ? void 0 : _dragItem$choice.value]);
|
|
193
|
+
(0, _react.useEffect)(function () {
|
|
194
|
+
if (!choice) {
|
|
195
|
+
setDimensions({
|
|
196
|
+
height: 0,
|
|
197
|
+
width: 0
|
|
124
198
|
});
|
|
199
|
+
return;
|
|
125
200
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
classes = _this$props.classes,
|
|
135
|
-
isOver = _this$props.isOver,
|
|
136
|
-
dragItem = _this$props.dragItem,
|
|
137
|
-
correct = _this$props.correct;
|
|
138
|
-
var draggedLabel = dragItem && isOver && dragItem.choice.value;
|
|
139
|
-
var label = choice && choice.value;
|
|
140
|
-
return (
|
|
141
|
-
/*#__PURE__*/
|
|
142
|
-
// TODO the Chip element is causing drag problems on touch devices. Avoid using Chip and consider refactoring the code. Keep in mind that Chip is a span with a button role, which interferes with seamless touch device dragging.
|
|
143
|
-
_react["default"].createElement(_Chip["default"], {
|
|
144
|
-
clickable: false,
|
|
145
|
-
disabled: true,
|
|
146
|
-
ref: function ref(_ref3) {
|
|
147
|
-
//eslint-disable-next-line
|
|
148
|
-
_this3.rootRef = _reactDom["default"].findDOMNode(_ref3);
|
|
149
|
-
},
|
|
150
|
-
component: "span",
|
|
151
|
-
label: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
152
|
-
className: (0, _classnames3["default"])(classes.chipLabel, isOver && classes.over, (0, _defineProperty2["default"])({}, classes.hidden, draggedLabel)),
|
|
153
|
-
ref: function ref(_ref) {
|
|
154
|
-
if (_ref) {
|
|
155
|
-
//eslint-disable-next-line
|
|
156
|
-
_this3.spanRef = _reactDom["default"].findDOMNode(_ref);
|
|
157
|
-
_ref.innerHTML = label || '';
|
|
158
|
-
_this3.addDraggableFalseAttributes(_ref);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}, ' '), draggedLabel && /*#__PURE__*/_react["default"].createElement("span", {
|
|
162
|
-
className: (0, _classnames3["default"])(classes.chipLabel, isOver && classes.over, classes.dragged),
|
|
163
|
-
ref: function ref(_ref2) {
|
|
164
|
-
if (_ref2) {
|
|
165
|
-
//eslint-disable-next-line
|
|
166
|
-
_this3.spanRef = _reactDom["default"].findDOMNode(_ref2);
|
|
167
|
-
_ref2.innerHTML = draggedLabel || '';
|
|
168
|
-
_this3.addDraggableFalseAttributes(_ref2);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}, ' ')),
|
|
172
|
-
className: (0, _classnames3["default"])(classes.chip, isOver && classes.over, (_classnames2 = {}, (0, _defineProperty2["default"])(_classnames2, classes.correct, correct !== undefined && correct), (0, _defineProperty2["default"])(_classnames2, classes.incorrect, correct !== undefined && !correct), _classnames2)),
|
|
173
|
-
variant: disabled ? 'outlined' : undefined,
|
|
174
|
-
style: _objectSpread({}, this.state.height ? {
|
|
175
|
-
height: this.state.height
|
|
176
|
-
} : {}),
|
|
177
|
-
classes: {
|
|
178
|
-
label: isOver && classes.over
|
|
179
|
-
}
|
|
180
|
-
})
|
|
181
|
-
);
|
|
201
|
+
handleElements();
|
|
202
|
+
}, [choice]);
|
|
203
|
+
(0, _react.useEffect)(function () {
|
|
204
|
+
if (!isOver && !isDragging) {
|
|
205
|
+
frozenRef.current = {
|
|
206
|
+
width: rootRef.current.offsetWidth,
|
|
207
|
+
height: rootRef.current.offsetHeight
|
|
208
|
+
};
|
|
182
209
|
}
|
|
183
|
-
}]);
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
(
|
|
210
|
+
}, [choice, isOver, isDragging]);
|
|
211
|
+
var draggedLabel = dragItem && isOver && dragItem.choice && dragItem.choice.value;
|
|
212
|
+
var label = choice && choice.value;
|
|
213
|
+
var style = isOver || isDragging ? {
|
|
214
|
+
width: (_frozenRef$current = frozenRef.current) === null || _frozenRef$current === void 0 ? void 0 : _frozenRef$current.width,
|
|
215
|
+
height: (_frozenRef$current2 = frozenRef.current) === null || _frozenRef$current2 === void 0 ? void 0 : _frozenRef$current2.height
|
|
216
|
+
} : getRootDimensions();
|
|
217
|
+
return /*#__PURE__*/_react["default"].createElement(StyledChip, {
|
|
218
|
+
clickable: false,
|
|
219
|
+
disabled: disabled,
|
|
220
|
+
ref: rootRef,
|
|
221
|
+
component: "span",
|
|
222
|
+
label: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledChipLabel, {
|
|
223
|
+
ref: spanRef,
|
|
224
|
+
draggable: true,
|
|
225
|
+
className: (0, _classnames["default"])({
|
|
226
|
+
over: isOver,
|
|
227
|
+
hidden: draggedLabel
|
|
228
|
+
}),
|
|
229
|
+
dangerouslySetInnerHTML: {
|
|
230
|
+
__html: label || ''
|
|
231
|
+
}
|
|
232
|
+
}), draggedLabel && /*#__PURE__*/_react["default"].createElement(StyledChipLabel, {
|
|
233
|
+
draggable: true,
|
|
234
|
+
className: (0, _classnames["default"])({
|
|
235
|
+
over: isOver,
|
|
236
|
+
dragged: true
|
|
237
|
+
}),
|
|
238
|
+
dangerouslySetInnerHTML: {
|
|
239
|
+
__html: draggedLabel || ''
|
|
240
|
+
}
|
|
241
|
+
})),
|
|
242
|
+
className: (0, _classnames["default"])({
|
|
243
|
+
over: isOver,
|
|
244
|
+
parentOver: isOver,
|
|
245
|
+
correct: correct !== undefined && correct,
|
|
246
|
+
incorrect: correct !== undefined && !correct
|
|
247
|
+
}),
|
|
248
|
+
variant: disabled ? 'outlined' : undefined,
|
|
249
|
+
style: style
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
BlankContent.defaultProps = {
|
|
253
|
+
emptyResponseAreaWidth: 0,
|
|
254
|
+
emptyResponseAreaHeight: 0
|
|
255
|
+
};
|
|
256
|
+
BlankContent.propTypes = {
|
|
188
257
|
id: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
189
258
|
disabled: _propTypes["default"].bool,
|
|
190
259
|
duplicates: _propTypes["default"].bool,
|
|
191
260
|
choice: _propTypes["default"].object,
|
|
192
|
-
classes: _propTypes["default"].object,
|
|
193
261
|
isOver: _propTypes["default"].bool,
|
|
194
262
|
dragItem: _propTypes["default"].object,
|
|
195
263
|
correct: _propTypes["default"].bool,
|
|
196
|
-
onChange: _propTypes["default"].func
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
var connectDragSource = _ref4.connectDragSource,
|
|
201
|
-
connectDropTarget = _ref4.connectDropTarget,
|
|
202
|
-
props = (0, _objectWithoutProperties2["default"])(_ref4, _excluded);
|
|
203
|
-
var classes = props.classes,
|
|
204
|
-
isOver = props.isOver;
|
|
205
|
-
return connectDropTarget(connectDragSource( /*#__PURE__*/_react["default"].createElement("span", {
|
|
206
|
-
className: (0, _classnames3["default"])(classes.content, isOver && classes.over)
|
|
207
|
-
}, /*#__PURE__*/_react["default"].createElement(StyledBlankContent, props))));
|
|
208
|
-
});
|
|
209
|
-
var tileTarget = {
|
|
210
|
-
drop: function drop(props, monitor) {
|
|
211
|
-
var draggedItem = monitor.getItem();
|
|
212
|
-
log('props.instanceId', props.instanceId, 'draggedItem.instanceId:', draggedItem.instanceId);
|
|
213
|
-
if (draggedItem.id !== props.id) {
|
|
214
|
-
props.onChange(props.id, draggedItem.choice.id);
|
|
215
|
-
}
|
|
216
|
-
return {
|
|
217
|
-
dropped: draggedItem.id !== props.id
|
|
218
|
-
};
|
|
219
|
-
},
|
|
220
|
-
canDrop: function canDrop(props, monitor) {
|
|
221
|
-
var draggedItem = monitor.getItem();
|
|
222
|
-
return draggedItem.instanceId === props.instanceId;
|
|
223
|
-
}
|
|
264
|
+
onChange: _propTypes["default"].func,
|
|
265
|
+
emptyResponseAreaWidth: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
266
|
+
emptyResponseAreaHeight: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
267
|
+
instanceId: _propTypes["default"].string
|
|
224
268
|
};
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (draggedItem.fromChoice) {
|
|
250
|
-
props.onChange(props.id, undefined);
|
|
269
|
+
|
|
270
|
+
// New functional component using @dnd-kit hooks
|
|
271
|
+
function DragDropBlank(_ref3) {
|
|
272
|
+
var _dragItem$data;
|
|
273
|
+
var id = _ref3.id,
|
|
274
|
+
disabled = _ref3.disabled,
|
|
275
|
+
duplicates = _ref3.duplicates,
|
|
276
|
+
choice = _ref3.choice,
|
|
277
|
+
correct = _ref3.correct,
|
|
278
|
+
onChange = _ref3.onChange,
|
|
279
|
+
emptyResponseAreaWidth = _ref3.emptyResponseAreaWidth,
|
|
280
|
+
emptyResponseAreaHeight = _ref3.emptyResponseAreaHeight,
|
|
281
|
+
instanceId = _ref3.instanceId;
|
|
282
|
+
// Setup draggable functionality
|
|
283
|
+
var _useDraggable = (0, _core.useDraggable)({
|
|
284
|
+
id: "mask-blank-drag-".concat(id),
|
|
285
|
+
disabled: disabled || !choice,
|
|
286
|
+
data: {
|
|
287
|
+
id: id,
|
|
288
|
+
choice: choice,
|
|
289
|
+
instanceId: instanceId,
|
|
290
|
+
fromChoice: false,
|
|
291
|
+
// This is from a blank, not from choices
|
|
292
|
+
type: 'MaskBlank'
|
|
251
293
|
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
294
|
+
}),
|
|
295
|
+
dragAttributes = _useDraggable.attributes,
|
|
296
|
+
dragListeners = _useDraggable.listeners,
|
|
297
|
+
setDragNodeRef = _useDraggable.setNodeRef,
|
|
298
|
+
transform = _useDraggable.transform,
|
|
299
|
+
isDragging = _useDraggable.isDragging;
|
|
300
|
+
|
|
301
|
+
// Setup droppable functionality
|
|
302
|
+
var _useDroppable = (0, _core.useDroppable)({
|
|
303
|
+
id: "mask-blank-drop-".concat(id),
|
|
304
|
+
data: {
|
|
305
|
+
id: id,
|
|
306
|
+
accepts: ['MaskBlank'],
|
|
307
|
+
instanceId: instanceId
|
|
308
|
+
}
|
|
309
|
+
}),
|
|
310
|
+
setDropNodeRef = _useDroppable.setNodeRef,
|
|
311
|
+
isOver = _useDroppable.isOver,
|
|
312
|
+
dragItem = _useDroppable.active;
|
|
313
|
+
|
|
314
|
+
// Combine refs for both drag and drop
|
|
315
|
+
var setNodeRef = function setNodeRef(node) {
|
|
316
|
+
setDragNodeRef(node);
|
|
317
|
+
setDropNodeRef(node);
|
|
318
|
+
};
|
|
319
|
+
var style = {
|
|
320
|
+
transform: _utilities.CSS.Translate.toString(transform)
|
|
259
321
|
};
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
322
|
+
return /*#__PURE__*/_react["default"].createElement(StyledContent, (0, _extends2["default"])({
|
|
323
|
+
ref: setNodeRef,
|
|
324
|
+
style: style,
|
|
325
|
+
dragged: isDragging,
|
|
326
|
+
over: isOver
|
|
327
|
+
}, dragAttributes, dragListeners), /*#__PURE__*/_react["default"].createElement(BlankContent, {
|
|
328
|
+
id: id,
|
|
329
|
+
disabled: disabled,
|
|
330
|
+
duplicates: duplicates,
|
|
331
|
+
choice: choice,
|
|
332
|
+
isOver: isOver,
|
|
333
|
+
dragItem: dragItem === null || dragItem === void 0 || (_dragItem$data = dragItem.data) === null || _dragItem$data === void 0 ? void 0 : _dragItem$data.current,
|
|
334
|
+
correct: correct,
|
|
335
|
+
onChange: onChange,
|
|
336
|
+
emptyResponseAreaWidth: emptyResponseAreaWidth,
|
|
337
|
+
emptyResponseAreaHeight: emptyResponseAreaHeight,
|
|
338
|
+
instanceId: instanceId
|
|
339
|
+
}));
|
|
340
|
+
}
|
|
341
|
+
DragDropBlank.defaultProps = {
|
|
342
|
+
emptyResponseAreaWidth: 0,
|
|
343
|
+
emptyResponseAreaHeight: 0
|
|
344
|
+
};
|
|
345
|
+
DragDropBlank.propTypes = {
|
|
346
|
+
id: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
347
|
+
disabled: _propTypes["default"].bool,
|
|
348
|
+
duplicates: _propTypes["default"].bool,
|
|
349
|
+
choice: _propTypes["default"].object,
|
|
350
|
+
correct: _propTypes["default"].bool,
|
|
351
|
+
onChange: _propTypes["default"].func,
|
|
352
|
+
emptyResponseAreaWidth: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
353
|
+
emptyResponseAreaHeight: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
354
|
+
instanceId: _propTypes["default"].string
|
|
355
|
+
};
|
|
356
|
+
var _default = exports["default"] = DragDropBlank;
|
|
357
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9tYXRoUmVuZGVyaW5nIiwiX2RlYnVnIiwiX2NvcmUiLCJfdXRpbGl0aWVzIiwiX3N0eWxlcyIsIl9DaGlwIiwiX2NsYXNzbmFtZXMiLCJfcmVuZGVyVWkiLCJfY29sb3JzIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImxvZyIsImRlYnVnIiwiU3R5bGVkQ29udGVudCIsInN0eWxlZCIsIl9yZWYiLCJkcmFnZ2VkIiwib3ZlciIsImJvcmRlciIsImNvbmNhdCIsImNvbG9yIiwicHJpbWFyeSIsIm1pbldpZHRoIiwidG91Y2hBY3Rpb24iLCJvdmVyZmxvdyIsIndoaXRlU3BhY2UiLCJvcGFjaXR5IiwiU3R5bGVkQ2hpcCIsIkNoaXAiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwidGV4dCIsImZvbnRTaXplIiwibWF4V2lkdGgiLCJwb3NpdGlvbiIsImJvcmRlclJhZGl1cyIsImdyZXkiLCJjb3JyZWN0IiwiaW5jb3JyZWN0IiwiU3R5bGVkQ2hpcExhYmVsIiwicG9pbnRlckV2ZW50cyIsImRpc3BsYXkiLCJwYWRkaW5nIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwibGVmdCIsIkJsYW5rQ29udGVudCIsIl9yZWYyIiwiX2RyYWdJdGVtJGNob2ljZSIsIl9mcm96ZW5SZWYkY3VycmVudCIsIl9mcm96ZW5SZWYkY3VycmVudDIiLCJkaXNhYmxlZCIsImNob2ljZSIsImlzT3ZlciIsImlzRHJhZ2dpbmciLCJkcmFnSXRlbSIsImVtcHR5UmVzcG9uc2VBcmVhV2lkdGgiLCJlbXB0eVJlc3BvbnNlQXJlYUhlaWdodCIsInJvb3RSZWYiLCJ1c2VSZWYiLCJzcGFuUmVmIiwiZnJvemVuUmVmIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJoZWlnaHQiLCJ3aWR0aCIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJkaW1lbnNpb25zIiwic2V0RGltZW5zaW9ucyIsImhhbmRsZUltYWdlTG9hZCIsInVwZGF0ZURpbWVuc2lvbnMiLCJoYW5kbGVFbGVtZW50cyIsIl9zcGFuUmVmJGN1cnJlbnQiLCJpbWFnZUVsZW1lbnQiLCJjdXJyZW50IiwicXVlcnlTZWxlY3RvciIsIm9ubG9hZCIsInNldFRpbWVvdXQiLCJzdHlsZSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwid2lkdGhXaXRoUGFkZGluZyIsImhlaWdodFdpdGhQYWRkaW5nIiwicmVzcG9uc2VBcmVhV2lkdGgiLCJwYXJzZUZsb2F0IiwicmVzcG9uc2VBcmVhSGVpZ2h0IiwiYWRqdXN0ZWRXaWR0aCIsImFkanVzdGVkSGVpZ2h0IiwicHJldlN0YXRlIiwiZ2V0Um9vdERpbWVuc2lvbnMiLCJpc05hTiIsInJvb3RTdHlsZSIsIm1pbkhlaWdodCIsInVzZUVmZmVjdCIsInJlbmRlck1hdGgiLCJ2YWx1ZSIsImRyYWdnZWRMYWJlbCIsImxhYmVsIiwiY3JlYXRlRWxlbWVudCIsImNsaWNrYWJsZSIsInJlZiIsImNvbXBvbmVudCIsIkZyYWdtZW50IiwiZHJhZ2dhYmxlIiwiY2xhc3NOYW1lIiwiY2xhc3NuYW1lcyIsImhpZGRlbiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwicGFyZW50T3ZlciIsInVuZGVmaW5lZCIsInZhcmlhbnQiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJpZCIsIlByb3BUeXBlcyIsIm9uZU9mVHlwZSIsInN0cmluZyIsIm51bWJlciIsImJvb2wiLCJkdXBsaWNhdGVzIiwib2JqZWN0Iiwib25DaGFuZ2UiLCJmdW5jIiwiaW5zdGFuY2VJZCIsIkRyYWdEcm9wQmxhbmsiLCJfcmVmMyIsIl9kcmFnSXRlbSRkYXRhIiwiX3VzZURyYWdnYWJsZSIsInVzZURyYWdnYWJsZSIsImRhdGEiLCJmcm9tQ2hvaWNlIiwidHlwZSIsImRyYWdBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsImRyYWdMaXN0ZW5lcnMiLCJsaXN0ZW5lcnMiLCJzZXREcmFnTm9kZVJlZiIsInNldE5vZGVSZWYiLCJ0cmFuc2Zvcm0iLCJfdXNlRHJvcHBhYmxlIiwidXNlRHJvcHBhYmxlIiwiYWNjZXB0cyIsInNldERyb3BOb2RlUmVmIiwiYWN0aXZlIiwibm9kZSIsIkNTUyIsIlRyYW5zbGF0ZSIsInRvU3RyaW5nIiwiX2V4dGVuZHMyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYmxhbmsuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgcmVuZGVyTWF0aCB9IGZyb20gJ0BwaWUtbGliL21hdGgtcmVuZGVyaW5nJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyB1c2VEcmFnZ2FibGUsIHVzZURyb3BwYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCBDaGlwIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQ2hpcCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGNvbG9yIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCB7IGdyZXkgfSBmcm9tICdAbXVpL21hdGVyaWFsL2NvbG9ycyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOm1hc2stbWFya3VwOmJsYW5rJyk7XG5cbmNvbnN0IFN0eWxlZENvbnRlbnQgPSBzdHlsZWQoJ3NwYW4nKSgoeyBkcmFnZ2VkLCBvdmVyIH0pID0+ICh7XG4gIGJvcmRlcjogYHNvbGlkIDBweCAke2NvbG9yLnByaW1hcnkoKX1gLFxuICBtaW5XaWR0aDogJzIwMHB4JyxcbiAgdG91Y2hBY3Rpb246ICdub25lJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgb3BhY2l0eTogMSxcbiAgLi4uKG92ZXIgJiYge1xuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfSksXG4gIC4uLihkcmFnZ2VkICYmIHtcbiAgICBvcGFjaXR5OiAwLjUsXG4gIH0pLFxufSkpO1xuXG5jb25zdCBTdHlsZWRDaGlwID0gc3R5bGVkKENoaXApKCgpID0+ICh7XG4gIGJhY2tncm91bmRDb2xvcjogY29sb3IuYmFja2dyb3VuZCgpLFxuICBib3JkZXI6IGAycHggZGFzaGVkICR7Y29sb3IudGV4dCgpfWAsXG4gIGNvbG9yOiBjb2xvci50ZXh0KCksXG4gIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gIG1heFdpZHRoOiAnMzc0cHgnLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgJyYub3Zlcic6IHtcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH0sXG4gICcmLnBhcmVudE92ZXInOiB7XG4gICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7Z3JleVs1MDBdfWAsXG4gICAgYmFja2dyb3VuZENvbG9yOiBgJHtncmV5WzMwMF19YCxcbiAgfSxcbiAgJyYuY29ycmVjdCc6IHtcbiAgICBib3JkZXI6IGBzb2xpZCAxcHggJHtjb2xvci5jb3JyZWN0KCl9YCxcbiAgfSxcbiAgJyYuaW5jb3JyZWN0Jzoge1xuICAgIGJvcmRlcjogYHNvbGlkIDFweCAke2NvbG9yLmluY29ycmVjdCgpfWAsXG4gIH0sXG4gICcmLk11aS1kaXNhYmxlZCc6IHtcbiAgICBvcGFjaXR5OiAxLFxuICB9LFxufSkpO1xuXG5jb25zdCBTdHlsZWRDaGlwTGFiZWwgPSBzdHlsZWQoJ3NwYW4nKSgoKSA9PiAoe1xuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgLy8gQWRkZWQgZm9yIHRvdWNoIGRldmljZXMsIGZvciBpbWFnZSBjb250ZW50LlxuICAvLyBUaGlzIHdpbGwgcHJldmVudCB0aGUgY29udGV4dCBtZW51IGZyb20gYXBwZWFyaW5nIGFuZCBub3QgYWxsb3dpbmcgb3RoZXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGltYWdlLlxuICAvLyBJZiBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaW1hZ2UgaW4gdGhlIHRva2VuIHdpbGwgYmUgcmVxdWVzdGVkIHdlIHNob3VsZCBoYW5kbGUgb25seSB0aGUgY29udGV4dCBNZW51LlxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICcmIGltZyc6IHtcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIHBhZGRpbmc6ICcycHggMCcsXG4gIH0sXG4gIC8vIFJlbW92ZSBkZWZhdWx0IDxwPiBtYXJnaW5zIHRvIGVuc3VyZSBjb25zaXN0ZW50IHNwYWNpbmcgYWNyb3NzIGFsbCB3cmFwcGVkIGNvbnRlbnQgKHAsIHNwYW4sIGRpdiwgbWF0aClcbiAgLy8gUGFkZGluZyBmb3IgdG9wIGFuZCBib3R0b20gd2lsbCBpbnN0ZWFkIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lciBmb3IgY29uc2lzdGVudCBsYXlvdXRcbiAgLy8gRW5zdXJlcyBjb25zaXN0ZW50IGJlaGF2aW9yIHdpdGggcGllLWFwaS1icm93c2VyLCB3aGVyZSBtYXJnaW5Ub3AgaXMgYWxyZWFkeSByZW1vdmVkIGJ5IGEgQm9vdHN0cmFwIHN0eWxlc2hlZXRcbiAgJyYgcCc6IHtcbiAgICBtYXJnaW5Ub3A6ICcwJyxcbiAgICBtYXJnaW5Cb3R0b206ICcwJyxcbiAgfSxcbiAgJyYgbWp4LWZyYWMnOiB7XG4gICAgZm9udFNpemU6ICcxMjAlICFpbXBvcnRhbnQnLFxuICB9LFxuICAnJi5vdmVyJzoge1xuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfSxcbiAgJyYuaGlkZGVuJzoge1xuICAgIGNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIG9wYWNpdHk6IDAsXG4gIH0sXG4gICcmLmRyYWdnZWQnOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgbGVmdDogMTYsXG4gICAgbWF4V2lkdGg6ICc2MHB4JyxcbiAgfSxcbn0pKTtcblxuZnVuY3Rpb24gQmxhbmtDb250ZW50KHtcbiAgZGlzYWJsZWQsXG4gIGNob2ljZSxcbiAgaXNPdmVyLFxuICBpc0RyYWdnaW5nLFxuICBkcmFnSXRlbSxcbiAgY29ycmVjdCxcbiAgZW1wdHlSZXNwb25zZUFyZWFXaWR0aCxcbiAgZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQsXG59KSB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNwYW5SZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGZyb3plblJlZiA9IHVzZVJlZihudWxsKTsgLy8gdG8gdXNlIGR1cmluZyBkcmFnZ2luZyB0byBwcmV2ZW50IGZsaWNrZXJpbmdcbiAgY29uc3QgW2RpbWVuc2lvbnMsIHNldERpbWVuc2lvbnNdID0gdXNlU3RhdGUoeyBoZWlnaHQ6IDAsIHdpZHRoOiAwIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUltYWdlTG9hZCA9ICgpID0+IHtcbiAgICB1cGRhdGVEaW1lbnNpb25zKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRWxlbWVudHMgPSAoKSA9PiB7XG4gICAgY29uc3QgaW1hZ2VFbGVtZW50ID0gc3BhblJlZi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcbiAgICBpZiAoaW1hZ2VFbGVtZW50KSB7XG4gICAgICBpbWFnZUVsZW1lbnQub25sb2FkID0gaGFuZGxlSW1hZ2VMb2FkO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdXBkYXRlRGltZW5zaW9ucygpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlRGltZW5zaW9ucyA9ICgpID0+IHtcbiAgICBpZiAoc3BhblJlZi5jdXJyZW50ICYmIHJvb3RSZWYuY3VycmVudCkge1xuICAgICAgLy8gVGVtcG9yYXJpbHkgc2V0IHJvb3RSZWYgd2lkdGggdG8gJ2F1dG8nIGZvciBuYXR1cmFsIG1lYXN1cmVtZW50XG4gICAgICByb290UmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSAnYXV0byc7XG5cbiAgICAgIC8vIEdldCB0aGUgbmF0dXJhbCBkaW1lbnNpb25zIG9mIHRoZSBjb250ZW50XG4gICAgICBjb25zdCB3aWR0aCA9IHNwYW5SZWYuY3VycmVudC5vZmZzZXRXaWR0aCB8fCAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gc3BhblJlZi5jdXJyZW50Lm9mZnNldEhlaWdodCB8fCAwO1xuXG4gICAgICBjb25zdCB3aWR0aFdpdGhQYWRkaW5nID0gd2lkdGggKyAyNDsgLy8gMTJweCBwYWRkaW5nIG9uIGVhY2ggc2lkZVxuICAgICAgY29uc3QgaGVpZ2h0V2l0aFBhZGRpbmcgPSBoZWlnaHQgKyAyNDsgLy8gMTJweCBwYWRkaW5nIG9uIHRvcCBhbmQgYm90dG9tXG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQXJlYVdpZHRoID0gcGFyc2VGbG9hdChlbXB0eVJlc3BvbnNlQXJlYVdpZHRoKSB8fCAwO1xuICAgICAgY29uc3QgcmVzcG9uc2VBcmVhSGVpZ2h0ID0gcGFyc2VGbG9hdChlbXB0eVJlc3BvbnNlQXJlYUhlaWdodCkgfHwgMDtcblxuICAgICAgY29uc3QgYWRqdXN0ZWRXaWR0aCA9IHdpZHRoV2l0aFBhZGRpbmcgPD0gcmVzcG9uc2VBcmVhV2lkdGggPyByZXNwb25zZUFyZWFXaWR0aCA6IHdpZHRoV2l0aFBhZGRpbmc7XG4gICAgICBjb25zdCBhZGp1c3RlZEhlaWdodCA9IGhlaWdodFdpdGhQYWRkaW5nIDw9IHJlc3BvbnNlQXJlYUhlaWdodCA/IHJlc3BvbnNlQXJlYUhlaWdodCA6IGhlaWdodFdpdGhQYWRkaW5nO1xuXG4gICAgICBzZXREaW1lbnNpb25zKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIHdpZHRoOiBhZGp1c3RlZFdpZHRoID4gcmVzcG9uc2VBcmVhV2lkdGggPyBhZGp1c3RlZFdpZHRoIDogcHJldlN0YXRlLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGFkanVzdGVkSGVpZ2h0ID4gcmVzcG9uc2VBcmVhSGVpZ2h0ID8gYWRqdXN0ZWRIZWlnaHQgOiBwcmV2U3RhdGUuaGVpZ2h0LFxuICAgICAgfSkpO1xuXG4gICAgICByb290UmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSBgJHthZGp1c3RlZFdpZHRofXB4YDtcbiAgICAgIHJvb3RSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBgJHthZGp1c3RlZEhlaWdodH1weGA7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFJvb3REaW1lbnNpb25zID0gKCkgPT4ge1xuICAgIC8vIEhhbmRsZSBwb3RlbnRpYWwgbm9uLW51bWVyaWMgdmFsdWVzXG4gICAgY29uc3QgcmVzcG9uc2VBcmVhV2lkdGggPSAhaXNOYU4ocGFyc2VGbG9hdChlbXB0eVJlc3BvbnNlQXJlYVdpZHRoKSkgPyBwYXJzZUZsb2F0KGVtcHR5UmVzcG9uc2VBcmVhV2lkdGgpIDogMDtcbiAgICBjb25zdCByZXNwb25zZUFyZWFIZWlnaHQgPSAhaXNOYU4ocGFyc2VGbG9hdChlbXB0eVJlc3BvbnNlQXJlYUhlaWdodCkpID8gcGFyc2VGbG9hdChlbXB0eVJlc3BvbnNlQXJlYUhlaWdodCkgOiAwO1xuXG4gICAgY29uc3Qgcm9vdFN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiBkaW1lbnNpb25zLmhlaWdodCB8fCByZXNwb25zZUFyZWFIZWlnaHQsXG4gICAgICB3aWR0aDogZGltZW5zaW9ucy53aWR0aCB8fCByZXNwb25zZUFyZWFXaWR0aCxcbiAgICB9O1xuXG4gICAgLy8gYWRkIG1pbldpZHRoLCBtaW5IZWlnaHQgaWYgd2lkdGggYW5kIGhlaWdodCBhcmUgbm90IGRlZmluZWRcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucm9vdFN0eWxlLFxuICAgICAgLi4uKHJlc3BvbnNlQXJlYVdpZHRoID8ge30gOiB7IG1pbldpZHRoOiA5MCB9KSxcbiAgICAgIC4uLihyZXNwb25zZUFyZWFIZWlnaHQgPyB7fSA6IHsgbWluSGVpZ2h0OiAzMiB9KSxcbiAgICB9O1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFuZGxlRWxlbWVudHMoKTtcbiAgfSwgW10pO1xuXG4gIC8vIFJlbmRlciBtYXRoIGZvciB0aGUgcGxhY2Vob2xkZXIvcHJldmlldyB3aGVuIGRyYWdnaW5nIG92ZXJcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZW5kZXJNYXRoKHJvb3RSZWYuY3VycmVudCk7XG4gICAgfVxuICB9LCBbaXNPdmVyLCBkcmFnSXRlbT8uY2hvaWNlPy52YWx1ZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaG9pY2UpIHtcbiAgICAgIHNldERpbWVuc2lvbnMoeyBoZWlnaHQ6IDAsIHdpZHRoOiAwIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBoYW5kbGVFbGVtZW50cygpO1xuICB9LCBbY2hvaWNlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3ZlciAmJiAhaXNEcmFnZ2luZykge1xuICAgICAgZnJvemVuUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIHdpZHRoOiByb290UmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgIGhlaWdodDogcm9vdFJlZi5jdXJyZW50Lm9mZnNldEhlaWdodCxcbiAgICAgIH07XG4gICAgfVxuICB9LCBbY2hvaWNlLCBpc092ZXIsIGlzRHJhZ2dpbmddKTtcblxuICBjb25zdCBkcmFnZ2VkTGFiZWwgPSBkcmFnSXRlbSAmJiBpc092ZXIgJiYgZHJhZ0l0ZW0uY2hvaWNlICYmIGRyYWdJdGVtLmNob2ljZS52YWx1ZTtcbiAgY29uc3QgbGFiZWwgPSBjaG9pY2UgJiYgY2hvaWNlLnZhbHVlO1xuICBjb25zdCBzdHlsZSA9XG4gICAgaXNPdmVyIHx8IGlzRHJhZ2dpbmdcbiAgICAgID8ge1xuICAgICAgICAgIHdpZHRoOiBmcm96ZW5SZWYuY3VycmVudD8ud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBmcm96ZW5SZWYuY3VycmVudD8uaGVpZ2h0LFxuICAgICAgICB9XG4gICAgICA6IGdldFJvb3REaW1lbnNpb25zKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkQ2hpcFxuICAgICAgY2xpY2thYmxlPXtmYWxzZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGNvbXBvbmVudD1cInNwYW5cIlxuICAgICAgbGFiZWw9e1xuICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgPFN0eWxlZENoaXBMYWJlbFxuICAgICAgICAgICAgcmVmPXtzcGFuUmVmfVxuICAgICAgICAgICAgZHJhZ2dhYmxlPXt0cnVlfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHtcbiAgICAgICAgICAgICAgb3ZlcjogaXNPdmVyLFxuICAgICAgICAgICAgICBoaWRkZW46IGRyYWdnZWRMYWJlbCxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBsYWJlbCB8fCAnJyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RyYWdnZWRMYWJlbCAmJiAoXG4gICAgICAgICAgICA8U3R5bGVkQ2hpcExhYmVsXG4gICAgICAgICAgICAgIGRyYWdnYWJsZT17dHJ1ZX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKHtcbiAgICAgICAgICAgICAgICBvdmVyOiBpc092ZXIsXG4gICAgICAgICAgICAgICAgZHJhZ2dlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZHJhZ2dlZExhYmVsIHx8ICcnIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICB9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoe1xuICAgICAgICBvdmVyOiBpc092ZXIsXG4gICAgICAgIHBhcmVudE92ZXI6IGlzT3ZlcixcbiAgICAgICAgY29ycmVjdDogY29ycmVjdCAhPT0gdW5kZWZpbmVkICYmIGNvcnJlY3QsXG4gICAgICAgIGluY29ycmVjdDogY29ycmVjdCAhPT0gdW5kZWZpbmVkICYmICFjb3JyZWN0LFxuICAgICAgfSl9XG4gICAgICB2YXJpYW50PXtkaXNhYmxlZCA/ICdvdXRsaW5lZCcgOiB1bmRlZmluZWR9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcbn1cblxuQmxhbmtDb250ZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgZW1wdHlSZXNwb25zZUFyZWFXaWR0aDogMCxcbiAgZW1wdHlSZXNwb25zZUFyZWFIZWlnaHQ6IDAsXG59O1xuXG5CbGFua0NvbnRlbnQucHJvcFR5cGVzID0ge1xuICBpZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGR1cGxpY2F0ZXM6IFByb3BUeXBlcy5ib29sLFxuICBjaG9pY2U6IFByb3BUeXBlcy5vYmplY3QsXG4gIGlzT3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIGRyYWdJdGVtOiBQcm9wVHlwZXMub2JqZWN0LFxuICBjb3JyZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBlbXB0eVJlc3BvbnNlQXJlYVdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gIGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gIGluc3RhbmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG4vLyBOZXcgZnVuY3Rpb25hbCBjb21wb25lbnQgdXNpbmcgQGRuZC1raXQgaG9va3NcbmZ1bmN0aW9uIERyYWdEcm9wQmxhbmsoe1xuICBpZCxcbiAgZGlzYWJsZWQsXG4gIGR1cGxpY2F0ZXMsXG4gIGNob2ljZSxcbiAgY29ycmVjdCxcbiAgb25DaGFuZ2UsXG4gIGVtcHR5UmVzcG9uc2VBcmVhV2lkdGgsXG4gIGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0LFxuICBpbnN0YW5jZUlkLFxufSkge1xuICAvLyBTZXR1cCBkcmFnZ2FibGUgZnVuY3Rpb25hbGl0eVxuICBjb25zdCB7XG4gICAgYXR0cmlidXRlczogZHJhZ0F0dHJpYnV0ZXMsXG4gICAgbGlzdGVuZXJzOiBkcmFnTGlzdGVuZXJzLFxuICAgIHNldE5vZGVSZWY6IHNldERyYWdOb2RlUmVmLFxuICAgIHRyYW5zZm9ybSxcbiAgICBpc0RyYWdnaW5nLFxuICB9ID0gdXNlRHJhZ2dhYmxlKHtcbiAgICBpZDogYG1hc2stYmxhbmstZHJhZy0ke2lkfWAsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkIHx8ICFjaG9pY2UsXG4gICAgZGF0YToge1xuICAgICAgaWQ6IGlkLFxuICAgICAgY2hvaWNlOiBjaG9pY2UsXG4gICAgICBpbnN0YW5jZUlkOiBpbnN0YW5jZUlkLFxuICAgICAgZnJvbUNob2ljZTogZmFsc2UsIC8vIFRoaXMgaXMgZnJvbSBhIGJsYW5rLCBub3QgZnJvbSBjaG9pY2VzXG4gICAgICB0eXBlOiAnTWFza0JsYW5rJyxcbiAgICB9LFxuICB9KTtcblxuICAvLyBTZXR1cCBkcm9wcGFibGUgZnVuY3Rpb25hbGl0eVxuICBjb25zdCB7IHNldE5vZGVSZWY6IHNldERyb3BOb2RlUmVmLCBpc092ZXIsIGFjdGl2ZTogZHJhZ0l0ZW0gfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQ6IGBtYXNrLWJsYW5rLWRyb3AtJHtpZH1gLFxuICAgIGRhdGE6IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGFjY2VwdHM6IFsnTWFza0JsYW5rJ10sXG4gICAgICBpbnN0YW5jZUlkOiBpbnN0YW5jZUlkLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIENvbWJpbmUgcmVmcyBmb3IgYm90aCBkcmFnIGFuZCBkcm9wXG4gIGNvbnN0IHNldE5vZGVSZWYgPSAobm9kZSkgPT4ge1xuICAgIHNldERyYWdOb2RlUmVmKG5vZGUpO1xuICAgIHNldERyb3BOb2RlUmVmKG5vZGUpO1xuICB9O1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zbGF0ZS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZENvbnRlbnRcbiAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgIGRyYWdnZWQ9e2lzRHJhZ2dpbmd9XG4gICAgICBvdmVyPXtpc092ZXJ9XG4gICAgICB7Li4uZHJhZ0F0dHJpYnV0ZXN9XG4gICAgICB7Li4uZHJhZ0xpc3RlbmVyc31cbiAgICA+XG4gICAgICA8QmxhbmtDb250ZW50XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBkdXBsaWNhdGVzPXtkdXBsaWNhdGVzfVxuICAgICAgICBjaG9pY2U9e2Nob2ljZX1cbiAgICAgICAgaXNPdmVyPXtpc092ZXJ9XG4gICAgICAgIGRyYWdJdGVtPXtkcmFnSXRlbT8uZGF0YT8uY3VycmVudH1cbiAgICAgICAgY29ycmVjdD17Y29ycmVjdH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBlbXB0eVJlc3BvbnNlQXJlYVdpZHRoPXtlbXB0eVJlc3BvbnNlQXJlYVdpZHRofVxuICAgICAgICBlbXB0eVJlc3BvbnNlQXJlYUhlaWdodD17ZW1wdHlSZXNwb25zZUFyZWFIZWlnaHR9XG4gICAgICAgIGluc3RhbmNlSWQ9e2luc3RhbmNlSWR9XG4gICAgICAvPlxuICAgIDwvU3R5bGVkQ29udGVudD5cbiAgKTtcbn1cblxuRHJhZ0Ryb3BCbGFuay5kZWZhdWx0UHJvcHMgPSB7XG4gIGVtcHR5UmVzcG9uc2VBcmVhV2lkdGg6IDAsXG4gIGVtcHR5UmVzcG9uc2VBcmVhSGVpZ2h0OiAwLFxufTtcblxuRHJhZ0Ryb3BCbGFuay5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZHVwbGljYXRlczogUHJvcFR5cGVzLmJvb2wsXG4gIGNob2ljZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgY29ycmVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgZW1wdHlSZXNwb25zZUFyZWFXaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICBlbXB0eVJlc3BvbnNlQXJlYUhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICBpbnN0YW5jZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRHJhZ0Ryb3BCbGFuaztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxLQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxXQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxTQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxPQUFBLEdBQUFYLE9BQUE7QUFBNEMsU0FBQUQsd0JBQUFhLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFmLHVCQUFBLFlBQUFBLHdCQUFBYSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFB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
|