@pie-element/hotspot 4.10.15 → 4.10.16-next.1
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.md +0 -51
- package/configure/CHANGELOG.md +0 -48
- package/configure/lib/__tests__/hotspot-container.test.js +281 -0
- package/configure/lib/__tests__/hotspot-drawable.test.js +241 -0
- package/configure/lib/__tests__/index.test.js +224 -0
- package/configure/lib/__tests__/root.test.js +443 -0
- package/configure/lib/__tests__/utils.test.js +335 -0
- package/configure/lib/button.js +1 -1
- package/configure/lib/defaults.js +3 -3
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-container.js +3 -3
- package/configure/lib/hotspot-drawable.js +3 -3
- package/configure/lib/hotspot-drawable.js.map +1 -1
- package/configure/lib/hotspot-palette.js +1 -1
- package/configure/lib/hotspot-polygon.js +1 -1
- package/configure/lib/hotspot-rectangle.js +1 -1
- package/configure/lib/index.js +3 -3
- package/configure/lib/root.js +50 -6
- package/configure/lib/upload-control.js +1 -1
- package/configure/lib/utils.js +4 -4
- package/configure/package.json +1 -1
- package/configure/src/__tests__/__snapshots__/root.test.js.snap +2 -2
- package/configure/src/defaults.js +2 -2
- package/configure/src/root.jsx +36 -2
- package/controller/lib/__tests__/index.test.js +921 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +40 -4
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +1 -1
- package/controller/src/index.js +26 -0
- package/docs/demo/pie.manifest.json +11 -0
- package/docs/pie-schema.json +6 -0
- package/docs/pie-schema.json.md +4 -0
- package/lib/__tests__/container-test.js +185 -0
- package/lib/__tests__/image-test.js +63 -0
- package/lib/__tests__/polygon-test.js +99 -0
- package/lib/__tests__/rectangle-test.js +92 -0
- package/lib/__tests__/session-updater-test.js +78 -0
- package/lib/hotspot/container.js +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/image.js +1 -1
- package/lib/hotspot/index.js +1 -1
- package/lib/hotspot/polygon.js +1 -1
- package/lib/hotspot/rectangle.js +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/session-updater.js +1 -1
- package/package.json +2 -2
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
|
|
7
|
+
var _enzyme = require("enzyme");
|
|
8
|
+
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
|
|
11
|
+
var _root = require("../root");
|
|
12
|
+
|
|
13
|
+
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
14
|
+
|
|
15
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
16
|
+
|
|
17
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
18
|
+
|
|
19
|
+
jest.mock('@pie-lib/config-ui', function () {
|
|
20
|
+
return {
|
|
21
|
+
choiceUtils: {
|
|
22
|
+
firstAvailableIndex: jest.fn()
|
|
23
|
+
},
|
|
24
|
+
settings: {
|
|
25
|
+
Panel: function Panel(props) {
|
|
26
|
+
return /*#__PURE__*/_react["default"].createElement("div", props);
|
|
27
|
+
},
|
|
28
|
+
toggle: jest.fn(),
|
|
29
|
+
radio: jest.fn()
|
|
30
|
+
},
|
|
31
|
+
layout: {
|
|
32
|
+
ConfigLayout: function ConfigLayout(_ref) {
|
|
33
|
+
var children = _ref.children;
|
|
34
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, children);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
var model = function model() {
|
|
41
|
+
return {
|
|
42
|
+
prompt: 'This is the question prompt',
|
|
43
|
+
imageUrl: 'https://cdn.fluence.net/image/0240eb1455ce4c4bb6180232347b6aef_W',
|
|
44
|
+
shapes: {
|
|
45
|
+
rectangles: [{
|
|
46
|
+
id: '0',
|
|
47
|
+
height: 140,
|
|
48
|
+
width: 130,
|
|
49
|
+
x: 1,
|
|
50
|
+
y: 1,
|
|
51
|
+
correct: true
|
|
52
|
+
}, {
|
|
53
|
+
id: '1',
|
|
54
|
+
height: 140,
|
|
55
|
+
width: 130,
|
|
56
|
+
x: 140,
|
|
57
|
+
y: 1
|
|
58
|
+
}, {
|
|
59
|
+
id: '2',
|
|
60
|
+
height: 140,
|
|
61
|
+
width: 130,
|
|
62
|
+
x: 280,
|
|
63
|
+
y: 1
|
|
64
|
+
}],
|
|
65
|
+
polygons: [{
|
|
66
|
+
points: [{
|
|
67
|
+
x: 1,
|
|
68
|
+
y: 148
|
|
69
|
+
}, {
|
|
70
|
+
x: 1,
|
|
71
|
+
y: 288
|
|
72
|
+
}, {
|
|
73
|
+
y: 288,
|
|
74
|
+
x: 129
|
|
75
|
+
}, {
|
|
76
|
+
y: 148,
|
|
77
|
+
x: 129
|
|
78
|
+
}],
|
|
79
|
+
correct: true,
|
|
80
|
+
id: '3'
|
|
81
|
+
}, {
|
|
82
|
+
id: '4',
|
|
83
|
+
points: [{
|
|
84
|
+
y: 151,
|
|
85
|
+
x: 141
|
|
86
|
+
}, {
|
|
87
|
+
y: 289,
|
|
88
|
+
x: 141
|
|
89
|
+
}, {
|
|
90
|
+
y: 289,
|
|
91
|
+
x: 269
|
|
92
|
+
}, {
|
|
93
|
+
x: 269,
|
|
94
|
+
y: 151
|
|
95
|
+
}],
|
|
96
|
+
correct: false
|
|
97
|
+
}, {
|
|
98
|
+
points: [{
|
|
99
|
+
x: 279,
|
|
100
|
+
y: 149.99999999999997
|
|
101
|
+
}, {
|
|
102
|
+
x: 279,
|
|
103
|
+
y: 289
|
|
104
|
+
}, {
|
|
105
|
+
x: 407,
|
|
106
|
+
y: 289
|
|
107
|
+
}, {
|
|
108
|
+
x: 407,
|
|
109
|
+
y: 149.99999999999997
|
|
110
|
+
}],
|
|
111
|
+
correct: false,
|
|
112
|
+
id: '5'
|
|
113
|
+
}]
|
|
114
|
+
},
|
|
115
|
+
dimensions: {
|
|
116
|
+
height: 300,
|
|
117
|
+
width: 400
|
|
118
|
+
},
|
|
119
|
+
hotspotColor: 'rgba(137, 183, 244, 0.65)',
|
|
120
|
+
hotspotList: ['rgba(137, 183, 244, 0.65)', 'rgba(217, 30, 24, 0.65)', 'rgba(254, 241, 96, 0.65)'],
|
|
121
|
+
outlineColor: 'blue',
|
|
122
|
+
outlineList: ['blue', 'red', 'yellow'],
|
|
123
|
+
configure: {},
|
|
124
|
+
multipleCorrect: true,
|
|
125
|
+
partialScoring: false
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
describe('Root', function () {
|
|
130
|
+
var initialModel = model();
|
|
131
|
+
describe('render', function () {
|
|
132
|
+
it('renders', function () {
|
|
133
|
+
var props = {
|
|
134
|
+
classes: {},
|
|
135
|
+
configuration: _defaults["default"].configuration,
|
|
136
|
+
model: initialModel
|
|
137
|
+
};
|
|
138
|
+
expect((0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_root.Root, props))).toMatchSnapshot();
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('logic', function () {
|
|
142
|
+
var w,
|
|
143
|
+
onColorChanged = jest.fn();
|
|
144
|
+
beforeEach(function () {
|
|
145
|
+
w = function w(config, onUpdateImageDimension, onUpdateShapes) {
|
|
146
|
+
var props = {
|
|
147
|
+
classes: {},
|
|
148
|
+
configuration: config || _defaults["default"].configuration,
|
|
149
|
+
model: _objectSpread(_objectSpread({}, initialModel), {}, {
|
|
150
|
+
dimensions: {
|
|
151
|
+
width: 200,
|
|
152
|
+
height: 300
|
|
153
|
+
},
|
|
154
|
+
shapes: {
|
|
155
|
+
rectangles: [{
|
|
156
|
+
x: 10,
|
|
157
|
+
y: 10,
|
|
158
|
+
height: 100,
|
|
159
|
+
width: 100
|
|
160
|
+
}],
|
|
161
|
+
polygons: [{
|
|
162
|
+
points: [{
|
|
163
|
+
x: 0,
|
|
164
|
+
y: 200
|
|
165
|
+
}, {
|
|
166
|
+
x: 200,
|
|
167
|
+
y: 200
|
|
168
|
+
}, {
|
|
169
|
+
x: 100,
|
|
170
|
+
y: 300
|
|
171
|
+
}]
|
|
172
|
+
}]
|
|
173
|
+
}
|
|
174
|
+
}),
|
|
175
|
+
onColorChanged: onColorChanged,
|
|
176
|
+
onUpdateImageDimension: onUpdateImageDimension,
|
|
177
|
+
onUpdateShapes: onUpdateShapes
|
|
178
|
+
};
|
|
179
|
+
return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_root.Root, props));
|
|
180
|
+
};
|
|
181
|
+
});
|
|
182
|
+
describe('handleColorChange', function () {
|
|
183
|
+
it('calls onColorChanged', function () {
|
|
184
|
+
var wrapper = w();
|
|
185
|
+
wrapper.instance().handleColorChange('type', 'color');
|
|
186
|
+
expect(onColorChanged).toHaveBeenLastCalledWith('typeColor', 'color');
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('KEEP IMAGE ASPECT RATIO: handleOnUpdateImageDimensions: calls onUpdateImageDimension & onUpdateShapes', function () {
|
|
190
|
+
var wrapper;
|
|
191
|
+
var onUpdateImageDimension = jest.fn();
|
|
192
|
+
var onUpdateShapes = jest.fn();
|
|
193
|
+
beforeEach(function () {
|
|
194
|
+
wrapper = w(undefined, onUpdateImageDimension, onUpdateShapes);
|
|
195
|
+
});
|
|
196
|
+
it('increase width with 100%:', function () {
|
|
197
|
+
wrapper.instance().handleOnUpdateImageDimensions(400, 'width');
|
|
198
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
199
|
+
width: 400,
|
|
200
|
+
height: 600
|
|
201
|
+
});
|
|
202
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
203
|
+
rectangles: [{
|
|
204
|
+
x: 20,
|
|
205
|
+
y: 20,
|
|
206
|
+
height: 200,
|
|
207
|
+
width: 200,
|
|
208
|
+
index: 0
|
|
209
|
+
}],
|
|
210
|
+
polygons: [{
|
|
211
|
+
points: [{
|
|
212
|
+
x: 0,
|
|
213
|
+
y: 400
|
|
214
|
+
}, {
|
|
215
|
+
x: 400,
|
|
216
|
+
y: 400
|
|
217
|
+
}, {
|
|
218
|
+
x: 200,
|
|
219
|
+
y: 600
|
|
220
|
+
}],
|
|
221
|
+
index: 1
|
|
222
|
+
}]
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
it('decrease width with 50%', function () {
|
|
226
|
+
wrapper.instance().handleOnUpdateImageDimensions(100, 'width');
|
|
227
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
228
|
+
width: 100,
|
|
229
|
+
height: 150
|
|
230
|
+
});
|
|
231
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
232
|
+
rectangles: [{
|
|
233
|
+
x: 5,
|
|
234
|
+
y: 5,
|
|
235
|
+
height: 50,
|
|
236
|
+
width: 50,
|
|
237
|
+
index: 0
|
|
238
|
+
}],
|
|
239
|
+
polygons: [{
|
|
240
|
+
points: [{
|
|
241
|
+
x: 0,
|
|
242
|
+
y: 100
|
|
243
|
+
}, {
|
|
244
|
+
x: 100,
|
|
245
|
+
y: 100
|
|
246
|
+
}, {
|
|
247
|
+
x: 50,
|
|
248
|
+
y: 150
|
|
249
|
+
}],
|
|
250
|
+
index: 1
|
|
251
|
+
}]
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
it('increase height with 50%:', function () {
|
|
255
|
+
wrapper.instance().handleOnUpdateImageDimensions(450, 'height');
|
|
256
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
257
|
+
width: 300,
|
|
258
|
+
height: 450
|
|
259
|
+
});
|
|
260
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
261
|
+
rectangles: [{
|
|
262
|
+
x: 15,
|
|
263
|
+
y: 15,
|
|
264
|
+
height: 150,
|
|
265
|
+
width: 150,
|
|
266
|
+
index: 0
|
|
267
|
+
}],
|
|
268
|
+
polygons: [{
|
|
269
|
+
points: [{
|
|
270
|
+
x: 0,
|
|
271
|
+
y: 300
|
|
272
|
+
}, {
|
|
273
|
+
x: 300,
|
|
274
|
+
y: 300
|
|
275
|
+
}, {
|
|
276
|
+
x: 150,
|
|
277
|
+
y: 450
|
|
278
|
+
}],
|
|
279
|
+
index: 1
|
|
280
|
+
}]
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
it('decrease height with 10%', function () {
|
|
284
|
+
wrapper.instance().handleOnUpdateImageDimensions(270, 'height');
|
|
285
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
286
|
+
width: 180,
|
|
287
|
+
height: 270
|
|
288
|
+
});
|
|
289
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
290
|
+
rectangles: [{
|
|
291
|
+
x: 9,
|
|
292
|
+
y: 9,
|
|
293
|
+
height: 90,
|
|
294
|
+
width: 90,
|
|
295
|
+
index: 0
|
|
296
|
+
}],
|
|
297
|
+
polygons: [{
|
|
298
|
+
points: [{
|
|
299
|
+
x: 0,
|
|
300
|
+
y: 180
|
|
301
|
+
}, {
|
|
302
|
+
x: 180,
|
|
303
|
+
y: 180
|
|
304
|
+
}, {
|
|
305
|
+
x: 90,
|
|
306
|
+
y: 270
|
|
307
|
+
}],
|
|
308
|
+
index: 1
|
|
309
|
+
}]
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
describe('DO NOT KEEP IMAGE ASPECT RATIO: handleOnUpdateImageDimensions: calls onUpdateImageDimension & onUpdateShapes', function () {
|
|
314
|
+
var wrapper;
|
|
315
|
+
var onUpdateImageDimension = jest.fn();
|
|
316
|
+
var onUpdateShapes = jest.fn();
|
|
317
|
+
beforeEach(function () {
|
|
318
|
+
wrapper = w(_objectSpread(_objectSpread({}, _defaults["default"].configuration), {}, {
|
|
319
|
+
preserveAspectRatio: {
|
|
320
|
+
enabled: false
|
|
321
|
+
}
|
|
322
|
+
}), onUpdateImageDimension, onUpdateShapes);
|
|
323
|
+
});
|
|
324
|
+
it('increase width with 100%:', function () {
|
|
325
|
+
wrapper.instance().handleOnUpdateImageDimensions(400, 'width');
|
|
326
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
327
|
+
width: 400,
|
|
328
|
+
height: 300
|
|
329
|
+
});
|
|
330
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
331
|
+
rectangles: [{
|
|
332
|
+
x: 20,
|
|
333
|
+
y: 10,
|
|
334
|
+
height: 100,
|
|
335
|
+
width: 200,
|
|
336
|
+
index: 0
|
|
337
|
+
}],
|
|
338
|
+
polygons: [{
|
|
339
|
+
points: [{
|
|
340
|
+
x: 0,
|
|
341
|
+
y: 200
|
|
342
|
+
}, {
|
|
343
|
+
x: 400,
|
|
344
|
+
y: 200
|
|
345
|
+
}, {
|
|
346
|
+
x: 200,
|
|
347
|
+
y: 300
|
|
348
|
+
}],
|
|
349
|
+
index: 1
|
|
350
|
+
}]
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
it('decrease width with 50%', function () {
|
|
354
|
+
wrapper.instance().handleOnUpdateImageDimensions(100, 'width');
|
|
355
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
356
|
+
width: 100,
|
|
357
|
+
height: 300
|
|
358
|
+
});
|
|
359
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
360
|
+
rectangles: [{
|
|
361
|
+
x: 5,
|
|
362
|
+
y: 10,
|
|
363
|
+
height: 100,
|
|
364
|
+
width: 50,
|
|
365
|
+
index: 0
|
|
366
|
+
}],
|
|
367
|
+
polygons: [{
|
|
368
|
+
points: [{
|
|
369
|
+
x: 0,
|
|
370
|
+
y: 200
|
|
371
|
+
}, {
|
|
372
|
+
x: 100,
|
|
373
|
+
y: 200
|
|
374
|
+
}, {
|
|
375
|
+
x: 50,
|
|
376
|
+
y: 300
|
|
377
|
+
}],
|
|
378
|
+
index: 1
|
|
379
|
+
}]
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
it('increase height with 50%:', function () {
|
|
383
|
+
wrapper.instance().handleOnUpdateImageDimensions(450, 'height');
|
|
384
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
385
|
+
width: 200,
|
|
386
|
+
height: 450
|
|
387
|
+
});
|
|
388
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
389
|
+
rectangles: [{
|
|
390
|
+
x: 10,
|
|
391
|
+
y: 15,
|
|
392
|
+
height: 150,
|
|
393
|
+
width: 100,
|
|
394
|
+
index: 0
|
|
395
|
+
}],
|
|
396
|
+
polygons: [{
|
|
397
|
+
index: 1,
|
|
398
|
+
points: [{
|
|
399
|
+
x: 0,
|
|
400
|
+
y: 300
|
|
401
|
+
}, {
|
|
402
|
+
x: 200,
|
|
403
|
+
y: 300
|
|
404
|
+
}, {
|
|
405
|
+
x: 100,
|
|
406
|
+
y: 450
|
|
407
|
+
}]
|
|
408
|
+
}]
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
it('decrease height with 10%', function () {
|
|
412
|
+
wrapper.instance().handleOnUpdateImageDimensions(270, 'height');
|
|
413
|
+
expect(onUpdateImageDimension).toBeCalledWith({
|
|
414
|
+
width: 200,
|
|
415
|
+
height: 270
|
|
416
|
+
});
|
|
417
|
+
expect(onUpdateShapes).toBeCalledWith({
|
|
418
|
+
rectangles: [{
|
|
419
|
+
x: 10,
|
|
420
|
+
y: 9,
|
|
421
|
+
height: 90,
|
|
422
|
+
width: 100,
|
|
423
|
+
index: 0
|
|
424
|
+
}],
|
|
425
|
+
polygons: [{
|
|
426
|
+
points: [{
|
|
427
|
+
x: 0,
|
|
428
|
+
y: 180
|
|
429
|
+
}, {
|
|
430
|
+
x: 200,
|
|
431
|
+
y: 180
|
|
432
|
+
}, {
|
|
433
|
+
x: 100,
|
|
434
|
+
y: 270
|
|
435
|
+
}],
|
|
436
|
+
index: 1
|
|
437
|
+
}]
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
});
|
|
443
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcm9vdC50ZXN0LmpzIl0sIm5hbWVzIjpbImplc3QiLCJtb2NrIiwiY2hvaWNlVXRpbHMiLCJmaXJzdEF2YWlsYWJsZUluZGV4IiwiZm4iLCJzZXR0aW5ncyIsIlBhbmVsIiwicHJvcHMiLCJ0b2dnbGUiLCJyYWRpbyIsImxheW91dCIsIkNvbmZpZ0xheW91dCIsImNoaWxkcmVuIiwibW9kZWwiLCJwcm9tcHQiLCJpbWFnZVVybCIsInNoYXBlcyIsInJlY3RhbmdsZXMiLCJpZCIsImhlaWdodCIsIndpZHRoIiwieCIsInkiLCJjb3JyZWN0IiwicG9seWdvbnMiLCJwb2ludHMiLCJkaW1lbnNpb25zIiwiaG90c3BvdENvbG9yIiwiaG90c3BvdExpc3QiLCJvdXRsaW5lQ29sb3IiLCJvdXRsaW5lTGlzdCIsImNvbmZpZ3VyZSIsIm11bHRpcGxlQ29ycmVjdCIsInBhcnRpYWxTY29yaW5nIiwiZGVzY3JpYmUiLCJpbml0aWFsTW9kZWwiLCJpdCIsImNsYXNzZXMiLCJjb25maWd1cmF0aW9uIiwiZGVmYXVsdFZhbHVlcyIsImV4cGVjdCIsInRvTWF0Y2hTbmFwc2hvdCIsInciLCJvbkNvbG9yQ2hhbmdlZCIsImJlZm9yZUVhY2giLCJjb25maWciLCJvblVwZGF0ZUltYWdlRGltZW5zaW9uIiwib25VcGRhdGVTaGFwZXMiLCJ3cmFwcGVyIiwiaW5zdGFuY2UiLCJoYW5kbGVDb2xvckNoYW5nZSIsInRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aCIsInVuZGVmaW5lZCIsImhhbmRsZU9uVXBkYXRlSW1hZ2VEaW1lbnNpb25zIiwidG9CZUNhbGxlZFdpdGgiLCJpbmRleCIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJlbmFibGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVLG9CQUFWLEVBQWdDO0FBQUEsU0FBTztBQUNyQ0MsSUFBQUEsV0FBVyxF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O0FBQWIsYUFBbkIsRUFBdUM7QUFBRUQsY0FBQUEsQ0FBQyxFQUFFLEdBQUw7QUFBVUMsY0FBQUEsQ0FBQyxFQUFFO0FBQWIsYUFBdkMsQ0FEQztBQUVUaUMsWUFBQUEsS0FBSyxFQUFFO0FBRkUsV0FBRDtBQUZ3QixTQUF0QztBQVFELE9BZkMsQ0FBRjtBQWdCRCxLQTlFTyxDQUFSO0FBK0VELEdBekxPLENBQVI7QUEwTEQsQ0F6TU8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJvb3QgfSBmcm9tICcuLi9yb290JztcbmltcG9ydCBkZWZhdWx0VmFsdWVzIGZyb20gJy4uL2RlZmF1bHRzJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKVxuICB9LFxuICBzZXR0aW5nczoge1xuICAgIFBhbmVsOiBwcm9wcyA9PiA8ZGl2IHsuLi5wcm9wc30gLz4sXG4gICAgdG9nZ2xlOiBqZXN0LmZuKCksXG4gICAgcmFkaW86IGplc3QuZm4oKVxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXY+e2NoaWxkcmVufTwvZGl2PlxuICB9XG59KSk7XG5cbmNvbnN0IG1vZGVsID0gKCkgPT4gKHtcbiAgcHJvbXB0OiAnVGhpcyBpcyB0aGUgcXVlc3Rpb24gcHJvbXB0JyxcbiAgaW1hZ2VVcmw6ICdodHRwczovL2Nkbi5mbHVlbmNlLm5ldC9pbWFnZS8wMjQwZWIxNDU1Y2U0YzRiYjYxODAyMzIzNDdiNmFlZl9XJyxcbiAgc2hhcGVzOiB7XG4gICAgcmVjdGFuZ2xlczogW1xuICAgICAge1xuICAgICAgICBpZDogJzAnLFxuICAgICAgICBoZWlnaHQ6IDE0MCxcbiAgICAgICAgd2lkdGg6IDEzMCxcbiAgICAgICAgeDogMSxcbiAgICAgICAgeTogMSxcbiAgICAgICAgY29ycmVjdDogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBpZDogJzEnLFxuICAgICAgICBoZWlnaHQ6IDE0MCxcbiAgICAgICAgd2lkdGg6IDEzMCxcbiAgICAgICAgeDogMTQwLFxuICAgICAgICB5OiAxXG4gICAgICB9LCB7XG4gICAgICAgIGlkOiAnMicsXG4gICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICB3aWR0aDogMTMwLFxuICAgICAgICB4OiAyODAsXG4gICAgICAgIHk6IDFcbiAgICAgIH1cbiAgICBdLFxuICAgIHBvbHlnb25zOiBbXG4gICAgICB7XG4gICAgICAgIHBvaW50czogW3sgeDogMSwgeTogMTQ4IH0sIHsgeDogMSwgeTogMjg4IH0sIHsgeTogMjg4LCB4OiAxMjkgfSwgeyB5OiAxNDgsIHg6IDEyOSB9XSxcbiAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgaWQ6ICczJ1xuICAgICAgfSwge1xuICAgICAgICBpZDogJzQnLFxuICAgICAgICBwb2ludHM6IFt7IHk6IDE1MSwgeDogMTQxIH0sIHsgeTogMjg5LCB4OiAxNDEgfSwgeyB5OiAyODksIHg6IDI2OSB9LCB7IHg6IDI2OSwgeTogMTUxIH1dLFxuICAgICAgICBjb3JyZWN0OiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBwb2ludHM6IFt7IHg6IDI3OSwgeTogMTQ5Ljk5OTk5OTk5OTk5OTk3IH0sIHsgeDogMjc5LCB5OiAyODkgfSwgeyB4OiA0MDcsIHk6IDI4OSB9LCB7XG4gICAgICAgICAgeDogNDA3LFxuICAgICAgICAgIHk6IDE0OS45OTk5OTk5OTk5OTk5N1xuICAgICAgICB9XSwgY29ycmVjdDogZmFsc2UsIGlkOiAnNSdcbiAgICAgIH1dXG4gIH0sXG4gIGRpbWVuc2lvbnM6IHsgaGVpZ2h0OiAzMDAsIHdpZHRoOiA0MDAgfSxcbiAgaG90c3BvdENvbG9yOiAncmdiYSgxMzcsIDE4MywgMjQ0LCAwLjY1KScsXG4gIGhvdHNwb3RMaXN0OiBbXG4gICAgJ3JnYmEoMTM3LCAxODMsIDI0NCwgMC42NSknLFxuICAgICdyZ2JhKDIxNywgMzAsIDI0LCAwLjY1KScsXG4gICAgJ3JnYmEoMjU0LCAyNDEsIDk2LCAwLjY1KSdcbiAgXSxcbiAgb3V0bGluZUNvbG9yOiAnYmx1ZScsXG4gIG91dGxpbmVMaXN0OiBbJ2JsdWUnLCAncmVkJywgJ3llbGxvdyddLFxuICBjb25maWd1cmU6IHt9LFxuICBtdWx0aXBsZUNvcnJlY3Q6IHRydWUsXG4gIHBhcnRpYWxTY29yaW5nOiBmYWxzZSxcbn0pO1xuXG5kZXNjcmliZSgnUm9vdCcsICgpID0+IHtcbiAgbGV0IGluaXRpYWxNb2RlbCA9IG1vZGVsKCk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcicsICgpID0+IHtcbiAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogZGVmYXVsdFZhbHVlcy5jb25maWd1cmF0aW9uLFxuICAgICAgICBtb2RlbDogaW5pdGlhbE1vZGVsLFxuICAgICAgfTtcblxuICAgICAgZXhwZWN0KHNoYWxsb3coPFJvb3Qgey4uLnByb3BzfSAvPikpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pXG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBsZXQgdywgb25Db2xvckNoYW5nZWQgPSBqZXN0LmZuKCk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHcgPSAoY29uZmlnLCBvblVwZGF0ZUltYWdlRGltZW5zaW9uLCBvblVwZGF0ZVNoYXBlcykgPT4ge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICBjbGFzc2VzOiB7fSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWcgfHwgZGVmYXVsdFZhbHVlcy5jb25maWd1cmF0aW9uLFxuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsTW9kZWwsXG4gICAgICAgICAgICBkaW1lbnNpb25zOiB7IHdpZHRoOiAyMDAsIGhlaWdodDogMzAwIH0sXG4gICAgICAgICAgICBzaGFwZXM6IHtcbiAgICAgICAgICAgICAgcmVjdGFuZ2xlczogW3sgeDogMTAsIHk6IDEwLCBoZWlnaHQ6IDEwMCwgd2lkdGg6IDEwMCB9XSxcbiAgICAgICAgICAgICAgcG9seWdvbnM6IFt7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiBbeyB4OiAwLCB5OiAyMDAgfSwgeyB4OiAyMDAsIHk6IDIwMCB9LCB7IHg6IDEwMCwgeTogMzAwIH1dXG4gICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbG9yQ2hhbmdlZCxcbiAgICAgICAgICBvblVwZGF0ZUltYWdlRGltZW5zaW9uLFxuICAgICAgICAgIG9uVXBkYXRlU2hhcGVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzaGFsbG93KDxSb290IHsuLi5wcm9wc30gLz4pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2hhbmRsZUNvbG9yQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIG9uQ29sb3JDaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgICBsZXQgd3JhcHBlciA9IHcoKTtcbiAgICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZUNvbG9yQ2hhbmdlKCd0eXBlJywgJ2NvbG9yJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ29sb3JDaGFuZ2VkKS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgoJ3R5cGVDb2xvcicsICdjb2xvcicpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnS0VFUCBJTUFHRSBBU1BFQ1QgUkFUSU86IGhhbmRsZU9uVXBkYXRlSW1hZ2VEaW1lbnNpb25zOiBjYWxscyBvblVwZGF0ZUltYWdlRGltZW5zaW9uICYgb25VcGRhdGVTaGFwZXMnLCAoKSA9PiB7XG4gICAgICBsZXQgd3JhcHBlcjtcbiAgICAgIGxldCBvblVwZGF0ZUltYWdlRGltZW5zaW9uID0gamVzdC5mbigpO1xuICAgICAgbGV0IG9uVXBkYXRlU2hhcGVzID0gamVzdC5mbigpO1xuXG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgd3JhcHBlciA9IHcodW5kZWZpbmVkLCBvblVwZGF0ZUltYWdlRGltZW5zaW9uLCBvblVwZGF0ZVNoYXBlcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2luY3JlYXNlIHdpZHRoIHdpdGggMTAwJTonLCAoKSA9PiB7XG4gICAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVPblVwZGF0ZUltYWdlRGltZW5zaW9ucyg0MDAsICd3aWR0aCcpO1xuXG4gICAgICAgIGV4cGVjdChvblVwZGF0ZUltYWdlRGltZW5zaW9uKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICBoZWlnaHQ6IDYwMFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgcmVjdGFuZ2xlczogW3sgeDogMjAsIHk6IDIwLCBoZWlnaHQ6IDIwMCwgd2lkdGg6IDIwMCwgaW5kZXg6IDAgfV0sXG4gICAgICAgICAgcG9seWdvbnM6IFt7XG4gICAgICAgICAgICBwb2ludHM6IFt7IHg6IDAsIHk6IDQwMCB9LCB7IHg6IDQwMCwgeTogNDAwIH0sIHsgeDogMjAwLCB5OiA2MDAgfV0sIGluZGV4OiAxXG4gICAgICAgICAgfV1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RlY3JlYXNlIHdpZHRoIHdpdGggNTAlJywgKCkgPT4ge1xuICAgICAgICB3cmFwcGVyLmluc3RhbmNlKCkuaGFuZGxlT25VcGRhdGVJbWFnZURpbWVuc2lvbnMoMTAwLCAnd2lkdGgnKTtcblxuICAgICAgICBleHBlY3Qob25VcGRhdGVJbWFnZURpbWVuc2lvbikudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgICAgaGVpZ2h0OiAxNTBcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChvblVwZGF0ZVNoYXBlcykudG9CZUNhbGxlZFdpdGgoe1xuICAgICAgICAgIHJlY3RhbmdsZXM6IFt7IHg6IDUsIHk6IDUsIGhlaWdodDogNTAsIHdpZHRoOiA1MCwgaW5kZXg6IDAgfV0sXG4gICAgICAgICAgcG9seWdvbnM6IFt7XG4gICAgICAgICAgICBwb2ludHM6IFt7IHg6IDAsIHk6IDEwMCB9LCB7IHg6IDEwMCwgeTogMTAwIH0sIHsgeDogNTAsIHk6IDE1MCB9XSwgaW5kZXg6IDFcbiAgICAgICAgICB9XVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaW5jcmVhc2UgaGVpZ2h0IHdpdGggNTAlOicsICgpID0+IHtcbiAgICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU9uVXBkYXRlSW1hZ2VEaW1lbnNpb25zKDQ1MCwgJ2hlaWdodCcpO1xuXG4gICAgICAgIGV4cGVjdChvblVwZGF0ZUltYWdlRGltZW5zaW9uKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICBoZWlnaHQ6IDQ1MFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgcmVjdGFuZ2xlczogW3sgeDogMTUsIHk6IDE1LCBoZWlnaHQ6IDE1MCwgd2lkdGg6IDE1MCwgaW5kZXg6IDAgfV0sXG4gICAgICAgICAgcG9seWdvbnM6IFt7XG4gICAgICAgICAgICBwb2ludHM6IFt7IHg6IDAsIHk6IDMwMCB9LCB7IHg6IDMwMCwgeTogMzAwIH0sIHsgeDogMTUwLCB5OiA0NTAgfV0sIGluZGV4OiAxXG4gICAgICAgICAgfV1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RlY3JlYXNlIGhlaWdodCB3aXRoIDEwJScsICgpID0+IHtcbiAgICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU9uVXBkYXRlSW1hZ2VEaW1lbnNpb25zKDI3MCwgJ2hlaWdodCcpO1xuXG4gICAgICAgIGV4cGVjdChvblVwZGF0ZUltYWdlRGltZW5zaW9uKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgd2lkdGg6IDE4MCxcbiAgICAgICAgICBoZWlnaHQ6IDI3MFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgcmVjdGFuZ2xlczogW3sgeDogOSwgeTogOSwgaGVpZ2h0OiA5MCwgd2lkdGg6IDkwLCBpbmRleDogMCB9XSxcbiAgICAgICAgICBwb2x5Z29uczogW3tcbiAgICAgICAgICAgIHBvaW50czogW3sgeDogMCwgeTogMTgwIH0sIHsgeDogMTgwLCB5OiAxODAgfSwgeyB4OiA5MCwgeTogMjcwIH1dLCBpbmRleDogMVxuICAgICAgICAgIH1dXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRE8gTk9UIEtFRVAgSU1BR0UgQVNQRUNUIFJBVElPOiBoYW5kbGVPblVwZGF0ZUltYWdlRGltZW5zaW9uczogY2FsbHMgb25VcGRhdGVJbWFnZURpbWVuc2lvbiAmIG9uVXBkYXRlU2hhcGVzJywgKCkgPT4ge1xuICAgICAgbGV0IHdyYXBwZXI7XG4gICAgICBsZXQgb25VcGRhdGVJbWFnZURpbWVuc2lvbiA9IGplc3QuZm4oKTtcbiAgICAgIGxldCBvblVwZGF0ZVNoYXBlcyA9IGplc3QuZm4oKTtcblxuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHdyYXBwZXIgPSB3KHtcbiAgICAgICAgICAuLi5kZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzoge1xuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sIG9uVXBkYXRlSW1hZ2VEaW1lbnNpb24sIG9uVXBkYXRlU2hhcGVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaW5jcmVhc2Ugd2lkdGggd2l0aCAxMDAlOicsICgpID0+IHtcbiAgICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU9uVXBkYXRlSW1hZ2VEaW1lbnNpb25zKDQwMCwgJ3dpZHRoJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uVXBkYXRlSW1hZ2VEaW1lbnNpb24pLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgIGhlaWdodDogMzAwXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICByZWN0YW5nbGVzOiBbeyB4OiAyMCwgeTogMTAsIGhlaWdodDogMTAwLCB3aWR0aDogMjAwLCBpbmRleDogMCB9XSxcbiAgICAgICAgICBwb2x5Z29uczogW3tcbiAgICAgICAgICAgIHBvaW50czogW3sgeDogMCwgeTogMjAwIH0sIHsgeDogNDAwLCB5OiAyMDAgfSwgeyB4OiAyMDAsIHk6IDMwMCB9XSwgaW5kZXg6IDFcbiAgICAgICAgICB9XVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGVjcmVhc2Ugd2lkdGggd2l0aCA1MCUnLCAoKSA9PiB7XG4gICAgICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVPblVwZGF0ZUltYWdlRGltZW5zaW9ucygxMDAsICd3aWR0aCcpO1xuXG4gICAgICAgIGV4cGVjdChvblVwZGF0ZUltYWdlRGltZW5zaW9uKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICBoZWlnaHQ6IDMwMFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgICByZWN0YW5nbGVzOiBbeyB4OiA1LCB5OiAxMCwgaGVpZ2h0OiAxMDAsIHdpZHRoOiA1MCwgaW5kZXg6IDAgfV0sXG4gICAgICAgICAgICBwb2x5Z29uczogW3tcbiAgICAgICAgICAgICAgcG9pbnRzOiBbeyB4OiAwLCB5OiAyMDAgfSwgeyB4OiAxMDAsIHk6IDIwMCB9LCB7IHg6IDUwLCB5OiAzMDAgfV0sIGluZGV4OiAxXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaW5jcmVhc2UgaGVpZ2h0IHdpdGggNTAlOicsICgpID0+IHtcbiAgICAgICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU9uVXBkYXRlSW1hZ2VEaW1lbnNpb25zKDQ1MCwgJ2hlaWdodCcpO1xuXG4gICAgICAgIGV4cGVjdChvblVwZGF0ZUltYWdlRGltZW5zaW9uKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICBoZWlnaHQ6IDQ1MFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KG9uVXBkYXRlU2hhcGVzKS50b0JlQ2FsbGVkV2l0aCh7XG4gICAgICAgICAgICByZWN0YW5nbGVzOiBbeyB4OiAxMCwgeTogMTUsIGhlaWdodDogMTUwLCB3aWR0aDogMTAwLCBpbmRleDogMCB9XSxcbiAgICAgICAgICAgIHBvbHlnb25zOiBbe1xuICAgICAgICAgICAgICBpbmRleDogMSxcbiAgICAgICAgICAgICAgcG9pbnRzOiBbeyB4OiAwLCB5OiAzMDAgfSwgeyB4OiAyMDAsIHk6IDMwMCB9LCB7IHg6IDEwMCwgeTogNDUwIH1dXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGVjcmVhc2UgaGVpZ2h0IHdpdGggMTAlJywgKCkgPT4ge1xuICAgICAgICB3cmFwcGVyLmluc3RhbmNlKCkuaGFuZGxlT25VcGRhdGVJbWFnZURpbWVuc2lvbnMoMjcwLCAnaGVpZ2h0Jyk7XG5cbiAgICAgICAgZXhwZWN0KG9uVXBkYXRlSW1hZ2VEaW1lbnNpb24pLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgIGhlaWdodDogMjcwXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qob25VcGRhdGVTaGFwZXMpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgICAgICAgIHJlY3RhbmdsZXM6IFt7IHg6IDEwLCB5OiA5LCBoZWlnaHQ6IDkwLCB3aWR0aDogMTAwLCBpbmRleDogMCB9XSxcbiAgICAgICAgICAgIHBvbHlnb25zOiBbe1xuICAgICAgICAgICAgICBwb2ludHM6IFt7IHg6IDAsIHk6IDE4MCB9LCB7IHg6IDIwMCwgeTogMTgwIH0sIHsgeDogMTAwLCB5OiAyNzAgfV0sXG4gICAgICAgICAgICAgIGluZGV4OiAxXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|