@pie-element/explicit-constructed-response 9.3.2-tip-tap.11 → 9.3.2-tip-tap.12

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.
@@ -0,0 +1,1205 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+
7
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
+
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+
11
+ var _index = require("../index");
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/controller-utils', function () {
20
+ return {
21
+ getShuffledChoices: function getShuffledChoices(choices, session, updateSession, key) {
22
+ var currentShuffled = ((session || {}).shuffledValues || []).filter(function (v) {
23
+ return v;
24
+ });
25
+
26
+ if (session && !currentShuffled.length && updateSession && typeof updateSession === 'function') {
27
+ updateSession();
28
+ }
29
+
30
+ return choices;
31
+ },
32
+ partialScoring: {
33
+ enabled: function enabled(config, env) {
34
+ config = config || {};
35
+ env = env || {};
36
+
37
+ if (config.partialScoring === false) {
38
+ return false;
39
+ }
40
+
41
+ if (env.partialScoring === false) {
42
+ return false;
43
+ }
44
+
45
+ return true;
46
+ }
47
+ }
48
+ };
49
+ });
50
+
51
+ var choice = function choice(l, v) {
52
+ return {
53
+ label: l,
54
+ value: v
55
+ };
56
+ };
57
+
58
+ var choices = {
59
+ 0: [choice('cow', '0'), choice('cattle', '1'), choice('calf', '2')],
60
+ 1: [choice('over', '0'), choice('past', '1'), choice('beyond', '2')],
61
+ 2: [choice('moon', '0')]
62
+ };
63
+ var question = {
64
+ markup: '<p>The {{0}} jumped {{1}} the {{2}}</p>',
65
+ disabled: false,
66
+ choices: choices,
67
+ prompt: 'Complete the sentence',
68
+ note: 'The answer shown above is the most common correct answer for this item.',
69
+ language: 'english',
70
+ maxLengthPerChoiceEnabled: true,
71
+ playerSpellCheckEnabled: true,
72
+ displayType: 'block'
73
+ };
74
+ describe('controller', function () {
75
+ describe('model', function () {
76
+ var q, env;
77
+ it('output when session is defined', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
78
+ var m;
79
+ return _regenerator["default"].wrap(function _callee$(_context) {
80
+ while (1) {
81
+ switch (_context.prev = _context.next) {
82
+ case 0:
83
+ _context.next = 2;
84
+ return (0, _index.model)(question, {
85
+ value: {
86
+ 0: 'cow',
87
+ 1: 'over',
88
+ 2: 'moon'
89
+ }
90
+ }, {
91
+ mode: 'evaluate'
92
+ });
93
+
94
+ case 2:
95
+ m = _context.sent;
96
+ expect(m).toEqual(expect.objectContaining({
97
+ feedback: {
98
+ 0: 'correct',
99
+ 1: 'correct',
100
+ 2: 'correct'
101
+ },
102
+ responseCorrect: true
103
+ }));
104
+
105
+ case 4:
106
+ case "end":
107
+ return _context.stop();
108
+ }
109
+ }
110
+ }, _callee);
111
+ })));
112
+
113
+ var returnModel = function returnModel(session) {
114
+ it("output when session is ".concat(JSON.stringify(session)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
115
+ var m;
116
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
117
+ while (1) {
118
+ switch (_context2.prev = _context2.next) {
119
+ case 0:
120
+ _context2.next = 2;
121
+ return (0, _index.model)(question, session, {
122
+ mode: 'evaluate'
123
+ });
124
+
125
+ case 2:
126
+ m = _context2.sent;
127
+ expect(m).toEqual(expect.objectContaining({
128
+ feedback: {
129
+ 0: 'incorrect',
130
+ 1: 'incorrect',
131
+ 2: 'incorrect'
132
+ },
133
+ responseCorrect: false
134
+ }));
135
+
136
+ case 4:
137
+ case "end":
138
+ return _context2.stop();
139
+ }
140
+ }
141
+ }, _callee2);
142
+ })));
143
+ };
144
+
145
+ returnModel(undefined);
146
+ returnModel(null);
147
+ returnModel({});
148
+
149
+ var assertGather = function assertGather(label, extra, session, expected) {
150
+ it("'mode: gather, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
151
+ var result;
152
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
153
+ while (1) {
154
+ switch (_context3.prev = _context3.next) {
155
+ case 0:
156
+ q = _objectSpread(_objectSpread({}, question), {}, {
157
+ teacherInstructions: 'Teacher Instructions',
158
+ rationale: 'Rationale'
159
+ }, extra);
160
+ env = {
161
+ mode: 'gather'
162
+ };
163
+ _context3.next = 4;
164
+ return (0, _index.model)(q, _objectSpread({
165
+ id: '1',
166
+ element: 'explicit-constructed-response'
167
+ }, session), env);
168
+
169
+ case 4:
170
+ result = _context3.sent;
171
+ expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
172
+ disabled: false,
173
+ feedback: {},
174
+ responseCorrect: undefined,
175
+ maxLengthPerChoice: [10, 10, 7]
176
+ }, env), expected));
177
+
178
+ case 6:
179
+ case "end":
180
+ return _context3.stop();
181
+ }
182
+ }
183
+ }, _callee3);
184
+ })));
185
+ };
186
+
187
+ assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled not set', {}, {}, {
188
+ rationale: _defaults["default"].rationale,
189
+ showNote: true,
190
+ teacherInstructions: _defaults["default"].teacherInstructions
191
+ });
192
+ assertGather('promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
193
+ promptEnabled: false,
194
+ rationaleEnabled: false,
195
+ teacherInstructionsEnabled: false,
196
+ studentInstructionsEnabled: false
197
+ }, {}, {
198
+ prompt: _defaults["default"].prompt,
199
+ rationale: _defaults["default"].rationale,
200
+ showNote: true,
201
+ teacherInstructions: _defaults["default"].teacherInstructions
202
+ });
203
+
204
+ var assertView = function assertView(label, extra, session, expected) {
205
+ it("'mode: view, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
206
+ var result;
207
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
208
+ while (1) {
209
+ switch (_context4.prev = _context4.next) {
210
+ case 0:
211
+ q = _objectSpread(_objectSpread({}, question), {}, {
212
+ teacherInstructions: 'Teacher Instructions',
213
+ rationale: 'Rationale'
214
+ }, extra);
215
+ env = {
216
+ mode: 'view',
217
+ role: 'instructor'
218
+ };
219
+ _context4.next = 4;
220
+ return (0, _index.model)(q, _objectSpread({
221
+ id: '1',
222
+ element: 'explicit-constructed-response'
223
+ }, session), env);
224
+
225
+ case 4:
226
+ result = _context4.sent;
227
+ expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
228
+ disabled: true,
229
+ feedback: {},
230
+ responseCorrect: undefined,
231
+ maxLengthPerChoice: [10, 10, 7]
232
+ }, env), expected));
233
+
234
+ case 6:
235
+ case "end":
236
+ return _context4.stop();
237
+ }
238
+ }
239
+ }, _callee4);
240
+ })));
241
+ };
242
+
243
+ assertView(' + role: instructor, promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
244
+ promptEnabled: false,
245
+ rationaleEnabled: false,
246
+ teacherInstructionsEnabled: false,
247
+ studentInstructionsEnabled: false
248
+ }, {}, {
249
+ prompt: _defaults["default"].prompt,
250
+ rationale: _defaults["default"].rationale,
251
+ showNote: true,
252
+ teacherInstructions: _defaults["default"].teacherInstructions
253
+ });
254
+ assertView(' + role: instructor, promptEnabled, rationaleEnabled and teacherInstructionsEnabled unset', {}, {}, {
255
+ teacherInstructions: 'Teacher Instructions',
256
+ showNote: true,
257
+ rationale: 'Rationale'
258
+ });
259
+
260
+ var assertViewStudent = function assertViewStudent(label, extra, session, expected) {
261
+ it("'mode: view, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
262
+ var result;
263
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
264
+ while (1) {
265
+ switch (_context5.prev = _context5.next) {
266
+ case 0:
267
+ q = _objectSpread(_objectSpread({}, question), {}, {
268
+ teacherInstructions: 'Teacher Instructions',
269
+ rationale: 'Rationale'
270
+ }, extra);
271
+ env = {
272
+ mode: 'view',
273
+ role: ' student'
274
+ };
275
+ _context5.next = 4;
276
+ return (0, _index.model)(q, _objectSpread({
277
+ id: '1',
278
+ element: 'explicit-constructed-response'
279
+ }, session), env);
280
+
281
+ case 4:
282
+ result = _context5.sent;
283
+ expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
284
+ disabled: true,
285
+ feedback: {},
286
+ responseCorrect: undefined,
287
+ maxLengthPerChoice: [10, 10, 7]
288
+ }, env), expected));
289
+
290
+ case 6:
291
+ case "end":
292
+ return _context5.stop();
293
+ }
294
+ }
295
+ }, _callee5);
296
+ })));
297
+ };
298
+
299
+ assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled set to false', {
300
+ promptEnabled: false,
301
+ rationaleEnabled: false,
302
+ teacherInstructionsEnabled: false,
303
+ studentInstructionsEnabled: false
304
+ }, {}, {
305
+ prompt: _defaults["default"].prompt,
306
+ rationale: _defaults["default"].rationale,
307
+ showNote: true,
308
+ teacherInstructions: _defaults["default"].teacherInstructions
309
+ });
310
+ assertViewStudent(' + role: student, promptEnabled, rationaleEnabled and teacherInstructionsEnabled unset', {}, {}, {
311
+ rationale: _defaults["default"].rationale,
312
+ showNote: true,
313
+ teacherInstructions: _defaults["default"].teacherInstructions
314
+ });
315
+
316
+ var assertEvaluate = function assertEvaluate(label, extra, session, expected) {
317
+ it("'mode: evaluate, ".concat(label, "'"), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
318
+ var result;
319
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
320
+ while (1) {
321
+ switch (_context6.prev = _context6.next) {
322
+ case 0:
323
+ q = _objectSpread(_objectSpread({}, question), {}, {
324
+ teacherInstructions: 'Teacher Instructions',
325
+ rationale: 'Rationale'
326
+ }, extra);
327
+ env = {
328
+ mode: 'evaluate',
329
+ role: 'instructor'
330
+ };
331
+ _context6.next = 4;
332
+ return (0, _index.model)(q, _objectSpread({
333
+ id: '1',
334
+ element: 'explicit-constructed-response'
335
+ }, session), env);
336
+
337
+ case 4:
338
+ result = _context6.sent;
339
+ expect(result).toEqual(_objectSpread(_objectSpread(_objectSpread({}, question), {}, {
340
+ teacherInstructions: 'Teacher Instructions',
341
+ rationale: 'Rationale',
342
+ disabled: true,
343
+ choices: {
344
+ 0: [{
345
+ label: 'cow',
346
+ value: '0',
347
+ correct: true
348
+ }, {
349
+ label: 'cattle',
350
+ value: '1',
351
+ correct: true
352
+ }, {
353
+ label: 'calf',
354
+ value: '2',
355
+ correct: true
356
+ }],
357
+ 1: [{
358
+ label: 'over',
359
+ value: '0',
360
+ correct: true
361
+ }, {
362
+ label: 'past',
363
+ value: '1',
364
+ correct: true
365
+ }, {
366
+ label: 'beyond',
367
+ value: '2',
368
+ correct: true
369
+ }],
370
+ 2: [{
371
+ label: 'moon',
372
+ value: '0',
373
+ correct: true
374
+ }]
375
+ },
376
+ maxLengthPerChoice: [10, 10, 7]
377
+ }, env), expected));
378
+
379
+ case 6:
380
+ case "end":
381
+ return _context6.stop();
382
+ }
383
+ }
384
+ }, _callee6);
385
+ })));
386
+ };
387
+
388
+ assertEvaluate('- correct answer', {}, {
389
+ value: {
390
+ 0: 'cow',
391
+ 1: 'over',
392
+ 2: 'moon'
393
+ }
394
+ }, {
395
+ feedback: {
396
+ 0: 'correct',
397
+ 1: 'correct',
398
+ 2: 'correct'
399
+ },
400
+ showNote: true,
401
+ responseCorrect: true
402
+ });
403
+ assertEvaluate('- partially correct answer', {}, {
404
+ value: {
405
+ 0: 'cow',
406
+ 1: 'over',
407
+ 2: 'sun'
408
+ }
409
+ }, {
410
+ feedback: {
411
+ 0: 'correct',
412
+ 1: 'correct',
413
+ 2: 'incorrect'
414
+ },
415
+ showNote: true,
416
+ responseCorrect: false
417
+ });
418
+ assertEvaluate('- partially correct answer using alternates', {}, {
419
+ value: {
420
+ 0: 'calf',
421
+ 1: 'over',
422
+ 2: 'sun'
423
+ }
424
+ }, {
425
+ feedback: {
426
+ 0: 'correct',
427
+ 1: 'correct',
428
+ 2: 'incorrect'
429
+ },
430
+ showNote: true,
431
+ responseCorrect: false
432
+ });
433
+ assertEvaluate('- incorrect answer', {}, {
434
+ value: {
435
+ 0: 'han',
436
+ 1: 'above',
437
+ 2: 'chicken'
438
+ }
439
+ }, {
440
+ feedback: {
441
+ 0: 'incorrect',
442
+ 1: 'incorrect',
443
+ 2: 'incorrect'
444
+ },
445
+ showNote: true,
446
+ responseCorrect: false
447
+ });
448
+ });
449
+ describe('get score', function () {
450
+ var assertScore = function assertScore(session, expected) {
451
+ it('return score', function () {
452
+ var score = (0, _index.getScore)(question, session);
453
+ expect(score).toEqual(expected);
454
+ });
455
+ };
456
+
457
+ assertScore({
458
+ value: {
459
+ 0: 'cow',
460
+ 1: 'over',
461
+ 2: 'moon'
462
+ }
463
+ }, 1);
464
+ assertScore({
465
+ value: {
466
+ 0: 'cattle',
467
+ 1: 'over',
468
+ 2: 'moon'
469
+ }
470
+ }, 1);
471
+ assertScore({
472
+ value: {
473
+ 0: 'calf',
474
+ 1: 'over',
475
+ 2: 'moon'
476
+ }
477
+ }, 1);
478
+ assertScore({
479
+ value: {
480
+ 0: 'cow',
481
+ 1: 'past',
482
+ 2: 'moon'
483
+ }
484
+ }, 1);
485
+ assertScore({
486
+ value: {
487
+ 0: 'cattle',
488
+ 1: 'past',
489
+ 2: 'moon'
490
+ }
491
+ }, 1);
492
+ assertScore({
493
+ value: {
494
+ 0: 'calf',
495
+ 1: 'past',
496
+ 2: 'moon'
497
+ }
498
+ }, 1);
499
+ assertScore({
500
+ value: {
501
+ 0: 'cow',
502
+ 1: 'beyond',
503
+ 2: 'moon'
504
+ }
505
+ }, 1);
506
+ assertScore({
507
+ value: {
508
+ 0: 'cattle',
509
+ 1: 'beyond',
510
+ 2: 'moon'
511
+ }
512
+ }, 1);
513
+ assertScore({
514
+ value: {
515
+ 0: 'calf',
516
+ 1: 'beyond',
517
+ 2: 'moon'
518
+ }
519
+ }, 1);
520
+ assertScore({
521
+ value: {
522
+ 0: 'calf',
523
+ 1: 'under',
524
+ 2: 'moon'
525
+ }
526
+ }, 0.67);
527
+ assertScore({
528
+ value: {
529
+ 0: 'cat',
530
+ 1: 'under',
531
+ 2: 'moon'
532
+ }
533
+ }, 0.33);
534
+ assertScore({
535
+ value: {
536
+ 0: 'cat',
537
+ 1: 'under',
538
+ 2: 'sun'
539
+ }
540
+ }, 0);
541
+
542
+ var returnScore = function returnScore(session) {
543
+ it("score = 0 when session is ".concat(JSON.stringify(session)), function () {
544
+ expect((0, _index.getScore)(question, session)).toEqual(0);
545
+ });
546
+ };
547
+
548
+ returnScore(undefined);
549
+ returnScore(null);
550
+ returnScore({});
551
+ });
552
+ describe('outcome partialScoring test', function () {
553
+ var assertOutcome = function assertOutcome(message, extra, sessionValue, env, expected) {
554
+ it(message, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
555
+ var result;
556
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
557
+ while (1) {
558
+ switch (_context7.prev = _context7.next) {
559
+ case 0:
560
+ _context7.next = 2;
561
+ return (0, _index.outcome)(_objectSpread(_objectSpread({}, question), extra), sessionValue, env);
562
+
563
+ case 2:
564
+ result = _context7.sent;
565
+ expect(result).toEqual(expect.objectContaining(expected));
566
+
567
+ case 4:
568
+ case "end":
569
+ return _context7.stop();
570
+ }
571
+ }
572
+ }, _callee7);
573
+ })));
574
+ };
575
+
576
+ assertOutcome('element.partialScoring = true', {
577
+ partialScoring: true
578
+ }, {
579
+ value: {
580
+ 0: 'calf',
581
+ 1: 'under',
582
+ 2: 'moon'
583
+ }
584
+ }, {
585
+ mode: 'evaluate'
586
+ }, {
587
+ score: 0.67
588
+ });
589
+ assertOutcome('element.partialScoring = false', {
590
+ partialScoring: false
591
+ }, {
592
+ value: {
593
+ 0: 'calf',
594
+ 1: 'under',
595
+ 2: 'moon'
596
+ }
597
+ }, {
598
+ mode: 'evaluate'
599
+ }, {
600
+ score: 0
601
+ });
602
+ assertOutcome('element.partialScoring = false, env.partialScoring = true', {
603
+ partialScoring: false
604
+ }, {
605
+ value: {
606
+ 0: 'calf',
607
+ 1: 'under',
608
+ 2: 'moon'
609
+ }
610
+ }, {
611
+ mode: 'evaluate',
612
+ partialScoring: true
613
+ }, {
614
+ score: 0
615
+ });
616
+ assertOutcome('element.partialScoring = true, env.partialScoring = false', {
617
+ partialScoring: true
618
+ }, {
619
+ value: {
620
+ 0: 'calf',
621
+ 1: 'under',
622
+ 2: 'moon'
623
+ }
624
+ }, {
625
+ mode: 'evaluate',
626
+ partialScoring: false
627
+ }, {
628
+ score: 0
629
+ });
630
+ });
631
+ describe('outcome', function () {
632
+ var assertOutcome = function assertOutcome(partialScoring, sessionValue, expected) {
633
+ it("partial score ".concat(partialScoring ? 'enabled' : ''), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8() {
634
+ var result;
635
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
636
+ while (1) {
637
+ switch (_context8.prev = _context8.next) {
638
+ case 0:
639
+ _context8.next = 2;
640
+ return (0, _index.outcome)(_objectSpread(_objectSpread({}, question), {}, {
641
+ partialScoring: partialScoring
642
+ }), sessionValue);
643
+
644
+ case 2:
645
+ result = _context8.sent;
646
+ expect(result).toEqual(expected);
647
+
648
+ case 4:
649
+ case "end":
650
+ return _context8.stop();
651
+ }
652
+ }
653
+ }, _callee8);
654
+ })));
655
+ };
656
+
657
+ assertOutcome(true, {
658
+ value: {
659
+ 0: 'cow',
660
+ 1: 'over',
661
+ 2: 'moon'
662
+ }
663
+ }, {
664
+ score: 1,
665
+ empty: false
666
+ });
667
+ assertOutcome(true, {
668
+ value: {
669
+ 0: 'cattle',
670
+ 1: 'over',
671
+ 2: 'moon'
672
+ }
673
+ }, {
674
+ score: 1,
675
+ empty: false
676
+ });
677
+ assertOutcome(true, {
678
+ value: {
679
+ 0: 'calf',
680
+ 1: 'over',
681
+ 2: 'moon'
682
+ }
683
+ }, {
684
+ score: 1,
685
+ empty: false
686
+ });
687
+ assertOutcome(true, {
688
+ value: {
689
+ 0: 'cow',
690
+ 1: 'past',
691
+ 2: 'moon'
692
+ }
693
+ }, {
694
+ score: 1,
695
+ empty: false
696
+ });
697
+ assertOutcome(true, {
698
+ value: {
699
+ 0: 'cattle',
700
+ 1: 'past',
701
+ 2: 'moon'
702
+ }
703
+ }, {
704
+ score: 1,
705
+ empty: false
706
+ });
707
+ assertOutcome(true, {
708
+ value: {
709
+ 0: 'calf',
710
+ 1: 'past',
711
+ 2: 'moon'
712
+ }
713
+ }, {
714
+ score: 1,
715
+ empty: false
716
+ });
717
+ assertOutcome(true, {
718
+ value: {
719
+ 0: 'cow',
720
+ 1: 'beyond',
721
+ 2: 'moon'
722
+ }
723
+ }, {
724
+ score: 1,
725
+ empty: false
726
+ });
727
+ assertOutcome(true, {
728
+ value: {
729
+ 0: 'cattle',
730
+ 1: 'beyond',
731
+ 2: 'moon'
732
+ }
733
+ }, {
734
+ score: 1,
735
+ empty: false
736
+ });
737
+ assertOutcome(true, {
738
+ value: {
739
+ 0: 'calf',
740
+ 1: 'beyond',
741
+ 2: 'moon'
742
+ }
743
+ }, {
744
+ score: 1,
745
+ empty: false
746
+ });
747
+ assertOutcome(true, {
748
+ value: {
749
+ 0: 'calf',
750
+ 1: 'under',
751
+ 2: 'moon'
752
+ }
753
+ }, {
754
+ score: 0.67,
755
+ empty: false
756
+ });
757
+ assertOutcome(true, {
758
+ value: {
759
+ 0: 'cat',
760
+ 1: 'under',
761
+ 2: 'moon'
762
+ }
763
+ }, {
764
+ score: 0.33,
765
+ empty: false
766
+ });
767
+ assertOutcome(true, {
768
+ value: {
769
+ 0: 'cat',
770
+ 1: 'under',
771
+ 2: 'sun'
772
+ }
773
+ }, {
774
+ score: 0,
775
+ empty: false
776
+ });
777
+ assertOutcome(false, {
778
+ value: {
779
+ 0: 'cow',
780
+ 1: 'over',
781
+ 2: 'moon'
782
+ }
783
+ }, {
784
+ score: 1,
785
+ empty: false
786
+ });
787
+ assertOutcome(false, {
788
+ value: {
789
+ 0: 'cattle',
790
+ 1: 'over',
791
+ 2: 'moon'
792
+ }
793
+ }, {
794
+ score: 1,
795
+ empty: false
796
+ });
797
+ assertOutcome(false, {
798
+ value: {
799
+ 0: 'calf',
800
+ 1: 'over',
801
+ 2: 'moon'
802
+ }
803
+ }, {
804
+ score: 1,
805
+ empty: false
806
+ });
807
+ assertOutcome(false, {
808
+ value: {
809
+ 0: 'cow',
810
+ 1: 'past',
811
+ 2: 'moon'
812
+ }
813
+ }, {
814
+ score: 1,
815
+ empty: false
816
+ });
817
+ assertOutcome(false, {
818
+ value: {
819
+ 0: 'cattle',
820
+ 1: 'past',
821
+ 2: 'moon'
822
+ }
823
+ }, {
824
+ score: 1,
825
+ empty: false
826
+ });
827
+ assertOutcome(false, {
828
+ value: {
829
+ 0: 'calf',
830
+ 1: 'past',
831
+ 2: 'moon'
832
+ }
833
+ }, {
834
+ score: 1,
835
+ empty: false
836
+ });
837
+ assertOutcome(false, {
838
+ value: {
839
+ 0: 'cow',
840
+ 1: 'beyond',
841
+ 2: 'moon'
842
+ }
843
+ }, {
844
+ score: 1,
845
+ empty: false
846
+ });
847
+ assertOutcome(false, {
848
+ value: {
849
+ 0: 'cattle',
850
+ 1: 'beyond',
851
+ 2: 'moon'
852
+ }
853
+ }, {
854
+ score: 1,
855
+ empty: false
856
+ });
857
+ assertOutcome(false, {
858
+ value: {
859
+ 0: 'calf',
860
+ 1: 'beyond',
861
+ 2: 'moon'
862
+ }
863
+ }, {
864
+ score: 1,
865
+ empty: false
866
+ });
867
+ assertOutcome(false, {
868
+ value: {
869
+ 0: 'calf',
870
+ 1: 'under',
871
+ 2: 'moon'
872
+ }
873
+ }, {
874
+ score: 0,
875
+ empty: false
876
+ });
877
+ assertOutcome(false, {
878
+ value: {
879
+ 0: 'cat',
880
+ 1: 'under',
881
+ 2: 'moon'
882
+ }
883
+ }, {
884
+ score: 0,
885
+ empty: false
886
+ });
887
+ assertOutcome(false, {
888
+ value: {
889
+ 0: 'cat',
890
+ 1: 'under',
891
+ 2: 'sun'
892
+ }
893
+ }, {
894
+ score: 0,
895
+ empty: false
896
+ });
897
+
898
+ var returnModel = function returnModel(session) {
899
+ it("empty: true when session is ".concat(JSON.stringify(session)), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
900
+ var m;
901
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
902
+ while (1) {
903
+ switch (_context9.prev = _context9.next) {
904
+ case 0:
905
+ _context9.next = 2;
906
+ return (0, _index.outcome)(question, session);
907
+
908
+ case 2:
909
+ m = _context9.sent;
910
+ expect(m).toEqual(expect.objectContaining({
911
+ score: 0,
912
+ empty: true
913
+ }));
914
+
915
+ case 4:
916
+ case "end":
917
+ return _context9.stop();
918
+ }
919
+ }
920
+ }, _callee9);
921
+ })));
922
+ };
923
+
924
+ returnModel(undefined);
925
+ returnModel(null);
926
+ returnModel({});
927
+ });
928
+ describe('prepareVal', function () {
929
+ it('should return empty string on null or undefined', function () {
930
+ expect((0, _index.prepareVal)(null)).toEqual('');
931
+ expect((0, _index.prepareVal)(undefined)).toEqual('');
932
+ });
933
+ it('should remove html tags', function () {
934
+ expect((0, _index.prepareVal)('<div>Foo Bar</div>')).toEqual('Foo Bar');
935
+ });
936
+ describe('correct response', function () {
937
+ var question;
938
+ beforeEach(function () {
939
+ question = {
940
+ choices: choices
941
+ };
942
+ });
943
+ it('returns correct response if env is correct', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
944
+ var sess;
945
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
946
+ while (1) {
947
+ switch (_context10.prev = _context10.next) {
948
+ case 0:
949
+ _context10.next = 2;
950
+ return (0, _index.createCorrectResponseSession)(question, {
951
+ mode: 'gather',
952
+ role: 'instructor'
953
+ });
954
+
955
+ case 2:
956
+ sess = _context10.sent;
957
+ expect(sess).toEqual({
958
+ id: '1',
959
+ value: {
960
+ 0: 'cow',
961
+ 1: 'over',
962
+ 2: 'moon'
963
+ }
964
+ });
965
+
966
+ case 4:
967
+ case "end":
968
+ return _context10.stop();
969
+ }
970
+ }
971
+ }, _callee10);
972
+ })));
973
+ it('returns null env is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
974
+ var noResult;
975
+ return _regenerator["default"].wrap(function _callee11$(_context11) {
976
+ while (1) {
977
+ switch (_context11.prev = _context11.next) {
978
+ case 0:
979
+ _context11.next = 2;
980
+ return (0, _index.createCorrectResponseSession)(question, {
981
+ mode: 'gather',
982
+ role: 'student'
983
+ });
984
+
985
+ case 2:
986
+ noResult = _context11.sent;
987
+ expect(noResult).toBeNull();
988
+
989
+ case 4:
990
+ case "end":
991
+ return _context11.stop();
992
+ }
993
+ }
994
+ }, _callee11);
995
+ })));
996
+ });
997
+ });
998
+ describe('correct response', function () {
999
+ it('returns correct response if role is instructor and mode is gather', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
1000
+ var sess;
1001
+ return _regenerator["default"].wrap(function _callee12$(_context12) {
1002
+ while (1) {
1003
+ switch (_context12.prev = _context12.next) {
1004
+ case 0:
1005
+ _context12.next = 2;
1006
+ return (0, _index.createCorrectResponseSession)(question, {
1007
+ mode: 'gather',
1008
+ role: 'instructor'
1009
+ });
1010
+
1011
+ case 2:
1012
+ sess = _context12.sent;
1013
+ expect(sess).toEqual({
1014
+ id: '1',
1015
+ value: {
1016
+ 0: 'cow',
1017
+ 1: 'over',
1018
+ 2: 'moon'
1019
+ }
1020
+ });
1021
+
1022
+ case 4:
1023
+ case "end":
1024
+ return _context12.stop();
1025
+ }
1026
+ }
1027
+ }, _callee12);
1028
+ })));
1029
+ it('returns correct response if role is instructor and mode is view', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
1030
+ var sess;
1031
+ return _regenerator["default"].wrap(function _callee13$(_context13) {
1032
+ while (1) {
1033
+ switch (_context13.prev = _context13.next) {
1034
+ case 0:
1035
+ _context13.next = 2;
1036
+ return (0, _index.createCorrectResponseSession)(question, {
1037
+ mode: 'view',
1038
+ role: 'instructor'
1039
+ });
1040
+
1041
+ case 2:
1042
+ sess = _context13.sent;
1043
+ expect(sess).toEqual({
1044
+ id: '1',
1045
+ value: {
1046
+ 0: 'cow',
1047
+ 1: 'over',
1048
+ 2: 'moon'
1049
+ }
1050
+ });
1051
+
1052
+ case 4:
1053
+ case "end":
1054
+ return _context13.stop();
1055
+ }
1056
+ }
1057
+ }, _callee13);
1058
+ })));
1059
+ it('returns null if mode is evaluate', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee14() {
1060
+ var noResult;
1061
+ return _regenerator["default"].wrap(function _callee14$(_context14) {
1062
+ while (1) {
1063
+ switch (_context14.prev = _context14.next) {
1064
+ case 0:
1065
+ _context14.next = 2;
1066
+ return (0, _index.createCorrectResponseSession)(question, {
1067
+ mode: 'evaluate',
1068
+ role: 'instructor'
1069
+ });
1070
+
1071
+ case 2:
1072
+ noResult = _context14.sent;
1073
+ expect(noResult).toBeNull();
1074
+
1075
+ case 4:
1076
+ case "end":
1077
+ return _context14.stop();
1078
+ }
1079
+ }
1080
+ }, _callee14);
1081
+ })));
1082
+ it('returns null if role is student', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee15() {
1083
+ var noResult;
1084
+ return _regenerator["default"].wrap(function _callee15$(_context15) {
1085
+ while (1) {
1086
+ switch (_context15.prev = _context15.next) {
1087
+ case 0:
1088
+ _context15.next = 2;
1089
+ return (0, _index.createCorrectResponseSession)(question, {
1090
+ mode: 'gather',
1091
+ role: 'student'
1092
+ });
1093
+
1094
+ case 2:
1095
+ noResult = _context15.sent;
1096
+ expect(noResult).toBeNull();
1097
+
1098
+ case 4:
1099
+ case "end":
1100
+ return _context15.stop();
1101
+ }
1102
+ }
1103
+ }, _callee15);
1104
+ })));
1105
+ });
1106
+ describe('prepareChoice', function () {
1107
+ var assertPrepareChoice = function assertPrepareChoice(env, defaultFeedback, choice, expected) {
1108
+ var preparChoiceFn = (0, _index.prepareChoice)(env.mode, defaultFeedback);
1109
+ it("prepare choices in ".concat(env.mode, " mode: ").concat(JSON.stringify(choice), " -> ").concat(JSON.stringify(expected)), function () {
1110
+ expect(preparChoiceFn(choice)).toEqual(expected);
1111
+ });
1112
+ };
1113
+
1114
+ assertPrepareChoice({
1115
+ mode: 'gather'
1116
+ }, {
1117
+ correct: 'Correct',
1118
+ incorrect: 'Incorrect'
1119
+ }, {
1120
+ value: '0',
1121
+ label: 'cow'
1122
+ }, {
1123
+ value: '0',
1124
+ label: 'cow'
1125
+ });
1126
+ assertPrepareChoice({
1127
+ mode: 'view'
1128
+ }, {
1129
+ correct: 'Correct',
1130
+ incorrect: 'Incorrect'
1131
+ }, {
1132
+ value: '0',
1133
+ label: 'cow'
1134
+ }, {
1135
+ value: '0',
1136
+ label: 'cow'
1137
+ });
1138
+ assertPrepareChoice({
1139
+ mode: 'evaluate'
1140
+ }, {
1141
+ correct: 'Correct',
1142
+ incorrect: 'Incorrect'
1143
+ }, {
1144
+ value: '0',
1145
+ label: 'cow'
1146
+ }, {
1147
+ value: '0',
1148
+ label: 'cow',
1149
+ correct: true
1150
+ });
1151
+ assertPrepareChoice({
1152
+ mode: 'evaluate'
1153
+ }, {
1154
+ correct: 'Correct',
1155
+ incorrect: 'Incorrect'
1156
+ }, {
1157
+ value: '0',
1158
+ label: 'cow',
1159
+ feedback: {
1160
+ type: 'default'
1161
+ }
1162
+ }, {
1163
+ value: '0',
1164
+ label: 'cow',
1165
+ correct: true,
1166
+ feedback: 'Correct'
1167
+ });
1168
+ assertPrepareChoice({
1169
+ mode: 'evaluate'
1170
+ }, {
1171
+ correct: 'Correct',
1172
+ incorrect: 'Incorrect'
1173
+ }, {
1174
+ value: '0',
1175
+ label: 'cow',
1176
+ feedback: {
1177
+ type: 'custom'
1178
+ }
1179
+ }, {
1180
+ value: '0',
1181
+ label: 'cow',
1182
+ correct: true,
1183
+ feedback: undefined
1184
+ });
1185
+ assertPrepareChoice({
1186
+ mode: 'evaluate'
1187
+ }, {
1188
+ correct: 'Correct',
1189
+ incorrect: 'Incorrect'
1190
+ }, {
1191
+ value: '0',
1192
+ label: 'cow',
1193
+ feedback: {
1194
+ type: 'custom',
1195
+ value: 'Custom Feedback'
1196
+ }
1197
+ }, {
1198
+ value: '0',
1199
+ label: 'cow',
1200
+ correct: true,
1201
+ feedback: 'Custom Feedback'
1202
+ });
1203
+ });
1204
+ });
1205
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImdldFNodWZmbGVkQ2hvaWNlcyIsImNob2ljZXMiLCJzZXNzaW9uIiwidXBkYXRlU2Vzc2lvbiIsImtleSIsImN1cnJlbnRTaHVmZmxlZCIsInNodWZmbGVkVmFsdWVzIiwiZmlsdGVyIiwidiIsImxlbmd0aCIsInBhcnRpYWxTY29yaW5nIiwiZW5hYmxlZCIsImNvbmZpZyIsImVudiIsImNob2ljZSIsImwiLCJsYWJlbCIsInZhbHVlIiwicXVlc3Rpb24iLCJtYXJrdXAiLCJkaXNhYmxlZCIsInByb21wdCIsIm5vdGUiLCJsYW5ndWFnZSIsIm1heExlbmd0aFBlckNob2ljZUVuYWJsZWQiLCJwbGF5ZXJTcGVsbENoZWNrRW5hYmxlZCIsImRpc3BsYXlUeXBlIiwiZGVzY3JpYmUiLCJxIiwiaXQiLCJtb2RlIiwibSIsImV4cGVjdCIsInRvRXF1YWwiLCJvYmplY3RDb250YWluaW5nIiwiZmVlZGJhY2siLCJyZXNwb25zZUNvcnJlY3QiLCJyZXR1cm5Nb2RlbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJhc3NlcnRHYXRoZXIiLCJleHRyYSIsImV4cGVjdGVkIiwidGVhY2hlckluc3RydWN0aW9ucyIsInJhdGlvbmFsZSIsImlkIiwiZWxlbWVudCIsInJlc3VsdCIsIm1heExlbmd0aFBlckNob2ljZSIsImRlZmF1bHRzIiwic2hvd05vdGUiLCJwcm9tcHRFbmFibGVkIiwicmF0aW9uYWxlRW5hYmxlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwic3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQiLCJhc3NlcnRWaWV3Iiwicm9sZSIsImFzc2VydFZpZXdTdHVkZW50IiwiYXNzZXJ0RXZhbHVhdGUiLCJjb3JyZWN0IiwiYXNzZXJ0U2NvcmUiLCJzY29yZSIsInJldHVyblNjb3JlIiwiYXNzZXJ0T3V0Y29tZSIsIm1lc3NhZ2UiLCJzZXNzaW9uVmFsdWUiLCJlbXB0eSIsImJlZm9yZUVhY2giLCJzZXNzIiwibm9SZXN1bHQiLCJ0b0JlTnVsbCIsImFzc2VydFByZXBhcmVDaG9pY2UiLCJkZWZhdWx0RmVlZGJhY2siLCJwcmVwYXJDaG9pY2VGbiIsImluY29ycmVjdCIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7O0FBRUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVLDJCQUFWLEVBQXVDO0FBQUEsU0FBTztBQUM1Q0MsSUFBQUEsa0JBQWtCLEVBQUUsNEJBQUNDLE9BQUQsRUFBVUMsT0FBVixFQUFtQkMsYUFBbkIsRUFBa0NDLEdBQWxDLEVBQTBDO0FBQzVELFVBQU1DLGVBQWUsR0FBRyxDQUFDLENBQUNILE9BQU8sSUFBSSxFQUFaLEVBQWdCSSxjQUFoQixJQUFrQyxFQUFuQyxFQUF1Q0MsTUFBdkMsQ0FBOEMsVUFBQ0MsQ0FBRDtBQUFBLGVBQU9BLENBQVA7QUFBQSxPQUE5QyxDQUF4Qjs7QUFFQSxVQUFJTixPQUFPLElBQUksQ0FBQ0csZUFBZSxDQUFDSSxNQUE1QixJQUFzQ04sYUFBdEMsSUFBdUQsT0FBT0EsYUFBUCxLQUF5QixVQUFwRixFQUFnRztBQUM5RkEsUUFBQUEsYUFBYTtBQUNkOztBQUVELGFBQU9GLE9BQVA7QUFDRCxLQVQyQztBQVU1Q1MsSUFBQUEsY0FBYyxFQUFFO0FBQ2RDLE1BQUFBLE9BQU8sRUFBRSxpQkFBQ0MsTUFBRCxFQUFTQyxHQUFULEVBQWlCO0FBQ3hCRCxRQUFBQSxNQUFNLEdBQUdBLE1BQU0sSUFBSSxFQUFuQjtBQUNBQyxRQUFBQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFiOztBQUVBLFlBQUlELE1BQU0sQ0FBQ0YsY0FBUCxLQUEwQixLQUE5QixFQUFxQztBQUNuQyxpQkFBTyxLQUFQO0FBQ0Q7O0FBRUQsWUFBSUcsR0FBRyxDQUFDSCxjQUFKLEtBQXVCLEtBQTNCLEVBQWtDO0FBQ2hDLGlCQUFPLEtBQVA7QUFDRDs7QUFFRCxlQUFPLElBQVA7QUFDRDtBQWRhO0FBVjRCLEdBQVA7QUFBQSxDQUF2Qzs7QUE0QkEsSUFBTUksTUFBTSxHQUFHLFNBQVRBLE1BQVMsQ0FBQ0MsQ0FBRCxFQUFJUCxDQUFKO0FBQUEsU0FBVztBQUFFUSxJQUFBQSxLQUFLLEVBQUVELENBQVQ7QUFBWUUsSUFBQUEsS0FBSyxFQUFFVDtBQUFuQixHQUFYO0FBQUEsQ0FBZjs7QUFDQSxJQUFNUCxPQUFPLEdBQUc7QUFDZCxLQUFHLENBQUNhLE1BQU0sQ0FBQyxLQUFELEVBQVEsR0FBUixDQUFQLEVBQXFCQSxNQUFNLENBQUMsUUFBRCxFQUFXLEdBQVgsQ0FBM0IsRUFBNENBLE1BQU0sQ0FBQyxNQUFELEVBQVMsR0FBVCxDQUFsRCxDQURXO0FBRWQsS0FBRyxDQUFDQSxNQUFNLENBQUMsTUFBRCxFQUFTLEdBQVQsQ0FBUCxFQUFzQkEsTUFBTSxDQUFDLE1BQUQsRUFBUyxHQUFULENBQTVCLEVBQTJDQSxNQUFNLENBQUMsUUFBRCxFQUFXLEdBQVgsQ0FBakQsQ0FGVztBQUdkLEtBQUcsQ0FBQ0EsTUFBTSxDQUFDLE1BQUQsRUFBUyxHQUFULENBQVA7QUFIVyxDQUFoQjtBQU1BLElBQU1JLFFBQVEsR0FBRztBQUNmQyxFQUFBQSxNQUFNLEVBQUUseUNBRE87QUFFZkMsRUFBQUEsUUFBUSxFQUFFLEtBRks7QUFHZm5CLEVBQUFBLE9BQU8sRUFBUEEsT0FIZTtBQUlmb0IsRUFBQUEsTUFBTSxFQUFFLHVCQUpPO0FBS2ZDLEVBQUFBLElBQUksRUFBRSx5RUFMUztBQU1mQyxFQUFBQSxRQUFRLEVBQUUsU0FOSztBQU9mQyxFQUFBQSx5QkFBeUIsRUFBRSxJQVBaO0FBUWZDLEVBQUFBLHVCQUF1QixFQUFFLElBUlY7QUFTZkMsRUFBQUEsV0FBVyxFQUFFO0FBVEUsQ0FBakI7QUFZQUMsUUFBUSxDQUFDLFlBQUQsRUFBZSxZQUFNO0FBQzNCQSxFQUFBQSxRQUFRLENBQUMsT0FBRCxFQUFVLFlBQU07QUFDdEIsUUFBSUMsQ0FBSixFQUFPZixHQUFQO0FBRUFnQixJQUFBQSxFQUFFLENBQUMsZ0NBQUQsNkZBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQ25CLGtCQUFNWCxRQUFOLEVBQWdCO0FBQUVELGdCQUFBQSxLQUFLLEVBQUU7QUFBRSxxQkFBRyxLQUFMO0FBQVkscUJBQUcsTUFBZjtBQUF1QixxQkFBRztBQUExQjtBQUFULGVBQWhCLEVBQStEO0FBQUVhLGdCQUFBQSxJQUFJLEVBQUU7QUFBUixlQUEvRCxDQURtQjs7QUFBQTtBQUM3QkMsY0FBQUEsQ0FENkI7QUFHbkNDLGNBQUFBLE1BQU0sQ0FBQ0QsQ0FBRCxDQUFOLENBQVVFLE9BQVYsQ0FDRUQsTUFBTSxDQUFDRSxnQkFBUCxDQUF3QjtBQUN0QkMsZ0JBQUFBLFFBQVEsRUFBRTtBQUFFLHFCQUFHLFNBQUw7QUFBZ0IscUJBQUcsU0FBbkI7QUFBOEIscUJBQUc7QUFBakMsaUJBRFk7QUFFdEJDLGdCQUFBQSxlQUFlLEVBQUU7QUFGSyxlQUF4QixDQURGOztBQUhtQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUFuQyxHQUFGOztBQVdBLFFBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNuQyxPQUFELEVBQWE7QUFDL0IyQixNQUFBQSxFQUFFLGtDQUEyQlMsSUFBSSxDQUFDQyxTQUFMLENBQWVyQyxPQUFmLENBQTNCLDhGQUFzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUN0QyxrQkFBTWdCLFFBQU4sRUFBZ0JoQixPQUFoQixFQUF5QjtBQUFFNEIsa0JBQUFBLElBQUksRUFBRTtBQUFSLGlCQUF6QixDQURzQzs7QUFBQTtBQUNoREMsZ0JBQUFBLENBRGdEO0FBR3REQyxnQkFBQUEsTUFBTSxDQUFDRCxDQUFELENBQU4sQ0FBVUUsT0FBVixDQUNFRCxNQUFNLENBQUNFLGdCQUFQLENBQXdCO0FBQ3RCQyxrQkFBQUEsUUFBUSxFQUFFO0FBQUUsdUJBQUcsV0FBTDtBQUFrQix1QkFBRyxXQUFyQjtBQUFrQyx1QkFBRztBQUFyQyxtQkFEWTtBQUV0QkMsa0JBQUFBLGVBQWUsRUFBRTtBQUZLLGlCQUF4QixDQURGOztBQUhzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUF0RCxHQUFGO0FBVUQsS0FYRDs7QUFhQUMsSUFBQUEsV0FBVyxDQUFDRyxTQUFELENBQVg7QUFDQUgsSUFBQUEsV0FBVyxDQUFDLElBQUQsQ0FBWDtBQUNBQSxJQUFBQSxXQUFXLENBQUMsRUFBRCxDQUFYOztBQUVBLFFBQU1JLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUN6QixLQUFELEVBQVEwQixLQUFSLEVBQWV4QyxPQUFmLEVBQXdCeUMsUUFBeEIsRUFBcUM7QUFDeERkLE1BQUFBLEVBQUUsMEJBQW1CYixLQUFuQixtR0FBNkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQzdCWSxnQkFBQUEsQ0FBQyxtQ0FDSVYsUUFESjtBQUVDMEIsa0JBQUFBLG1CQUFtQixFQUFFLHNCQUZ0QjtBQUdDQyxrQkFBQUEsU0FBUyxFQUFFO0FBSFosbUJBSUlILEtBSkosQ0FBRDtBQU1BN0IsZ0JBQUFBLEdBQUcsR0FBRztBQUFFaUIsa0JBQUFBLElBQUksRUFBRTtBQUFSLGlCQUFOO0FBUDZCO0FBQUEsdUJBU1Isa0JBQ25CRixDQURtQjtBQUdqQmtCLGtCQUFBQSxFQUFFLEVBQUUsR0FIYTtBQUlqQkMsa0JBQUFBLE9BQU8sRUFBRTtBQUpRLG1CQUtkN0MsT0FMYyxHQU9uQlcsR0FQbUIsQ0FUUTs7QUFBQTtBQVN2Qm1DLGdCQUFBQSxNQVR1QjtBQW1CN0JoQixnQkFBQUEsTUFBTSxDQUFDZ0IsTUFBRCxDQUFOLENBQWVmLE9BQWYsK0NBQ0tmLFFBREw7QUFFRUUsa0JBQUFBLFFBQVEsRUFBRSxLQUZaO0FBR0VlLGtCQUFBQSxRQUFRLEVBQUUsRUFIWjtBQUlFQyxrQkFBQUEsZUFBZSxFQUFFSSxTQUpuQjtBQUtFUyxrQkFBQUEsa0JBQWtCLEVBQUUsQ0FBQyxFQUFELEVBQUssRUFBTCxFQUFTLENBQVQ7QUFMdEIsbUJBTUtwQyxHQU5MLEdBT0s4QixRQVBMOztBQW5CNkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBN0IsR0FBRjtBQTZCRCxLQTlCRDs7QUFnQ0FGLElBQUFBLFlBQVksQ0FDVix3RUFEVSxFQUVWLEVBRlUsRUFHVixFQUhVLEVBSVY7QUFDRUksTUFBQUEsU0FBUyxFQUFFSyxxQkFBU0wsU0FEdEI7QUFFRU0sTUFBQUEsUUFBUSxFQUFFLElBRlo7QUFHRVAsTUFBQUEsbUJBQW1CLEVBQUVNLHFCQUFTTjtBQUhoQyxLQUpVLENBQVo7QUFXQUgsSUFBQUEsWUFBWSxDQUNWLDZFQURVLEVBRVY7QUFDRVcsTUFBQUEsYUFBYSxFQUFFLEtBRGpCO0FBRUVDLE1BQUFBLGdCQUFnQixFQUFFLEtBRnBCO0FBR0VDLE1BQUFBLDBCQUEwQixFQUFFLEtBSDlCO0FBSUVDLE1BQUFBLDBCQUEwQixFQUFFO0FBSjlCLEtBRlUsRUFRVixFQVJVLEVBU1Y7QUFDRWxDLE1BQUFBLE1BQU0sRUFBRTZCLHFCQUFTN0IsTUFEbkI7QUFFRXdCLE1BQUFBLFNBQVMsRUFBRUsscUJBQVNMLFNBRnRCO0FBR0VNLE1BQUFBLFFBQVEsRUFBRSxJQUhaO0FBSUVQLE1BQUFBLG1CQUFtQixFQUFFTSxxQkFBU047QUFKaEMsS0FUVSxDQUFaOztBQWlCQSxRQUFNWSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDeEMsS0FBRCxFQUFRMEIsS0FBUixFQUFleEMsT0FBZixFQUF3QnlDLFFBQXhCLEVBQXFDO0FBQ3REZCxNQUFBQSxFQUFFLHdCQUFpQmIsS0FBakIsbUdBQTJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUMzQlksZ0JBQUFBLENBQUMsbUNBQ0lWLFFBREo7QUFFQzBCLGtCQUFBQSxtQkFBbUIsRUFBRSxzQkFGdEI7QUFHQ0Msa0JBQUFBLFNBQVMsRUFBRTtBQUhaLG1CQUlJSCxLQUpKLENBQUQ7QUFNQTdCLGdCQUFBQSxHQUFHLEdBQUc7QUFBRWlCLGtCQUFBQSxJQUFJLEVBQUUsTUFBUjtBQUFnQjJCLGtCQUFBQSxJQUFJLEVBQUU7QUFBdEIsaUJBQU47QUFQMkI7QUFBQSx1QkFTTixrQkFDbkI3QixDQURtQjtBQUdqQmtCLGtCQUFBQSxFQUFFLEVBQUUsR0FIYTtBQUlqQkMsa0JBQUFBLE9BQU8sRUFBRTtBQUpRLG1CQUtkN0MsT0FMYyxHQU9uQlcsR0FQbUIsQ0FUTTs7QUFBQTtBQVNyQm1DLGdCQUFBQSxNQVRxQjtBQW1CM0JoQixnQkFBQUEsTUFBTSxDQUFDZ0IsTUFBRCxDQUFOLENBQWVmLE9BQWYsK0NBQ0tmLFFBREw7QUFFRUUsa0JBQUFBLFFBQVEsRUFBRSxJQUZaO0FBR0VlLGtCQUFBQSxRQUFRLEVBQUUsRUFIWjtBQUlFQyxrQkFBQUEsZUFBZSxFQUFFSSxTQUpuQjtBQUtFUyxrQkFBQUEsa0JBQWtCLEVBQUUsQ0FBQyxFQUFELEVBQUssRUFBTCxFQUFTLENBQVQ7QUFMdEIsbUJBTUtwQyxHQU5MLEdBT0s4QixRQVBMOztBQW5CMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBM0IsR0FBRjtBQTZCRCxLQTlCRDs7QUFnQ0FhLElBQUFBLFVBQVUsQ0FDUixrR0FEUSxFQUVSO0FBQ0VKLE1BQUFBLGFBQWEsRUFBRSxLQURqQjtBQUVFQyxNQUFBQSxnQkFBZ0IsRUFBRSxLQUZwQjtBQUdFQyxNQUFBQSwwQkFBMEIsRUFBRSxLQUg5QjtBQUlFQyxNQUFBQSwwQkFBMEIsRUFBRTtBQUo5QixLQUZRLEVBUVIsRUFSUSxFQVNSO0FBQ0VsQyxNQUFBQSxNQUFNLEVBQUU2QixxQkFBUzdCLE1BRG5CO0FBRUV3QixNQUFBQSxTQUFTLEVBQUVLLHFCQUFTTCxTQUZ0QjtBQUdFTSxNQUFBQSxRQUFRLEVBQUUsSUFIWjtBQUlFUCxNQUFBQSxtQkFBbUIsRUFBRU0scUJBQVNOO0FBSmhDLEtBVFEsQ0FBVjtBQWlCQVksSUFBQUEsVUFBVSxDQUNSLDJGQURRLEVBRVIsRUFGUSxFQUdSLEVBSFEsRUFJUjtBQUNFWixNQUFBQSxtQkFBbUIsRUFBRSxzQkFEdkI7QUFFRU8sTUFBQUEsUUFBUSxFQUFFLElBRlo7QUFHRU4sTUFBQUEsU0FBUyxFQUFFO0FBSGIsS0FKUSxDQUFWOztBQVdBLFFBQU1hLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FBQzFDLEtBQUQsRUFBUTBCLEtBQVIsRUFBZXhDLE9BQWYsRUFBd0J5QyxRQUF4QixFQUFxQztBQUM3RGQsTUFBQUEsRUFBRSx3QkFBaUJiLEtBQWpCLG1HQUEyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDM0JZLGdCQUFBQSxDQUFDLG1DQUNJVixRQURKO0FBRUMwQixrQkFBQUEsbUJBQW1CLEVBQUUsc0JBRnRCO0FBR0NDLGtCQUFBQSxTQUFTLEVBQUU7QUFIWixtQkFJSUgsS0FKSixDQUFEO0FBTUE3QixnQkFBQUEsR0FBRyxHQUFHO0FBQUVpQixrQkFBQUEsSUFBSSxFQUFFLE1BQVI7QUFBZ0IyQixrQkFBQUEsSUFBSSxFQUFFO0FBQXRCLGlCQUFOO0FBUDJCO0FBQUEsdUJBU04sa0JBQ25CN0IsQ0FEbUI7QUFHakJrQixrQkFBQUEsRUFBRSxFQUFFLEdBSGE7QUFJakJDLGtCQUFBQSxPQUFPLEVBQUU7QUFKUSxtQkFLZDdDLE9BTGMsR0FPbkJXLEdBUG1CLENBVE07O0FBQUE7QUFTckJtQyxnQkFBQUEsTUFUcUI7QUFtQjNCaEIsZ0JBQUFBLE1BQU0sQ0FBQ2dCLE1BQUQsQ0FBTixDQUFlZixPQUFmLCtDQUNLZixRQURMO0FBRUVFLGtCQUFBQSxRQUFRLEVBQUUsSUFGWjtBQUdFZSxrQkFBQUEsUUFBUSxFQUFFLEVBSFo7QUFJRUMsa0JBQUFBLGVBQWUsRUFBRUksU0FKbkI7QUFLRVMsa0JBQUFBLGtCQUFrQixFQUFFLENBQUMsRUFBRCxFQUFLLEVBQUwsRUFBUyxDQUFUO0FBTHRCLG1CQU1LcEMsR0FOTCxHQU9LOEIsUUFQTDs7QUFuQjJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQTNCLEdBQUY7QUE2QkQsS0E5QkQ7O0FBZ0NBZSxJQUFBQSxpQkFBaUIsQ0FDZiwrRkFEZSxFQUVmO0FBQ0VOLE1BQUFBLGFBQWEsRUFBRSxLQURqQjtBQUVFQyxNQUFBQSxnQkFBZ0IsRUFBRSxLQUZwQjtBQUdFQyxNQUFBQSwwQkFBMEIsRUFBRSxLQUg5QjtBQUlFQyxNQUFBQSwwQkFBMEIsRUFBRTtBQUo5QixLQUZlLEVBUWYsRUFSZSxFQVNmO0FBQ0VsQyxNQUFBQSxNQUFNLEVBQUU2QixxQkFBUzdCLE1BRG5CO0FBRUV3QixNQUFBQSxTQUFTLEVBQUVLLHFCQUFTTCxTQUZ0QjtBQUdFTSxNQUFBQSxRQUFRLEVBQUUsSUFIWjtBQUlFUCxNQUFBQSxtQkFBbUIsRUFBRU0scUJBQVNOO0FBSmhDLEtBVGUsQ0FBakI7QUFpQkFjLElBQUFBLGlCQUFpQixDQUNmLHdGQURlLEVBRWYsRUFGZSxFQUdmLEVBSGUsRUFJZjtBQUNFYixNQUFBQSxTQUFTLEVBQUVLLHFCQUFTTCxTQUR0QjtBQUVFTSxNQUFBQSxRQUFRLEVBQUUsSUFGWjtBQUdFUCxNQUFBQSxtQkFBbUIsRUFBRU0scUJBQVNOO0FBSGhDLEtBSmUsQ0FBakI7O0FBV0EsUUFBTWUsY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixDQUFDM0MsS0FBRCxFQUFRMEIsS0FBUixFQUFleEMsT0FBZixFQUF3QnlDLFFBQXhCLEVBQXFDO0FBQzFEZCxNQUFBQSxFQUFFLDRCQUFxQmIsS0FBckIsbUdBQStCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUMvQlksZ0JBQUFBLENBQUMsbUNBQ0lWLFFBREo7QUFFQzBCLGtCQUFBQSxtQkFBbUIsRUFBRSxzQkFGdEI7QUFHQ0Msa0JBQUFBLFNBQVMsRUFBRTtBQUhaLG1CQUlJSCxLQUpKLENBQUQ7QUFNQTdCLGdCQUFBQSxHQUFHLEdBQUc7QUFBRWlCLGtCQUFBQSxJQUFJLEVBQUUsVUFBUjtBQUFvQjJCLGtCQUFBQSxJQUFJLEVBQUU7QUFBMUIsaUJBQU47QUFQK0I7QUFBQSx1QkFTVixrQkFDbkI3QixDQURtQjtBQUdqQmtCLGtCQUFBQSxFQUFFLEVBQUUsR0FIYTtBQUlqQkMsa0JBQUFBLE9BQU8sRUFBRTtBQUpRLG1CQUtkN0MsT0FMYyxHQU9uQlcsR0FQbUIsQ0FUVTs7QUFBQTtBQVN6Qm1DLGdCQUFBQSxNQVR5QjtBQW1CL0JoQixnQkFBQUEsTUFBTSxDQUFDZ0IsTUFBRCxDQUFOLENBQWVmLE9BQWYsK0NBQ0tmLFFBREw7QUFFRTBCLGtCQUFBQSxtQkFBbUIsRUFBRSxzQkFGdkI7QUFHRUMsa0JBQUFBLFNBQVMsRUFBRSxXQUhiO0FBSUV6QixrQkFBQUEsUUFBUSxFQUFFLElBSlo7QUFLRW5CLGtCQUFBQSxPQUFPLEVBQUU7QUFDUCx1QkFBRyxDQUNEO0FBQUVlLHNCQUFBQSxLQUFLLEVBQUUsS0FBVDtBQUFnQkMsc0JBQUFBLEtBQUssRUFBRSxHQUF2QjtBQUE0QjJDLHNCQUFBQSxPQUFPLEVBQUU7QUFBckMscUJBREMsRUFFRDtBQUFFNUMsc0JBQUFBLEtBQUssRUFBRSxRQUFUO0FBQW1CQyxzQkFBQUEsS0FBSyxFQUFFLEdBQTFCO0FBQStCMkMsc0JBQUFBLE9BQU8sRUFBRTtBQUF4QyxxQkFGQyxFQUdEO0FBQUU1QyxzQkFBQUEsS0FBSyxFQUFFLE1BQVQ7QUFBaUJDLHNCQUFBQSxLQUFLLEVBQUUsR0FBeEI7QUFBNkIyQyxzQkFBQUEsT0FBTyxFQUFFO0FBQXRDLHFCQUhDLENBREk7QUFNUCx1QkFBRyxDQUNEO0FBQUU1QyxzQkFBQUEsS0FBSyxFQUFFLE1BQVQ7QUFBaUJDLHNCQUFBQSxLQUFLLEVBQUUsR0FBeEI7QUFBNkIyQyxzQkFBQUEsT0FBTyxFQUFFO0FBQXRDLHFCQURDLEVBRUQ7QUFBRTVDLHNCQUFBQSxLQUFLLEVBQUUsTUFBVDtBQUFpQkMsc0JBQUFBLEtBQUssRUFBRSxHQUF4QjtBQUE2QjJDLHNCQUFBQSxPQUFPLEVBQUU7QUFBdEMscUJBRkMsRUFHRDtBQUFFNUMsc0JBQUFBLEtBQUssRUFBRSxRQUFUO0FBQW1CQyxzQkFBQUEsS0FBSyxFQUFFLEdBQTFCO0FBQStCMkMsc0JBQUFBLE9BQU8sRUFBRTtBQUF4QyxxQkFIQyxDQU5JO0FBV1AsdUJBQUcsQ0FBQztBQUFFNUMsc0JBQUFBLEtBQUssRUFBRSxNQUFUO0FBQWlCQyxzQkFBQUEsS0FBSyxFQUFFLEdBQXhCO0FBQTZCMkMsc0JBQUFBLE9BQU8sRUFBRTtBQUF0QyxxQkFBRDtBQVhJLG1CQUxYO0FBa0JFWCxrQkFBQUEsa0JBQWtCLEVBQUUsQ0FBQyxFQUFELEVBQUssRUFBTCxFQUFTLENBQVQ7QUFsQnRCLG1CQW1CS3BDLEdBbkJMLEdBb0JLOEIsUUFwQkw7O0FBbkIrQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUEvQixHQUFGO0FBMENELEtBM0NEOztBQTZDQWdCLElBQUFBLGNBQWMsQ0FDWixrQkFEWSxFQUVaLEVBRlksRUFHWjtBQUNFMUMsTUFBQUEsS0FBSyxFQUFFO0FBQ0wsV0FBRyxLQURFO0FBRUwsV0FBRyxNQUZFO0FBR0wsV0FBRztBQUhFO0FBRFQsS0FIWSxFQVVaO0FBQ0VrQixNQUFBQSxRQUFRLEVBQUU7QUFBRSxXQUFHLFNBQUw7QUFBZ0IsV0FBRyxTQUFuQjtBQUE4QixXQUFHO0FBQWpDLE9BRFo7QUFFRWdCLE1BQUFBLFFBQVEsRUFBRSxJQUZaO0FBR0VmLE1BQUFBLGVBQWUsRUFBRTtBQUhuQixLQVZZLENBQWQ7QUFpQkF1QixJQUFBQSxjQUFjLENBQ1osNEJBRFksRUFFWixFQUZZLEVBR1o7QUFDRTFDLE1BQUFBLEtBQUssRUFBRTtBQUNMLFdBQUcsS0FERTtBQUVMLFdBQUcsTUFGRTtBQUdMLFdBQUc7QUFIRTtBQURULEtBSFksRUFVWjtBQUNFa0IsTUFBQUEsUUFBUSxFQUFFO0FBQUUsV0FBRyxTQUFMO0FBQWdCLFdBQUcsU0FBbkI7QUFBOEIsV0FBRztBQUFqQyxPQURaO0FBRUVnQixNQUFBQSxRQUFRLEVBQUUsSUFGWjtBQUdFZixNQUFBQSxlQUFlLEVBQUU7QUFIbkIsS0FWWSxDQUFkO0FBaUJBdUIsSUFBQUEsY0FBYyxDQUNaLDZDQURZLEVBRVosRUFGWSxFQUdaO0FBQ0UxQyxNQUFBQSxLQUFLLEVBQUU7QUFDTCxXQUFHLE1BREU7QUFFTCxXQUFHLE1BRkU7QUFHTCxXQUFHO0FBSEU7QUFEVCxLQUhZLEVBVVo7QUFDRWtCLE1BQUFBLFFBQVEsRUFBRTtBQUFFLFdBQUcsU0FBTDtBQUFnQixXQUFHLFNBQW5CO0FBQThCLFdBQUc7QUFBakMsT0FEWjtBQUVFZ0IsTUFBQUEsUUFBUSxFQUFFLElBRlo7QUFHRWYsTUFBQUEsZUFBZSxFQUFFO0FBSG5CLEtBVlksQ0FBZDtBQWlCQXVCLElBQUFBLGNBQWMsQ0FDWixvQkFEWSxFQUVaLEVBRlksRUFHWjtBQUNFMUMsTUFBQUEsS0FBSyxFQUFFO0FBQ0wsV0FBRyxLQURFO0FBRUwsV0FBRyxPQUZFO0FBR0wsV0FBRztBQUhFO0FBRFQsS0FIWSxFQVVaO0FBQ0VrQixNQUFBQSxRQUFRLEVBQUU7QUFBRSxXQUFHLFdBQUw7QUFBa0IsV0FBRyxXQUFyQjtBQUFrQyxXQUFHO0FBQXJDLE9BRFo7QUFFRWdCLE1BQUFBLFFBQVEsRUFBRSxJQUZaO0FBR0VmLE1BQUFBLGVBQWUsRUFBRTtBQUhuQixLQVZZLENBQWQ7QUFnQkQsR0FuVU8sQ0FBUjtBQXFVQVQsRUFBQUEsUUFBUSxDQUFDLFdBQUQsRUFBYyxZQUFNO0FBQzFCLFFBQU1rQyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDM0QsT0FBRCxFQUFVeUMsUUFBVixFQUF1QjtBQUN6Q2QsTUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBTTtBQUN2QixZQUFNaUMsS0FBSyxHQUFHLHFCQUFTNUMsUUFBVCxFQUFtQmhCLE9BQW5CLENBQWQ7QUFFQThCLFFBQUFBLE1BQU0sQ0FBQzhCLEtBQUQsQ0FBTixDQUFjN0IsT0FBZCxDQUFzQlUsUUFBdEI7QUFDRCxPQUpDLENBQUY7QUFLRCxLQU5EOztBQVFBa0IsSUFBQUEsV0FBVyxDQUFDO0FBQUU1QyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLEtBQUw7QUFBWSxXQUFHLE1BQWY7QUFBdUIsV0FBRztBQUExQjtBQUFULEtBQUQsRUFBZ0QsQ0FBaEQsQ0FBWDtBQUNBNEMsSUFBQUEsV0FBVyxDQUFDO0FBQUU1QyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLFFBQUw7QUFBZSxXQUFHLE1BQWxCO0FBQTBCLFdBQUc7QUFBN0I7QUFBVCxLQUFELEVBQW1ELENBQW5ELENBQVg7QUFDQTRDLElBQUFBLFdBQVcsQ0FBQztBQUFFNUMsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxNQUFMO0FBQWEsV0FBRyxNQUFoQjtBQUF3QixXQUFHO0FBQTNCO0FBQVQsS0FBRCxFQUFpRCxDQUFqRCxDQUFYO0FBQ0E0QyxJQUFBQSxXQUFXLENBQUM7QUFBRTVDLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsS0FBTDtBQUFZLFdBQUcsTUFBZjtBQUF1QixXQUFHO0FBQTFCO0FBQVQsS0FBRCxFQUFnRCxDQUFoRCxDQUFYO0FBQ0E0QyxJQUFBQSxXQUFXLENBQUM7QUFBRTVDLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsUUFBTDtBQUFlLFdBQUcsTUFBbEI7QUFBMEIsV0FBRztBQUE3QjtBQUFULEtBQUQsRUFBbUQsQ0FBbkQsQ0FBWDtBQUNBNEMsSUFBQUEsV0FBVyxDQUFDO0FBQUU1QyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLE1BQUw7QUFBYSxXQUFHLE1BQWhCO0FBQXdCLFdBQUc7QUFBM0I7QUFBVCxLQUFELEVBQWlELENBQWpELENBQVg7QUFDQTRDLElBQUFBLFdBQVcsQ0FBQztBQUFFNUMsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxLQUFMO0FBQVksV0FBRyxRQUFmO0FBQXlCLFdBQUc7QUFBNUI7QUFBVCxLQUFELEVBQWtELENBQWxELENBQVg7QUFDQTRDLElBQUFBLFdBQVcsQ0FBQztBQUFFNUMsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxRQUFMO0FBQWUsV0FBRyxRQUFsQjtBQUE0QixXQUFHO0FBQS9CO0FBQVQsS0FBRCxFQUFxRCxDQUFyRCxDQUFYO0FBQ0E0QyxJQUFBQSxXQUFXLENBQUM7QUFBRTVDLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsTUFBTDtBQUFhLFdBQUcsUUFBaEI7QUFBMEIsV0FBRztBQUE3QjtBQUFULEtBQUQsRUFBbUQsQ0FBbkQsQ0FBWDtBQUVBNEMsSUFBQUEsV0FBVyxDQUFDO0FBQUU1QyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLE1BQUw7QUFBYSxXQUFHLE9BQWhCO0FBQXlCLFdBQUc7QUFBNUI7QUFBVCxLQUFELEVBQWtELElBQWxELENBQVg7QUFDQTRDLElBQUFBLFdBQVcsQ0FBQztBQUFFNUMsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxLQUFMO0FBQVksV0FBRyxPQUFmO0FBQXdCLFdBQUc7QUFBM0I7QUFBVCxLQUFELEVBQWlELElBQWpELENBQVg7QUFDQTRDLElBQUFBLFdBQVcsQ0FBQztBQUFFNUMsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxLQUFMO0FBQVksV0FBRyxPQUFmO0FBQXdCLFdBQUc7QUFBM0I7QUFBVCxLQUFELEVBQWdELENBQWhELENBQVg7O0FBRUEsUUFBTThDLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUM3RCxPQUFELEVBQWE7QUFDL0IyQixNQUFBQSxFQUFFLHFDQUE4QlMsSUFBSSxDQUFDQyxTQUFMLENBQWVyQyxPQUFmLENBQTlCLEdBQXlELFlBQU07QUFDL0Q4QixRQUFBQSxNQUFNLENBQUMscUJBQVNkLFFBQVQsRUFBbUJoQixPQUFuQixDQUFELENBQU4sQ0FBb0MrQixPQUFwQyxDQUE0QyxDQUE1QztBQUNELE9BRkMsQ0FBRjtBQUdELEtBSkQ7O0FBTUE4QixJQUFBQSxXQUFXLENBQUN2QixTQUFELENBQVg7QUFDQXVCLElBQUFBLFdBQVcsQ0FBQyxJQUFELENBQVg7QUFDQUEsSUFBQUEsV0FBVyxDQUFDLEVBQUQsQ0FBWDtBQUNELEdBaENPLENBQVI7QUFrQ0FwQyxFQUFBQSxRQUFRLENBQUMsNkJBQUQsRUFBZ0MsWUFBTTtBQUM1QyxRQUFNcUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFnQixDQUFDQyxPQUFELEVBQVV2QixLQUFWLEVBQWlCd0IsWUFBakIsRUFBK0JyRCxHQUEvQixFQUFvQzhCLFFBQXBDLEVBQWlEO0FBQ3JFZCxNQUFBQSxFQUFFLENBQUNvQyxPQUFELDZGQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQ1csb0RBRWQvQyxRQUZjLEdBR2R3QixLQUhjLEdBS25Cd0IsWUFMbUIsRUFNbkJyRCxHQU5tQixDQURYOztBQUFBO0FBQ0ptQyxnQkFBQUEsTUFESTtBQVVWaEIsZ0JBQUFBLE1BQU0sQ0FBQ2dCLE1BQUQsQ0FBTixDQUFlZixPQUFmLENBQXVCRCxNQUFNLENBQUNFLGdCQUFQLENBQXdCUyxRQUF4QixDQUF2Qjs7QUFWVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUFWLEdBQUY7QUFZRCxLQWJEOztBQWVBcUIsSUFBQUEsYUFBYSxDQUNYLCtCQURXLEVBRVg7QUFBRXRELE1BQUFBLGNBQWMsRUFBRTtBQUFsQixLQUZXLEVBR1g7QUFBRU8sTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxNQUFMO0FBQWEsV0FBRyxPQUFoQjtBQUF5QixXQUFHO0FBQTVCO0FBQVQsS0FIVyxFQUlYO0FBQUVhLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBSlcsRUFLWDtBQUFFZ0MsTUFBQUEsS0FBSyxFQUFFO0FBQVQsS0FMVyxDQUFiO0FBUUFFLElBQUFBLGFBQWEsQ0FDWCxnQ0FEVyxFQUVYO0FBQUV0RCxNQUFBQSxjQUFjLEVBQUU7QUFBbEIsS0FGVyxFQUdYO0FBQUVPLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsTUFBTDtBQUFhLFdBQUcsT0FBaEI7QUFBeUIsV0FBRztBQUE1QjtBQUFULEtBSFcsRUFJWDtBQUFFYSxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUpXLEVBS1g7QUFBRWdDLE1BQUFBLEtBQUssRUFBRTtBQUFULEtBTFcsQ0FBYjtBQVFBRSxJQUFBQSxhQUFhLENBQ1gsMkRBRFcsRUFFWDtBQUFFdEQsTUFBQUEsY0FBYyxFQUFFO0FBQWxCLEtBRlcsRUFHWDtBQUFFTyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLE1BQUw7QUFBYSxXQUFHLE9BQWhCO0FBQXlCLFdBQUc7QUFBNUI7QUFBVCxLQUhXLEVBSVg7QUFDRWEsTUFBQUEsSUFBSSxFQUFFLFVBRFI7QUFFRXBCLE1BQUFBLGNBQWMsRUFBRTtBQUZsQixLQUpXLEVBUVg7QUFBRW9ELE1BQUFBLEtBQUssRUFBRTtBQUFULEtBUlcsQ0FBYjtBQVdBRSxJQUFBQSxhQUFhLENBQ1gsMkRBRFcsRUFFWDtBQUFFdEQsTUFBQUEsY0FBYyxFQUFFO0FBQWxCLEtBRlcsRUFHWDtBQUFFTyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLE1BQUw7QUFBYSxXQUFHLE9BQWhCO0FBQXlCLFdBQUc7QUFBNUI7QUFBVCxLQUhXLEVBSVg7QUFDRWEsTUFBQUEsSUFBSSxFQUFFLFVBRFI7QUFFRXBCLE1BQUFBLGNBQWMsRUFBRTtBQUZsQixLQUpXLEVBUVg7QUFBRW9ELE1BQUFBLEtBQUssRUFBRTtBQUFULEtBUlcsQ0FBYjtBQVVELEdBckRPLENBQVI7QUF1REFuQyxFQUFBQSxRQUFRLENBQUMsU0FBRCxFQUFZLFlBQU07QUFDeEIsUUFBTXFDLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQ3RELGNBQUQsRUFBaUJ3RCxZQUFqQixFQUErQnZCLFFBQS9CLEVBQTRDO0FBQ2hFZCxNQUFBQSxFQUFFLHlCQUFrQm5CLGNBQWMsR0FBRyxTQUFILEdBQWUsRUFBL0MsOEZBQXFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQ2hDLG9EQUVkUSxRQUZjO0FBR2pCUixrQkFBQUEsY0FBYyxFQUFkQTtBQUhpQixvQkFLbkJ3RCxZQUxtQixDQURnQzs7QUFBQTtBQUMvQ2xCLGdCQUFBQSxNQUQrQztBQVNyRGhCLGdCQUFBQSxNQUFNLENBQUNnQixNQUFELENBQU4sQ0FBZWYsT0FBZixDQUF1QlUsUUFBdkI7O0FBVHFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQXJELEdBQUY7QUFXRCxLQVpEOztBQWNBcUIsSUFBQUEsYUFBYSxDQUFDLElBQUQsRUFBTztBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxLQUFMO0FBQVksV0FBRyxNQUFmO0FBQXVCLFdBQUc7QUFBMUI7QUFBVCxLQUFQLEVBQXNEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZSyxNQUFBQSxLQUFLLEVBQUU7QUFBbkIsS0FBdEQsQ0FBYjtBQUNBSCxJQUFBQSxhQUFhLENBQUMsSUFBRCxFQUFPO0FBQUUvQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLFFBQUw7QUFBZSxXQUFHLE1BQWxCO0FBQTBCLFdBQUc7QUFBN0I7QUFBVCxLQUFQLEVBQXlEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZSyxNQUFBQSxLQUFLLEVBQUU7QUFBbkIsS0FBekQsQ0FBYjtBQUNBSCxJQUFBQSxhQUFhLENBQUMsSUFBRCxFQUFPO0FBQUUvQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLE1BQUw7QUFBYSxXQUFHLE1BQWhCO0FBQXdCLFdBQUc7QUFBM0I7QUFBVCxLQUFQLEVBQXVEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZSyxNQUFBQSxLQUFLLEVBQUU7QUFBbkIsS0FBdkQsQ0FBYjtBQUNBSCxJQUFBQSxhQUFhLENBQUMsSUFBRCxFQUFPO0FBQUUvQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLEtBQUw7QUFBWSxXQUFHLE1BQWY7QUFBdUIsV0FBRztBQUExQjtBQUFULEtBQVAsRUFBc0Q7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUF0RCxDQUFiO0FBQ0FILElBQUFBLGFBQWEsQ0FBQyxJQUFELEVBQU87QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsUUFBTDtBQUFlLFdBQUcsTUFBbEI7QUFBMEIsV0FBRztBQUE3QjtBQUFULEtBQVAsRUFBeUQ7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUF6RCxDQUFiO0FBQ0FILElBQUFBLGFBQWEsQ0FBQyxJQUFELEVBQU87QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsTUFBTDtBQUFhLFdBQUcsTUFBaEI7QUFBd0IsV0FBRztBQUEzQjtBQUFULEtBQVAsRUFBdUQ7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUF2RCxDQUFiO0FBQ0FILElBQUFBLGFBQWEsQ0FBQyxJQUFELEVBQU87QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsS0FBTDtBQUFZLFdBQUcsUUFBZjtBQUF5QixXQUFHO0FBQTVCO0FBQVQsS0FBUCxFQUF3RDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUssTUFBQUEsS0FBSyxFQUFFO0FBQW5CLEtBQXhELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLElBQUQsRUFBTztBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxRQUFMO0FBQWUsV0FBRyxRQUFsQjtBQUE0QixXQUFHO0FBQS9CO0FBQVQsS0FBUCxFQUEyRDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUssTUFBQUEsS0FBSyxFQUFFO0FBQW5CLEtBQTNELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLElBQUQsRUFBTztBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxNQUFMO0FBQWEsV0FBRyxRQUFoQjtBQUEwQixXQUFHO0FBQTdCO0FBQVQsS0FBUCxFQUF5RDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUssTUFBQUEsS0FBSyxFQUFFO0FBQW5CLEtBQXpELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLElBQUQsRUFBTztBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxNQUFMO0FBQWEsV0FBRyxPQUFoQjtBQUF5QixXQUFHO0FBQTVCO0FBQVQsS0FBUCxFQUF3RDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLElBQVQ7QUFBZUssTUFBQUEsS0FBSyxFQUFFO0FBQXRCLEtBQXhELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLElBQUQsRUFBTztBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxLQUFMO0FBQVksV0FBRyxPQUFmO0FBQXdCLFdBQUc7QUFBM0I7QUFBVCxLQUFQLEVBQXVEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsSUFBVDtBQUFlSyxNQUFBQSxLQUFLLEVBQUU7QUFBdEIsS0FBdkQsQ0FBYjtBQUNBSCxJQUFBQSxhQUFhLENBQUMsSUFBRCxFQUFPO0FBQUUvQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLEtBQUw7QUFBWSxXQUFHLE9BQWY7QUFBd0IsV0FBRztBQUEzQjtBQUFULEtBQVAsRUFBc0Q7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUF0RCxDQUFiO0FBRUFILElBQUFBLGFBQWEsQ0FBQyxLQUFELEVBQVE7QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsS0FBTDtBQUFZLFdBQUcsTUFBZjtBQUF1QixXQUFHO0FBQTFCO0FBQVQsS0FBUixFQUF1RDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUssTUFBQUEsS0FBSyxFQUFFO0FBQW5CLEtBQXZELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLEtBQUQsRUFBUTtBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxRQUFMO0FBQWUsV0FBRyxNQUFsQjtBQUEwQixXQUFHO0FBQTdCO0FBQVQsS0FBUixFQUEwRDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUssTUFBQUEsS0FBSyxFQUFFO0FBQW5CLEtBQTFELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLEtBQUQsRUFBUTtBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxNQUFMO0FBQWEsV0FBRyxNQUFoQjtBQUF3QixXQUFHO0FBQTNCO0FBQVQsS0FBUixFQUF3RDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUssTUFBQUEsS0FBSyxFQUFFO0FBQW5CLEtBQXhELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLEtBQUQsRUFBUTtBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxLQUFMO0FBQVksV0FBRyxNQUFmO0FBQXVCLFdBQUc7QUFBMUI7QUFBVCxLQUFSLEVBQXVEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZSyxNQUFBQSxLQUFLLEVBQUU7QUFBbkIsS0FBdkQsQ0FBYjtBQUNBSCxJQUFBQSxhQUFhLENBQUMsS0FBRCxFQUFRO0FBQUUvQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLFFBQUw7QUFBZSxXQUFHLE1BQWxCO0FBQTBCLFdBQUc7QUFBN0I7QUFBVCxLQUFSLEVBQTBEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZSyxNQUFBQSxLQUFLLEVBQUU7QUFBbkIsS0FBMUQsQ0FBYjtBQUNBSCxJQUFBQSxhQUFhLENBQUMsS0FBRCxFQUFRO0FBQUUvQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLE1BQUw7QUFBYSxXQUFHLE1BQWhCO0FBQXdCLFdBQUc7QUFBM0I7QUFBVCxLQUFSLEVBQXdEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZSyxNQUFBQSxLQUFLLEVBQUU7QUFBbkIsS0FBeEQsQ0FBYjtBQUNBSCxJQUFBQSxhQUFhLENBQUMsS0FBRCxFQUFRO0FBQUUvQyxNQUFBQSxLQUFLLEVBQUU7QUFBRSxXQUFHLEtBQUw7QUFBWSxXQUFHLFFBQWY7QUFBeUIsV0FBRztBQUE1QjtBQUFULEtBQVIsRUFBeUQ7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUF6RCxDQUFiO0FBQ0FILElBQUFBLGFBQWEsQ0FBQyxLQUFELEVBQVE7QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsUUFBTDtBQUFlLFdBQUcsUUFBbEI7QUFBNEIsV0FBRztBQUEvQjtBQUFULEtBQVIsRUFBNEQ7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUE1RCxDQUFiO0FBQ0FILElBQUFBLGFBQWEsQ0FBQyxLQUFELEVBQVE7QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsTUFBTDtBQUFhLFdBQUcsUUFBaEI7QUFBMEIsV0FBRztBQUE3QjtBQUFULEtBQVIsRUFBMEQ7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUExRCxDQUFiO0FBQ0FILElBQUFBLGFBQWEsQ0FBQyxLQUFELEVBQVE7QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsTUFBTDtBQUFhLFdBQUcsT0FBaEI7QUFBeUIsV0FBRztBQUE1QjtBQUFULEtBQVIsRUFBeUQ7QUFBRTZDLE1BQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLE1BQUFBLEtBQUssRUFBRTtBQUFuQixLQUF6RCxDQUFiO0FBQ0FILElBQUFBLGFBQWEsQ0FBQyxLQUFELEVBQVE7QUFBRS9DLE1BQUFBLEtBQUssRUFBRTtBQUFFLFdBQUcsS0FBTDtBQUFZLFdBQUcsT0FBZjtBQUF3QixXQUFHO0FBQTNCO0FBQVQsS0FBUixFQUF3RDtBQUFFNkMsTUFBQUEsS0FBSyxFQUFFLENBQVQ7QUFBWUssTUFBQUEsS0FBSyxFQUFFO0FBQW5CLEtBQXhELENBQWI7QUFDQUgsSUFBQUEsYUFBYSxDQUFDLEtBQUQsRUFBUTtBQUFFL0MsTUFBQUEsS0FBSyxFQUFFO0FBQUUsV0FBRyxLQUFMO0FBQVksV0FBRyxPQUFmO0FBQXdCLFdBQUc7QUFBM0I7QUFBVCxLQUFSLEVBQXVEO0FBQUU2QyxNQUFBQSxLQUFLLEVBQUUsQ0FBVDtBQUFZSyxNQUFBQSxLQUFLLEVBQUU7QUFBbkIsS0FBdkQsQ0FBYjs7QUFFQSxRQUFNOUIsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ25DLE9BQUQsRUFBYTtBQUMvQjJCLE1BQUFBLEVBQUUsdUNBQWdDUyxJQUFJLENBQUNDLFNBQUwsQ0FBZXJDLE9BQWYsQ0FBaEMsOEZBQTJEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQzNDLG9CQUFRZ0IsUUFBUixFQUFrQmhCLE9BQWxCLENBRDJDOztBQUFBO0FBQ3JENkIsZ0JBQUFBLENBRHFEO0FBRzNEQyxnQkFBQUEsTUFBTSxDQUFDRCxDQUFELENBQU4sQ0FBVUUsT0FBVixDQUFrQkQsTUFBTSxDQUFDRSxnQkFBUCxDQUF3QjtBQUFFNEIsa0JBQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlLLGtCQUFBQSxLQUFLLEVBQUU7QUFBbkIsaUJBQXhCLENBQWxCOztBQUgyRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQUEzRCxHQUFGO0FBS0QsS0FORDs7QUFRQTlCLElBQUFBLFdBQVcsQ0FBQ0csU0FBRCxDQUFYO0FBQ0FILElBQUFBLFdBQVcsQ0FBQyxJQUFELENBQVg7QUFDQUEsSUFBQUEsV0FBVyxDQUFDLEVBQUQsQ0FBWDtBQUNELEdBcERPLENBQVI7QUFzREFWLEVBQUFBLFFBQVEsQ0FBQyxZQUFELEVBQWUsWUFBTTtBQUMzQkUsSUFBQUEsRUFBRSxDQUFDLGlEQUFELEVBQW9ELFlBQU07QUFDMURHLE1BQUFBLE1BQU0sQ0FBQyx1QkFBVyxJQUFYLENBQUQsQ0FBTixDQUF5QkMsT0FBekIsQ0FBaUMsRUFBakM7QUFDQUQsTUFBQUEsTUFBTSxDQUFDLHVCQUFXUSxTQUFYLENBQUQsQ0FBTixDQUE4QlAsT0FBOUIsQ0FBc0MsRUFBdEM7QUFDRCxLQUhDLENBQUY7QUFLQUosSUFBQUEsRUFBRSxDQUFDLHlCQUFELEVBQTRCLFlBQU07QUFDbENHLE1BQUFBLE1BQU0sQ0FBQyx1QkFBVyxvQkFBWCxDQUFELENBQU4sQ0FBeUNDLE9BQXpDLENBQWlELFNBQWpEO0FBQ0QsS0FGQyxDQUFGO0FBSUFOLElBQUFBLFFBQVEsQ0FBQyxrQkFBRCxFQUFxQixZQUFNO0FBQ2pDLFVBQUlULFFBQUo7QUFDQWtELE1BQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2ZsRCxRQUFBQSxRQUFRLEdBQUc7QUFDVGpCLFVBQUFBLE9BQU8sRUFBUEE7QUFEUyxTQUFYO0FBR0QsT0FKUyxDQUFWO0FBTUE0QixNQUFBQSxFQUFFLENBQUMsNENBQUQsNkZBQStDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQzVCLHlDQUE2QlgsUUFBN0IsRUFBdUM7QUFDeERZLGtCQUFBQSxJQUFJLEVBQUUsUUFEa0Q7QUFFeEQyQixrQkFBQUEsSUFBSSxFQUFFO0FBRmtELGlCQUF2QyxDQUQ0Qjs7QUFBQTtBQUN6Q1ksZ0JBQUFBLElBRHlDO0FBSy9DckMsZ0JBQUFBLE1BQU0sQ0FBQ3FDLElBQUQsQ0FBTixDQUFhcEMsT0FBYixDQUFxQjtBQUFFYSxrQkFBQUEsRUFBRSxFQUFFLEdBQU47QUFBVzdCLGtCQUFBQSxLQUFLLEVBQUU7QUFBRSx1QkFBRyxLQUFMO0FBQVksdUJBQUcsTUFBZjtBQUF1Qix1QkFBRztBQUExQjtBQUFsQixpQkFBckI7O0FBTCtDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQS9DLEdBQUY7QUFRQVksTUFBQUEsRUFBRSxDQUFDLDZCQUFELDZGQUFnQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUNULHlDQUE2QlgsUUFBN0IsRUFBdUM7QUFBRVksa0JBQUFBLElBQUksRUFBRSxRQUFSO0FBQWtCMkIsa0JBQUFBLElBQUksRUFBRTtBQUF4QixpQkFBdkMsQ0FEUzs7QUFBQTtBQUMxQmEsZ0JBQUFBLFFBRDBCO0FBRWhDdEMsZ0JBQUFBLE1BQU0sQ0FBQ3NDLFFBQUQsQ0FBTixDQUFpQkMsUUFBakI7O0FBRmdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BQWhDLEdBQUY7QUFJRCxLQXBCTyxDQUFSO0FBcUJELEdBL0JPLENBQVI7QUFpQ0E1QyxFQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBTTtBQUNqQ0UsSUFBQUEsRUFBRSxDQUFDLG1FQUFELDZGQUFzRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUNuRCx5Q0FBNkJYLFFBQTdCLEVBQXVDO0FBQ3hEWSxnQkFBQUEsSUFBSSxFQUFFLFFBRGtEO0FBRXhEMkIsZ0JBQUFBLElBQUksRUFBRTtBQUZrRCxlQUF2QyxDQURtRDs7QUFBQTtBQUNoRVksY0FBQUEsSUFEZ0U7QUFNdEVyQyxjQUFBQSxNQUFNLENBQUNxQyxJQUFELENBQU4sQ0FBYXBDLE9BQWIsQ0FBcUI7QUFBRWEsZ0JBQUFBLEVBQUUsRUFBRSxHQUFOO0FBQVc3QixnQkFBQUEsS0FBSyxFQUFFO0FBQUUscUJBQUcsS0FBTDtBQUFZLHFCQUFHLE1BQWY7QUFBdUIscUJBQUc7QUFBMUI7QUFBbEIsZUFBckI7O0FBTnNFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQXRFLEdBQUY7QUFTQVksSUFBQUEsRUFBRSxDQUFDLGlFQUFELDZGQUFvRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUNqRCx5Q0FBNkJYLFFBQTdCLEVBQXVDO0FBQ3hEWSxnQkFBQUEsSUFBSSxFQUFFLE1BRGtEO0FBRXhEMkIsZ0JBQUFBLElBQUksRUFBRTtBQUZrRCxlQUF2QyxDQURpRDs7QUFBQTtBQUM5RFksY0FBQUEsSUFEOEQ7QUFNcEVyQyxjQUFBQSxNQUFNLENBQUNxQyxJQUFELENBQU4sQ0FBYXBDLE9BQWIsQ0FBcUI7QUFBRWEsZ0JBQUFBLEVBQUUsRUFBRSxHQUFOO0FBQVc3QixnQkFBQUEsS0FBSyxFQUFFO0FBQUUscUJBQUcsS0FBTDtBQUFZLHFCQUFHLE1BQWY7QUFBdUIscUJBQUc7QUFBMUI7QUFBbEIsZUFBckI7O0FBTm9FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQXBFLEdBQUY7QUFTQVksSUFBQUEsRUFBRSxDQUFDLGtDQUFELDZGQUFxQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUNkLHlDQUE2QlgsUUFBN0IsRUFBdUM7QUFBRVksZ0JBQUFBLElBQUksRUFBRSxVQUFSO0FBQW9CMkIsZ0JBQUFBLElBQUksRUFBRTtBQUExQixlQUF2QyxDQURjOztBQUFBO0FBQy9CYSxjQUFBQSxRQUQrQjtBQUdyQ3RDLGNBQUFBLE1BQU0sQ0FBQ3NDLFFBQUQsQ0FBTixDQUFpQkMsUUFBakI7O0FBSHFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQXJDLEdBQUY7QUFNQTFDLElBQUFBLEVBQUUsQ0FBQyxpQ0FBRCw2RkFBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxxQkFDYix5Q0FBNkJYLFFBQTdCLEVBQXVDO0FBQUVZLGdCQUFBQSxJQUFJLEVBQUUsUUFBUjtBQUFrQjJCLGdCQUFBQSxJQUFJLEVBQUU7QUFBeEIsZUFBdkMsQ0FEYTs7QUFBQTtBQUM5QmEsY0FBQUEsUUFEOEI7QUFHcEN0QyxjQUFBQSxNQUFNLENBQUNzQyxRQUFELENBQU4sQ0FBaUJDLFFBQWpCOztBQUhvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQUFwQyxHQUFGO0FBS0QsR0E5Qk8sQ0FBUjtBQWdDQTVDLEVBQUFBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQU07QUFDOUIsUUFBTTZDLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FBQzNELEdBQUQsRUFBTTRELGVBQU4sRUFBdUIzRCxNQUF2QixFQUErQjZCLFFBQS9CLEVBQTRDO0FBQ3RFLFVBQU0rQixjQUFjLEdBQUcsMEJBQWM3RCxHQUFHLENBQUNpQixJQUFsQixFQUF3QjJDLGVBQXhCLENBQXZCO0FBRUE1QyxNQUFBQSxFQUFFLDhCQUF1QmhCLEdBQUcsQ0FBQ2lCLElBQTNCLG9CQUF5Q1EsSUFBSSxDQUFDQyxTQUFMLENBQWV6QixNQUFmLENBQXpDLGlCQUFzRXdCLElBQUksQ0FBQ0MsU0FBTCxDQUFlSSxRQUFmLENBQXRFLEdBQWtHLFlBQU07QUFDeEdYLFFBQUFBLE1BQU0sQ0FBQzBDLGNBQWMsQ0FBQzVELE1BQUQsQ0FBZixDQUFOLENBQStCbUIsT0FBL0IsQ0FBdUNVLFFBQXZDO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0FORDs7QUFRQTZCLElBQUFBLG1CQUFtQixDQUNqQjtBQUFFMUMsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FEaUIsRUFFakI7QUFBRThCLE1BQUFBLE9BQU8sRUFBRSxTQUFYO0FBQXNCZSxNQUFBQSxTQUFTLEVBQUU7QUFBakMsS0FGaUIsRUFHakI7QUFBRTFELE1BQUFBLEtBQUssRUFBRSxHQUFUO0FBQWNELE1BQUFBLEtBQUssRUFBRTtBQUFyQixLQUhpQixFQUlqQjtBQUFFQyxNQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxNQUFBQSxLQUFLLEVBQUU7QUFBckIsS0FKaUIsQ0FBbkI7QUFPQXdELElBQUFBLG1CQUFtQixDQUNqQjtBQUFFMUMsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FEaUIsRUFFakI7QUFBRThCLE1BQUFBLE9BQU8sRUFBRSxTQUFYO0FBQXNCZSxNQUFBQSxTQUFTLEVBQUU7QUFBakMsS0FGaUIsRUFHakI7QUFBRTFELE1BQUFBLEtBQUssRUFBRSxHQUFUO0FBQWNELE1BQUFBLEtBQUssRUFBRTtBQUFyQixLQUhpQixFQUlqQjtBQUFFQyxNQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxNQUFBQSxLQUFLLEVBQUU7QUFBckIsS0FKaUIsQ0FBbkI7QUFPQXdELElBQUFBLG1CQUFtQixDQUNqQjtBQUFFMUMsTUFBQUEsSUFBSSxFQUFFO0FBQVIsS0FEaUIsRUFFakI7QUFBRThCLE1BQUFBLE9BQU8sRUFBRSxTQUFYO0FBQXNCZSxNQUFBQSxTQUFTLEVBQUU7QUFBakMsS0FGaUIsRUFHakI7QUFBRTFELE1BQUFBLEtBQUssRUFBRSxHQUFUO0FBQWNELE1BQUFBLEtBQUssRUFBRTtBQUFyQixLQUhpQixFQUlqQjtBQUFFQyxNQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxNQUFBQSxLQUFLLEVBQUUsS0FBckI7QUFBNEI0QyxNQUFBQSxPQUFPLEVBQUU7QUFBckMsS0FKaUIsQ0FBbkI7QUFPQVksSUFBQUEsbUJBQW1CLENBQ2pCO0FBQUUxQyxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQURpQixFQUVqQjtBQUFFOEIsTUFBQUEsT0FBTyxFQUFFLFNBQVg7QUFBc0JlLE1BQUFBLFNBQVMsRUFBRTtBQUFqQyxLQUZpQixFQUdqQjtBQUFFMUQsTUFBQUEsS0FBSyxFQUFFLEdBQVQ7QUFBY0QsTUFBQUEsS0FBSyxFQUFFLEtBQXJCO0FBQTRCbUIsTUFBQUEsUUFBUSxFQUFFO0FBQUV5QyxRQUFBQSxJQUFJLEVBQUU7QUFBUjtBQUF0QyxLQUhpQixFQUlqQjtBQUFFM0QsTUFBQUEsS0FBSyxFQUFFLEdBQVQ7QUFBY0QsTUFBQUEsS0FBSyxFQUFFLEtBQXJCO0FBQTRCNEMsTUFBQUEsT0FBTyxFQUFFLElBQXJDO0FBQTJDekIsTUFBQUEsUUFBUSxFQUFFO0FBQXJELEtBSmlCLENBQW5CO0FBT0FxQyxJQUFBQSxtQkFBbUIsQ0FDakI7QUFBRTFDLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBRGlCLEVBRWpCO0FBQUU4QixNQUFBQSxPQUFPLEVBQUUsU0FBWDtBQUFzQmUsTUFBQUEsU0FBUyxFQUFFO0FBQWpDLEtBRmlCLEVBR2pCO0FBQUUxRCxNQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxNQUFBQSxLQUFLLEVBQUUsS0FBckI7QUFBNEJtQixNQUFBQSxRQUFRLEVBQUU7QUFBRXlDLFFBQUFBLElBQUksRUFBRTtBQUFSO0FBQXRDLEtBSGlCLEVBSWpCO0FBQUUzRCxNQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxNQUFBQSxLQUFLLEVBQUUsS0FBckI7QUFBNEI0QyxNQUFBQSxPQUFPLEVBQUUsSUFBckM7QUFBMkN6QixNQUFBQSxRQUFRLEVBQUVLO0FBQXJELEtBSmlCLENBQW5CO0FBT0FnQyxJQUFBQSxtQkFBbUIsQ0FDakI7QUFBRTFDLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBRGlCLEVBRWpCO0FBQUU4QixNQUFBQSxPQUFPLEVBQUUsU0FBWDtBQUFzQmUsTUFBQUEsU0FBUyxFQUFFO0FBQWpDLEtBRmlCLEVBR2pCO0FBQUUxRCxNQUFBQSxLQUFLLEVBQUUsR0FBVDtBQUFjRCxNQUFBQSxLQUFLLEVBQUUsS0FBckI7QUFBNEJtQixNQUFBQSxRQUFRLEVBQUU7QUFBRXlDLFFBQUFBLElBQUksRUFBRSxRQUFSO0FBQWtCM0QsUUFBQUEsS0FBSyxFQUFFO0FBQXpCO0FBQXRDLEtBSGlCLEVBSWpCO0FBQUVBLE1BQUFBLEtBQUssRUFBRSxHQUFUO0FBQWNELE1BQUFBLEtBQUssRUFBRSxLQUFyQjtBQUE0QjRDLE1BQUFBLE9BQU8sRUFBRSxJQUFyQztBQUEyQ3pCLE1BQUFBLFFBQVEsRUFBRTtBQUFyRCxLQUppQixDQUFuQjtBQU1ELEdBbERPLENBQVI7QUFtREQsQ0F6a0JPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RlbCwgZ2V0U2NvcmUsIG91dGNvbWUsIHByZXBhcmVWYWwsIGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24sIHByZXBhcmVDaG9pY2UgfSBmcm9tICcuLi9pbmRleCc7XG5cbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvY29udHJvbGxlci11dGlscycsICgpID0+ICh7XG4gIGdldFNodWZmbGVkQ2hvaWNlczogKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTaHVmZmxlZCA9ICgoc2Vzc2lvbiB8fCB7fSkuc2h1ZmZsZWRWYWx1ZXMgfHwgW10pLmZpbHRlcigodikgPT4gdik7XG5cbiAgICBpZiAoc2Vzc2lvbiAmJiAhY3VycmVudFNodWZmbGVkLmxlbmd0aCAmJiB1cGRhdGVTZXNzaW9uICYmIHR5cGVvZiB1cGRhdGVTZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1cGRhdGVTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNob2ljZXM7XG4gIH0sXG4gIHBhcnRpYWxTY29yaW5nOiB7XG4gICAgZW5hYmxlZDogKGNvbmZpZywgZW52KSA9PiB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBlbnYgPSBlbnYgfHwge307XG5cbiAgICAgIGlmIChjb25maWcucGFydGlhbFNjb3JpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudi5wYXJ0aWFsU2NvcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxufSkpO1xuXG5jb25zdCBjaG9pY2UgPSAobCwgdikgPT4gKHsgbGFiZWw6IGwsIHZhbHVlOiB2IH0pO1xuY29uc3QgY2hvaWNlcyA9IHtcbiAgMDogW2Nob2ljZSgnY293JywgJzAnKSwgY2hvaWNlKCdjYXR0bGUnLCAnMScpLCBjaG9pY2UoJ2NhbGYnLCAnMicpXSxcbiAgMTogW2Nob2ljZSgnb3ZlcicsICcwJyksIGNob2ljZSgncGFzdCcsICcxJyksIGNob2ljZSgnYmV5b25kJywgJzInKV0sXG4gIDI6IFtjaG9pY2UoJ21vb24nLCAnMCcpXSxcbn07XG5cbmNvbnN0IHF1ZXN0aW9uID0ge1xuICBtYXJrdXA6ICc8cD5UaGUge3swfX0ganVtcGVkIHt7MX19IHRoZSB7ezJ9fTwvcD4nLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGNob2ljZXMsXG4gIHByb21wdDogJ0NvbXBsZXRlIHRoZSBzZW50ZW5jZScsXG4gIG5vdGU6ICdUaGUgYW5zd2VyIHNob3duIGFib3ZlIGlzIHRoZSBtb3N0IGNvbW1vbiBjb3JyZWN0IGFuc3dlciBmb3IgdGhpcyBpdGVtLicsXG4gIGxhbmd1YWdlOiAnZW5nbGlzaCcsXG4gIG1heExlbmd0aFBlckNob2ljZUVuYWJsZWQ6IHRydWUsXG4gIHBsYXllclNwZWxsQ2hlY2tFbmFibGVkOiB0cnVlLFxuICBkaXNwbGF5VHlwZTogJ2Jsb2NrJyxcbn07XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBkZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gICAgbGV0IHEsIGVudjtcblxuICAgIGl0KCdvdXRwdXQgd2hlbiBzZXNzaW9uIGlzIGRlZmluZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBtb2RlOiAnZXZhbHVhdGUnIH0pO1xuXG4gICAgICBleHBlY3QobSkudG9FcXVhbChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIGZlZWRiYWNrOiB7IDA6ICdjb3JyZWN0JywgMTogJ2NvcnJlY3QnLCAyOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldHVybk1vZGVsID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGBvdXRwdXQgd2hlbiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KTtcblxuICAgICAgICBleHBlY3QobSkudG9FcXVhbChcbiAgICAgICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgICBmZWVkYmFjazogeyAwOiAnaW5jb3JyZWN0JywgMTogJ2luY29ycmVjdCcsIDI6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybk1vZGVsKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuTW9kZWwobnVsbCk7XG4gICAgcmV0dXJuTW9kZWwoe30pO1xuXG4gICAgY29uc3QgYXNzZXJ0R2F0aGVyID0gKGxhYmVsLCBleHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAnbW9kZTogZ2F0aGVyLCAke2xhYmVsfSdgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHEgPSB7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgICByYXRpb25hbGU6ICdSYXRpb25hbGUnLFxuICAgICAgICAgIC4uLmV4dHJhLFxuICAgICAgICB9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdnYXRoZXInIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoXG4gICAgICAgICAgcSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgZWxlbWVudDogJ2V4cGxpY2l0LWNvbnN0cnVjdGVkLXJlc3BvbnNlJyxcbiAgICAgICAgICAgIC4uLnNlc3Npb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgIGZlZWRiYWNrOiB7fSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFsxMCwgMTAsIDddLFxuICAgICAgICAgIC4uLmVudixcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0R2F0aGVyKFxuICAgICAgJ3Byb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIG5vdCBzZXQnLFxuICAgICAge30sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgcmF0aW9uYWxlOiBkZWZhdWx0cy5yYXRpb25hbGUsXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBkZWZhdWx0cy50ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0R2F0aGVyKFxuICAgICAgJ3Byb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIHNldCB0byBmYWxzZScsXG4gICAgICB7XG4gICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHByb21wdDogZGVmYXVsdHMucHJvbXB0LFxuICAgICAgICByYXRpb25hbGU6IGRlZmF1bHRzLnJhdGlvbmFsZSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IGRlZmF1bHRzLnRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBhc3NlcnRWaWV3ID0gKGxhYmVsLCBleHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAnbW9kZTogdmlldywgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAndmlldycsIHJvbGU6ICdpbnN0cnVjdG9yJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICAgIGVsZW1lbnQ6ICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsXG4gICAgICAgICAgICAuLi5zZXNzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICAgIGZlZWRiYWNrOiB7fSxcbiAgICAgICAgICByZXNwb25zZUNvcnJlY3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFsxMCwgMTAsIDddLFxuICAgICAgICAgIC4uLmVudixcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0VmlldyhcbiAgICAgICcgKyByb2xlOiBpbnN0cnVjdG9yLCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCBzZXQgdG8gZmFsc2UnLFxuICAgICAge1xuICAgICAgICBwcm9tcHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgcmF0aW9uYWxlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6IGRlZmF1bHRzLnByb21wdCxcbiAgICAgICAgcmF0aW9uYWxlOiBkZWZhdWx0cy5yYXRpb25hbGUsXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiBkZWZhdWx0cy50ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0VmlldyhcbiAgICAgICcgKyByb2xlOiBpbnN0cnVjdG9yLCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCB1bnNldCcsXG4gICAgICB7fSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGFzc2VydFZpZXdTdHVkZW50ID0gKGxhYmVsLCBleHRyYSwgc2Vzc2lvbiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAnbW9kZTogdmlldywgJHtsYWJlbH0nYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBxID0ge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAndmlldycsIHJvbGU6ICcgc3R1ZGVudCcgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAgICBxLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBlbGVtZW50OiAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnLFxuICAgICAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudixcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICBmZWVkYmFjazoge30sXG4gICAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgbWF4TGVuZ3RoUGVyQ2hvaWNlOiBbMTAsIDEwLCA3XSxcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgICAgLi4uZXhwZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydFZpZXdTdHVkZW50KFxuICAgICAgJyArIHJvbGU6IHN0dWRlbnQsIHByb21wdEVuYWJsZWQsIHJhdGlvbmFsZUVuYWJsZWQgYW5kIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIHNldCB0byBmYWxzZScsXG4gICAgICB7XG4gICAgICAgIHByb21wdEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByYXRpb25hbGVFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHByb21wdDogZGVmYXVsdHMucHJvbXB0LFxuICAgICAgICByYXRpb25hbGU6IGRlZmF1bHRzLnJhdGlvbmFsZSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IGRlZmF1bHRzLnRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRWaWV3U3R1ZGVudChcbiAgICAgICcgKyByb2xlOiBzdHVkZW50LCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkIGFuZCB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCB1bnNldCcsXG4gICAgICB7fSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICByYXRpb25hbGU6IGRlZmF1bHRzLnJhdGlvbmFsZSxcbiAgICAgICAgc2hvd05vdGU6IHRydWUsXG4gICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6IGRlZmF1bHRzLnRlYWNoZXJJbnN0cnVjdGlvbnMsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBhc3NlcnRFdmFsdWF0ZSA9IChsYWJlbCwgZXh0cmEsIHNlc3Npb24sIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJ21vZGU6IGV2YWx1YXRlLCAke2xhYmVsfSdgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHEgPSB7XG4gICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgICByYXRpb25hbGU6ICdSYXRpb25hbGUnLFxuICAgICAgICAgIC4uLmV4dHJhLFxuICAgICAgICB9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScsIHJvbGU6ICdpbnN0cnVjdG9yJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHEsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgICAgIGVsZW1lbnQ6ICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZScsXG4gICAgICAgICAgICAuLi5zZXNzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW52LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdUZWFjaGVyIEluc3RydWN0aW9ucycsXG4gICAgICAgICAgcmF0aW9uYWxlOiAnUmF0aW9uYWxlJyxcbiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICBjaG9pY2VzOiB7XG4gICAgICAgICAgICAwOiBbXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjb3cnLCB2YWx1ZTogJzAnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjYXR0bGUnLCB2YWx1ZTogJzEnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjYWxmJywgdmFsdWU6ICcyJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDE6IFtcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ292ZXInLCB2YWx1ZTogJzAnLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdwYXN0JywgdmFsdWU6ICcxJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnYmV5b25kJywgdmFsdWU6ICcyJywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDI6IFt7IGxhYmVsOiAnbW9vbicsIHZhbHVlOiAnMCcsIGNvcnJlY3Q6IHRydWUgfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYXhMZW5ndGhQZXJDaG9pY2U6IFsxMCwgMTAsIDddLFxuICAgICAgICAgIC4uLmVudixcbiAgICAgICAgICAuLi5leHBlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBjb3JyZWN0IGFuc3dlcicsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAwOiAnY293JyxcbiAgICAgICAgICAxOiAnb3ZlcicsXG4gICAgICAgICAgMjogJ21vb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2NvcnJlY3QnLCAxOiAnY29ycmVjdCcsIDI6ICdjb3JyZWN0JyB9LFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBwYXJ0aWFsbHkgY29ycmVjdCBhbnN3ZXInLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgMDogJ2NvdycsXG4gICAgICAgICAgMTogJ292ZXInLFxuICAgICAgICAgIDI6ICdzdW4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2NvcnJlY3QnLCAxOiAnY29ycmVjdCcsIDI6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBwYXJ0aWFsbHkgY29ycmVjdCBhbnN3ZXIgdXNpbmcgYWx0ZXJuYXRlcycsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAwOiAnY2FsZicsXG4gICAgICAgICAgMTogJ292ZXInLFxuICAgICAgICAgIDI6ICdzdW4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2NvcnJlY3QnLCAxOiAnY29ycmVjdCcsIDI6ICdpbmNvcnJlY3QnIH0sXG4gICAgICAgIHNob3dOb3RlOiB0cnVlLFxuICAgICAgICByZXNwb25zZUNvcnJlY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0RXZhbHVhdGUoXG4gICAgICAnLSBpbmNvcnJlY3QgYW5zd2VyJyxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIDA6ICdoYW4nLFxuICAgICAgICAgIDE6ICdhYm92ZScsXG4gICAgICAgICAgMjogJ2NoaWNrZW4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmVlZGJhY2s6IHsgMDogJ2luY29ycmVjdCcsIDE6ICdpbmNvcnJlY3QnLCAyOiAnaW5jb3JyZWN0JyB9LFxuICAgICAgICBzaG93Tm90ZTogdHJ1ZSxcbiAgICAgICAgcmVzcG9uc2VDb3JyZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldCBzY29yZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRTY29yZSA9IChzZXNzaW9uLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoJ3JldHVybiBzY29yZScsICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZShxdWVzdGlvbiwgc2Vzc2lvbik7XG5cbiAgICAgICAgZXhwZWN0KHNjb3JlKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhdHRsZScsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCAxKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIDEpO1xuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCAxKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgMSk7XG4gICAgYXNzZXJ0U2NvcmUoeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCAxKTtcblxuICAgIGFzc2VydFNjb3JlKHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LCAwLjY3KTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LCAwLjMzKTtcbiAgICBhc3NlcnRTY29yZSh7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnc3VuJyB9IH0sIDApO1xuXG4gICAgY29uc3QgcmV0dXJuU2NvcmUgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYHNjb3JlID0gMCB3aGVuIHNlc3Npb24gaXMgJHtKU09OLnN0cmluZ2lmeShzZXNzaW9uKX1gLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRTY29yZShxdWVzdGlvbiwgc2Vzc2lvbikpLnRvRXF1YWwoMCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuU2NvcmUodW5kZWZpbmVkKTtcbiAgICByZXR1cm5TY29yZShudWxsKTtcbiAgICByZXR1cm5TY29yZSh7fSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvdXRjb21lIHBhcnRpYWxTY29yaW5nIHRlc3QnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZSA9IChtZXNzYWdlLCBleHRyYSwgc2Vzc2lvblZhbHVlLCBlbnYsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChtZXNzYWdlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb25WYWx1ZSxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyhleHBlY3RlZCkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IHRydWUnLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICAgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICd1bmRlcicsIDI6ICdtb29uJyB9IH0sXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgIHsgc2NvcmU6IDAuNjcgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgICdlbGVtZW50LnBhcnRpYWxTY29yaW5nID0gZmFsc2UnLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogZmFsc2UgfSxcbiAgICAgIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAndW5kZXInLCAyOiAnbW9vbicgfSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IHNjb3JlOiAwIH0sXG4gICAgKTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlLCBlbnYucGFydGlhbFNjb3JpbmcgPSB0cnVlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IGZhbHNlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSxcbiAgICAgIHtcbiAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICB9LFxuICAgICAgeyBzY29yZTogMCB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSB0cnVlLCBlbnYucGFydGlhbFNjb3JpbmcgPSBmYWxzZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgICB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSxcbiAgICAgIHtcbiAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHsgc2NvcmU6IDAgfSxcbiAgICApO1xuICB9KTtcblxuICBkZXNjcmliZSgnb3V0Y29tZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRPdXRjb21lID0gKHBhcnRpYWxTY29yaW5nLCBzZXNzaW9uVmFsdWUsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgcGFydGlhbCBzY29yZSAke3BhcnRpYWxTY29yaW5nID8gJ2VuYWJsZWQnIDogJyd9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uVmFsdWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NhdHRsZScsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdvdmVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NhbGYnLCAxOiAncGFzdCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKHRydWUsIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnYmV5b25kJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZSh0cnVlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMC42NywgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2F0JywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMC4zMywgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUodHJ1ZSwgeyB2YWx1ZTogeyAwOiAnY2F0JywgMTogJ3VuZGVyJywgMjogJ3N1bicgfSB9LCB7IHNjb3JlOiAwLCBlbXB0eTogZmFsc2UgfSk7XG5cbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYXR0bGUnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY293JywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY2F0dGxlJywgMTogJ3Bhc3QnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY2FsZicsIDE6ICdwYXN0JywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMSwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NvdycsIDE6ICdiZXlvbmQnLCAyOiAnbW9vbicgfSB9LCB7IHNjb3JlOiAxLCBlbXB0eTogZmFsc2UgfSk7XG4gICAgYXNzZXJ0T3V0Y29tZShmYWxzZSwgeyB2YWx1ZTogeyAwOiAnY2F0dGxlJywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ2JleW9uZCcsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDEsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYWxmJywgMTogJ3VuZGVyJywgMjogJ21vb24nIH0gfSwgeyBzY29yZTogMCwgZW1wdHk6IGZhbHNlIH0pO1xuICAgIGFzc2VydE91dGNvbWUoZmFsc2UsIHsgdmFsdWU6IHsgMDogJ2NhdCcsIDE6ICd1bmRlcicsIDI6ICdtb29uJyB9IH0sIHsgc2NvcmU6IDAsIGVtcHR5OiBmYWxzZSB9KTtcbiAgICBhc3NlcnRPdXRjb21lKGZhbHNlLCB7IHZhbHVlOiB7IDA6ICdjYXQnLCAxOiAndW5kZXInLCAyOiAnc3VuJyB9IH0sIHsgc2NvcmU6IDAsIGVtcHR5OiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IHJldHVybk1vZGVsID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGBlbXB0eTogdHJ1ZSB3aGVuIHNlc3Npb24gaXMgJHtKU09OLnN0cmluZ2lmeShzZXNzaW9uKX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uKTtcblxuICAgICAgICBleHBlY3QobSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuTW9kZWwodW5kZWZpbmVkKTtcbiAgICByZXR1cm5Nb2RlbChudWxsKTtcbiAgICByZXR1cm5Nb2RlbCh7fSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcmVwYXJlVmFsJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyBvbiBudWxsIG9yIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChwcmVwYXJlVmFsKG51bGwpKS50b0VxdWFsKCcnKTtcbiAgICAgIGV4cGVjdChwcmVwYXJlVmFsKHVuZGVmaW5lZCkpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgaHRtbCB0YWdzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHByZXBhcmVWYWwoJzxkaXY+Rm9vIEJhcjwvZGl2PicpKS50b0VxdWFsKCdGb28gQmFyJyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZScsICgpID0+IHtcbiAgICAgIGxldCBxdWVzdGlvbjtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBxdWVzdGlvbiA9IHtcbiAgICAgICAgICBjaG9pY2VzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgZW52IGlzIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgICAgbW9kZTogJ2dhdGhlcicsXG4gICAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyBpZDogJzEnLCB2YWx1ZTogeyAwOiAnY293JywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBudWxsIGVudiBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdzdHVkZW50JyB9KTtcbiAgICAgICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgcm9sZSBpcyBpbnN0cnVjdG9yIGFuZCBtb2RlIGlzIGdhdGhlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHNlc3MpLnRvRXF1YWwoeyBpZDogJzEnLCB2YWx1ZTogeyAwOiAnY293JywgMTogJ292ZXInLCAyOiAnbW9vbicgfSB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgcm9sZSBpcyBpbnN0cnVjdG9yIGFuZCBtb2RlIGlzIHZpZXcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICAgIHJvbGU6ICdpbnN0cnVjdG9yJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiB7IDA6ICdjb3cnLCAxOiAnb3ZlcicsIDI6ICdtb29uJyB9IH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBpZiBtb2RlIGlzIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7IG1vZGU6ICdldmFsdWF0ZScsIHJvbGU6ICdpbnN0cnVjdG9yJyB9KTtcblxuICAgICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBpZiByb2xlIGlzIHN0dWRlbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub1Jlc3VsdCA9IGF3YWl0IGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24ocXVlc3Rpb24sIHsgbW9kZTogJ2dhdGhlcicsIHJvbGU6ICdzdHVkZW50JyB9KTtcblxuICAgICAgZXhwZWN0KG5vUmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJlcGFyZUNob2ljZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRQcmVwYXJlQ2hvaWNlID0gKGVudiwgZGVmYXVsdEZlZWRiYWNrLCBjaG9pY2UsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBjb25zdCBwcmVwYXJDaG9pY2VGbiA9IHByZXBhcmVDaG9pY2UoZW52Lm1vZGUsIGRlZmF1bHRGZWVkYmFjayk7XG5cbiAgICAgIGl0KGBwcmVwYXJlIGNob2ljZXMgaW4gJHtlbnYubW9kZX0gbW9kZTogJHtKU09OLnN0cmluZ2lmeShjaG9pY2UpfSAtPiAke0pTT04uc3RyaW5naWZ5KGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChwcmVwYXJDaG9pY2VGbihjaG9pY2UpKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAnZ2F0aGVyJyB9LFxuICAgICAgeyBjb3JyZWN0OiAnQ29ycmVjdCcsIGluY29ycmVjdDogJ0luY29ycmVjdCcgfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JyB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAndmlldycgfSxcbiAgICAgIHsgY29ycmVjdDogJ0NvcnJlY3QnLCBpbmNvcnJlY3Q6ICdJbmNvcnJlY3QnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycgfSxcbiAgICApO1xuXG4gICAgYXNzZXJ0UHJlcGFyZUNob2ljZShcbiAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgeyBjb3JyZWN0OiAnQ29ycmVjdCcsIGluY29ycmVjdDogJ0luY29ycmVjdCcgfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IGNvcnJlY3Q6ICdDb3JyZWN0JywgaW5jb3JyZWN0OiAnSW5jb3JyZWN0JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGZlZWRiYWNrOiB7IHR5cGU6ICdkZWZhdWx0JyB9IH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgY29ycmVjdDogdHJ1ZSwgZmVlZGJhY2s6ICdDb3JyZWN0JyB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRQcmVwYXJlQ2hvaWNlKFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IGNvcnJlY3Q6ICdDb3JyZWN0JywgaW5jb3JyZWN0OiAnSW5jb3JyZWN0JyB9LFxuICAgICAgeyB2YWx1ZTogJzAnLCBsYWJlbDogJ2NvdycsIGZlZWRiYWNrOiB7IHR5cGU6ICdjdXN0b20nIH0gfSxcbiAgICAgIHsgdmFsdWU6ICcwJywgbGFiZWw6ICdjb3cnLCBjb3JyZWN0OiB0cnVlLCBmZWVkYmFjazogdW5kZWZpbmVkIH0sXG4gICAgKTtcblxuICAgIGFzc2VydFByZXBhcmVDaG9pY2UoXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgIHsgY29ycmVjdDogJ0NvcnJlY3QnLCBpbmNvcnJlY3Q6ICdJbmNvcnJlY3QnIH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgZmVlZGJhY2s6IHsgdHlwZTogJ2N1c3RvbScsIHZhbHVlOiAnQ3VzdG9tIEZlZWRiYWNrJyB9IH0sXG4gICAgICB7IHZhbHVlOiAnMCcsIGxhYmVsOiAnY293JywgY29ycmVjdDogdHJ1ZSwgZmVlZGJhY2s6ICdDdXN0b20gRmVlZGJhY2snIH0sXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==