@pie-lib/editable-html 13.0.14-beta.6 → 13.0.14-beta.8
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/lib/__tests__/editor-utils.test.js +164 -0
- package/lib/__tests__/serialization.test.js +241 -0
- package/lib/__tests__/utils.js +79 -0
- package/lib/plugins/image/__tests__/component.test.js +96 -0
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +131 -0
- package/lib/plugins/image/__tests__/image-toolbar.test.js +21 -0
- package/lib/plugins/image/__tests__/index.test.js +86 -0
- package/lib/plugins/image/__tests__/insert-image-handler.test.js +112 -0
- package/lib/plugins/image/__tests__/mock-change.js +22 -0
- package/lib/plugins/list/__tests__/index.test.js +63 -0
- package/lib/plugins/math/__tests__/index.test.js +284 -0
- package/lib/plugins/media/__tests__/index.test.js +69 -0
- package/lib/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js +93 -0
- package/lib/plugins/table/__tests__/index.test.js +416 -0
- package/lib/plugins/table/__tests__/table-toolbar.test.js +81 -0
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +153 -0
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +47 -0
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +112 -0
- package/lib/plugins/toolbar/__tests__/toolbar.test.js +118 -0
- package/package.json +3 -3
- package/src/__tests__/editor-utils.test.js +162 -0
- package/src/__tests__/serialization.test.js +290 -0
- package/src/__tests__/utils.js +36 -0
- package/src/plugins/image/__tests__/component.test.jsx +73 -0
- package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +90 -0
- package/src/plugins/image/__tests__/image-toolbar.test.jsx +12 -0
- package/src/plugins/image/__tests__/index.test.js +92 -0
- package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
- package/src/plugins/image/__tests__/mock-change.js +15 -0
- package/src/plugins/list/__tests__/index.test.js +52 -0
- package/src/plugins/math/__tests__/index.test.jsx +264 -0
- package/src/plugins/media/__tests__/index.test.js +75 -0
- package/src/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js +71 -0
- package/src/plugins/table/__tests__/index.test.jsx +401 -0
- package/src/plugins/table/__tests__/table-toolbar.test.jsx +75 -0
- package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +123 -0
- package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +40 -0
- package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +97 -0
- package/src/plugins/toolbar/__tests__/toolbar.test.jsx +112 -0
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
8
|
+
var _mockChange = _interopRequireDefault(require("../../image/__tests__/mock-change"));
|
|
9
|
+
var _slate = require("slate");
|
|
10
|
+
var _index = _interopRequireWildcard(require("../index"));
|
|
11
|
+
var _react2 = require("@testing-library/react");
|
|
12
|
+
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); }
|
|
13
|
+
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; }
|
|
14
|
+
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; }
|
|
15
|
+
jest.mock('@pie-framework/mathquill', function () {
|
|
16
|
+
return {
|
|
17
|
+
StaticMath: jest.fn(),
|
|
18
|
+
getInterface: jest.fn().mockReturnThis(),
|
|
19
|
+
registerEmbed: jest.fn()
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
var mockMathToolbarOnChange;
|
|
23
|
+
var mockMathToolbarOnDone;
|
|
24
|
+
jest.mock('@pie-lib/math-toolbar', function () {
|
|
25
|
+
return {
|
|
26
|
+
MathPreview: function MathPreview() {
|
|
27
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
28
|
+
"data-testid": "math-preview"
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
MathToolbar: function MathToolbar(props) {
|
|
32
|
+
// Store callbacks for testing
|
|
33
|
+
mockMathToolbarOnChange = props.onChange;
|
|
34
|
+
mockMathToolbarOnDone = props.onDone;
|
|
35
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
36
|
+
"data-testid": "math-toolbar",
|
|
37
|
+
role: "toolbar"
|
|
38
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
39
|
+
"data-testid": "toolbar-change",
|
|
40
|
+
onClick: function onClick() {
|
|
41
|
+
return props.onChange && props.onChange('test-latex');
|
|
42
|
+
}
|
|
43
|
+
}, "Change"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
44
|
+
"data-testid": "toolbar-done",
|
|
45
|
+
onClick: function onClick() {
|
|
46
|
+
return props.onDone && props.onDone('test-latex');
|
|
47
|
+
}
|
|
48
|
+
}, "Done"));
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
jest.mock('@pie-lib/math-rendering', function () {
|
|
53
|
+
return _objectSpread(_objectSpread({}, jest.requireActual('@pie-lib/math-rendering')), {}, {
|
|
54
|
+
mmlToLatex: jest.fn(function () {
|
|
55
|
+
return '/foobar/latex';
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
var log = (0, _debug["default"])('@pie-lib:editable-html:test:math');
|
|
60
|
+
|
|
61
|
+
// I believe @andrei is moving this stuff out.
|
|
62
|
+
describe('MathPlugin', function () {
|
|
63
|
+
describe('toolbar', function () {
|
|
64
|
+
describe('onClick', function () {
|
|
65
|
+
var plugin, mockChange, value, onChange;
|
|
66
|
+
beforeEach(function () {
|
|
67
|
+
plugin = (0, _index["default"])({});
|
|
68
|
+
mockChange = new _mockChange["default"]();
|
|
69
|
+
value = {
|
|
70
|
+
change: jest.fn(function () {
|
|
71
|
+
return mockChange;
|
|
72
|
+
})
|
|
73
|
+
};
|
|
74
|
+
onChange = jest.fn();
|
|
75
|
+
plugin.toolbar.onClick(value, onChange);
|
|
76
|
+
});
|
|
77
|
+
test('calls insertInline', function () {
|
|
78
|
+
expect(mockChange.insertInline).toBeCalledWith(expect.objectContaining({
|
|
79
|
+
data: (0, _index.inlineMath)().data
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
test('it calls onChange', function () {
|
|
83
|
+
expect(onChange).toHaveBeenCalledWith(mockChange);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('renderNode', function () {
|
|
88
|
+
test('the component has props', function () {
|
|
89
|
+
var plugin = (0, _index["default"])({});
|
|
90
|
+
var _plugin$renderNode = plugin.renderNode({
|
|
91
|
+
node: {
|
|
92
|
+
type: 'math'
|
|
93
|
+
}
|
|
94
|
+
}),
|
|
95
|
+
props = _plugin$renderNode.props;
|
|
96
|
+
expect(props.node).toEqual({
|
|
97
|
+
type: 'math'
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('serialization', function () {
|
|
102
|
+
describe('deserialize', function () {
|
|
103
|
+
var assertDeserialize = function assertDeserialize(html, expected, wrapType) {
|
|
104
|
+
it("innerHTML: ".concat(html, " is deserialized to: ").concat(expected, " with wrapType: ").concat(wrapType), function () {
|
|
105
|
+
var el = {
|
|
106
|
+
tagName: 'span',
|
|
107
|
+
childNodes: [],
|
|
108
|
+
getAttribute: jest.fn(function () {
|
|
109
|
+
return '';
|
|
110
|
+
}),
|
|
111
|
+
hasAttribute: jest.fn(function () {
|
|
112
|
+
return true;
|
|
113
|
+
}),
|
|
114
|
+
innerHTML: html
|
|
115
|
+
};
|
|
116
|
+
var next = jest.fn();
|
|
117
|
+
var out = _index.serialization.deserialize(el, next);
|
|
118
|
+
expect(out).toEqual({
|
|
119
|
+
object: 'inline',
|
|
120
|
+
type: 'math',
|
|
121
|
+
isVoid: true,
|
|
122
|
+
nodes: [],
|
|
123
|
+
data: {
|
|
124
|
+
latex: expected,
|
|
125
|
+
wrapper: wrapType
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
assertDeserialize('$$<$$', '<', _index["default"].DOLLAR);
|
|
131
|
+
assertDeserialize('$<$', '<', _index["default"].DOLLAR);
|
|
132
|
+
assertDeserialize('\\(<\\)', '<', _index["default"].ROUND_BRACKETS);
|
|
133
|
+
assertDeserialize('\\[<\\]', '<', _index["default"].ROUND_BRACKETS);
|
|
134
|
+
assertDeserialize('latex', 'latex', _index["default"].ROUND_BRACKETS);
|
|
135
|
+
assertDeserialize('\\displaystyle foo', 'foo', _index["default"].ROUND_BRACKETS);
|
|
136
|
+
it('should make mathml editable if MathPlugin.mathMlOptions.mmlEditing is true', function () {
|
|
137
|
+
_index["default"].mathMlOptions.mmlEditing = true;
|
|
138
|
+
var el = {
|
|
139
|
+
tagName: 'math',
|
|
140
|
+
outerHTML: '<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
|
|
141
|
+
};
|
|
142
|
+
var next = jest.fn();
|
|
143
|
+
var out = _index.serialization.deserialize(el, next);
|
|
144
|
+
expect(out).toEqual({
|
|
145
|
+
object: 'inline',
|
|
146
|
+
type: 'math',
|
|
147
|
+
isVoid: true,
|
|
148
|
+
nodes: [],
|
|
149
|
+
data: {
|
|
150
|
+
latex: '/foobar/latex',
|
|
151
|
+
wrapper: 'round_brackets'
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
it('should make mathml readOnly if MathPlugin.mathMlOptions.mmlEditing is false', function () {
|
|
156
|
+
_index["default"].mathMlOptions.mmlEditing = false;
|
|
157
|
+
var el = {
|
|
158
|
+
tagName: 'math',
|
|
159
|
+
outerHTML: '<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>2</mn> <mi>x</mi> <mtext> </mtext> <mo>≤</mo> <mn>4</mn> <mi>y</mi> <mtext> </mtext> <mo>+</mo> <mtext> </mtext> <mn>8</mn> <msqrt> <mi>h</mi> </msqrt></math>'
|
|
160
|
+
};
|
|
161
|
+
var next = jest.fn();
|
|
162
|
+
var out = _index.serialization.deserialize(el, next);
|
|
163
|
+
expect(out).toEqual({
|
|
164
|
+
object: 'inline',
|
|
165
|
+
isVoid: true,
|
|
166
|
+
type: 'mathml',
|
|
167
|
+
data: {
|
|
168
|
+
html: el.outerHTML
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe('serialize', function () {
|
|
174
|
+
var assertSerialize = function assertSerialize(latex, expectedHtml, wrapper) {
|
|
175
|
+
wrapper = wrapper || _index["default"].ROUND_BRACKETS;
|
|
176
|
+
it("".concat(latex, " is serialized to: ").concat(expectedHtml), function () {
|
|
177
|
+
var object = {
|
|
178
|
+
kind: 'inline',
|
|
179
|
+
type: 'math',
|
|
180
|
+
isVoid: true,
|
|
181
|
+
nodes: [],
|
|
182
|
+
data: _slate.Data.create({
|
|
183
|
+
latex: latex,
|
|
184
|
+
wrapper: wrapper
|
|
185
|
+
})
|
|
186
|
+
};
|
|
187
|
+
var children = [];
|
|
188
|
+
var out = _index.serialization.serialize(object, children);
|
|
189
|
+
log('out: ', out);
|
|
190
|
+
expect(out).toEqual(/*#__PURE__*/_react["default"].createElement("span", {
|
|
191
|
+
"data-latex": "",
|
|
192
|
+
"data-raw": latex
|
|
193
|
+
}, expectedHtml));
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
assertSerialize('latex', '\\(latex\\)', _index["default"].ROUND_BRACKETS);
|
|
197
|
+
assertSerialize('latex', '\\(latex\\)', _index["default"].SQUARE_BRACKETS);
|
|
198
|
+
assertSerialize('latex', '$latex$', _index["default"].DOLLAR);
|
|
199
|
+
assertSerialize('latex', '$latex$', _index["default"].DOUBLE_DOLLAR);
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Note that when this is converted to html it get's escaped - but that's an issue with the slate html-serializer.
|
|
203
|
+
*/
|
|
204
|
+
assertSerialize('<', '\\(<\\)');
|
|
205
|
+
assertSerialize('x<y', '\\(x<y\\)');
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('CustomToolbarComp', function () {
|
|
210
|
+
var onDataChange;
|
|
211
|
+
var onToolbarDone;
|
|
212
|
+
var renderComponent = function renderComponent() {
|
|
213
|
+
var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
214
|
+
var mockChange = new _mockChange["default"]();
|
|
215
|
+
var defaults = {
|
|
216
|
+
node: {
|
|
217
|
+
key: '1',
|
|
218
|
+
data: _slate.Data.create({
|
|
219
|
+
latex: 'foo'
|
|
220
|
+
}),
|
|
221
|
+
equals: function equals() {
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
value: {
|
|
226
|
+
document: {
|
|
227
|
+
getNextText: jest.fn().mockReturnValue({
|
|
228
|
+
key: 'nt'
|
|
229
|
+
})
|
|
230
|
+
},
|
|
231
|
+
change: jest.fn().mockReturnValue(mockChange)
|
|
232
|
+
},
|
|
233
|
+
onDataChange: onDataChange,
|
|
234
|
+
onToolbarDone: onToolbarDone
|
|
235
|
+
};
|
|
236
|
+
var props = _objectSpread(_objectSpread({}, defaults), extras);
|
|
237
|
+
return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.CustomToolbarComp, props));
|
|
238
|
+
};
|
|
239
|
+
describe('render', function () {
|
|
240
|
+
it('renders toolbar without default keypadMode', function () {
|
|
241
|
+
renderComponent();
|
|
242
|
+
|
|
243
|
+
// Verify the toolbar is rendered
|
|
244
|
+
expect(_react2.screen.getByTestId('math-toolbar')).toBeInTheDocument();
|
|
245
|
+
expect(_react2.screen.getByRole('toolbar')).toBeInTheDocument();
|
|
246
|
+
});
|
|
247
|
+
it('renders toolbar with default keypadMode', function () {
|
|
248
|
+
renderComponent({
|
|
249
|
+
pluginProps: {
|
|
250
|
+
math: {
|
|
251
|
+
keypadMode: 'geometry'
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// Verify the toolbar is rendered with keypadMode prop
|
|
257
|
+
expect(_react2.screen.getByTestId('math-toolbar')).toBeInTheDocument();
|
|
258
|
+
expect(_react2.screen.getByRole('toolbar')).toBeInTheDocument();
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe('onDone', function () {
|
|
262
|
+
it('calls onToolbarDone when done callback is triggered', function () {
|
|
263
|
+
onToolbarDone = jest.fn();
|
|
264
|
+
renderComponent();
|
|
265
|
+
|
|
266
|
+
// Trigger the onDone callback that was passed to MathToolbar
|
|
267
|
+
mockMathToolbarOnDone('oo');
|
|
268
|
+
expect(onToolbarDone).toHaveBeenCalledWith(expect.anything(), false);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
describe('onChange', function () {
|
|
272
|
+
it('calls onDataChange when change callback is triggered', function () {
|
|
273
|
+
onDataChange = jest.fn();
|
|
274
|
+
renderComponent();
|
|
275
|
+
|
|
276
|
+
// Trigger the onChange callback that was passed to MathToolbar
|
|
277
|
+
mockMathToolbarOnChange('oo');
|
|
278
|
+
expect(onDataChange).toHaveBeenCalledWith('1', {
|
|
279
|
+
latex: 'oo'
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9kZWJ1ZyIsIl9tb2NrQ2hhbmdlIiwiX3NsYXRlIiwiX2luZGV4IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcmVhY3QyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImplc3QiLCJtb2NrIiwiU3RhdGljTWF0aCIsImZuIiwiZ2V0SW50ZXJmYWNlIiwibW9ja1JldHVyblRoaXMiLCJyZWdpc3RlckVtYmVkIiwibW9ja01hdGhUb29sYmFyT25DaGFuZ2UiLCJtb2NrTWF0aFRvb2xiYXJPbkRvbmUiLCJNYXRoUHJldmlldyIsImNyZWF0ZUVsZW1lbnQiLCJNYXRoVG9vbGJhciIsInByb3BzIiwib25DaGFuZ2UiLCJvbkRvbmUiLCJyb2xlIiwib25DbGljayIsInJlcXVpcmVBY3R1YWwiLCJtbWxUb0xhdGV4IiwibG9nIiwiZGVidWciLCJkZXNjcmliZSIsInBsdWdpbiIsIm1vY2tDaGFuZ2UiLCJ2YWx1ZSIsImJlZm9yZUVhY2giLCJNYXRoUGx1Z2luIiwiTW9ja0NoYW5nZSIsImNoYW5nZSIsInRvb2xiYXIiLCJ0ZXN0IiwiZXhwZWN0IiwiaW5zZXJ0SW5saW5lIiwidG9CZUNhbGxlZFdpdGgiLCJvYmplY3RDb250YWluaW5nIiwiZGF0YSIsImlubGluZU1hdGgiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIl9wbHVnaW4kcmVuZGVyTm9kZSIsInJlbmRlck5vZGUiLCJub2RlIiwidHlwZSIsInRvRXF1YWwiLCJhc3NlcnREZXNlcmlhbGl6ZSIsImh0bWwiLCJleHBlY3RlZCIsIndyYXBUeXBlIiwiaXQiLCJjb25jYXQiLCJlbCIsInRhZ05hbWUiLCJjaGlsZE5vZGVzIiwiZ2V0QXR0cmlidXRlIiwiaGFzQXR0cmlidXRlIiwiaW5uZXJIVE1MIiwibmV4dCIsIm91dCIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsIm9iamVjdCIsImlzVm9pZCIsIm5vZGVzIiwibGF0ZXgiLCJ3cmFwcGVyIiwiRE9MTEFSIiwiUk9VTkRfQlJBQ0tFVFMiLCJtYXRoTWxPcHRpb25zIiwibW1sRWRpdGluZyIsIm91dGVySFRNTCIsImFzc2VydFNlcmlhbGl6ZSIsImV4cGVjdGVkSHRtbCIsImtpbmQiLCJEYXRhIiwiY3JlYXRlIiwiY2hpbGRyZW4iLCJzZXJpYWxpemUiLCJTUVVBUkVfQlJBQ0tFVFMiLCJET1VCTEVfRE9MTEFSIiwib25EYXRhQ2hhbmdlIiwib25Ub29sYmFyRG9uZSIsInJlbmRlckNvbXBvbmVudCIsImV4dHJhcyIsInVuZGVmaW5lZCIsImRlZmF1bHRzIiwia2V5IiwiZXF1YWxzIiwiZG9jdW1lbnQiLCJnZXROZXh0VGV4dCIsIm1vY2tSZXR1cm5WYWx1ZSIsInJlbmRlciIsIkN1c3RvbVRvb2xiYXJDb21wIiwic2NyZWVuIiwiZ2V0QnlUZXN0SWQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsImdldEJ5Um9sZSIsInBsdWdpblByb3BzIiwibWF0aCIsImtleXBhZE1vZGUiLCJhbnl0aGluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL21hdGgvX190ZXN0c19fL2luZGV4LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IE1vY2tDaGFuZ2UgZnJvbSAnLi4vLi4vaW1hZ2UvX190ZXN0c19fL21vY2stY2hhbmdlJztcbmltcG9ydCB7IERhdGEgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgTWF0aFBsdWdpbiwgeyBDdXN0b21Ub29sYmFyQ29tcCwgaW5saW5lTWF0aCwgc2VyaWFsaXphdGlvbiB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5cbmplc3QubW9jaygnQHBpZS1mcmFtZXdvcmsvbWF0aHF1aWxsJywgKCkgPT4gKHtcbiAgU3RhdGljTWF0aDogamVzdC5mbigpLFxuICBnZXRJbnRlcmZhY2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVGhpcygpLFxuICByZWdpc3RlckVtYmVkOiBqZXN0LmZuKCksXG59KSk7XG5cbmxldCBtb2NrTWF0aFRvb2xiYXJPbkNoYW5nZTtcbmxldCBtb2NrTWF0aFRvb2xiYXJPbkRvbmU7XG5cbmplc3QubW9jaygnQHBpZS1saWIvbWF0aC10b29sYmFyJywgKCkgPT4gKHtcbiAgTWF0aFByZXZpZXc6ICgpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJtYXRoLXByZXZpZXdcIiAvPixcbiAgTWF0aFRvb2xiYXI6IChwcm9wcykgPT4ge1xuICAgIC8vIFN0b3JlIGNhbGxiYWNrcyBmb3IgdGVzdGluZ1xuICAgIG1vY2tNYXRoVG9vbGJhck9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2U7XG4gICAgbW9ja01hdGhUb29sYmFyT25Eb25lID0gcHJvcHMub25Eb25lO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwibWF0aC10b29sYmFyXCIgcm9sZT1cInRvb2xiYXJcIj5cbiAgICAgICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cInRvb2xiYXItY2hhbmdlXCIgb25DbGljaz17KCkgPT4gcHJvcHMub25DaGFuZ2UgJiYgcHJvcHMub25DaGFuZ2UoJ3Rlc3QtbGF0ZXgnKX0+XG4gICAgICAgICAgQ2hhbmdlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwidG9vbGJhci1kb25lXCIgb25DbGljaz17KCkgPT4gcHJvcHMub25Eb25lICYmIHByb3BzLm9uRG9uZSgndGVzdC1sYXRleCcpfT5cbiAgICAgICAgICBEb25lXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfSxcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXJlbmRlcmluZycsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbCgnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnKSxcbiAgbW1sVG9MYXRleDogamVzdC5mbigoKSA9PiB7XG4gICAgcmV0dXJuICcvZm9vYmFyL2xhdGV4JztcbiAgfSksXG59KSk7XG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDp0ZXN0Om1hdGgnKTtcblxuLy8gSSBiZWxpZXZlIEBhbmRyZWkgaXMgbW92aW5nIHRoaXMgc3R1ZmYgb3V0LlxuZGVzY3JpYmUoJ01hdGhQbHVnaW4nLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd0b29sYmFyJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdvbkNsaWNrJywgKCkgPT4ge1xuICAgICAgbGV0IHBsdWdpbiwgbW9ja0NoYW5nZSwgdmFsdWUsIG9uQ2hhbmdlO1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHBsdWdpbiA9IE1hdGhQbHVnaW4oe30pO1xuICAgICAgICBtb2NrQ2hhbmdlID0gbmV3IE1vY2tDaGFuZ2UoKTtcbiAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgY2hhbmdlOiBqZXN0LmZuKCgpID0+IG1vY2tDaGFuZ2UpLFxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgICAgcGx1Z2luLnRvb2xiYXIub25DbGljayh2YWx1ZSwgb25DaGFuZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoJ2NhbGxzIGluc2VydElubGluZScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG1vY2tDaGFuZ2UuaW5zZXJ0SW5saW5lKS50b0JlQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGRhdGE6IGlubGluZU1hdGgoKS5kYXRhIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KCdpdCBjYWxscyBvbkNoYW5nZScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ2hhbmdlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVuZGVyTm9kZScsICgpID0+IHtcbiAgICB0ZXN0KCd0aGUgY29tcG9uZW50IGhhcyBwcm9wcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IE1hdGhQbHVnaW4oe30pO1xuICAgICAgY29uc3QgeyBwcm9wcyB9ID0gcGx1Z2luLnJlbmRlck5vZGUoeyBub2RlOiB7IHR5cGU6ICdtYXRoJyB9IH0pO1xuICAgICAgZXhwZWN0KHByb3BzLm5vZGUpLnRvRXF1YWwoeyB0eXBlOiAnbWF0aCcgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXJpYWxpemF0aW9uJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdkZXNlcmlhbGl6ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydERlc2VyaWFsaXplID0gKGh0bWwsIGV4cGVjdGVkLCB3cmFwVHlwZSkgPT4ge1xuICAgICAgICBpdChgaW5uZXJIVE1MOiAke2h0bWx9IGlzIGRlc2VyaWFsaXplZCB0bzogJHtleHBlY3RlZH0gd2l0aCB3cmFwVHlwZTogJHt3cmFwVHlwZX1gLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSB7XG4gICAgICAgICAgICB0YWdOYW1lOiAnc3BhbicsXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogamVzdC5mbigoKSA9PiAnJyksXG4gICAgICAgICAgICBoYXNBdHRyaWJ1dGU6IGplc3QuZm4oKCkgPT4gdHJ1ZSksXG4gICAgICAgICAgICBpbm5lckhUTUw6IGh0bWwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gamVzdC5mbigpO1xuXG4gICAgICAgICAgY29uc3Qgb3V0ID0gc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShlbCwgbmV4dCk7XG4gICAgICAgICAgZXhwZWN0KG91dCkudG9FcXVhbCh7XG4gICAgICAgICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgICAgICAgdHlwZTogJ21hdGgnLFxuICAgICAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsYXRleDogZXhwZWN0ZWQsXG4gICAgICAgICAgICAgIHdyYXBwZXI6IHdyYXBUeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnJCQmbHQ7JCQnLCAnPCcsIE1hdGhQbHVnaW4uRE9MTEFSKTtcbiAgICAgIGFzc2VydERlc2VyaWFsaXplKCckJmx0OyQnLCAnPCcsIE1hdGhQbHVnaW4uRE9MTEFSKTtcbiAgICAgIGFzc2VydERlc2VyaWFsaXplKCdcXFxcKCZsdDtcXFxcKScsICc8JywgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUyk7XG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnXFxcXFsmbHQ7XFxcXF0nLCAnPCcsIE1hdGhQbHVnaW4uUk9VTkRfQlJBQ0tFVFMpO1xuICAgICAgYXNzZXJ0RGVzZXJpYWxpemUoJ2xhdGV4JywgJ2xhdGV4JywgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUyk7XG4gICAgICBhc3NlcnREZXNlcmlhbGl6ZSgnXFxcXGRpc3BsYXlzdHlsZSBmb28nLCAnZm9vJywgTWF0aFBsdWdpbi5ST1VORF9CUkFDS0VUUyk7XG5cbiAgICAgIGl0KCdzaG91bGQgbWFrZSBtYXRobWwgZWRpdGFibGUgaWYgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgICAgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBlbCA9IHtcbiAgICAgICAgICB0YWdOYW1lOiAnbWF0aCcsXG4gICAgICAgICAgb3V0ZXJIVE1MOlxuICAgICAgICAgICAgJzxtYXRoIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiPiAgPG1uPjI8L21uPiAgPG1pPng8L21pPiAgPG10ZXh0PiYjeEEwOzwvbXRleHQ+ICA8bW8+JiN4MjI2NDs8L21vPiAgPG1uPjQ8L21uPiAgPG1pPnk8L21pPiAgPG10ZXh0PiYjeEEwOzwvbXRleHQ+ICA8bW8+KzwvbW8+ICA8bXRleHQ+JiN4QTA7PC9tdGV4dD4gIDxtbj44PC9tbj4gPG1zcXJ0PiAgICA8bWk+aDwvbWk+ICA8L21zcXJ0PjwvbWF0aD4nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0gamVzdC5mbigpO1xuXG4gICAgICAgIGNvbnN0IG91dCA9IHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoZWwsIG5leHQpO1xuXG4gICAgICAgIGV4cGVjdChvdXQpLnRvRXF1YWwoe1xuICAgICAgICAgIG9iamVjdDogJ2lubGluZScsXG4gICAgICAgICAgdHlwZTogJ21hdGgnLFxuICAgICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgICBub2RlczogW10sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbGF0ZXg6ICcvZm9vYmFyL2xhdGV4JyxcbiAgICAgICAgICAgIHdyYXBwZXI6ICdyb3VuZF9icmFja2V0cycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBtYWtlIG1hdGhtbCByZWFkT25seSBpZiBNYXRoUGx1Z2luLm1hdGhNbE9wdGlvbnMubW1sRWRpdGluZyBpcyBmYWxzZScsICgpID0+IHtcbiAgICAgICAgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZWwgPSB7XG4gICAgICAgICAgdGFnTmFtZTogJ21hdGgnLFxuICAgICAgICAgIG91dGVySFRNTDpcbiAgICAgICAgICAgICc8bWF0aCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIj4gIDxtbj4yPC9tbj4gIDxtaT54PC9taT4gIDxtdGV4dD4mI3hBMDs8L210ZXh0PiAgPG1vPiYjeDIyNjQ7PC9tbz4gIDxtbj40PC9tbj4gIDxtaT55PC9taT4gIDxtdGV4dD4mI3hBMDs8L210ZXh0PiAgPG1vPis8L21vPiAgPG10ZXh0PiYjeEEwOzwvbXRleHQ+ICA8bW4+ODwvbW4+IDxtc3FydD4gICAgPG1pPmg8L21pPiAgPC9tc3FydD48L21hdGg+JyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGplc3QuZm4oKTtcblxuICAgICAgICBjb25zdCBvdXQgPSBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKGVsLCBuZXh0KTtcblxuICAgICAgICBleHBlY3Qob3V0KS50b0VxdWFsKHtcbiAgICAgICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnbWF0aG1sJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBodG1sOiBlbC5vdXRlckhUTUwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXJpYWxpemUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRTZXJpYWxpemUgPSAobGF0ZXgsIGV4cGVjdGVkSHRtbCwgd3JhcHBlcikgPT4ge1xuICAgICAgICB3cmFwcGVyID0gd3JhcHBlciB8fCBNYXRoUGx1Z2luLlJPVU5EX0JSQUNLRVRTO1xuICAgICAgICBpdChgJHtsYXRleH0gaXMgc2VyaWFsaXplZCB0bzogJHtleHBlY3RlZEh0bWx9YCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9iamVjdCA9IHtcbiAgICAgICAgICAgIGtpbmQ6ICdpbmxpbmUnLFxuICAgICAgICAgICAgdHlwZTogJ21hdGgnLFxuICAgICAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICAgICAgZGF0YTogRGF0YS5jcmVhdGUoeyBsYXRleCwgd3JhcHBlciB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG5cbiAgICAgICAgICBjb25zdCBvdXQgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZShvYmplY3QsIGNoaWxkcmVuKTtcbiAgICAgICAgICBsb2coJ291dDogJywgb3V0KTtcbiAgICAgICAgICBleHBlY3Qob3V0KS50b0VxdWFsKFxuICAgICAgICAgICAgPHNwYW4gZGF0YS1sYXRleD1cIlwiIGRhdGEtcmF3PXtsYXRleH0+XG4gICAgICAgICAgICAgIHtleHBlY3RlZEh0bWx9XG4gICAgICAgICAgICA8L3NwYW4+LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgYXNzZXJ0U2VyaWFsaXplKCdsYXRleCcsICdcXFxcKGxhdGV4XFxcXCknLCBNYXRoUGx1Z2luLlJPVU5EX0JSQUNLRVRTKTtcbiAgICAgIGFzc2VydFNlcmlhbGl6ZSgnbGF0ZXgnLCAnXFxcXChsYXRleFxcXFwpJywgTWF0aFBsdWdpbi5TUVVBUkVfQlJBQ0tFVFMpO1xuICAgICAgYXNzZXJ0U2VyaWFsaXplKCdsYXRleCcsICckbGF0ZXgkJywgTWF0aFBsdWdpbi5ET0xMQVIpO1xuICAgICAgYXNzZXJ0U2VyaWFsaXplKCdsYXRleCcsICckbGF0ZXgkJywgTWF0aFBsdWdpbi5ET1VCTEVfRE9MTEFSKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgd2hlbiB0aGlzIGlzIGNvbnZlcnRlZCB0byBodG1sIGl0IGdldCdzIGVzY2FwZWQgLSBidXQgdGhhdCdzIGFuIGlzc3VlIHdpdGggdGhlIHNsYXRlIGh0bWwtc2VyaWFsaXplci5cbiAgICAgICAqL1xuICAgICAgYXNzZXJ0U2VyaWFsaXplKCc8JywgJ1xcXFwoPFxcXFwpJyk7XG4gICAgICBhc3NlcnRTZXJpYWxpemUoJ3g8eScsICdcXFxcKHg8eVxcXFwpJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDdXN0b21Ub29sYmFyQ29tcCcsICgpID0+IHtcbiAgbGV0IG9uRGF0YUNoYW5nZTtcbiAgbGV0IG9uVG9vbGJhckRvbmU7XG5cbiAgY29uc3QgcmVuZGVyQ29tcG9uZW50ID0gKGV4dHJhcyA9IHt9KSA9PiB7XG4gICAgbGV0IG1vY2tDaGFuZ2UgPSBuZXcgTW9ja0NoYW5nZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgbm9kZToge1xuICAgICAgICBrZXk6ICcxJyxcbiAgICAgICAgZGF0YTogRGF0YS5jcmVhdGUoeyBsYXRleDogJ2ZvbycgfSksXG4gICAgICAgIGVxdWFsczogKCkgPT4gdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB2YWx1ZToge1xuICAgICAgICBkb2N1bWVudDoge1xuICAgICAgICAgIGdldE5leHRUZXh0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHsga2V5OiAnbnQnIH0pLFxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9ja0NoYW5nZSksXG4gICAgICB9LFxuICAgICAgb25EYXRhQ2hhbmdlLFxuICAgICAgb25Ub29sYmFyRG9uZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi5kZWZhdWx0cyxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlbmRlcig8Q3VzdG9tVG9vbGJhckNvbXAgey4uLnByb3BzfSAvPik7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB0b29sYmFyIHdpdGhvdXQgZGVmYXVsdCBrZXlwYWRNb2RlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdG9vbGJhciBpcyByZW5kZXJlZFxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnbWF0aC10b29sYmFyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgndG9vbGJhcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgdG9vbGJhciB3aXRoIGRlZmF1bHQga2V5cGFkTW9kZScsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IHBsdWdpblByb3BzOiB7IG1hdGg6IHsga2V5cGFkTW9kZTogJ2dlb21ldHJ5JyB9IH0gfSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdG9vbGJhciBpcyByZW5kZXJlZCB3aXRoIGtleXBhZE1vZGUgcHJvcFxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnbWF0aC10b29sYmFyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgndG9vbGJhcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb25Eb25lJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvblRvb2xiYXJEb25lIHdoZW4gZG9uZSBjYWxsYmFjayBpcyB0cmlnZ2VyZWQnLCAoKSA9PiB7XG4gICAgICBvblRvb2xiYXJEb25lID0gamVzdC5mbigpO1xuICAgICAgcmVuZGVyQ29tcG9uZW50KCk7XG5cbiAgICAgIC8vIFRyaWdnZXIgdGhlIG9uRG9uZSBjYWxsYmFjayB0aGF0IHdhcyBwYXNzZWQgdG8gTWF0aFRvb2xiYXJcbiAgICAgIG1vY2tNYXRoVG9vbGJhck9uRG9uZSgnb28nKTtcblxuICAgICAgZXhwZWN0KG9uVG9vbGJhckRvbmUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnl0aGluZygpLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvbkNoYW5nZScsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgb25EYXRhQ2hhbmdlIHdoZW4gY2hhbmdlIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCcsICgpID0+IHtcbiAgICAgIG9uRGF0YUNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgIHJlbmRlckNvbXBvbmVudCgpO1xuXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBvbkNoYW5nZSBjYWxsYmFjayB0aGF0IHdhcyBwYXNzZWQgdG8gTWF0aFRvb2xiYXJcbiAgICAgIG1vY2tNYXRoVG9vbGJhck9uQ2hhbmdlKCdvbycpO1xuXG4gICAgICBleHBlY3Qob25EYXRhQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnMScsIHsgbGF0ZXg6ICdvbycgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQXdELFNBQUFLLHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMs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
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _ = _interopRequireDefault(require("../"));
|
|
5
|
+
describe('media plugin', function () {
|
|
6
|
+
var imagePlugin = (0, _["default"])('video');
|
|
7
|
+
describe('normalizeNode', function () {
|
|
8
|
+
it('should exit the function if the node is not of type document', function () {
|
|
9
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
10
|
+
object: 'image'
|
|
11
|
+
});
|
|
12
|
+
expect(returnValue).toEqual(undefined);
|
|
13
|
+
});
|
|
14
|
+
it('should exit there are no changes needed', function () {
|
|
15
|
+
var nodes = [{
|
|
16
|
+
object: 'text',
|
|
17
|
+
text: 'Before Media'
|
|
18
|
+
}, {
|
|
19
|
+
type: 'video'
|
|
20
|
+
}, {
|
|
21
|
+
object: 'text',
|
|
22
|
+
text: 'After Media'
|
|
23
|
+
}];
|
|
24
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
25
|
+
object: 'document',
|
|
26
|
+
findDescendant: jest.fn(function (callback) {
|
|
27
|
+
nodes.forEach(function (n) {
|
|
28
|
+
return callback(n);
|
|
29
|
+
});
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
expect(returnValue).toEqual(undefined);
|
|
33
|
+
});
|
|
34
|
+
it('should return a function if there is a node with an empty text before a media element', function () {
|
|
35
|
+
var nodes = [{
|
|
36
|
+
object: 'text',
|
|
37
|
+
text: '',
|
|
38
|
+
key: '1'
|
|
39
|
+
}, {
|
|
40
|
+
type: 'video',
|
|
41
|
+
key: '2'
|
|
42
|
+
}, {
|
|
43
|
+
object: 'text',
|
|
44
|
+
text: 'After Media',
|
|
45
|
+
key: '3'
|
|
46
|
+
}];
|
|
47
|
+
var findDescendant = jest.fn(function (callback) {
|
|
48
|
+
nodes.forEach(function (n) {
|
|
49
|
+
return callback(n);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
var change = {
|
|
53
|
+
withoutNormalization: jest.fn(function (callback) {
|
|
54
|
+
callback();
|
|
55
|
+
}),
|
|
56
|
+
insertTextByKey: jest.fn()
|
|
57
|
+
};
|
|
58
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
59
|
+
object: 'document',
|
|
60
|
+
findDescendant: findDescendant
|
|
61
|
+
});
|
|
62
|
+
expect(returnValue).toEqual(expect.any(Function));
|
|
63
|
+
returnValue(change);
|
|
64
|
+
expect(change.withoutNormalization).toHaveBeenCalledWith(expect.any(Function));
|
|
65
|
+
expect(change.insertTextByKey).toHaveBeenCalledWith('1', 0, ' ');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJkZXNjcmliZSIsImltYWdlUGx1Z2luIiwiTWVkaWFQbHVnaW4iLCJpdCIsInJldHVyblZhbHVlIiwibm9ybWFsaXplTm9kZSIsIm9iamVjdCIsImV4cGVjdCIsInRvRXF1YWwiLCJ1bmRlZmluZWQiLCJub2RlcyIsInRleHQiLCJ0eXBlIiwiZmluZERlc2NlbmRhbnQiLCJqZXN0IiwiZm4iLCJjYWxsYmFjayIsImZvckVhY2giLCJuIiwia2V5IiwiY2hhbmdlIiwid2l0aG91dE5vcm1hbGl6YXRpb24iLCJpbnNlcnRUZXh0QnlLZXkiLCJhbnkiLCJGdW5jdGlvbiIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvbWVkaWEvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1lZGlhUGx1Z2luIGZyb20gJy4uLyc7XG5cbmRlc2NyaWJlKCdtZWRpYSBwbHVnaW4nLCAoKSA9PiB7XG4gIGNvbnN0IGltYWdlUGx1Z2luID0gTWVkaWFQbHVnaW4oJ3ZpZGVvJyk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZU5vZGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleGl0IHRoZSBmdW5jdGlvbiBpZiB0aGUgbm9kZSBpcyBub3Qgb2YgdHlwZSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gaW1hZ2VQbHVnaW4ubm9ybWFsaXplTm9kZSh7IG9iamVjdDogJ2ltYWdlJyB9KTtcblxuICAgICAgZXhwZWN0KHJldHVyblZhbHVlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4aXQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgbmVlZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3Q6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiAnQmVmb3JlIE1lZGlhJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd2aWRlbycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3Q6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiAnQWZ0ZXIgTWVkaWEnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gaW1hZ2VQbHVnaW4ubm9ybWFsaXplTm9kZSh7XG4gICAgICAgIG9iamVjdDogJ2RvY3VtZW50JyxcbiAgICAgICAgZmluZERlc2NlbmRhbnQ6IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgbm9kZXMuZm9yRWFjaCgobikgPT4gY2FsbGJhY2sobikpO1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJldHVyblZhbHVlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZ1bmN0aW9uIGlmIHRoZXJlIGlzIGEgbm9kZSB3aXRoIGFuIGVtcHR5IHRleHQgYmVmb3JlIGEgbWVkaWEgZWxlbWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb2JqZWN0OiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAga2V5OiAnMScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgIGtleTogJzInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb2JqZWN0OiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogJ0FmdGVyIE1lZGlhJyxcbiAgICAgICAgICBrZXk6ICczJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBmaW5kRGVzY2VuZGFudCA9IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG4pID0+IGNhbGxiYWNrKG4pKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hhbmdlID0ge1xuICAgICAgICB3aXRob3V0Tm9ybWFsaXphdGlvbjogamVzdC5mbigoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgaW5zZXJ0VGV4dEJ5S2V5OiBqZXN0LmZuKCksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBpbWFnZVBsdWdpbi5ub3JtYWxpemVOb2RlKHtcbiAgICAgICAgb2JqZWN0OiAnZG9jdW1lbnQnLFxuICAgICAgICBmaW5kRGVzY2VuZGFudCxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmV0dXJuVmFsdWUpLnRvRXF1YWwoZXhwZWN0LmFueShGdW5jdGlvbikpO1xuXG4gICAgICByZXR1cm5WYWx1ZShjaGFuZ2UpO1xuXG4gICAgICBleHBlY3QoY2hhbmdlLndpdGhvdXROb3JtYWxpemF0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEZ1bmN0aW9uKSk7XG4gICAgICBleHBlY3QoY2hhbmdlLmluc2VydFRleHRCeUtleSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAwLCAnICcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxDQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFNO0VBQzdCLElBQU1DLFdBQVcsR0FBRyxJQUFBQyxZQUFXLEVBQUMsT0FBTyxDQUFDO0VBRXhDRixRQUFRLENBQUMsZUFBZSxFQUFFLFlBQU07SUFDOUJHLEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxZQUFNO01BQ3ZFLElBQU1DLFdBQVcsR0FBR0gsV0FBVyxDQUFDSSxhQUFhLENBQUM7UUFBRUMsTUFBTSxFQUFFO01B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
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _choice = _interopRequireDefault(require("../choice"));
|
|
7
|
+
// Mock @dnd-kit hooks to avoid DndContext requirement
|
|
8
|
+
jest.mock('@dnd-kit/core', function () {
|
|
9
|
+
return {
|
|
10
|
+
useDraggable: jest.fn(function () {
|
|
11
|
+
return {
|
|
12
|
+
attributes: {},
|
|
13
|
+
listeners: {},
|
|
14
|
+
setNodeRef: jest.fn(),
|
|
15
|
+
isDragging: false
|
|
16
|
+
};
|
|
17
|
+
}),
|
|
18
|
+
useDroppable: jest.fn(function () {
|
|
19
|
+
return {
|
|
20
|
+
setNodeRef: jest.fn(),
|
|
21
|
+
isOver: false,
|
|
22
|
+
active: null
|
|
23
|
+
};
|
|
24
|
+
})
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
jest.mock('@pie-lib/math-rendering', function () {
|
|
28
|
+
return {
|
|
29
|
+
renderMath: jest.fn()
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Collect the CSS rules emotion/MUI injected into the document (jsdom uses insertRule).
|
|
34
|
+
var collectEmotionRules = function collectEmotionRules() {
|
|
35
|
+
var rules = [];
|
|
36
|
+
for (var _i = 0, _Array$from = Array.from(document.styleSheets); _i < _Array$from.length; _i++) {
|
|
37
|
+
var sheet = _Array$from[_i];
|
|
38
|
+
try {
|
|
39
|
+
for (var _i2 = 0, _Array$from2 = Array.from(sheet.cssRules); _i2 < _Array$from2.length; _i2++) {
|
|
40
|
+
var rule = _Array$from2[_i2];
|
|
41
|
+
rules.push(rule.cssText);
|
|
42
|
+
}
|
|
43
|
+
} catch (e) {
|
|
44
|
+
/* inaccessible stylesheet */
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return rules;
|
|
48
|
+
};
|
|
49
|
+
describe('drag-in-the-blank choice', function () {
|
|
50
|
+
var defaultProps = {
|
|
51
|
+
value: {
|
|
52
|
+
id: '1',
|
|
53
|
+
value: '<math>1/2</math>'
|
|
54
|
+
},
|
|
55
|
+
disabled: false,
|
|
56
|
+
instanceId: 'test-instance',
|
|
57
|
+
n: {
|
|
58
|
+
key: 'key-0'
|
|
59
|
+
},
|
|
60
|
+
nodeProps: {},
|
|
61
|
+
opts: {
|
|
62
|
+
options: {
|
|
63
|
+
duplicates: false
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
it('renders without crashing', function () {
|
|
68
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_choice["default"], defaultProps)),
|
|
69
|
+
container = _render.container;
|
|
70
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
71
|
+
});
|
|
72
|
+
describe('fraction math styling', function () {
|
|
73
|
+
it('enlarges numerator/denominator digits adjacent to a fraction to 120%', function () {
|
|
74
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_choice["default"], defaultProps));
|
|
75
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
76
|
+
return r.includes('mjx-mn') && r.includes('mjx-mfrac');
|
|
77
|
+
});
|
|
78
|
+
expect(rule).toBeDefined();
|
|
79
|
+
expect(rule).toMatch(/mjx-mn:has\(~\s*mjx-mfrac\)/);
|
|
80
|
+
expect(rule).toMatch(/mjx-mfrac\s*~\s*mjx-mn/);
|
|
81
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
82
|
+
});
|
|
83
|
+
it('keeps the existing mjx-frac 120% rule', function () {
|
|
84
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_choice["default"], defaultProps));
|
|
85
|
+
var rule = collectEmotionRules().find(function (r) {
|
|
86
|
+
return /(^|[^-])mjx-frac/.test(r) && !r.includes('mjx-mfrac');
|
|
87
|
+
});
|
|
88
|
+
expect(rule).toBeDefined();
|
|
89
|
+
expect(rule).toMatch(/font-size:\s*120%\s*!important/i);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfY2hvaWNlIiwiamVzdCIsIm1vY2siLCJ1c2VEcmFnZ2FibGUiLCJmbiIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwiaXNEcmFnZ2luZyIsInVzZURyb3BwYWJsZSIsImlzT3ZlciIsImFjdGl2ZSIsInJlbmRlck1hdGgiLCJjb2xsZWN0RW1vdGlvblJ1bGVzIiwicnVsZXMiLCJfaSIsIl9BcnJheSRmcm9tIiwiQXJyYXkiLCJmcm9tIiwiZG9jdW1lbnQiLCJzdHlsZVNoZWV0cyIsImxlbmd0aCIsInNoZWV0IiwiX2kyIiwiX0FycmF5JGZyb20yIiwiY3NzUnVsZXMiLCJydWxlIiwicHVzaCIsImNzc1RleHQiLCJlIiwiZGVzY3JpYmUiLCJkZWZhdWx0UHJvcHMiLCJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiLCJpbnN0YW5jZUlkIiwibiIsImtleSIsIm5vZGVQcm9wcyIsIm9wdHMiLCJvcHRpb25zIiwiZHVwbGljYXRlcyIsIml0IiwiX3JlbmRlciIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJjb250YWluZXIiLCJleHBlY3QiLCJmaXJzdENoaWxkIiwidG9CZUluVGhlRG9jdW1lbnQiLCJmaW5kIiwiciIsImluY2x1ZGVzIiwidG9CZURlZmluZWQiLCJ0b01hdGNoIiwidGVzdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3Jlc3BBcmVhL2RyYWctaW4tdGhlLWJsYW5rL19fdGVzdHNfXy9jaG9pY2UudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgRHJhZ0Ryb3BDaG9pY2UgZnJvbSAnLi4vY2hvaWNlJztcblxuLy8gTW9jayBAZG5kLWtpdCBob29rcyB0byBhdm9pZCBEbmRDb250ZXh0IHJlcXVpcmVtZW50XG5qZXN0Lm1vY2soJ0BkbmQta2l0L2NvcmUnLCAoKSA9PiAoe1xuICB1c2VEcmFnZ2FibGU6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBsaXN0ZW5lcnM6IHt9LFxuICAgIHNldE5vZGVSZWY6IGplc3QuZm4oKSxcbiAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgfSkpLFxuICB1c2VEcm9wcGFibGU6IGplc3QuZm4oKCkgPT4gKHtcbiAgICBzZXROb2RlUmVmOiBqZXN0LmZuKCksXG4gICAgaXNPdmVyOiBmYWxzZSxcbiAgICBhY3RpdmU6IG51bGwsXG4gIH0pKSxcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXJlbmRlcmluZycsICgpID0+ICh7XG4gIHJlbmRlck1hdGg6IGplc3QuZm4oKSxcbn0pKTtcblxuLy8gQ29sbGVjdCB0aGUgQ1NTIHJ1bGVzIGVtb3Rpb24vTVVJIGluamVjdGVkIGludG8gdGhlIGRvY3VtZW50IChqc2RvbSB1c2VzIGluc2VydFJ1bGUpLlxuY29uc3QgY29sbGVjdEVtb3Rpb25SdWxlcyA9ICgpID0+IHtcbiAgY29uc3QgcnVsZXMgPSBbXTtcbiAgZm9yIChjb25zdCBzaGVldCBvZiBBcnJheS5mcm9tKGRvY3VtZW50LnN0eWxlU2hlZXRzKSkge1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcykpIHtcbiAgICAgICAgcnVsZXMucHVzaChydWxlLmNzc1RleHQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIGluYWNjZXNzaWJsZSBzdHlsZXNoZWV0ICovXG4gICAgfVxuICB9XG4gIHJldHVybiBydWxlcztcbn07XG5cbmRlc2NyaWJlKCdkcmFnLWluLXRoZS1ibGFuayBjaG9pY2UnLCAoKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogeyBpZDogJzEnLCB2YWx1ZTogJzxtYXRoPjEvMjwvbWF0aD4nIH0sXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGluc3RhbmNlSWQ6ICd0ZXN0LWluc3RhbmNlJyxcbiAgICBuOiB7IGtleTogJ2tleS0wJyB9LFxuICAgIG5vZGVQcm9wczoge30sXG4gICAgb3B0czogeyBvcHRpb25zOiB7IGR1cGxpY2F0ZXM6IGZhbHNlIH0gfSxcbiAgfTtcblxuICBpdCgncmVuZGVycyB3aXRob3V0IGNyYXNoaW5nJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPERyYWdEcm9wQ2hvaWNlIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcmFjdGlvbiBtYXRoIHN0eWxpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2VubGFyZ2VzIG51bWVyYXRvci9kZW5vbWluYXRvciBkaWdpdHMgYWRqYWNlbnQgdG8gYSBmcmFjdGlvbiB0byAxMjAlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxEcmFnRHJvcENob2ljZSB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBjb25zdCBydWxlID0gY29sbGVjdEVtb3Rpb25SdWxlcygpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoJ21qeC1tbicpICYmIHIuaW5jbHVkZXMoJ21qeC1tZnJhYycpKTtcbiAgICAgIGV4cGVjdChydWxlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJ1bGUpLnRvTWF0Y2goL21qeC1tbjpoYXNcXCh+XFxzKm1qeC1tZnJhY1xcKS8pO1xuICAgICAgZXhwZWN0KHJ1bGUpLnRvTWF0Y2goL21qeC1tZnJhY1xccyp+XFxzKm1qeC1tbi8pO1xuICAgICAgZXhwZWN0KHJ1bGUpLnRvTWF0Y2goL2ZvbnQtc2l6ZTpcXHMqMTIwJVxccyohaW1wb3J0YW50L2kpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2tlZXBzIHRoZSBleGlzdGluZyBtangtZnJhYyAxMjAlIHJ1bGUnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPERyYWdEcm9wQ2hvaWNlIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICAgIGNvbnN0IHJ1bGUgPSBjb2xsZWN0RW1vdGlvblJ1bGVzKCkuZmluZCgocikgPT4gLyhefFteLV0pbWp4LWZyYWMvLnRlc3QocikgJiYgIXIuaW5jbHVkZXMoJ21qeC1tZnJhYycpKTtcbiAgICAgIGV4cGVjdChydWxlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJ1bGUpLnRvTWF0Y2goL2ZvbnQtc2l6ZTpcXHMqMTIwJVxccyohaW1wb3J0YW50L2kpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQTtBQUNBRyxJQUFJLENBQUNDLElBQUksQ0FBQyxlQUFlLEVBQUU7RUFBQSxPQUFPO0lBQ2hDQyxZQUFZLEVBQUVGLElBQUksQ0FBQ0csRUFBRSxDQUFDO01BQUEsT0FBTztRQUMzQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNkQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2JDLFVBQVUsRUFBRU4sSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztRQUNyQkksVUFBVSxFQUFFO01BQ2QsQ0FBQztJQUFBLENBQUMsQ0FBQztJQUNIQyxZQUFZLEVBQUVSLElBQUksQ0FBQ0csRUFBRSxDQUFDO01BQUEsT0FBTztRQUMzQkcsVUFBVSxFQUFFTixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCTSxNQUFNLEVBQUUsS0FBSztRQUNiQyxNQUFNLEVBQUU7TUFDVixDQUFDO0lBQUEsQ0FBQztFQUNKLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSFYsSUFBSSxDQUFDQyxJQUFJLENB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
|