@kontur.candy/tools 2.130.0 → 2.130.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +5 -1
  3. package/distr/Common/Errors.js +3 -3
  4. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +12 -0
  5. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -2
  6. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -2
  7. package/distr/Common/IndentString.js +18 -0
  8. package/distr/Common/IterableUtils.js +18 -1
  9. package/distr/Common/ModelPath/BuildIterationSequence.js +3 -3
  10. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +30 -0
  11. package/distr/Common/ModelPath/Map/Map2.js +143 -0
  12. package/distr/Common/ModelPath/Map/ModelPathMap.js +30 -0
  13. package/distr/Common/ModelPath/ModelPath.js +182 -154
  14. package/distr/Common/ModelPath/ModelPathBuilder.js +11 -7
  15. package/distr/Common/ModelPath/PathMatcher.js +9 -11
  16. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +40 -0
  17. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +40 -0
  18. package/distr/Common/ModelPath/Set/ModelPathSet.js +40 -0
  19. package/distr/Common/ModelPath/Set/Set2.js +60 -0
  20. package/distr/Common/PathConstants.js +3 -3
  21. package/distr/Common/TypingUtils.js +1 -1
  22. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  23. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  24. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1077 -470
  25. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  26. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +350 -356
  27. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  28. package/package.json +3 -2
  29. package/distr/Common/ModelPath/AbsoluteModelPathSet.js +0 -62
  30. package/distr/Common/ModelPath/ModelPathMap.js +0 -120
  31. package/distr/Common/ModelPath/ModelPathSet.js +0 -66
@@ -9,6 +9,71 @@
9
9
  /******/
10
10
 
11
11
  var __webpack_modules__ = {
12
+ /***/
13
+ "./Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.ts":
14
+ /*!************************************************************************!*\
15
+ !*** ./Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.ts ***!
16
+ \************************************************************************/
17
+
18
+ /***/
19
+ function (module, __webpack_exports__, __webpack_require__) {
20
+ __webpack_require__.r(__webpack_exports__);
21
+ /* harmony export */
22
+
23
+
24
+ __webpack_require__.d(__webpack_exports__, {
25
+ /* harmony export */
26
+ "getClientDraftInfoUrl": function () {
27
+ return (
28
+ /* binding */
29
+ getClientDraftInfoUrl
30
+ );
31
+ }
32
+ /* harmony export */
33
+
34
+ });
35
+ /* module decorator */
36
+
37
+
38
+ module = __webpack_require__.hmd(module);
39
+
40
+ (function () {
41
+ var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
42
+ enterModule && enterModule(module);
43
+ })();
44
+
45
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal["default"].signature : function (a) {
46
+ return a;
47
+ };
48
+
49
+ function getClientDraftInfoUrl(draftId) {
50
+ // NOTE Эта функция объявлена отдельно, ибо она входит в состав client.js и
51
+ // не должно происходить утежеления client.js-а
52
+ return "v1/ns/".concat(draftId.ns, "/drafts/").concat(draftId.draftId, "/client-draft-info");
53
+ }
54
+
55
+ ;
56
+
57
+ (function () {
58
+ var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
59
+
60
+ if (!reactHotLoader) {
61
+ return;
62
+ }
63
+
64
+ reactHotLoader.register(getClientDraftInfoUrl, "getClientDraftInfoUrl", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\CandyApiClient\\ClientDraftInfo\\GetClientDraftInfoUrl.ts");
65
+ })();
66
+
67
+ ;
68
+
69
+ (function () {
70
+ var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
71
+ leaveModule && leaveModule(module);
72
+ })();
73
+ /***/
74
+
75
+ },
76
+
12
77
  /***/
13
78
  "./Common/Errors.ts":
14
79
  /*!**************************!*\
@@ -16,7 +81,7 @@
16
81
  \**************************/
17
82
 
18
83
  /***/
19
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
84
+ function (module, __webpack_exports__, __webpack_require__) {
20
85
  __webpack_require__.r(__webpack_exports__);
21
86
  /* harmony export */
22
87
 
@@ -72,6 +137,10 @@
72
137
  /* harmony export */
73
138
 
74
139
  });
140
+ /* module decorator */
141
+
142
+
143
+ module = __webpack_require__.hmd(module);
75
144
 
76
145
  function _typeof(obj) {
77
146
  "@babel/helpers - typeof";
@@ -89,12 +158,33 @@
89
158
  return _typeof(obj);
90
159
  }
91
160
 
161
+ (function () {
162
+ var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
163
+ enterModule && enterModule(module);
164
+ })();
165
+
92
166
  function _classCallCheck(instance, Constructor) {
93
167
  if (!(instance instanceof Constructor)) {
94
168
  throw new TypeError("Cannot call a class as a function");
95
169
  }
96
170
  }
97
171
 
172
+ function _defineProperties(target, props) {
173
+ for (var i = 0; i < props.length; i++) {
174
+ var descriptor = props[i];
175
+ descriptor.enumerable = descriptor.enumerable || false;
176
+ descriptor.configurable = true;
177
+ if ("value" in descriptor) descriptor.writable = true;
178
+ Object.defineProperty(target, descriptor.key, descriptor);
179
+ }
180
+ }
181
+
182
+ function _createClass(Constructor, protoProps, staticProps) {
183
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
184
+ if (staticProps) _defineProperties(Constructor, staticProps);
185
+ return Constructor;
186
+ }
187
+
98
188
  function _inherits(subClass, superClass) {
99
189
  if (typeof superClass !== "function" && superClass !== null) {
100
190
  throw new TypeError("Super expression must either be null or a function");
@@ -132,6 +222,8 @@
132
222
  function _possibleConstructorReturn(self, call) {
133
223
  if (call && (_typeof(call) === "object" || typeof call === "function")) {
134
224
  return call;
225
+ } else if (call !== void 0) {
226
+ throw new TypeError("Derived constructors may only return object or undefined");
135
227
  }
136
228
 
137
229
  return _assertThisInitialized(self);
@@ -229,6 +321,10 @@
229
321
  return _getPrototypeOf(o);
230
322
  }
231
323
 
324
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal["default"].signature : function (a) {
325
+ return a;
326
+ };
327
+
232
328
  var ApplicationError = /*#__PURE__*/function (_Error) {
233
329
  _inherits(ApplicationError, _Error);
234
330
 
@@ -244,6 +340,15 @@
244
340
  return _this;
245
341
  }
246
342
 
343
+ _createClass(ApplicationError, [{
344
+ key: "__reactstandin__regenerateByEval",
345
+ value: // @ts-ignore
346
+ function __reactstandin__regenerateByEval(key, code) {
347
+ // @ts-ignore
348
+ this[key] = eval(code);
349
+ }
350
+ }]);
351
+
247
352
  return ApplicationError;
248
353
  }( /*#__PURE__*/_wrapNativeSuper(Error));
249
354
 
@@ -258,6 +363,15 @@
258
363
  return _super2.call(this, "Operation not implemented");
259
364
  }
260
365
 
366
+ _createClass(NotImplementedError, [{
367
+ key: "__reactstandin__regenerateByEval",
368
+ value: // @ts-ignore
369
+ function __reactstandin__regenerateByEval(key, code) {
370
+ // @ts-ignore
371
+ this[key] = eval(code);
372
+ }
373
+ }]);
374
+
261
375
  return NotImplementedError;
262
376
  }(ApplicationError);
263
377
 
@@ -272,6 +386,15 @@
272
386
  return _super3.call(this, message !== null && message !== void 0 ? message : "Operation not supported");
273
387
  }
274
388
 
389
+ _createClass(NotSupportedError, [{
390
+ key: "__reactstandin__regenerateByEval",
391
+ value: // @ts-ignore
392
+ function __reactstandin__regenerateByEval(key, code) {
393
+ // @ts-ignore
394
+ this[key] = eval(code);
395
+ }
396
+ }]);
397
+
275
398
  return NotSupportedError;
276
399
  }(ApplicationError);
277
400
 
@@ -280,12 +403,21 @@
280
403
 
281
404
  var _super4 = _createSuper(InvalidProgramStateError);
282
405
 
283
- function InvalidProgramStateError() {
406
+ function InvalidProgramStateError(message) {
284
407
  _classCallCheck(this, InvalidProgramStateError);
285
408
 
286
- return _super4.call(this, "Invalid program state");
409
+ return _super4.call(this, "Invalid program state" + (message != undefined ? ": " + message : ""));
287
410
  }
288
411
 
412
+ _createClass(InvalidProgramStateError, [{
413
+ key: "__reactstandin__regenerateByEval",
414
+ value: // @ts-ignore
415
+ function __reactstandin__regenerateByEval(key, code) {
416
+ // @ts-ignore
417
+ this[key] = eval(code);
418
+ }
419
+ }]);
420
+
289
421
  return InvalidProgramStateError;
290
422
  }(ApplicationError);
291
423
 
@@ -300,6 +432,15 @@
300
432
  return _super5.call(this, message != undefined ? "".concat(message, " (argument: ").concat(argumentName, ")") : "Invalid argument value: ".concat(argumentName));
301
433
  }
302
434
 
435
+ _createClass(InvalidArgumentError, [{
436
+ key: "__reactstandin__regenerateByEval",
437
+ value: // @ts-ignore
438
+ function __reactstandin__regenerateByEval(key, code) {
439
+ // @ts-ignore
440
+ this[key] = eval(code);
441
+ }
442
+ }]);
443
+
303
444
  return InvalidArgumentError;
304
445
  }(ApplicationError);
305
446
 
@@ -314,8 +455,41 @@
314
455
  return _super6.call(this, "Invalid typing");
315
456
  }
316
457
 
458
+ _createClass(TypingError, [{
459
+ key: "__reactstandin__regenerateByEval",
460
+ value: // @ts-ignore
461
+ function __reactstandin__regenerateByEval(key, code) {
462
+ // @ts-ignore
463
+ this[key] = eval(code);
464
+ }
465
+ }]);
466
+
317
467
  return TypingError;
318
468
  }(ApplicationError);
469
+
470
+ ;
471
+
472
+ (function () {
473
+ var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
474
+
475
+ if (!reactHotLoader) {
476
+ return;
477
+ }
478
+
479
+ reactHotLoader.register(ApplicationError, "ApplicationError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\Errors.ts");
480
+ reactHotLoader.register(NotImplementedError, "NotImplementedError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\Errors.ts");
481
+ reactHotLoader.register(NotSupportedError, "NotSupportedError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\Errors.ts");
482
+ reactHotLoader.register(InvalidProgramStateError, "InvalidProgramStateError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\Errors.ts");
483
+ reactHotLoader.register(InvalidArgumentError, "InvalidArgumentError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\Errors.ts");
484
+ reactHotLoader.register(TypingError, "TypingError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\Errors.ts");
485
+ })();
486
+
487
+ ;
488
+
489
+ (function () {
490
+ var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
491
+ leaveModule && leaveModule(module);
492
+ })();
319
493
  /***/
320
494
 
321
495
  },
@@ -327,7 +501,7 @@
327
501
  \*******************************/
328
502
 
329
503
  /***/
330
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
504
+ function (module, __webpack_exports__, __webpack_require__) {
331
505
  __webpack_require__.r(__webpack_exports__);
332
506
  /* harmony export */
333
507
 
@@ -341,6 +515,22 @@
341
515
  );
342
516
  },
343
517
 
518
+ /* harmony export */
519
+ "stringifyUnknownError": function () {
520
+ return (
521
+ /* binding */
522
+ stringifyUnknownError
523
+ );
524
+ },
525
+
526
+ /* harmony export */
527
+ "ensureNotNullOrUndefined": function () {
528
+ return (
529
+ /* binding */
530
+ ensureNotNullOrUndefined
531
+ );
532
+ },
533
+
344
534
  /* harmony export */
345
535
  "noop": function () {
346
536
  return (
@@ -413,6 +603,14 @@
413
603
  );
414
604
  },
415
605
 
606
+ /* harmony export */
607
+ "ensureArrayLengthGreaterThenOrEqual": function () {
608
+ return (
609
+ /* binding */
610
+ ensureArrayLengthGreaterThenOrEqual
611
+ );
612
+ },
613
+
416
614
  /* harmony export */
417
615
  "ensureNever": function () {
418
616
  return (
@@ -427,10 +625,87 @@
427
625
  /* binding */
428
626
  ensureAndGetString
429
627
  );
628
+ },
629
+
630
+ /* harmony export */
631
+ "runAsyncAction": function () {
632
+ return (
633
+ /* binding */
634
+ runAsyncAction
635
+ );
636
+ },
637
+
638
+ /* harmony export */
639
+ "isNullOrEmpty": function () {
640
+ return (
641
+ /* binding */
642
+ isNullOrEmpty
643
+ );
644
+ },
645
+
646
+ /* harmony export */
647
+ "isNotNullOrEmpty": function () {
648
+ return (
649
+ /* binding */
650
+ isNotNullOrEmpty
651
+ );
652
+ },
653
+
654
+ /* harmony export */
655
+ "isNullOrWhiteSpace": function () {
656
+ return (
657
+ /* binding */
658
+ isNullOrWhiteSpace
659
+ );
660
+ },
661
+
662
+ /* harmony export */
663
+ "trimLastSlash": function () {
664
+ return (
665
+ /* binding */
666
+ trimLastSlash
667
+ );
668
+ },
669
+
670
+ /* harmony export */
671
+ "assertIs": function () {
672
+ return (
673
+ /* binding */
674
+ assertIs
675
+ );
430
676
  }
431
677
  /* harmony export */
432
678
 
433
679
  });
680
+ /* module decorator */
681
+
682
+
683
+ module = __webpack_require__.hmd(module);
684
+
685
+ (function () {
686
+ var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
687
+ enterModule && enterModule(module);
688
+ })();
689
+
690
+ function _typeof(obj) {
691
+ "@babel/helpers - typeof";
692
+
693
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
694
+ _typeof = function _typeof(obj) {
695
+ return typeof obj;
696
+ };
697
+ } else {
698
+ _typeof = function _typeof(obj) {
699
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
700
+ };
701
+ }
702
+
703
+ return _typeof(obj);
704
+ }
705
+
706
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal["default"].signature : function (a) {
707
+ return a;
708
+ };
434
709
  /***
435
710
  * Строготипизированная замена для Boolean(...)
436
711
  * Обычно используется для [...].filter(isNotNullOrUndefined)
@@ -441,11 +716,26 @@
441
716
  return input != undefined;
442
717
  }
443
718
 
719
+ function stringifyUnknownError(error) {
720
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
721
+ return _typeof(error) === "object" && (error === null || error === void 0 ? void 0 : error["message"]);
722
+ }
723
+
724
+ function ensureNotNullOrUndefined(input) {
725
+ if (!isNotNullOrUndefined(input)) {
726
+ throw new Error("Value must be defined");
727
+ }
728
+ }
729
+
444
730
  function noop() {// noop
445
731
  }
446
732
 
447
733
  function reject(message) {
448
- throw new Error(message !== null && message !== void 0 ? message : "Undefined is not allowed");
734
+ if (typeof message === "string" || message == undefined) {
735
+ throw new Error(message !== null && message !== void 0 ? message : "Undefined is not allowed");
736
+ } else {
737
+ throw message;
738
+ }
449
739
  }
450
740
 
451
741
  function isLengthGreaterThenOrEqual(items, minLength) {
@@ -484,13 +774,593 @@
484
774
  }
485
775
  }
486
776
 
777
+ function ensureArrayLengthGreaterThenOrEqual(items, length) {
778
+ if (!isLengthGreaterThenOrEqual(items, length)) {
779
+ throw new Error("Array must have minimal length ".concat(length));
780
+ }
781
+ }
782
+
487
783
  function ensureNever(neverArgument) {// noop
488
784
  }
489
785
 
490
786
  function ensureAndGetString(neverArgument) {
491
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
492
787
  return "".concat(neverArgument);
493
788
  }
789
+
790
+ function runAsyncAction(action) {
791
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
792
+ action();
793
+ }
794
+
795
+ function isNullOrEmpty(input) {
796
+ return input == undefined || input === "";
797
+ }
798
+
799
+ function isNotNullOrEmpty(input) {
800
+ return !isNullOrEmpty(input);
801
+ }
802
+
803
+ function isNullOrWhiteSpace(input) {
804
+ return input == undefined || input.trim() === "";
805
+ }
806
+
807
+ function trimLastSlash(url) {
808
+ return url.slice(-1) === "/" ? url.slice(0, -1) : url;
809
+ }
810
+
811
+ function assertIs(value) {// noop
812
+ }
813
+
814
+ ;
815
+
816
+ (function () {
817
+ var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
818
+
819
+ if (!reactHotLoader) {
820
+ return;
821
+ }
822
+
823
+ reactHotLoader.register(isNotNullOrUndefined, "isNotNullOrUndefined", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
824
+ reactHotLoader.register(stringifyUnknownError, "stringifyUnknownError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
825
+ reactHotLoader.register(ensureNotNullOrUndefined, "ensureNotNullOrUndefined", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
826
+ reactHotLoader.register(noop, "noop", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
827
+ reactHotLoader.register(reject, "reject", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
828
+ reactHotLoader.register(isLengthGreaterThenOrEqual, "isLengthGreaterThenOrEqual", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
829
+ reactHotLoader.register(minLengthOrUndefined, "minLengthOrUndefined", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
830
+ reactHotLoader.register(arrayHasLength, "arrayHasLength", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
831
+ reactHotLoader.register(arrayIsNotEmpty, "arrayIsNotEmpty", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
832
+ reactHotLoader.register(arrayHasAtLeastOneItem, "arrayHasAtLeastOneItem", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
833
+ reactHotLoader.register(ensureArrayIsNotEmpty, "ensureArrayIsNotEmpty", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
834
+ reactHotLoader.register(ensureArrayHasLength, "ensureArrayHasLength", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
835
+ reactHotLoader.register(ensureArrayLengthGreaterThenOrEqual, "ensureArrayLengthGreaterThenOrEqual", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
836
+ reactHotLoader.register(ensureNever, "ensureNever", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
837
+ reactHotLoader.register(ensureAndGetString, "ensureAndGetString", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
838
+ reactHotLoader.register(runAsyncAction, "runAsyncAction", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
839
+ reactHotLoader.register(isNullOrEmpty, "isNullOrEmpty", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
840
+ reactHotLoader.register(isNotNullOrEmpty, "isNotNullOrEmpty", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
841
+ reactHotLoader.register(isNullOrWhiteSpace, "isNullOrWhiteSpace", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
842
+ reactHotLoader.register(trimLastSlash, "trimLastSlash", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
843
+ reactHotLoader.register(assertIs, "assertIs", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\TypingUtils.ts");
844
+ })();
845
+
846
+ ;
847
+
848
+ (function () {
849
+ var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
850
+ leaveModule && leaveModule(module);
851
+ })();
852
+ /***/
853
+
854
+ },
855
+
856
+ /***/
857
+ "./Engine/src/Forms/Client/Client.ts":
858
+ /*!*******************************************!*\
859
+ !*** ./Engine/src/Forms/Client/Client.ts ***!
860
+ \*******************************************/
861
+
862
+ /***/
863
+ function (module, __webpack_exports__, __webpack_require__) {
864
+ __webpack_require__.r(__webpack_exports__);
865
+ /* harmony export */
866
+
867
+
868
+ __webpack_require__.d(__webpack_exports__, {
869
+ /* harmony export */
870
+ "isEngineVersionGreaterThanOrEqual": function () {
871
+ return (
872
+ /* binding */
873
+ isEngineVersionGreaterThanOrEqual
874
+ );
875
+ },
876
+
877
+ /* harmony export */
878
+ "CandyClientExports": function () {
879
+ return (
880
+ /* binding */
881
+ CandyClientExports
882
+ );
883
+ }
884
+ /* harmony export */
885
+
886
+ });
887
+ /* harmony import */
888
+
889
+
890
+ var whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
891
+ /*! whatwg-fetch */
892
+ "./node_modules/whatwg-fetch/fetch.js");
893
+ /* harmony import */
894
+
895
+
896
+ var _Common_TypingUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
897
+ /*! ../../../../Common/TypingUtils */
898
+ "./Common/TypingUtils.ts");
899
+ /* harmony import */
900
+
901
+
902
+ var _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
903
+ /*! ../../Helpers/LoadIntoDocument */
904
+ "./Engine/src/Helpers/LoadIntoDocument.ts");
905
+ /* harmony import */
906
+
907
+
908
+ var _Common_CandyApiClient_ClientDraftInfo_GetClientDraftInfoUrl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
909
+ /*! ../../../../Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl */
910
+ "./Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.ts");
911
+ /* harmony import */
912
+
913
+
914
+ var _ClientSettings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
915
+ /*! ./ClientSettings */
916
+ "./Engine/src/Forms/Client/ClientSettings.ts");
917
+ /* harmony import */
918
+
919
+
920
+ var _LegacyPublicForm_CreateLegacyPublicForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
921
+ /*! ./LegacyPublicForm/CreateLegacyPublicForm */
922
+ "./Engine/src/Forms/Client/LegacyPublicForm/CreateLegacyPublicForm.ts");
923
+ /* module decorator */
924
+
925
+
926
+ module = __webpack_require__.hmd(module);
927
+
928
+ (function () {
929
+ var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
930
+ enterModule && enterModule(module);
931
+ })();
932
+
933
+ function ownKeys(object, enumerableOnly) {
934
+ var keys = Object.keys(object);
935
+
936
+ if (Object.getOwnPropertySymbols) {
937
+ var symbols = Object.getOwnPropertySymbols(object);
938
+
939
+ if (enumerableOnly) {
940
+ symbols = symbols.filter(function (sym) {
941
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
942
+ });
943
+ }
944
+
945
+ keys.push.apply(keys, symbols);
946
+ }
947
+
948
+ return keys;
949
+ }
950
+
951
+ function _objectSpread(target) {
952
+ for (var i = 1; i < arguments.length; i++) {
953
+ var source = arguments[i] != null ? arguments[i] : {};
954
+
955
+ if (i % 2) {
956
+ ownKeys(Object(source), true).forEach(function (key) {
957
+ _defineProperty(target, key, source[key]);
958
+ });
959
+ } else if (Object.getOwnPropertyDescriptors) {
960
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
961
+ } else {
962
+ ownKeys(Object(source)).forEach(function (key) {
963
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
964
+ });
965
+ }
966
+ }
967
+
968
+ return target;
969
+ }
970
+
971
+ function _defineProperty(obj, key, value) {
972
+ if (key in obj) {
973
+ Object.defineProperty(obj, key, {
974
+ value: value,
975
+ enumerable: true,
976
+ configurable: true,
977
+ writable: true
978
+ });
979
+ } else {
980
+ obj[key] = value;
981
+ }
982
+
983
+ return obj;
984
+ }
985
+
986
+ function _slicedToArray(arr, i) {
987
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
988
+ }
989
+
990
+ function _nonIterableRest() {
991
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
992
+ }
993
+
994
+ function _unsupportedIterableToArray(o, minLen) {
995
+ if (!o) return;
996
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
997
+ var n = Object.prototype.toString.call(o).slice(8, -1);
998
+ if (n === "Object" && o.constructor) n = o.constructor.name;
999
+ if (n === "Map" || n === "Set") return Array.from(o);
1000
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
1001
+ }
1002
+
1003
+ function _arrayLikeToArray(arr, len) {
1004
+ if (len == null || len > arr.length) len = arr.length;
1005
+
1006
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
1007
+ arr2[i] = arr[i];
1008
+ }
1009
+
1010
+ return arr2;
1011
+ }
1012
+
1013
+ function _iterableToArrayLimit(arr, i) {
1014
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
1015
+
1016
+ if (_i == null) return;
1017
+ var _arr = [];
1018
+ var _n = true;
1019
+ var _d = false;
1020
+
1021
+ var _s, _e;
1022
+
1023
+ try {
1024
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
1025
+ _arr.push(_s.value);
1026
+
1027
+ if (i && _arr.length === i) break;
1028
+ }
1029
+ } catch (err) {
1030
+ _d = true;
1031
+ _e = err;
1032
+ } finally {
1033
+ try {
1034
+ if (!_n && _i["return"] != null) _i["return"]();
1035
+ } finally {
1036
+ if (_d) throw _e;
1037
+ }
1038
+ }
1039
+
1040
+ return _arr;
1041
+ }
1042
+
1043
+ function _arrayWithHoles(arr) {
1044
+ if (Array.isArray(arr)) return arr;
1045
+ }
1046
+
1047
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal["default"].signature : function (a) {
1048
+ return a;
1049
+ };
1050
+ /* tslint:disable:no-null-keyword no-any no-unsafe-any */
1051
+
1052
+
1053
+ function defaultCallback() {
1054
+ /* empty */
1055
+ }
1056
+
1057
+ function parseBool(value) {
1058
+ if (typeof value === "string") {
1059
+ if (value === "false") {
1060
+ return false;
1061
+ }
1062
+
1063
+ if (value === "true") {
1064
+ return true;
1065
+ }
1066
+
1067
+ return false;
1068
+ }
1069
+
1070
+ return Boolean(value);
1071
+ }
1072
+
1073
+ function url() {
1074
+ var relativeUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
1075
+ var baseUrl = __webpack_require__.g.CF.keformsUrl || "";
1076
+ return "".concat(baseUrl, "/").concat(relativeUrl).replace(/([^:])\/{2,}/g, "$1/");
1077
+ }
1078
+
1079
+ function buildUrl(path, params) {
1080
+ if (params === undefined) {
1081
+ return path;
1082
+ }
1083
+
1084
+ var queryParts = [];
1085
+
1086
+ for (var _i = 0, _Object$keys = Object.keys(params); _i < _Object$keys.length; _i++) {
1087
+ var _paramName = _Object$keys[_i];
1088
+ var paramValue = params[_paramName];
1089
+
1090
+ if (paramValue != undefined) {
1091
+ queryParts.push("".concat(_paramName, "=").concat(encodeURIComponent(paramValue)));
1092
+ }
1093
+ }
1094
+
1095
+ if (queryParts.length === 0) {
1096
+ return path;
1097
+ }
1098
+
1099
+ return path + "?" + queryParts.join("&");
1100
+ }
1101
+
1102
+ function isAllowed(domains) {
1103
+ return new RegExp("^(?:".concat(domains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(__webpack_require__.g.location.host);
1104
+ }
1105
+
1106
+ function getParameterByName(name) {
1107
+ return (__webpack_require__.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (param) {
1108
+ return param.replace(/\+/g, " ").split("=").map(decodeURIComponent);
1109
+ }) // tslint:disable-next-line:triple-equals
1110
+ .find(function (_ref) {
1111
+ var _ref2 = _slicedToArray(_ref, 1),
1112
+ key = _ref2[0];
1113
+
1114
+ return key == name;
1115
+ }) || [])[1];
1116
+ }
1117
+
1118
+ function runParallel(tasks, callback) {
1119
+ var completed = 0;
1120
+ tasks.forEach(function (task) {
1121
+ task(function (error) {
1122
+ if (completed === tasks.length) {
1123
+ return;
1124
+ }
1125
+
1126
+ if (error) {
1127
+ completed = tasks.length;
1128
+ callback(error);
1129
+ return;
1130
+ }
1131
+
1132
+ completed += 1;
1133
+
1134
+ if (completed === tasks.length) {
1135
+ callback();
1136
+ }
1137
+ });
1138
+ });
1139
+ }
1140
+
1141
+ function isEngineVersionGreaterThanOrEqual(left, right) {
1142
+ try {
1143
+ var _leftNumbers$, _rightNumbers$, _leftNumbers$2, _rightNumbers$2, _leftNumbers$3, _rightNumbers$3, _leftNumbers$4, _rightNumbers$4, _leftNumbers$5, _rightNumbers$5;
1144
+
1145
+ var leftNumbers = left.split(".").slice(0, 3).map(function (x) {
1146
+ return parseInt(x, 10);
1147
+ });
1148
+ var rightNumbers = right.split(".").slice(0, 3).map(function (x) {
1149
+ return parseInt(x, 10);
1150
+ });
1151
+ return ((_leftNumbers$ = leftNumbers[0]) !== null && _leftNumbers$ !== void 0 ? _leftNumbers$ : 0) > ((_rightNumbers$ = rightNumbers[0]) !== null && _rightNumbers$ !== void 0 ? _rightNumbers$ : 0) || ((_leftNumbers$2 = leftNumbers[0]) !== null && _leftNumbers$2 !== void 0 ? _leftNumbers$2 : 0) === ((_rightNumbers$2 = rightNumbers[0]) !== null && _rightNumbers$2 !== void 0 ? _rightNumbers$2 : 0) && (((_leftNumbers$3 = leftNumbers[1]) !== null && _leftNumbers$3 !== void 0 ? _leftNumbers$3 : 0) > ((_rightNumbers$3 = rightNumbers[1]) !== null && _rightNumbers$3 !== void 0 ? _rightNumbers$3 : 0) || ((_leftNumbers$4 = leftNumbers[1]) !== null && _leftNumbers$4 !== void 0 ? _leftNumbers$4 : 0) === ((_rightNumbers$4 = rightNumbers[1]) !== null && _rightNumbers$4 !== void 0 ? _rightNumbers$4 : 0) && ((_leftNumbers$5 = leftNumbers[2]) !== null && _leftNumbers$5 !== void 0 ? _leftNumbers$5 : 0) >= ((_rightNumbers$5 = rightNumbers[2]) !== null && _rightNumbers$5 !== void 0 ? _rightNumbers$5 : 0));
1152
+ } catch (_unused) {
1153
+ return false;
1154
+ }
1155
+ }
1156
+
1157
+ function loadForm(settings, callback) {
1158
+ var gfv = settings.gfv,
1159
+ engineVersion = settings.engineVersion,
1160
+ resourcesVersion = settings.resourcesVersion;
1161
+
1162
+ if (__webpack_require__.g.CF.entryPoint[gfv]) {
1163
+ callback();
1164
+ return;
1165
+ }
1166
+
1167
+ var isNeedEngine = engineVersion && !__webpack_require__.g[engineVersion];
1168
+ var noStylesForGfv = false; // engineVersion != undefined && (isEngineVersionGreaterThanOrEqual(engineVersion, "4.214.0") || engineVersion === "local");
1169
+
1170
+ var needLoadStylesForGfv = !noStylesForGfv;
1171
+ var min = getParameterByName("debug") === "true" ? "" : ".min";
1172
+ var tasks = [];
1173
+ var params = {
1174
+ v: resourcesVersion,
1175
+ resourceZone: settings.resourceZone
1176
+ };
1177
+
1178
+ if (needLoadStylesForGfv) {
1179
+ tasks.push(function (cb) {
1180
+ return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.styleSheet(url(buildUrl("static/public/styles/".concat(gfv).concat(min, ".css"), params)), true, cb);
1181
+ });
1182
+ }
1183
+
1184
+ tasks.push(function (cb) {
1185
+ return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.script(url(buildUrl("static/public/scripts/".concat(gfv).concat(min, ".js"), params)), cb);
1186
+ });
1187
+
1188
+ if (isNeedEngine) {
1189
+ tasks.push(function (cb) {
1190
+ return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.styleSheet(url(buildUrl("static/public/styles/candy_".concat(engineVersion).concat(min, ".css"), params)), false, cb);
1191
+ }, function (cb) {
1192
+ return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.script(url(buildUrl("static/public/scripts/candy_".concat(engineVersion).concat(min, ".js"), params)), cb);
1193
+ });
1194
+ }
1195
+
1196
+ runParallel(tasks, callback);
1197
+ }
1198
+
1199
+ function renderForm(pageContent, extendedSettings, callback) {
1200
+ var _global$CF$entryPoint;
1201
+
1202
+ var formEntryPoint = (_global$CF$entryPoint = __webpack_require__.g.CF.entryPoint[extendedSettings.gfv]) !== null && _global$CF$entryPoint !== void 0 ? _global$CF$entryPoint : (0, _Common_TypingUtils__WEBPACK_IMPORTED_MODULE_1__.reject)("Form entry point ".concat(extendedSettings.gfv, " not found."));
1203
+ formEntryPoint(pageContent, extendedSettings).then(function (form) {
1204
+ var publicForm = form.publicForm || (0, _LegacyPublicForm_CreateLegacyPublicForm__WEBPACK_IMPORTED_MODULE_5__.createLegacyPublicForm)(form);
1205
+ callback(null, publicForm);
1206
+ })["catch"](callback);
1207
+ }
1208
+
1209
+ function getEngineEntryPoint(engineVersion) {
1210
+ if (engineVersion == undefined) {
1211
+ return undefined;
1212
+ } // eslint-disable-next-line @typescript-eslint/no-unsafe-return
1213
+
1214
+
1215
+ return __webpack_require__.g[engineVersion] && __webpack_require__.g[engineVersion]["default"];
1216
+ }
1217
+
1218
+ function start(pageContent, options) {
1219
+ var _options$resourceZone, _options$fetch;
1220
+
1221
+ var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultCallback;
1222
+ var error = null;
1223
+ var ns = options.ns,
1224
+ draftId = options.draftId;
1225
+
1226
+ if (!isAllowed(_ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.konturDomains)) {
1227
+ error = new Error("domain.untrusted");
1228
+ } else if (!_ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.authorized) {
1229
+ error = new Error("user.unauthenticated");
1230
+ } else if (!draftId) {
1231
+ error = new Error("options.draftId is required");
1232
+ } else if (!ns) {
1233
+ error = new Error("options.ns is required");
1234
+ }
1235
+
1236
+ if (error) {
1237
+ callback(error);
1238
+ return;
1239
+ }
1240
+
1241
+ var resourceZone = (_options$resourceZone = options.resourceZone) !== null && _options$resourceZone !== void 0 ? _options$resourceZone : getParameterByName("resourceZone");
1242
+ var clientDraftUrl = buildUrl(url((0, _Common_CandyApiClient_ClientDraftInfo_GetClientDraftInfoUrl__WEBPACK_IMPORTED_MODULE_3__.getClientDraftInfoUrl)({
1243
+ ns: ns,
1244
+ draftId: draftId
1245
+ })), {
1246
+ resourceZone: resourceZone
1247
+ });
1248
+ var requestOptions = {
1249
+ method: "GET"
1250
+ };
1251
+
1252
+ if (options.authentication == undefined || options.authentication === "browser-credentials-include") {
1253
+ requestOptions.credentials = "include";
1254
+ } else if ("authSid" in options.authentication && options.authentication.authSid != undefined) {
1255
+ var _requestOptions$heade;
1256
+
1257
+ requestOptions.credentials = "omit";
1258
+ requestOptions.headers = (_requestOptions$heade = requestOptions.headers) !== null && _requestOptions$heade !== void 0 ? _requestOptions$heade : {};
1259
+ requestOptions.headers["Authorization"] = "AUTH.SID ".concat(options.authentication.authSid);
1260
+ } else {
1261
+ requestOptions.credentials = "omit";
1262
+ }
1263
+
1264
+ var fetchImpl = (_options$fetch = options.fetch) !== null && _options$fetch !== void 0 ? _options$fetch : whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__.fetch;
1265
+ fetchImpl(clientDraftUrl, requestOptions).then(function (x) {
1266
+ return x.json();
1267
+ }).then(function (clientDraftInfo) {
1268
+ var _options$feedbackEnab, _options$isDisabledCl, _options$isDisabledCl2, _options$isDisabledCl3;
1269
+
1270
+ var gfv = clientDraftInfo.gfv;
1271
+ var engineVersion = clientDraftInfo.engineVersion;
1272
+
1273
+ var extendedSettings = _objectSpread(_objectSpread(_objectSpread({
1274
+ authorized: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.authorized,
1275
+ cauldronApiUrl: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.cauldronApiUrl,
1276
+ isTestServer: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.isTestServer,
1277
+ renderCachingForIE8: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.renderCachingForIE8,
1278
+ normalizationOnServer: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.normalizationOnServer,
1279
+ normativeUrl: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.normativeUrl,
1280
+ resourcesVersion: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.resourcesVersion,
1281
+ konturDomains: _ClientSettings__WEBPACK_IMPORTED_MODULE_4__.clientSettings.konturDomains
1282
+ }, options), {}, {
1283
+ abonId: options.abonId,
1284
+ orgId: options.orgId,
1285
+ userId: options.userId
1286
+ }, clientDraftInfo), {}, {
1287
+ gfv: gfv,
1288
+ isIndividual: clientDraftInfo.isIndividual,
1289
+ isForeign: clientDraftInfo.isForeign,
1290
+ engineVersion: engineVersion,
1291
+ feedbackEnabled: (_options$feedbackEnab = options.feedbackEnabled) !== null && _options$feedbackEnab !== void 0 ? _options$feedbackEnab : clientDraftInfo.feedbackEnabled,
1292
+ candyTourAvailable: clientDraftInfo.candyTourAvailable,
1293
+ eventEmitter: options.eventEmitter,
1294
+ formInfo: clientDraftInfo.formInfo,
1295
+ printInfo: clientDraftInfo.printInfo,
1296
+ regions: clientDraftInfo.regions,
1297
+ hasTemplates: clientDraftInfo.hasTemplates,
1298
+ model: options.model,
1299
+ isDisabledCleanForm: (_options$isDisabledCl = options.isDisabledCleanForm) !== null && _options$isDisabledCl !== void 0 ? _options$isDisabledCl : false,
1300
+ isDisabledCloseButton: (_options$isDisabledCl2 = options.isDisabledCloseButton) !== null && _options$isDisabledCl2 !== void 0 ? _options$isDisabledCl2 : false,
1301
+ isDisabledCloseAndSaveButton: (_options$isDisabledCl3 = options.isDisabledCloseAndSaveButton) !== null && _options$isDisabledCl3 !== void 0 ? _options$isDisabledCl3 : false,
1302
+ resourceZone: resourceZone,
1303
+ authentication: options.authentication
1304
+ });
1305
+
1306
+ loadForm({
1307
+ gfv: extendedSettings.gfv,
1308
+ engineVersion: extendedSettings.engineVersion,
1309
+ resourceZone: extendedSettings.resourceZone,
1310
+ resourcesVersion: extendedSettings.resourcesVersion,
1311
+ theme: extendedSettings.theme
1312
+ }, function (loadError) {
1313
+ if (loadError || !__webpack_require__.g.CF.entryPoint[gfv]) {
1314
+ callback(new Error("dynamic loading is not supported for gfv ".concat(gfv)));
1315
+ return;
1316
+ }
1317
+
1318
+ var render = getEngineEntryPoint(engineVersion);
1319
+ renderForm(pageContent, _objectSpread(_objectSpread({}, extendedSettings), {}, {
1320
+ templatesApi: options.templatesApi,
1321
+ renderForm: render
1322
+ }), callback);
1323
+ });
1324
+ })["catch"](callback);
1325
+ }
1326
+
1327
+ var CandyClientExports = {
1328
+ start: start,
1329
+ entryPoint: {},
1330
+ partialRenderingForIE8: parseBool("{partialRenderingForIE8}"),
1331
+ keformsUrl: "{keformsUrl}"
1332
+ };
1333
+ __webpack_require__.g.CF = CandyClientExports;
1334
+ ;
1335
+
1336
+ (function () {
1337
+ var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
1338
+
1339
+ if (!reactHotLoader) {
1340
+ return;
1341
+ }
1342
+
1343
+ reactHotLoader.register(defaultCallback, "defaultCallback", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1344
+ reactHotLoader.register(parseBool, "parseBool", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1345
+ reactHotLoader.register(url, "url", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1346
+ reactHotLoader.register(buildUrl, "buildUrl", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1347
+ reactHotLoader.register(isAllowed, "isAllowed", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1348
+ reactHotLoader.register(getParameterByName, "getParameterByName", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1349
+ reactHotLoader.register(runParallel, "runParallel", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1350
+ reactHotLoader.register(isEngineVersionGreaterThanOrEqual, "isEngineVersionGreaterThanOrEqual", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1351
+ reactHotLoader.register(loadForm, "loadForm", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1352
+ reactHotLoader.register(renderForm, "renderForm", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1353
+ reactHotLoader.register(getEngineEntryPoint, "getEngineEntryPoint", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1354
+ reactHotLoader.register(start, "start", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1355
+ reactHotLoader.register(CandyClientExports, "CandyClientExports", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\Client.ts");
1356
+ })();
1357
+
1358
+ ;
1359
+
1360
+ (function () {
1361
+ var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
1362
+ leaveModule && leaveModule(module);
1363
+ })();
494
1364
  /***/
495
1365
 
496
1366
  },
@@ -502,7 +1372,7 @@
502
1372
  \***************************************************/
503
1373
 
504
1374
  /***/
505
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1375
+ function (module, __webpack_exports__, __webpack_require__) {
506
1376
  __webpack_require__.r(__webpack_exports__);
507
1377
  /* harmony export */
508
1378
 
@@ -518,6 +1388,19 @@
518
1388
  /* harmony export */
519
1389
 
520
1390
  });
1391
+ /* module decorator */
1392
+
1393
+
1394
+ module = __webpack_require__.hmd(module);
1395
+
1396
+ (function () {
1397
+ var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
1398
+ enterModule && enterModule(module);
1399
+ })();
1400
+
1401
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal["default"].signature : function (a) {
1402
+ return a;
1403
+ };
521
1404
 
522
1405
  function parseBool(value) {
523
1406
  if (typeof value === "string") {
@@ -538,9 +1421,6 @@
538
1421
  var clientSettings = {
539
1422
  authorized: parseBool("{authorized}"),
540
1423
  cauldronApiUrl: "{cauldronApiUrl}",
541
- abonId: "{abonId}",
542
- orgId: "{orgId}",
543
- userId: "{userId}",
544
1424
  isTestServer: parseBool("{isTestServer}"),
545
1425
  renderCachingForIE8: parseBool("{renderCachingForIE8}"),
546
1426
  normalizationOnServer: parseBool("{normalizationOnServer}"),
@@ -548,7 +1428,27 @@
548
1428
  resourcesVersion: "{resourcesVersion}",
549
1429
  konturDomains: "{konturDomains}"
550
1430
  };
1431
+ ;
1432
+
1433
+ (function () {
1434
+ var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
1435
+
1436
+ if (!reactHotLoader) {
1437
+ return;
1438
+ }
1439
+
1440
+ reactHotLoader.register(parseBool, "parseBool", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\ClientSettings.ts");
1441
+ reactHotLoader.register(clientSettings, "clientSettings", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\ClientSettings.ts");
1442
+ })();
1443
+
1444
+ ;
1445
+
1446
+ (function () {
1447
+ var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
1448
+ leaveModule && leaveModule(module);
1449
+ })();
551
1450
  /***/
1451
+
552
1452
  },
553
1453
 
554
1454
  /***/
@@ -558,7 +1458,7 @@
558
1458
  \****************************************************************************/
559
1459
 
560
1460
  /***/
561
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1461
+ function (module, __webpack_exports__, __webpack_require__) {
562
1462
  __webpack_require__.r(__webpack_exports__);
563
1463
  /* harmony export */
564
1464
 
@@ -588,6 +1488,15 @@
588
1488
  var _Common_Errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
589
1489
  /*! ../../../../../Common/Errors */
590
1490
  "./Common/Errors.ts");
1491
+ /* module decorator */
1492
+
1493
+
1494
+ module = __webpack_require__.hmd(module);
1495
+
1496
+ (function () {
1497
+ var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
1498
+ enterModule && enterModule(module);
1499
+ })();
591
1500
 
592
1501
  function _typeof(obj) {
593
1502
  "@babel/helpers - typeof";
@@ -632,9 +1541,13 @@
632
1541
 
633
1542
  if (Object.getOwnPropertySymbols) {
634
1543
  var symbols = Object.getOwnPropertySymbols(object);
635
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
636
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
637
- });
1544
+
1545
+ if (enumerableOnly) {
1546
+ symbols = symbols.filter(function (sym) {
1547
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
1548
+ });
1549
+ }
1550
+
638
1551
  keys.push.apply(keys, symbols);
639
1552
  }
640
1553
 
@@ -676,6 +1589,10 @@
676
1589
  return obj;
677
1590
  }
678
1591
 
1592
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal["default"].signature : function (a) {
1593
+ return a;
1594
+ };
1595
+
679
1596
  function modelChangeEventPath(path, fieldName) {
680
1597
  if (fieldName != undefined) {
681
1598
  if (path == undefined) {
@@ -730,10 +1647,15 @@
730
1647
  value: function setErrorLog(errorLog) {
731
1648
  throw new Error("Method not implemented.");
732
1649
  }
1650
+ }, {
1651
+ key: "__INTERNAL__importFromEmployeeService",
1652
+ value: function __INTERNAL__importFromEmployeeService() {
1653
+ throw new Error("Method not implemented.");
1654
+ }
733
1655
  }, {
734
1656
  key: "getByGId",
735
1657
  value: function getByGId(gId, filter) {
736
- return this.form.picklistsProvider.getByGId(gId, filter);
1658
+ return this.form.picklistsProvider.getDigestApiPicklist(gId).query(filter);
737
1659
  }
738
1660
  }, {
739
1661
  key: "on",
@@ -776,12 +1698,13 @@
776
1698
  }, {
777
1699
  key: "getTourSteps",
778
1700
  value: function getTourSteps() {
1701
+ // For old keweb
779
1702
  return [];
780
1703
  }
781
1704
  }, {
782
1705
  key: "validate",
783
1706
  value: function validate() {
784
- var keys = Object.keys(this.form.model.getCachedChunk(this.form.settings.formRoot)); // @ts-ignore Это в старых движках тут такой вызов
1707
+ var keys = Object.keys(this.form.model.getChunk(this.form.settings.formRoot)); // @ts-ignore Это в старых движках тут такой вызов
785
1708
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
786
1709
 
787
1710
  return this.form.validator.validateAll(keys);
@@ -789,7 +1712,7 @@
789
1712
  }, {
790
1713
  key: "hasErrors",
791
1714
  value: function hasErrors() {
792
- var errorCount = this.form.model.getCached(this.form.settings.formRoot, "errorsCount");
1715
+ var errorCount = this.form.model.get(this.form.settings.formRoot, "errorsCount");
793
1716
  return errorCount != undefined && errorCount > 0;
794
1717
  }
795
1718
  }, {
@@ -829,7 +1752,7 @@
829
1752
 
830
1753
  if (Array.isArray(pathOrArray)) {
831
1754
  return reduceChunkValues(pathOrArray.map(function (path) {
832
- return mapChunkValues(_this.form.model.getCachedChunk(path));
1755
+ return mapChunkValues(_this.form.model.getChunk(path));
833
1756
  }) // tslint:disable-next-line:no-any
834
1757
  .reduce(function (result, array) {
835
1758
  return result.concat(array);
@@ -837,11 +1760,11 @@
837
1760
  }
838
1761
 
839
1762
  if (typeof pathOrArray === "string") {
840
- return reduceChunkValues(mapChunkValues(this.form.model.getCachedChunk(pathOrArray)));
1763
+ return reduceChunkValues(mapChunkValues(this.form.model.getChunk(pathOrArray)));
841
1764
  }
842
1765
 
843
1766
  if (pathOrArray === undefined) {
844
- return reduceChunkValues(mapChunkValues(this.form.model.getCachedChunk(this.form.settings.formRoot)));
1767
+ return reduceChunkValues(mapChunkValues(this.form.model.getChunk(this.form.settings.formRoot)));
845
1768
  }
846
1769
 
847
1770
  throw new Error("form.get() parameter should be string path or array of paths");
@@ -867,6 +1790,18 @@
867
1790
  value: function removeInstance(path, instance) {
868
1791
  throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.NotImplementedError();
869
1792
  }
1793
+ }, {
1794
+ key: "removeInstances",
1795
+ value: function removeInstances(path, instance) {
1796
+ throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.NotImplementedError();
1797
+ }
1798
+ }, {
1799
+ key: "__reactstandin__regenerateByEval",
1800
+ value: // @ts-ignore
1801
+ function __reactstandin__regenerateByEval(key, code) {
1802
+ // @ts-ignore
1803
+ this[key] = eval(code);
1804
+ }
870
1805
  }]);
871
1806
 
872
1807
  return LegacyPublicForm;
@@ -876,6 +1811,29 @@
876
1811
  // @ts-ignore
877
1812
  return new LegacyPublicForm(form);
878
1813
  }
1814
+
1815
+ ;
1816
+
1817
+ (function () {
1818
+ var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
1819
+
1820
+ if (!reactHotLoader) {
1821
+ return;
1822
+ }
1823
+
1824
+ reactHotLoader.register(modelChangeEventPath, "modelChangeEventPath", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts");
1825
+ reactHotLoader.register(mapChunkValues, "mapChunkValues", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts");
1826
+ reactHotLoader.register(reduceChunkValues, "reduceChunkValues", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts");
1827
+ reactHotLoader.register(LegacyPublicForm, "LegacyPublicForm", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts");
1828
+ reactHotLoader.register(createLegacyPublicForm, "createLegacyPublicForm", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts");
1829
+ })();
1830
+
1831
+ ;
1832
+
1833
+ (function () {
1834
+ var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
1835
+ leaveModule && leaveModule(module);
1836
+ })();
879
1837
  /***/
880
1838
 
881
1839
  },
@@ -887,7 +1845,7 @@
887
1845
  \************************************************/
888
1846
 
889
1847
  /***/
890
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1848
+ function (module, __webpack_exports__, __webpack_require__) {
891
1849
  __webpack_require__.r(__webpack_exports__);
892
1850
  /* harmony export */
893
1851
 
@@ -903,6 +1861,15 @@
903
1861
  /* harmony export */
904
1862
 
905
1863
  });
1864
+ /* module decorator */
1865
+
1866
+
1867
+ module = __webpack_require__.hmd(module);
1868
+
1869
+ (function () {
1870
+ var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
1871
+ enterModule && enterModule(module);
1872
+ })();
906
1873
 
907
1874
  function _classCallCheck(instance, Constructor) {
908
1875
  if (!(instance instanceof Constructor)) {
@@ -924,7 +1891,11 @@
924
1891
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
925
1892
  if (staticProps) _defineProperties(Constructor, staticProps);
926
1893
  return Constructor;
927
- } // tslint:disable no-unsafe-any
1894
+ }
1895
+
1896
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal["default"].signature : function (a) {
1897
+ return a;
1898
+ }; // tslint:disable no-unsafe-any
928
1899
 
929
1900
 
930
1901
  var LoadIntoDocument = /*#__PURE__*/function () {
@@ -1004,6 +1975,25 @@
1004
1975
 
1005
1976
  return LoadIntoDocument;
1006
1977
  }();
1978
+
1979
+ ;
1980
+
1981
+ (function () {
1982
+ var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
1983
+
1984
+ if (!reactHotLoader) {
1985
+ return;
1986
+ }
1987
+
1988
+ reactHotLoader.register(LoadIntoDocument, "LoadIntoDocument", "C:\\buildAgent\\work\\8df8f1edd755969c\\Engine\\src\\Helpers\\LoadIntoDocument.ts");
1989
+ })();
1990
+
1991
+ ;
1992
+
1993
+ (function () {
1994
+ var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
1995
+ leaveModule && leaveModule(module);
1996
+ })();
1007
1997
  /***/
1008
1998
 
1009
1999
  },
@@ -1064,22 +2054,6 @@
1064
2054
 
1065
2055
  });
1066
2056
 
1067
- function _typeof(obj) {
1068
- "@babel/helpers - typeof";
1069
-
1070
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
1071
- _typeof = function _typeof(obj) {
1072
- return typeof obj;
1073
- };
1074
- } else {
1075
- _typeof = function _typeof(obj) {
1076
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
1077
- };
1078
- }
1079
-
1080
- return _typeof(obj);
1081
- }
1082
-
1083
2057
  var global = typeof globalThis !== 'undefined' && globalThis || typeof self !== 'undefined' && self || typeof global !== 'undefined' && global;
1084
2058
  var support = {
1085
2059
  searchParams: 'URLSearchParams' in global,
@@ -1131,7 +2105,7 @@
1131
2105
 
1132
2106
  function iteratorFor(items) {
1133
2107
  var iterator = {
1134
- next: function next() {
2108
+ next: function () {
1135
2109
  var value = items.shift();
1136
2110
  return {
1137
2111
  done: value === undefined,
@@ -1575,7 +2549,7 @@
1575
2549
  try {
1576
2550
  new DOMException();
1577
2551
  } catch (err) {
1578
- DOMException = function DOMException(message, name) {
2552
+ DOMException = function (message, name) {
1579
2553
  this.message = message;
1580
2554
  this.name = name;
1581
2555
  var error = Error(message);
@@ -1655,7 +2629,7 @@
1655
2629
  }
1656
2630
  }
1657
2631
 
1658
- if (init && _typeof(init.headers) === 'object' && !(init.headers instanceof Headers)) {
2632
+ if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {
1659
2633
  Object.getOwnPropertyNames(init.headers).forEach(function (name) {
1660
2634
  xhr.setRequestHeader(name, normalizeValue(init.headers[name]));
1661
2635
  });
@@ -1730,10 +2704,10 @@
1730
2704
 
1731
2705
  var module = __webpack_module_cache__[moduleId] = {
1732
2706
  /******/
1733
- // no module.id needed
2707
+ id: moduleId,
1734
2708
 
1735
2709
  /******/
1736
- // no module.loaded needed
2710
+ loaded: false,
1737
2711
 
1738
2712
  /******/
1739
2713
  exports: {}
@@ -1751,10 +2725,18 @@
1751
2725
  /******/
1752
2726
 
1753
2727
  /******/
1754
- // Return the exports of the module
2728
+ // Flag the module as loaded
2729
+
2730
+ /******/
2731
+
2732
+
2733
+ module.loaded = true;
2734
+ /******/
1755
2735
 
1756
2736
  /******/
2737
+ // Return the exports of the module
1757
2738
 
2739
+ /******/
1758
2740
 
1759
2741
  return module.exports;
1760
2742
  /******/
@@ -1830,6 +2812,45 @@
1830
2812
 
1831
2813
  /******/
1832
2814
 
2815
+ /* webpack/runtime/harmony module decorator */
2816
+
2817
+ /******/
2818
+
2819
+ !function () {
2820
+ /******/
2821
+ __webpack_require__.hmd = function (module) {
2822
+ /******/
2823
+ module = Object.create(module);
2824
+ /******/
2825
+
2826
+ if (!module.children) module.children = [];
2827
+ /******/
2828
+
2829
+ Object.defineProperty(module, 'exports', {
2830
+ /******/
2831
+ enumerable: true,
2832
+
2833
+ /******/
2834
+ set: function () {
2835
+ /******/
2836
+ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
2837
+ /******/
2838
+ }
2839
+ /******/
2840
+
2841
+ });
2842
+ /******/
2843
+
2844
+ return module;
2845
+ /******/
2846
+ };
2847
+ /******/
2848
+
2849
+ }();
2850
+ /******/
2851
+
2852
+ /******/
2853
+
1833
2854
  /* webpack/runtime/hasOwnProperty shorthand */
1834
2855
 
1835
2856
  /******/
@@ -1879,437 +2900,23 @@
1879
2900
 
1880
2901
  /************************************************************************/
1881
2902
 
1882
- var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
1883
-
1884
- !function () {
1885
- /*!*******************************************!*\
1886
- !*** ./Engine/src/Forms/Client/Client.ts ***!
1887
- \*******************************************/
1888
- __webpack_require__.r(__webpack_exports__);
1889
- /* harmony export */
1890
-
1891
-
1892
- __webpack_require__.d(__webpack_exports__, {
1893
- /* harmony export */
1894
- "isEngineVersionGreaterThanOrEqual": function () {
1895
- return (
1896
- /* binding */
1897
- isEngineVersionGreaterThanOrEqual
1898
- );
1899
- },
1900
-
1901
- /* harmony export */
1902
- "CandyClientExports": function () {
1903
- return (
1904
- /* binding */
1905
- CandyClientExports
1906
- );
1907
- }
1908
- /* harmony export */
1909
-
1910
- });
1911
- /* harmony import */
1912
-
1913
-
1914
- var whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
1915
- /*! whatwg-fetch */
1916
- "./node_modules/whatwg-fetch/fetch.js");
1917
- /* harmony import */
1918
-
1919
-
1920
- var _Common_TypingUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
1921
- /*! ../../../../Common/TypingUtils */
1922
- "./Common/TypingUtils.ts");
1923
- /* harmony import */
1924
-
1925
-
1926
- var _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
1927
- /*! ../../Helpers/LoadIntoDocument */
1928
- "./Engine/src/Helpers/LoadIntoDocument.ts");
1929
- /* harmony import */
1930
-
1931
-
1932
- var _ClientSettings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
1933
- /*! ./ClientSettings */
1934
- "./Engine/src/Forms/Client/ClientSettings.ts");
1935
- /* harmony import */
1936
-
1937
-
1938
- var _LegacyPublicForm_CreateLegacyPublicForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
1939
- /*! ./LegacyPublicForm/CreateLegacyPublicForm */
1940
- "./Engine/src/Forms/Client/LegacyPublicForm/CreateLegacyPublicForm.ts");
1941
-
1942
- function ownKeys(object, enumerableOnly) {
1943
- var keys = Object.keys(object);
1944
-
1945
- if (Object.getOwnPropertySymbols) {
1946
- var symbols = Object.getOwnPropertySymbols(object);
1947
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
1948
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
1949
- });
1950
- keys.push.apply(keys, symbols);
1951
- }
1952
-
1953
- return keys;
1954
- }
1955
-
1956
- function _objectSpread(target) {
1957
- for (var i = 1; i < arguments.length; i++) {
1958
- var source = arguments[i] != null ? arguments[i] : {};
1959
-
1960
- if (i % 2) {
1961
- ownKeys(Object(source), true).forEach(function (key) {
1962
- _defineProperty(target, key, source[key]);
1963
- });
1964
- } else if (Object.getOwnPropertyDescriptors) {
1965
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
1966
- } else {
1967
- ownKeys(Object(source)).forEach(function (key) {
1968
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
1969
- });
1970
- }
1971
- }
1972
-
1973
- return target;
1974
- }
1975
-
1976
- function _defineProperty(obj, key, value) {
1977
- if (key in obj) {
1978
- Object.defineProperty(obj, key, {
1979
- value: value,
1980
- enumerable: true,
1981
- configurable: true,
1982
- writable: true
1983
- });
1984
- } else {
1985
- obj[key] = value;
1986
- }
1987
-
1988
- return obj;
1989
- }
1990
-
1991
- function _slicedToArray(arr, i) {
1992
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
1993
- }
1994
-
1995
- function _nonIterableRest() {
1996
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1997
- }
1998
-
1999
- function _unsupportedIterableToArray(o, minLen) {
2000
- if (!o) return;
2001
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
2002
- var n = Object.prototype.toString.call(o).slice(8, -1);
2003
- if (n === "Object" && o.constructor) n = o.constructor.name;
2004
- if (n === "Map" || n === "Set") return Array.from(o);
2005
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
2006
- }
2007
-
2008
- function _arrayLikeToArray(arr, len) {
2009
- if (len == null || len > arr.length) len = arr.length;
2010
-
2011
- for (var i = 0, arr2 = new Array(len); i < len; i++) {
2012
- arr2[i] = arr[i];
2013
- }
2014
-
2015
- return arr2;
2016
- }
2017
-
2018
- function _iterableToArrayLimit(arr, i) {
2019
- if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
2020
- var _arr = [];
2021
- var _n = true;
2022
- var _d = false;
2023
- var _e = undefined;
2024
-
2025
- try {
2026
- for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
2027
- _arr.push(_s.value);
2028
-
2029
- if (i && _arr.length === i) break;
2030
- }
2031
- } catch (err) {
2032
- _d = true;
2033
- _e = err;
2034
- } finally {
2035
- try {
2036
- if (!_n && _i["return"] != null) _i["return"]();
2037
- } finally {
2038
- if (_d) throw _e;
2039
- }
2040
- }
2041
-
2042
- return _arr;
2043
- }
2044
-
2045
- function _arrayWithHoles(arr) {
2046
- if (Array.isArray(arr)) return arr;
2047
- }
2048
- /* tslint:disable:no-null-keyword no-any no-unsafe-any */
2049
-
2050
-
2051
- function defaultCallback() {
2052
- /* empty */
2053
- }
2054
-
2055
- function parseBool(value) {
2056
- if (typeof value === "string") {
2057
- if (value === "false") {
2058
- return false;
2059
- }
2060
-
2061
- if (value === "true") {
2062
- return true;
2063
- }
2064
-
2065
- return false;
2066
- }
2067
-
2068
- return Boolean(value);
2069
- }
2070
-
2071
- function url() {
2072
- var relativeUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
2073
- var baseUrl = __webpack_require__.g.CF.keformsUrl || "";
2074
- return "".concat(baseUrl, "/").concat(relativeUrl).replace(/([^:])\/{2,}/g, "$1/");
2075
- }
2076
-
2077
- function buildUrl(path, params) {
2078
- if (params === undefined) {
2079
- return path;
2080
- }
2081
-
2082
- var queryParts = [];
2083
-
2084
- for (var _i = 0, _Object$keys = Object.keys(params); _i < _Object$keys.length; _i++) {
2085
- var _paramName = _Object$keys[_i];
2086
- var paramValue = params[_paramName];
2087
-
2088
- if (paramValue != undefined) {
2089
- queryParts.push("".concat(_paramName, "=").concat(encodeURIComponent(paramValue)));
2090
- }
2091
- }
2092
-
2093
- if (queryParts.length === 0) {
2094
- return path;
2095
- }
2096
-
2097
- return path + "?" + queryParts.join("&");
2098
- }
2099
-
2100
- function isAllowed(domains) {
2101
- return new RegExp("^(?:".concat(domains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(__webpack_require__.g.location.host);
2102
- }
2103
-
2104
- function getParameterByName(name) {
2105
- return (__webpack_require__.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (param) {
2106
- return param.replace(/\+/g, " ").split("=").map(decodeURIComponent);
2107
- }) // tslint:disable-next-line:triple-equals
2108
- .find(function (_ref) {
2109
- var _ref2 = _slicedToArray(_ref, 1),
2110
- key = _ref2[0];
2111
-
2112
- return key == name;
2113
- }) || [])[1];
2114
- }
2115
-
2116
- function runParallel(tasks, callback) {
2117
- var completed = 0;
2118
- tasks.forEach(function (task) {
2119
- task(function (error) {
2120
- if (completed === tasks.length) {
2121
- return;
2122
- }
2123
-
2124
- if (error) {
2125
- completed = tasks.length;
2126
- callback(error);
2127
- return;
2128
- }
2129
-
2130
- completed += 1;
2131
-
2132
- if (completed === tasks.length) {
2133
- callback();
2134
- }
2135
- });
2136
- });
2137
- }
2138
-
2139
- function isEngineVersionGreaterThanOrEqual(left, right) {
2140
- try {
2141
- var _leftNumbers$, _rightNumbers$, _leftNumbers$2, _rightNumbers$2, _leftNumbers$3, _rightNumbers$3, _leftNumbers$4, _rightNumbers$4, _leftNumbers$5, _rightNumbers$5;
2142
-
2143
- var leftNumbers = left.split(".").slice(0, 3).map(function (x) {
2144
- return parseInt(x, 10);
2145
- });
2146
- var rightNumbers = right.split(".").slice(0, 3).map(function (x) {
2147
- return parseInt(x, 10);
2148
- });
2149
- return ((_leftNumbers$ = leftNumbers[0]) !== null && _leftNumbers$ !== void 0 ? _leftNumbers$ : 0) > ((_rightNumbers$ = rightNumbers[0]) !== null && _rightNumbers$ !== void 0 ? _rightNumbers$ : 0) || ((_leftNumbers$2 = leftNumbers[0]) !== null && _leftNumbers$2 !== void 0 ? _leftNumbers$2 : 0) === ((_rightNumbers$2 = rightNumbers[0]) !== null && _rightNumbers$2 !== void 0 ? _rightNumbers$2 : 0) && (((_leftNumbers$3 = leftNumbers[1]) !== null && _leftNumbers$3 !== void 0 ? _leftNumbers$3 : 0) > ((_rightNumbers$3 = rightNumbers[1]) !== null && _rightNumbers$3 !== void 0 ? _rightNumbers$3 : 0) || ((_leftNumbers$4 = leftNumbers[1]) !== null && _leftNumbers$4 !== void 0 ? _leftNumbers$4 : 0) === ((_rightNumbers$4 = rightNumbers[1]) !== null && _rightNumbers$4 !== void 0 ? _rightNumbers$4 : 0) && ((_leftNumbers$5 = leftNumbers[2]) !== null && _leftNumbers$5 !== void 0 ? _leftNumbers$5 : 0) >= ((_rightNumbers$5 = rightNumbers[2]) !== null && _rightNumbers$5 !== void 0 ? _rightNumbers$5 : 0));
2150
- } catch (_unused) {
2151
- return false;
2152
- }
2153
- }
2154
-
2155
- function loadForm(settings, callback) {
2156
- var gfv = settings.gfv,
2157
- engineVersion = settings.engineVersion,
2158
- resourcesVersion = settings.resourcesVersion,
2159
- theme = settings.theme;
2160
-
2161
- if (__webpack_require__.g.CF.entryPoint[gfv]) {
2162
- callback();
2163
- return;
2164
- }
2165
-
2166
- var isNeedEngine = engineVersion && !__webpack_require__.g[engineVersion];
2167
- var useSameResourcesForTheme = engineVersion != undefined && (isEngineVersionGreaterThanOrEqual(engineVersion, "4.206.0") || engineVersion === "local");
2168
- var noStylesForGfv = false; // engineVersion != undefined && (isEngineVersionGreaterThanOrEqual(engineVersion, "4.214.0") || engineVersion === "local");
2169
-
2170
- var needLoadStylesForGfv = !noStylesForGfv;
2171
- var min = getParameterByName("debug") === "true" ? "" : ".min";
2172
- var themePostfix = !useSameResourcesForTheme && theme ? ".".concat(encodeURIComponent(theme)) : "";
2173
- var tasks = [];
2174
- var params = {
2175
- v: resourcesVersion,
2176
- resourceZone: settings.resourceZone
2177
- };
2178
-
2179
- if (needLoadStylesForGfv) {
2180
- tasks.push(function (cb) {
2181
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.styleSheet(url(buildUrl("static/public/styles/".concat(gfv).concat(themePostfix).concat(min, ".css"), params)), true, cb);
2182
- });
2183
- }
2184
-
2185
- tasks.push(function (cb) {
2186
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.script(url(buildUrl("static/public/scripts/".concat(gfv).concat(min, ".js"), params)), cb);
2187
- });
2188
-
2189
- if (isNeedEngine) {
2190
- tasks.push(function (cb) {
2191
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.styleSheet(url(buildUrl("static/public/styles/candy_".concat(engineVersion).concat(themePostfix).concat(min, ".css"), params)), false, cb);
2192
- }, function (cb) {
2193
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.script(url(buildUrl("static/public/scripts/candy_".concat(engineVersion).concat(min, ".js"), params)), cb);
2194
- });
2195
- }
2196
-
2197
- runParallel(tasks, callback);
2198
- }
2199
-
2200
- function renderForm(pageContent, extendedSettings, callback) {
2201
- var _global$CF$entryPoint;
2202
-
2203
- var formEntryPoint = (_global$CF$entryPoint = __webpack_require__.g.CF.entryPoint[extendedSettings.gfv]) !== null && _global$CF$entryPoint !== void 0 ? _global$CF$entryPoint : (0, _Common_TypingUtils__WEBPACK_IMPORTED_MODULE_1__.reject)("Form entry point ".concat(extendedSettings.gfv, " not found."));
2204
- formEntryPoint(pageContent, extendedSettings).then(function (form) {
2205
- var publicForm = form.publicForm || (0, _LegacyPublicForm_CreateLegacyPublicForm__WEBPACK_IMPORTED_MODULE_4__.createLegacyPublicForm)(form);
2206
- callback(null, publicForm);
2207
- })["catch"](callback);
2208
- }
2209
-
2210
- function getEngineEntryPoint(engineVersion) {
2211
- if (engineVersion == undefined) {
2212
- return undefined;
2213
- } // eslint-disable-next-line @typescript-eslint/no-unsafe-return
2214
-
2215
-
2216
- return __webpack_require__.g[engineVersion] && __webpack_require__.g[engineVersion]["default"];
2217
- }
2218
-
2219
- function start(pageContent, options) {
2220
- var _options$resourceZone, _options$fetch;
2221
-
2222
- var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultCallback;
2223
- var error = null;
2224
- var ns = options.ns,
2225
- draftId = options.draftId;
2226
- var settings = _ClientSettings__WEBPACK_IMPORTED_MODULE_3__.clientSettings;
2903
+ /******/
2227
2904
 
2228
- if (!isAllowed(settings.konturDomains)) {
2229
- error = new Error("domain.untrusted");
2230
- } else if (!settings.authorized) {
2231
- error = new Error("user.unauthenticated");
2232
- } else if (!draftId) {
2233
- error = new Error("options.draftId is required");
2234
- } else if (!ns) {
2235
- error = new Error("options.ns is required");
2236
- }
2905
+ /******/
2906
+ // startup
2237
2907
 
2238
- if (error) {
2239
- callback(error);
2240
- return;
2241
- }
2908
+ /******/
2909
+ // Load entry module and return exports
2242
2910
 
2243
- var resourceZone = (_options$resourceZone = options.resourceZone) !== null && _options$resourceZone !== void 0 ? _options$resourceZone : getParameterByName("resourceZone");
2244
- var clientDraftUrl = buildUrl(url("v1/ns/".concat(ns, "/drafts/").concat(draftId, "/client-draft-info")), {
2245
- resourceZone: resourceZone
2246
- });
2247
- var requestOptions = {
2248
- method: "GET"
2249
- };
2911
+ /******/
2912
+ // This entry module is referenced by other modules so it can't be inlined
2250
2913
 
2251
- if (options.authentication == undefined || options.authentication === "browser-credentials-include") {
2252
- requestOptions.credentials = "include";
2253
- } else if ("authSid" in options.authentication && options.authentication.authSid != undefined) {
2254
- var _requestOptions$heade;
2255
-
2256
- requestOptions.credentials = "omit";
2257
- requestOptions.headers = (_requestOptions$heade = requestOptions.headers) !== null && _requestOptions$heade !== void 0 ? _requestOptions$heade : {};
2258
- requestOptions.headers["Authorization"] = "AUTH.SID ".concat(options.authentication.authSid);
2259
- } else {
2260
- requestOptions.credentials = "omit";
2261
- }
2262
-
2263
- var fetchImpl = (_options$fetch = options.fetch) !== null && _options$fetch !== void 0 ? _options$fetch : whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__.fetch;
2264
- fetchImpl(clientDraftUrl, requestOptions).then(function (x) {
2265
- return x.json();
2266
- }).then(function (clientDraftInfo) {
2267
- var _options$feedbackEnab, _options$isDisabledCl, _options$isDisabledCl2, _options$isDisabledCl3;
2268
-
2269
- var gfv = clientDraftInfo.gfv;
2270
- var engineVersionParam = getParameterByName("engineVersion");
2271
- var engineVersion = clientDraftInfo.engineVersion ? engineVersionParam || clientDraftInfo.engineVersion : null;
2272
-
2273
- var extendedSettings = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, settings), options), clientDraftInfo), {}, {
2274
- model: options.model,
2275
- feedbackEnabled: (_options$feedbackEnab = options.feedbackEnabled) !== null && _options$feedbackEnab !== void 0 ? _options$feedbackEnab : clientDraftInfo.feedbackEnabled,
2276
- isDisabledCleanForm: (_options$isDisabledCl = options.isDisabledCleanForm) !== null && _options$isDisabledCl !== void 0 ? _options$isDisabledCl : false,
2277
- isDisabledCloseButton: (_options$isDisabledCl2 = options.isDisabledCloseButton) !== null && _options$isDisabledCl2 !== void 0 ? _options$isDisabledCl2 : false,
2278
- isDisabledCloseAndSaveButton: (_options$isDisabledCl3 = options.isDisabledCloseAndSaveButton) !== null && _options$isDisabledCl3 !== void 0 ? _options$isDisabledCl3 : false,
2279
- resourceZone: resourceZone,
2280
- engineVersion: engineVersion,
2281
- authentication: options.authentication
2282
- });
2914
+ /******/
2283
2915
 
2284
- loadForm({
2285
- gfv: extendedSettings.gfv,
2286
- engineVersion: extendedSettings.engineVersion,
2287
- resourceZone: extendedSettings.resourceZone,
2288
- resourcesVersion: extendedSettings.resourcesVersion,
2289
- theme: extendedSettings.theme
2290
- }, function (loadError) {
2291
- if (loadError || !__webpack_require__.g.CF.entryPoint[gfv]) {
2292
- callback(new Error("dynamic loading is not supported for gfv ".concat(gfv)));
2293
- return;
2294
- }
2295
-
2296
- var render = getEngineEntryPoint(engineVersion);
2297
- renderForm(pageContent, _objectSpread(_objectSpread({}, extendedSettings), {}, {
2298
- templatesApi: options.templatesApi,
2299
- renderForm: render
2300
- }), callback);
2301
- });
2302
- })["catch"](callback);
2303
- }
2916
+ var __webpack_exports__ = __webpack_require__("./Engine/src/Forms/Client/Client.ts");
2917
+ /******/
2304
2918
 
2305
- var CandyClientExports = {
2306
- start: start,
2307
- entryPoint: {},
2308
- partialRenderingForIE8: parseBool("{partialRenderingForIE8}"),
2309
- keformsUrl: "{keformsUrl}"
2310
- };
2311
- __webpack_require__.g.CF = CandyClientExports;
2312
- }();
2313
2919
  /******/
2920
+
2314
2921
  })();
2315
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0NhbmR5RW5naW5lL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovQ2FuZHlFbmdpbmUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIl0sIm5hbWVzIjpbIkFwcGxpY2F0aW9uRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiTm90U3VwcG9ydGVkRXJyb3IiLCJtZXNzYWdlIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJUeXBpbmdFcnJvciIsImlucHV0IiwiaXRlbXMiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzTGVuZ3RoIiwidmFsdWUiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwicGFyc2VCb29sIiwiY2F1bGRyb25BcGlVcmwiLCJhYm9uSWQiLCJvcmdJZCIsInVzZXJJZCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJyZXNvdXJjZXNWZXJzaW9uIiwia29udHVyRG9tYWlucyIsImZpZWxkTmFtZSIsInBhdGgiLCJjaHVuayIsIk9iamVjdCIsInJlc3VsdCIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJmb3JtIiwiY29uc29sZSIsImtleXMiLCJlcnJvckNvdW50IiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJwYXRoT3JNb2RlbENodW5rIiwiQXJyYXkiLCJpbm5lckNodW5rIiwicmVkdWNlQ2h1bmtWYWx1ZXMiLCJtYXBDaHVua1ZhbHVlcyIsInBhdGhPckFycmF5IiwiTG9hZEludG9Eb2N1bWVudCIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsInNjcmlwdCIsImNhbGxiYWNrIiwicmVzb2x2ZSIsInJlamVjdCIsImxpbmsiLCJnbG9iYWwiLCJzdXBwb3J0Iiwic2VhcmNoUGFyYW1zIiwiaXRlcmFibGUiLCJibG9iIiwiZm9ybURhdGEiLCJhcnJheUJ1ZmZlciIsIm9iaiIsIkRhdGFWaWV3Iiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwibmFtZSIsIlN0cmluZyIsIml0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJTeW1ib2wiLCJoZWFkZXJzIiwiaGVhZGVyIiwiSGVhZGVycyIsIm5vcm1hbGl6ZU5hbWUiLCJub3JtYWxpemVWYWx1ZSIsIm9sZFZhbHVlIiwiaXRlcmF0b3JGb3IiLCJib2R5IiwiUHJvbWlzZSIsInJlYWRlciIsInByb21pc2UiLCJmaWxlUmVhZGVyUmVhZHkiLCJ2aWV3IiwiY2hhcnMiLCJpIiwiYnVmIiwiQmxvYiIsIkZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNEYXRhVmlldyIsImJ1ZmZlckNsb25lIiwicmVqZWN0ZWQiLCJjb25zdW1lZCIsImlzQ29uc3VtZWQiLCJyZWFkQmxvYkFzVGV4dCIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsIkpTT04iLCJtZXRob2RzIiwidXBjYXNlZCIsIm1ldGhvZCIsIm9wdGlvbnMiLCJub3JtYWxpemVNZXRob2QiLCJyZVBhcmFtU2VhcmNoIiwicmVRdWVyeVN0cmluZyIsIlJlcXVlc3QiLCJfYm9keUluaXQiLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicHJlUHJvY2Vzc2VkSGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJ0cyIsImxpbmUiLCJrZXkiLCJCb2R5IiwiUmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidXJsIiwicmVzcG9uc2UiLCJyZWRpcmVjdFN0YXR1c2VzIiwibG9jYXRpb24iLCJET01FeGNlcHRpb24iLCJlcnJvciIsIkVycm9yIiwicmVxdWVzdCIsInhociIsInBhcnNlSGVhZGVycyIsInNldFRpbWVvdXQiLCJmaXhVcmwiLCJpbml0IiwiZmV0Y2giLCJyZWxhdGl2ZVVybCIsImJhc2VVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImRvbWFpbnMiLCJwYXJhbSIsImNvbXBsZXRlZCIsInRhc2tzIiwidGFzayIsImxlZnROdW1iZXJzIiwicGFyc2VJbnQiLCJyaWdodE51bWJlcnMiLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwidGhlbWUiLCJzZXR0aW5ncyIsImlzTmVlZEVuZ2luZSIsInVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSIsImlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbCIsIm5vU3R5bGVzRm9yR2Z2IiwibmVlZExvYWRTdHlsZXNGb3JHZnYiLCJtaW4iLCJnZXRQYXJhbWV0ZXJCeU5hbWUiLCJ0aGVtZVBvc3RmaXgiLCJ2IiwicmVzb3VyY2Vab25lIiwiYnVpbGRVcmwiLCJydW5QYXJhbGxlbCIsImZvcm1FbnRyeVBvaW50IiwiZXh0ZW5kZWRTZXR0aW5ncyIsInB1YmxpY0Zvcm0iLCJjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIiwiZGVmYXVsdENhbGxiYWNrIiwibnMiLCJkcmFmdElkIiwiaXNBbGxvd2VkIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImZldGNoSW1wbCIsIngiLCJjbGllbnREcmFmdEluZm8iLCJlbmdpbmVWZXJzaW9uUGFyYW0iLCJtb2RlbCIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwiYXV0aGVudGljYXRpb24iLCJsb2FkRm9ybSIsImxvYWRFcnJvciIsInJlbmRlciIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJyZW5kZXJGb3JtIiwidGVtcGxhdGVzQXBpIiwiQ2FuZHlDbGllbnRFeHBvcnRzIiwic3RhcnQiLCJlbnRyeVBvaW50IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsImtlZm9ybXNVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLFVBQU1BLGdCQUFiLEdBQUEsYUFBQSxVQUFBLE1BQUEsRUFBQTtBQUFBLFFBQUEsU0FBQSxDQUFBLGdCQUFBLEVBQUEs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QUEsd0JBQUEsQ0FBQSxRQUFBLENBQUE7QUFDQTs7QUFBQSxRQUFBLFlBQUEsS0FBQSxTQUFBLEVBQUE7QUFDQTtBQUFBLGFBQUEsWUFBQSxDQUFBLE9BQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTs7QUFDQTs7O0FBQUEsUUFBQSxNQUFBLEdBQUEsd0JBQUEsQ0FBQSxRQUFBLENBQUEsR0FBQTtBQUNBO0FBQUE7O0FBQ0E7QUFBQTs7QUFDQTtBQUFBLE1BQUEsT0FBQSxFQUFBO0FBQ0E7O0FBSkEsS0FBQTs7O0FBTUE7QUFBQTs7QUFDQTs7QUFBQSxJQUFBLG1CQUFBLENBQUEsUUFBQSxDQUFBLENBQUEsTUFBQSxFQUFBLE1BQUEsQ0FBQSxPQUFBLEVBQUEsbUJBQUE7OztBQUVBO0FBQUE7O0FBQ0E7OztBQUFBLFdBQUEsTUFBQSxDQUFBLE9BQUE7QUFDQTtBQUFBOzs7Ozs7Ozs7Ozs7OztBQ3RCQTs7O0FBQ0EsSUFBQSxtQkFBQSxDQUFBLENBQUEsR0FBQSxVQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUE7QUFDQTtBQUFBLFdBQUEsSUFBQSxHQUFBLElBQUEsVUFBQSxFQUFBO0FBQ0E7QUFBQSxZQUFBLG1CQUFBLENBQUEsQ0FBQSxDQUFBLFVBQUEsRUFBQSxHQUFBLEtBQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxPQUFBLEVBQUEsR0FBQSxDQUFBLEVBQUE7QUFDQTtBQUFBLFVBQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxPQUFBLEVBQUEsR0FBQSxFQUFBO0FBQXdDLFlBQUEsVUFBQSxFQUFBLElBQXhDO0FBQXdDLFlBQUEsR0FBQSxFQUFBLFVBQUEsQ0FBQSxHQUFBO0FBQXhDLFdBQUE7QUFDQTtBQUFBO0FBQ0E7O0FBQUE7QUFDQTs7QUFBQSxLQU5BOzs7Ozs7Ozs7Ozs7OztBQ0RBLElBQUEsbUJBQUEsQ0FBQSxDQUFBLEdBQUEsWUFBQTtBQUNBO0FBQUEsVUFBQSxPQUFBLFVBQUEsS0FBQSxRQUFBLEVBQUEsT0FBQSxVQUFBO0FBQ0E7O0FBQUEsVUFBQTtBQUNBO0FBQUEsZUFBQSxRQUFBLElB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LENBQUEsR0FBQSxFQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FBQSxFQUFBLEdBQUEsQ0FHWixVQUFBLENBQUEsRUFBQztBQUFBLGlCQUFJRCxRQUFRLENBQUEsQ0FBQSxFQUFaLEVBQVksQ0FBWjtBQUhWLFNBQXFCLENBQXJCO0FBSUEsZUFDSSxDQUFBLENBQUEsYUFBQSxHQUFDRCxXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGFBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxhQUFBLEdBQUEsQ0FBQSxLQUFBLENBQUEsY0FBQSxHQUF5QkUsWUFBWSxDQUFyQyxDQUFxQyxDQUFyQyxNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsS0FDQyxDQUFBLENBQUEsY0FBQSxHQUFDRixXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxjQUFBLEdBQUEsQ0FBQSxPQUFBLENBQUEsZUFBQSxHQUEyQkUsWUFBWSxDQUF2QyxDQUF1QyxDQUF2QyxNQUFBLElBQUEsSUFBQSxlQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsZUFBQSxHQUFBLENBQUEsTUFDSSxDQUFBLENBQUEsY0FBQSxHQUFDRixXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxjQUFBLEdBQUEsQ0FBQSxLQUFBLENBQUEsZUFBQSxHQUF5QkUsWUFBWSxDQUFyQyxDQUFxQyxDQUFyQyxNQUFBLElBQUEsSUFBQSxlQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsZUFBQSxHQUFBLENBQUEsS0FDSSxDQUFBLENBQUEsY0FBQSxHQUFDRixXQUFXLENBQVosQ0FBWSxDQUFaLE1BQUEsSUFBQSxJQUFBLGNBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxjQUFBLEdBQUEsQ0FBQSxPQUFBLENBQUEsZUFBQSxHQUEyQkUsWUFBWSxDQUF2QyxDQUF1QyxDQUF2QyxNQUFBLElBQUEsSUFBQSxl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LFVBQUFBLEtBQUssRUFBRWUsZ0JBQWdCLENBQUNmO0FBTDVCLFNBREksRUFRSixVQUFBLFNBQUEsRUFBYTtBQUNULGNBQUltQyxTQUFTLElBQUksQ0FBQ3BJLG1CQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxDQUFBQSxVQUFBQSxDQUFsQixHQUFrQkEsQ0FBbEIsRUFBNkM7QUFDekNKLFlBQUFBLFFBQVEsQ0FBQyxJQUFBLEtBQUEsQ0FBQSw0Q0FBQSxNQUFBLENBQVRBLEdBQVMsQ0FBQSxDQUFELENBQVJBO0FBQ0E7QUFDSDs7QUFDRCxjQUFNeUksTUFBTSxHQUFHQyxtQkFBbUIsQ0FBbEMsYUFBa0MsQ0FBbEM7QUFFQUMsVUFBQUEsVUFBVSxDQUFBLFdBQUEsRUFBQSxhQUFBLENBQUEsYUFBQSxDQUFBLEVBQUEsRUFBQSxnQkFBQSxDQUFBLEVBQUEsRUFBQSxFQUFBO0FBSUZDLFlBQUFBLFlBQVksRUFBRXhGLE9BQU8sQ0FKbkIsWUFBQTtBQUtGdUYsWUFBQUEsVUFBVSxFQUFFRjtBQUxWLFdBQUEsQ0FBQSxFQUFWRSxRQUFVLENBQVZBO0FBZlJKLFNBQVEsQ0FBUkE7QUF0QlJWLE9BQUFBLEVBQUFBLE9BQUFBLEVBQUFBLFFBQUFBO0FBa0RIOztBQUVELFFBQU1nQixrQkFBMEMsR0FBRztBQUMvQ0MsTUFBQUEsS0FBSyxFQUQwQyxLQUFBO0FBRS9DQyxNQUFBQSxVQUFVLEVBRnFDLEVBQUE7QUFHL0NDLE1BQUFBLHNCQUFzQixFQUFFakwsU0FBUyxDQUhjLDBCQUdkLENBSGM7QUFJL0NrTCxNQUFBQSxVQUFVLEVBQUU7QUFKbUMsS0FBbkQ7QUFPQTdJLElBQUFBLG1CQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxrQkFBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsIi8qKipcbiAqINCh0YLRgNC+0LPQvtGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LfQsNC80LXQvdCwINC00LvRjyBCb29sZWFuKC4uLilcbiAqINCe0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPIFsuLi5dLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiB1bmRlZmluZWQgfCBudWxsIHwgVCk6IGlucHV0IGlzIFQge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgcmV0dXJuIGAke25ldmVyQXJndW1lbnR9YDtcbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgYWJvbklkOiBcInthYm9uSWR9XCIsXG4gICAgb3JnSWQ6IFwie29yZ0lkfVwiLFxuICAgIHVzZXJJZDogXCJ7dXNlcklkfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQXBpL0NhbmR5QXBpQ2xpZW50L1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeUZpbHRlciwgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFNlcnZlckVycm9yTG9nKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUdJZChnSWQ6IHN0cmluZywgZmlsdGVyPzogUGlja2xpc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0QnlHSWQoZ0lkLCBmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vZmZNb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENhY2hlZENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5cbmltcG9ydCB7IEVycm9yRmlyc3RDYWxsYmFjaywgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHsgTG9hZEludG9Eb2N1bWVudCB9IGZyb20gXCIuLi8uLi9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQgfSBmcm9tIFwiLi4vVHlwZXMvSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50XCI7XG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiwgdGhlbWUgfSA9IHNldHRpbmdzO1xuXG4gICAgaWYgKGdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05lZWRFbmdpbmUgPSBlbmdpbmVWZXJzaW9uICYmICFnbG9iYWxbZW5naW5lVmVyc2lvbl07XG4gICAgY29uc3QgdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lID1cbiAgICAgICAgZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjA2LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0aGVtZVBvc3RmaXggPSAhdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lICYmIHRoZW1lID8gYC4ke2VuY29kZVVSSUNvbXBvbmVudCh0aGVtZSl9YCA6IFwiXCI7XG4gICAgY29uc3QgdGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyB2OiByZXNvdXJjZXNWZXJzaW9uLCByZXNvdXJjZVpvbmU6IHNldHRpbmdzLnJlc291cmNlWm9uZSB9O1xuICAgIGlmIChuZWVkTG9hZFN0eWxlc0Zvckdmdikge1xuICAgICAgICB0YXNrcy5wdXNoKGNiID0+XG4gICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2dmdn0ke3RoZW1lUG9zdGZpeH0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICB0YXNrcy5wdXNoKGNiID0+IExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzLyR7Z2Z2fSR7bWlufS5qc2AsIHBhcmFtcykpLCBjYikpO1xuXG4gICAgaWYgKGlzTmVlZEVuZ2luZSkge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7dGhlbWVQb3N0Zml4fSR7bWlufS5jc3NgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zY3JpcHQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uanNgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcnVuUGFyYWxsZWwodGFza3MsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRm9ybShcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT5cbik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1FbnRyeVBvaW50ID1cbiAgICAgICAgZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZXh0ZW5kZWRTZXR0aW5ncy5nZnZdID8/IHJlamVjdChgRm9ybSBlbnRyeSBwb2ludCAke2V4dGVuZGVkU2V0dGluZ3MuZ2Z2fSBub3QgZm91bmQuYCk7XG4gICAgZm9ybUVudHJ5UG9pbnQocGFnZUNvbnRlbnQsIGV4dGVuZGVkU2V0dGluZ3MpXG4gICAgICAgIC50aGVuKGZvcm0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVibGljRm9ybSA9IGZvcm0ucHVibGljRm9ybSB8fCBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm0pO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwdWJsaWNGb3JtKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydEZvcm1PcHRpb25zIHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjbGllbnRTZXR0aW5ncztcblxuICAgIGlmICghaXNBbGxvd2VkKHNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFzZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChgdjEvbnMvJHtuc30vZHJhZnRzLyR7ZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ2Z2IH0gPSBjbGllbnREcmFmdEluZm87XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uUGFyYW0gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJlbmdpbmVWZXJzaW9uXCIpO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uXG4gICAgICAgICAgICAgICAgPyBlbmdpbmVWZXJzaW9uUGFyYW0gfHwgY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb25cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iXSwic291cmNlUm9vdCI6IiJ9
2922
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvSGVscGVycy9Mb2FkSW50b0RvY3VtZW50LnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6L0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIiwiZHJhZnRJZCIsIkFwcGxpY2F0aW9uRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiTm90U3VwcG9ydGVkRXJyb3IiLCJtZXNzYWdlIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJUeXBpbmdFcnJvciIsImlzTm90TnVsbE9yVW5kZWZpbmVkIiwiaW5wdXQiLCJzdHJpbmdpZnlVbmtub3duRXJyb3IiLCJlcnJvciIsImVuc3VyZU5vdE51bGxPclVuZGVmaW5lZCIsIm5vb3AiLCJyZWplY3QiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsIml0ZW1zIiwibWluTGVuZ3RoT3JVbmRlZmluZWQiLCJhcnJheUhhc0xlbmd0aCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzQXRMZWFzdE9uZUl0ZW0iLCJlbnN1cmVBcnJheUlzTm90RW1wdHkiLCJlbnN1cmVBcnJheUhhc0xlbmd0aCIsImVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsIiwiZW5zdXJlTmV2ZXIiLCJlbnN1cmVBbmRHZXRTdHJpbmciLCJydW5Bc3luY0FjdGlvbiIsImFjdGlvbiIsImlzTnVsbE9yRW1wdHkiLCJpc05vdE51bGxPckVtcHR5IiwiaXNOdWxsT3JXaGl0ZVNwYWNlIiwidHJpbUxhc3RTbGFzaCIsInVybCIsImFzc2VydElzIiwiZGVmYXVsdENhbGxiYWNrIiwicGFyc2VCb29sIiwidmFsdWUiLCJCb29sZWFuIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiZ2xvYmFsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwiT2JqZWN0IiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInBhdGgiLCJpc0FsbG93ZWQiLCJkb21haW5zIiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwicGFyYW0iLCJrZXkiLCJydW5QYXJhbGxlbCIsImNvbXBsZXRlZCIsInRhc2tzIiwidGFzayIsImNhbGxiYWNrIiwiaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsIiwibGVmdE51bWJlcnMiLCJwYXJzZUludCIsInJpZ2h0TnVtYmVycyIsImxvYWRGb3JtIiwiZ2Z2IiwiZW5naW5lVmVyc2lvbiIsInJlc291cmNlc1ZlcnNpb24iLCJzZXR0aW5ncyIsImlzTmVlZEVuZ2luZSIsIm5vU3R5bGVzRm9yR2Z2IiwibmVlZExvYWRTdHlsZXNGb3JHZnYiLCJtaW4iLCJ2IiwicmVzb3VyY2Vab25lIiwiTG9hZEludG9Eb2N1bWVudCIsInJlbmRlckZvcm0iLCJmb3JtRW50cnlQb2ludCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiZm9ybSIsImNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0iLCJnZXRFbmdpbmVFbnRyeVBvaW50Iiwic3RhcnQiLCJucyIsIm9wdGlvbnMiLCJjbGllbnRTZXR0aW5ncyIsImNsaWVudERyYWZ0VXJsIiwicmVxdWVzdE9wdGlvbnMiLCJtZXRob2QiLCJmZXRjaEltcGwiLCJmZXRjaCIsIngiLCJjbGllbnREcmFmdEluZm8iLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwia29udHVyRG9tYWlucyIsImFib25JZCIsIm9yZ0lkIiwidXNlcklkIiwiaXNJbmRpdmlkdWFsIiwiaXNGb3JlaWduIiwiZmVlZGJhY2tFbmFibGVkIiwiY2FuZHlUb3VyQXZhaWxhYmxlIiwiZXZlbnRFbWl0dGVyIiwiZm9ybUluZm8iLCJwcmludEluZm8iLCJyZWdpb25zIiwiaGFzVGVtcGxhdGVzIiwibW9kZWwiLCJpc0Rpc2FibGVkQ2xlYW5Gb3JtIiwiaXNEaXNhYmxlZENsb3NlQnV0dG9uIiwiaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiIsImF1dGhlbnRpY2F0aW9uIiwidGhlbWUiLCJsb2FkRXJyb3IiLCJyZW5kZXIiLCJ0ZW1wbGF0ZXNBcGkiLCJDYW5keUNsaWVudEV4cG9ydHMiLCJlbnRyeVBvaW50IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsImtlZm9ybXNVcmwiLCJtb2RlbENoYW5nZUV2ZW50UGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJyZXN1bHQiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJjb25zb2xlIiwia2V5cyIsImVycm9yQ291bnQiLCJwYXRoT3JNb2RlbENodW5rIiwiQXJyYXkiLCJpbm5lckNodW5rIiwicGF0aE9yQXJyYXkiLCJzY3JpcHRMb2FkZWQiLCJoZWFkIiwiZG9jdW1lbnQiLCJzY3JpcHQiLCJyZXNvbHZlIiwibGluayJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRU8sZUFBQSxxQkFBQSxDQUFBLE9BQUEsRUFBcUQ7QUFDeEQ7QUFDQTtBQUNBLGVBQUEsU0FBQSxNQUFBLENBQWdCQyxPQUFPLENBQXZCLEVBQUEsRUFBQSxVQUFBLEVBQUEsTUFBQSxDQUFxQ0EsT0FBTyxDQUE1QyxPQUFBLEVBQUEsb0JBQUEsQ0FBQTtBQUNIOzs7Ozs7Ozs7OztnQ0FKZUQscUIsRUFBQUEsdUIsRUFBQUEsMkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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O0FBSUEsaUJBQ0ksQ0FBQSxDQUFBLGFBQUEsR0FBQ0QsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxhQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsYUFBQSxHQUFBLENBQUEsS0FBQSxDQUFBLGNBQUEsR0FBeUJFLFlBQVksQ0FBckMsQ0FBcUMsQ0FBckMsTUFBQSxJQUFBLElBQUEsY0FBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGNBQUEsR0FBQSxDQUFBLEtBQ0MsQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMkJFLFlBQVksQ0FBdkMsQ0FBdUMsQ0FBdkMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLE1BQ0ksQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsS0FBQSxDQUFBLGVBQUEsR0FBeUJFLFlBQVksQ0FBckMsQ0FBcUMsQ0FBckMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLEtBQ0ksQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMkJFLFlBQVksQ0FBdkMsQ0FBdUMsQ0FBdkMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLEtBQ0csQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FB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QSxDQUFBLFVBQUEsTUFBQSxFQUFBO0FBQ0EsaUJBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBQSxNQUFBLENBQUEsQ0FBQSxDQUFBO0FBQ0ssV0FGTCxFQUVLLElBRkw7QUFHQSxTQUpJLE1BSUEsSUFBQSxPQUFBLEVBQUE7QUFDSixVQUFBLE1BQUEsQ0FBQSxtQkFBQSxDQUFBLE9BQUEsRUFBQSxPQUFBLENBQUEsVUFBQSxJQUFBLEVBQUE7QUFDQSxpQkFBQSxNQUFBLENBQUEsSUFBQSxFQUFBLE9BQUEsQ0FBQSxJQUFBLENBQUE7QUFDSyxXQUZMLEVBRUssSUFGTDtBQUdBO0FBQ0E7O0FBRUEsTUFBQSxPQUFBLENBQUEsU0FBQSxDQUFBLE1BQUEsR0FBQSxVQUFBLElBQUEsRUFBQSxLQUFBLEVBQUE7QUFDQSxRQUFBLElBQUEsR0FBQSxhQUFBLENBQUEsSUFBQSxDQUFBO0FBQ0EsUUFBQSxLQUFBLEdBQUEsY0FBQSxDQUFBLEtBQUEsQ0FBQTtBQUNBLFlBQUEsUUFBQSxHQUFBLEtBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQTtBQUNBLGFBQUEsR0FBQSxDQUFBLElBQUEsSUFBQSxRQUFBLEdBQUEsUUFBQSxHQUFBLElBQUEsR0FBQSxLQUFBLEdBQUEsS0FBQTtBQUNBLE9BTEE7O0FBT0EsTUFBQSxPQUFBLENBQUEsU0FBQSxDQUFBLFFBQUEsSUFBQSxVQUFBLElBQUEsRUFBQTtBQUNBLGVBQUEsS0FBQSxHQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBO0FBQ0EsT0FGQTs7QUFJQSxNQUFBLE9BQUEsQ0FBQSxTQUFBLENBQUEsR0FBQSxHQUFBLFVBQUEsSUFBQSxFQUFBO0FBQ0EsUUFBQSxJQUFBLEdBQUEsYUFBQSxDQUFBLElBQUEsQ0FBQTtBQUNBLGVBQUEsS0FBQSxHQUFBLENBQUEsSUFBQSxJQUFBLEtBQUEsR0FBQSxDQUFBLElBQUEsQ0FBQSxHQUFBLElBQUE7QUFDQSxPQUhBOztBQUtBLE1BQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQSxHQUFBLEdBQUEsVUFBQSxJQUFBLEVBQUE7QUFDQSxlQUFBLEtBQUEsR0FBQSxDQUFBLGNBQUEsQ0FBQSxhQUFBLENBQUEsSUFBQSxDQUFBLENBQUE7QUFDQSxPQUZBOztBQUlBLE1BQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQSxHQUFBLEdBQUEsVUFBQSxJQUFBLEVBQUEsS0FBQSxFQUFBO0FBQ0EsYUFBQSxHQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsQ0FBQSxJQUFBLGNBQUEsQ0FBQSxLQUFBLENBQUE7QUFDQSxPQUZBOztBQUlBLE1BQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQSxPQUFBLEdBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxFQUFBO0FBQ0EsYUFBQSxJQUFBLElBQUEsSUFBQSxLQUFBLEdBQUEsRUFBQTtBQUNBLGNBQUEsS0FBQSxHQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsQ0FBQSxFQUFBO0FBQ0EsWUFBQSxRQUFBLENBQUEsSUFBQSxDQUFBLE9BQUEsRUFBQSxLQUFBLEdBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBO0FBQ0E7QUFDQSxPQU5BOztBQVFBLE1BQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQSxJQUFBLEdBQUEsWUFBQTtBQUNBLFlBQUEsS0FBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLE9BQUEsQ0FBQSxVQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUE7QUFDQSxVQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQTtBQUNHLFNBRkg7QUFHQSxlQUFBLFdBQUEsQ0FBQSxLQUFBLENBQUE7QUFDQSxPQU5BOztBQVFBLE1BQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQSxNQUFBLEdBQUEsWUFBQTtBQUNBLFlBQUEsS0FBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLE9BQUEsQ0FBQSxVQUFBLEtBQUEsRUFBQTtBQUNBLFVBQUEsS0FBQSxDQUFBLElBQUEsQ0FBQSxLQUFBO0FBQ0csU0FGSDtBQUdBLGVBQUEsV0FBQSxDQUFBLEtBQUEsQ0FBQTtBQUNBLE9BTkE7O0FBUUEsTUFBQSxPQUFBLENBQUEsU0FBQSxDQUFBLE9BQUEsR0FBQSxZQUFBO0FBQ0EsWUFBQSxLQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEsT0FBQSxDQUFBLFVBQUEsS0FBQSxFQUFBLElBQUEsRUFBQTtBQUNBLFVBQUEsS0FBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLElBQUEsRUFBQSxLQUFBLENBQUE7QUFDRyxTQUZIO0FBR0EsZUFBQSxXQUFBLENBQUEsS0FBQSxDQUFBO0FBQ0EsT0FOQTs7QUFRQSxVQUFBLE9BQUEsQ0FBQSxRQUFBLEVBQUE7QUFDQSxRQUFBLE9BQUEsQ0FBQSxTQUFBLENBQUEsTUFBQSxDQUFBLFFBQUEsSUFBQSxPQUFBLENBQUEsU0FBQSxDQUFBLE9BQUE7QUFDQTs7QUFFQSxlQUFBLFFBQUEsQ0FBQSxJQUFBLEVBQUE7QUFDQSxZQUFBLElBQUEsQ0FBQSxRQUFBLEVBQUE7QUFDQSxpQkFBQSxPQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsU0FBQSxDQUFBLGNBQUEsQ0FBQSxDQUFBO0FBQ0E7O0FBQ0EsUUFBQSxJQUFBLENBQUEsUUFBQSxHQUFBLElBQUE7QUFDQTs7QUFFQSxlQUFBLGVBQUEsQ0FBQSxNQUFBLEVBQUE7QUFDQSxlQUFBLElBQUEsT0FBQSxDQUFBLFVBQUEsT0FBQSxFQUFBLE1BQUEsRUFBQTtBQUNBLFVBQUEsTUFBQSxDQUFBLE1BQUEsR0FBQSxZQUFBO0FBQ0EsWUFBQSxPQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQTtBQUNBLFdBRkE7O0FBR0EsVUFBQSxNQUFBLENBQUEsT0FBQSxHQUFBLFlBQUE7QUFDQSxZQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsS0FBQSxDQUFBO0FBQ0EsV0FGQTtBQUdHLFNBUEgsQ0FBQTtBQVFBOztBQUVBLGVBQUEscUJBQUEsQ0FBQSxJQUFBLEVBQUE7QUFDQSxZQUFBLE1BQUEsR0FBQSxJQUFBLFVBQUEsRUFBQTtBQUNBLFlBQUEsT0FBQSxHQUFBLGVBQUEsQ0FBQSxNQUFBLENBQUE7QUFDQSxRQUFBLE1BQUEsQ0FBQSxpQkFBQSxDQUFBLElBQUE7QUFDQSxlQUFBLE9BQUE7QUFDQTs7QUFFQSxlQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUE7QUFDQSxZQUFBLE1BQUEsR0FBQSxJQUFBLFVBQUEsRUFBQTtBQUNBLFlBQUEsT0FBQSxHQUFBLGVBQUEsQ0FBQSxNQUFBLENBQUE7QUFDQSxRQUFBLE1BQUEsQ0FBQSxVQUFBLENBQUEsSUFBQTtBQUNBLGVBQUEsT0FBQTtBQUNBOztBQUVBLGVBQUEscUJBQUEsQ0FBQSxHQUFBLEVBQUE7QUFDQSxZQUFBLElBQUEsR0FBQSxJQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUE7QUFDQSxZQUFBLEtBQUEsR0FBQSxJQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsTUFBQSxDQUFBOztBQUVBLGFBQUEsSUFBQSxDQUFBLEdBQUEsQ0FBQSxFQUFrQixDQUFBLEdBQUEsSUFBQSxDQUFBLE1BQWxCLEVBQW1DLENBQUEsRUFBbkMsRUFBbUM7QUFDbkMsVUFBQSxLQUFBLENBQUEsQ0FBQSxDQUFBLEdBQUEsTUFBQSxDQUFBLFlBQUEsQ0FBQSxJQUFBLENBQUEsQ0FBQSxDQUFBLENBQUE7QUFDQTs7QUFDQSxlQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxDQUFBO0FBQ0E7O0FBRUEsZUFBQSxXQUFBLENBQUEsR0FBQSxFQUFBO0FBQ0EsWUFBQSxHQUFBLENBQUEsS0FBQSxFQUFBO0FBQ0EsaUJBQUEsR0FBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLENBQUE7QUFDQSxTQUZBLE1BRUk7QUFDSixjQUFBLElBQUEsR0FBQSxJQUFBLFVBQUEsQ0FBQSxHQUFBLENBQUEsVUFBQSxDQUFBO0FBQ0EsVUFBQSxJQUFBLENBQUEsR0FBQSxDQUFBLElBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQTtBQUNBLGlCQUFBLElBQUEsQ0FBQSxNQUFBO0FBQ0E7QUFDQTs7QUFFQSxlQUFBLElBQUEsR0FBQTtBQUNBLGFBQUEsUUFBQSxHQUFBLEtBQUE7O0FBRUEsYUFBQSxTQUFBLEdBQUEsVUFBQSxJQUFBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQUEsUUFBQSxHQUFBLEtBQUEsUUFBQTtBQUNBLGVBQUEsU0FBQSxHQUFBLElBQUE7O0FBQ0EsY0FBQSxDQUFBLElBQUEsRUFBQTtBQUNBLGlCQUFBLFNBQUEsR0FBQSxFQUFBO0FBQ0EsV0FGQSxNQUVNLElBQUEsT0FBQSxJQUFBLEtBQUEsUUFBQSxFQUFBO0FBQ04saUJBQUEsU0FBQSxHQUFBLElBQUE7QUFDQSxXQUZNLE1BRUEsSUFBQSxPQUFBLENBQUEsSUFBQSxJQUFBLElBQUEsQ0FBQSxTQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBO0FBQ04saUJBQUEsU0FBQSxHQUFBLElBQUE7QUFDQSxXQUZNLE1BRUEsSUFBQSxPQUFBLENBQUEsUUFBQSxJQUFBLFFBQUEsQ0FBQSxTQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBO0FBQ04saUJBQUEsYUFBQSxHQUFBLElBQUE7QUFDQSxXQUZNLE1BRUEsSUFBQSxPQUFBLENBQUEsWUFBQSxJQUFBLGVBQUEsQ0FBQSxTQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBO0FBQ04saUJBQUEsU0FBQSxHQUFBLElBQUEsQ0FBQSxRQUFBLEVBQUE7QUFDQSxXQUZNLE1BRUEsSUFBQSxPQUFBLENBQUEsV0FBQSxJQUFBLE9BQUEsQ0FBQSxJQUFBLElBQUEsVUFBQSxDQUFBLElBQUEsQ0FBQSxFQUFBO0FBQ04saUJBQUEsZ0JBQUEsR0FBQSxXQUFBLENBQUEsSUFBQSxDQUFBLE1BQUEsQ0FBQSxDQURNLENBRU47O0FBQ0EsaUJBQUEsU0FBQSxHQUFBLElBQUEsSUFBQSxDQUFBLENBQUEsS0FBQSxnQkFBQSxDQUFBLENBQUE7QUFDQSxXQUpNLE1BSUEsSUFBQSxPQUFBLENBQUEsV0FBQSxLQUFBLFdBQUEsQ0FBQSxTQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsS0FBQSxpQkFBQSxDQUFBLElBQUEsQ0FBQSxDQUFBLEVBQUE7QUFDTixpQkFBQSxnQkFBQSxHQUFBLFdBQUEsQ0FBQSxJQUFBLENB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ZUFBQSxHQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUE7QUFDQSxlQUFBLFdBQUEsR0FBQSxLQUFBLENBQUEsV0FBQTs7QUFDQSxjQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsRUFBQTtBQUNBLGlCQUFBLE9BQUEsR0FBQSxJQUFBLE9BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBO0FBQ0E7O0FBQ0EsZUFBQSxNQUFBLEdBQUEsS0FBQSxDQUFBLE1BQUE7QUFDQSxlQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsSUFBQTtBQUNBLGVBQUEsTUFBQSxHQUFBLEtBQUEsQ0FBQSxNQUFBOztBQUNBLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FBQSxDQUFBLFNBQUEsSUFBQSxJQUFBLEVBQUE7QUFDQSxZQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsU0FBQTtBQUNBLFlBQUEsS0FBQSxDQUFBLFFBQUEsR0FBQSxJQUFBO0FBQ0E7QUFDQSxTQWhCQSxNQWdCSTtBQUNKLGVBQUEsR0FBQSxHQUFBLE1BQUEsQ0FBQSxLQUFBLENBQUE7QUFDQTs7QUFFQSxhQUFBLFdBQUEsR0FBQSxPQUFBLENBQUEsV0FBQSxJQUFBLEtBQUEsV0FBQSxJQUFBLGFBQUE7O0FBQ0EsWUFBQSxPQUFBLENBQUEsT0FBQSxJQUFBLENBQUEsS0FBQSxPQUFBLEVBQUE7QUFDQSxlQUFBLE9BQUEsR0FBQSxJQUFBLE9BQUEsQ0FBQSxPQUFBLENBQUEsT0FBQSxDQUFBO0FBQ0E7O0FBQ0EsYUFBQSxNQUFBLEdBQUEsZUFBQSxDQUFBLE9BQUEsQ0FBQSxNQUFBLElBQUEsS0FBQSxNQUFBLElBQUEsS0FBQSxDQUFBO0FBQ0EsYUFBQSxJQUFBLEdBQUEsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUFBLElBQUEsSUFBQSxJQUFBO0FBQ0EsYUFBQSxNQUFBLEdBQUEsT0FBQSxDQUFBLE1BQUEsSUFBQSxLQUFBLE1BQUE7QUFDQSxhQUFBLFFBQUEsR0FBQSxJQUFBOztBQUVBLFlBQUEsQ0FBQSxLQUFBLE1BQUEsS0FBQSxLQUFBLElBQUEsS0FBQSxNQUFBLEtBQUEsTUFBQSxLQUFBLElBQUEsRUFBQTtBQUNBLGdCQUFBLElBQUEsU0FBQSxDQUFBLDJDQUFBLENBQUE7QUFDQTs7QUFDQSxhQUFBLFNBQUEsQ0FBQSxJQUFBOztBQUVBLFlBQUEsS0FBQSxNQUFBLEtBQUEsS0FBQSxJQUFBLEtBQUEsTUFBQSxLQUFBLE1BQUEsRUFBQTtBQUNBLGNBQUEsT0FBQSxDQUFBLEtBQUEsS0FBQSxVQUFBLElBQUEsT0FBQSxDQUFBLEtBQUEsS0FBQSxVQUFBLEVBQUE7QUFDQTtBQUNBLGdCQUFBLGFBQUEsR0FBQSxlQUFBOztBQUNBLGdCQUFBLGFBQUEsQ0FBQSxJQUFBLENBQUEsS0FBQSxHQUFBLENBQUEsRUFBQTtBQUNBO0FBQ0EsbUJBQUEsR0FBQSxHQUFBLEtBQUEsR0FBQSxDQUFBLE9BQUEsQ0FBQSxhQUFBLEVBQUEsU0FBQSxJQUFBLElBQUEsR0FBQSxPQUFBLEVBQUEsQ0FBQTtBQUNBLGFBSEEsTUFHUTtBQUNSO0FBQ0Esa0JBQUEsYUFBQSxHQUFBLElBQUE7QUFDQSxtQkFBQSxHQUFBLElBQUEsQ0FBQSxhQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsR0FBQSxJQUFBLEdBQUEsR0FBQSxHQUFBLElBQUEsSUFBQSxHQUFBLElBQUEsSUFBQSxHQUFBLE9BQUEsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQSxLQUFBLEdBQUEsWUFBQTtBQUNBLGVBQUEsSUFBQSxPQUFBLENBQUEsSUFBQSxFQUFBO0FBQTRCLFVBQUEsSUFBQSxFQUFBLEtBQUE7QUFBNUIsU0FBQSxDQUFBO0FBQ0EsT0FGQTs7QUFJQSxlQUFBLE1BQUEsQ0FBQSxJQUFBLEVBQUE7QUFDQSxZQUFBLElBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQTtBQUNBLFFBQUEsSUFBQSxDQUNBLElBREEsR0FFQSxLQUZBLENBRUEsR0FGQSxFQUdBLE9BSEEsQ0FHQSxVQUFBLEtBQUEsRUFBQTtBQUNBLGNBQUEsS0FBQSxFQUFBO0FBQ0EsZ0JBQUEsS0FBQSxHQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsR0FBQSxDQUFBO0FBQ0EsZ0JBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxLQUFBLEdBQUEsT0FBQSxDQUFBLEtBQUEsRUFBQSxHQUFBLENBQUE7QUFDQSxnQkFBQSxLQUFBLEdBQUEsS0FBQSxDQUFBLElBQUEsQ0FBQSxHQUFBLEVBQUEsT0FBQSxDQUFBLEtBQUEsRUFBQSxHQUFBLENBQUE7QUFDQSxZQUFBLElBQUEsQ0FBQSxNQUFBLENBQUEsa0JBQUEsQ0FBQSxJQUFBLENBQUEsRUFBQSxrQkFBQSxDQUFBLEtBQUEsQ0FBQTtBQUNBO0FBQ0ssU0FWTDtBQVdBLGVBQUEsSUFBQTtBQUNBOztBQUVBLGVBQUEsWUFBQSxDQUFBLFVBQUEsRUFBQTtBQUNBLFlBQUEsT0FBQSxHQUFBLElBQUEsT0FBQSxFQUFBLENBREEsQ0FFQTtBQUNBOztBQUNBLFlBQUEsbUJBQUEsR0FBQSxVQUFBLENBQUEsT0FBQSxDQUFBLGNBQUEsRUFBQSxHQUFBLENBQUEsQ0FKQSxDQUtBO0FBQ0E7QUFDQTs7QUFDQSxRQUFBLG1CQUFBLENBQ0EsS0FEQSxDQUNBLElBREEsRUFFQSxHQUZBLENBRUEsVUFBQSxNQUFBLEVBQUE7QUFDQSxpQkFBQSxNQUFBLENBQUEsT0FBQSxDQUFBLElBQUEsTUFBQSxDQUFBLEdBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxDQUFBLEVBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLE1BQUE7QUFDSyxTQUpMLEVBS0EsT0FMQSxDQUtBLFVBQUEsSUFBQSxFQUFBO0FBQ0EsY0FBQSxLQUFBLEdBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxHQUFBLENBQUE7QUFDQSxjQUFBLEdBQUEsR0FBQSxLQUFBLENBQUEsS0FBQSxHQUFBLElBQUEsRUFBQTs7QUFDQSxjQUFBLEdBQUEsRUFBQTtBQUNBLGdCQUFBLEtBQUEsR0FBQSxLQUFBLENBQUEsSUFBQSxDQUFBLEdBQUEsRUFBQSxJQUFBLEVBQUE7QUFDQSxZQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxFQUFBLEtBQUE7QUFDQTtBQUNLLFNBWkw7QUFhQSxlQUFBLE9BQUE7QUFDQTs7QUFFQSxNQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsT0FBQSxDQUFBLFNBQUE7O0FBRU8sZUFBQSxRQUFBLENBQUEsUUFBQSxFQUFBLE9BQUEsRUFBQTtBQUNQLFlBQUEsRUFBQSxnQkFBQSxRQUFBLENBQUEsRUFBQTtBQUNBLGdCQUFBLElBQUEsU0FBQSxDQUFBLDRGQUFBLENBQUE7QUFDQTs7QUFDQSxZQUFBLENBQUEsT0FBQSxFQUFBO0FBQ0EsVUFBQSxPQUFBLEdBQUEsRUFBQTtBQUNBOztBQUVBLGFBQUEsSUFBQSxHQUFBLFNBQUE7QUFDQSxhQUFBLE1BQUEsR0FBQSxPQUFBLENBQUEsTUFBQSxLQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsT0FBQSxDQUFBLE1BQUE7QUFDQSxhQUFBLEVBQUEsR0FBQSxLQUFBLE1BQUEsSUFBQSxHQUFBLElBQUEsS0FBQSxNQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsVUFBQSxHQUFBLE9BQUEsQ0FBQSxVQUFBLEtBQUEsU0FBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLE9BQUEsQ0FBQSxVQUFBO0FBQ0EsYUFBQSxPQUFBLEdBQUEsSUFBQSxPQUFBLENBQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQTtBQUNBLGFBQUEsR0FBQSxHQUFBLE9BQUEsQ0FBQSxHQUFBLElBQUEsRUFBQTs7QUFDQSxhQUFBLFNBQUEsQ0FBQSxRQUFBO0FBQ0E7O0FBRUEsTUFBQSxJQUFBLENBQUEsSUFBQSxDQUFBLFFBQUEsQ0FBQSxTQUFBOztBQUVBLE1BQUEsUUFBQSxDQUFBLFNBQUEsQ0FBQSxLQUFBLEdBQUEsWUFBQTtBQUNBLGVBQUEsSUFBQSxRQUFBLENBQUEsS0FBQSxTQUFBLEVBQUE7QUFDQSxVQUFBLE1BQUEsRUFBQSxLQUFBLE1BREE7QUFFQSxVQUFBLFVBQUEsRUFBQSxLQUFBLFVBRkE7QUFHQSxVQUFBLE9BQUEsRUFBQSxJQUFBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsQ0FIQTtBQUlBLFVBQUEsR0FBQSxFQUFBLEtBQUE7QUFKQSxTQUFBLENBQUE7QUFNQSxPQVBBOztBQVNBLE1BQUEsUUFBQSxDQUFBLEtBQUEsR0FBQSxZQUFBO0FBQ0EsWUFBQSxRQUFBLEdBQUEsSUFBQSxRQUFBLENBQUEsSUFBQSxFQUFBO0FBQXFDLFVBQUEsTUFBQSxFQUFBLENBQXJDO0FBQXFDLFVBQUEsVUFBQSxFQUFBO0FBQXJDLFNBQUEsQ0FBQTtBQUNBLFFBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxPQUFBO0FBQ0EsZUFBQSxRQUFBO0FBQ0EsT0FKQTs7QUFNQSxVQUFBLGdCQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxDQUFBOztBQUVBLE1BQUEsUUFBQSxDQUFBLFFBQUEsR0FBQSxVQUFBLEdBQUEsRUFBQSxNQUFBLEVBQUE7QUFDQSxZQUFBLGdCQUFBLENBQUEsT0FBQSxDQUFBLE1BQUEsTUFBQSxDQUFBLENBQUEsRUFBQTtBQUNBLGdCQUFBLElBQUEsVUFBQSxDQUFBLHFCQUFBLENBQUE7QUFDQTs7QUFFQSxlQUFBLElBQUEsUUFBQSxDQUFBLElBQUEsRUFBQTtBQUE2QixVQUFBLE1BQUEsRUFBQSxNQUE3QjtBQUE2QixVQUFBLE9BQUEsRUFBQTtBQUEwQixZQUFBLFFBQUEsRUFBQTtBQUExQjtBQUE3QixTQUFBLENBQUE7QUFDQSxPQU5BOztBQVFPLFVBQUEsWUFBQSxHQUFBLE1BQUEsQ0FBQSxZQUFBOztBQUNQLFVBQUE7QUFDQSxZQUFBLFlBQUE7QUFDQSxPQUZBLENBRUUsT0FBQSxHQUFBLEVBQUE7QUFDRixRQUFBLFlBQUEsR0FBQSxVQUFBLE9BQUEsRUFBQSxJQUFBLEVBQUE7QUFDQSxlQUFBLE9BQUEsR0FBQSxPQUFBO0FBQ0EsZUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLGNBQUEsS0FBQSxHQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUE7QUFDQSxlQUFBLEtBQUEsR0FBQSxLQUFBLENBQUEsS0FBQTtBQUNBLFNBTEE7O0FBTUEsUUFBQSxZQUFBLENBQUEsU0FBQSxHQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsS0FBQSxDQUFBLFNBQUEsQ0FBQTtBQUNBLFFBQUEsWUFBQSxDQUFBLFNBQUEsQ0FBQSxXQUFBLEdBQUEsWUFBQTtBQUNBOztBQUVPLGVBQUEsS0FBQSxDQUFBLEtBQUEsRUFBQSxJQUFBLEVBQUE7QUFDUCxlQUFBLElBQUEsT0FBQSxDQUFBLFVBQUEsT0FBQSxFQUFBLE1BQUEsRUFBQTtBQUNBLGNBQUEsT0FBQSxHQUFBLElBQUEsT0FBQSxDQUFBLEtBQUEsRUFBQSxJQUFBLENBQUE7O0FBRUEsY0FBQSxPQUFBLENBQUEsTUFBQSxJQUFBLE9BQUEsQ0FBQSxNQUFBLENBQUEsT0FBQSxFQUFBO0FBQ0EsbUJBQUEsTUFBQSxDQUFBLElBQUEsWUFBQSxDQUFBLFNBQUEsRUFBQSxZQUFBLENBQUEsQ0FBQTtBQUNBOztBQUVBLGNBQUEsR0FBQSxHQUFBLElBQUEsY0FBQSxFQUFBOztBQUVBLG1CQUFBLFFBQUEsR0FBQTtBQUNBLFlBQUEsR0FBQSxDQUFBLEtBQUE7QUFDQTs7QUFFQSxVQUFBLEdBQUEsQ0FBQSxNQUFBLEdBQUEsWUFBQTtBQUNBLGdCQUFBLE9BQUEsR0FBQTtBQUNBLGNBQUEsTUFBQSxFQUFBLEdBQUEsQ0FBQSxNQURBO0FBRUEsY0FBQSxVQUFBLEVBQUEsR0FBQSxDQUFBLFVBRkE7QUFHQSxjQUFBLE9BQUEsRUFBQSxZQUFBLENBQUEsR0FBQSxDQUFBLHFCQUFBLE1BQUEsRUFBQTtBQUhBLGFBQUE7QUFLQSxZQUFBLE9BQUEsQ0FBQSxHQUFBLEdBQUEsaUJBQUEsR0FBQSxHQUFBLEdBQUEsQ0FBQSxXQUFBLEdBQUEsT0FBQSxDQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsZUFBQSxDQUFBO0FBQ0EsZ0JBQUEsSUFBQSxHQUFBLGNBQUEsR0FBQSxHQUFBLEdBQUEsQ0FBQSxRQUFBLEdBQUEsR0FBQSxDQUFBLFlBQUE7QUFDQSxZQUFBLFVBQUEsQ0FBQSxZQUFBO0FBQ0EsY0FBQSxPQUFBLENBQUEsSUFBQSxRQUFBLENBQUEsSUFBQSxFQUFBLE9BQUEsQ0FBQSxDQUFBO0FBQ08sYUFGUCxFQUVPLENBRlAsQ0FBQTtBQUdBLFdBWEE7O0FBYUEsVUFBQSxHQUFBLENBQUEsT0FBQSxHQUFBLFlBQUE7QUFDQSxZQUFBLFVBQUEsQ0FBQSxZQUFBO0FBQ0EsY0FBQSxNQUFBLENBQUEsSUFBQSxTQUFBLENBQUEsd0JBQUEsQ0FBQSxDQUFBO0FBQ08sYUFGUCxFQUVPLENBRlAsQ0FBQTtBQUdBLFdBSkE7O0FBTUEsVUFBQSxHQUFBLENBQUEsU0FBQSxHQUFBLFlBQUE7QUFDQSxZQUFBLFVBQUEsQ0FBQSxZQUFBO0FBQ0EsY0FBQSxNQUFBLENBQUEsSUFBQSxTQUFBLENBQUEsd0JBQUEsQ0FBQSxDQUFBO0FBQ08sYUFGUCxFQUVPLENBRlAsQ0FBQTtBQUdBLFdBSkE7O0FBTUEsVUFBQSxHQUFBLENBQUEsT0FBQSxHQUFBLFlBQUE7QUFDQSxZQUFBLFVBQUEsQ0FBQSxZQUFBO0FBQ0EsY0FBQSxNQUFBLENBQUEsSUFBQSxZQUFBLENBQUEsU0FBQSxFQUFBLFlBQUEsQ0FBQSxDQUFBO0FBQ08sYUFGUCxFQUVPLENBRlAsQ0FBQTtBQUdBLFdBSkE7O0FBTUEsbUJBQUEsTUFBQSxDQUFBLEdBQUEsRUFBQTtBQUNBLGdCQUFBO0FBQ0EscUJBQUEsR0FBQSxLQUFBLEVBQUEsSUFBQSxNQUFBLENBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxNQUFBLENBQUEsUUFBQSxDQUFBLElBQUEsR0FBQSxHQUFBO0FBQ0EsYUFGQSxDQUVRLE9BQUEsQ0FBQSxFQUFBO0FBQ1IscUJBQUEsR0FBQTtBQUNBO0FBQ0E7O0FBRUEsVUFBQSxHQUFBLENBQUEsSUFBQSxDQUFBLE9BQUEsQ0FBQSxNQUFBLEVBQUEsTUFBQSxDQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxJQUFBOztBQUVBLGNBQUEsT0FBQSxDQUFBLFdBQUEsS0FBQSxTQUFBLEVBQUE7QUFDQSxZQUFBLEdBQUEsQ0FBQSxlQUFBLEdBQUEsSUFBQTtBQUNBLFdBRkEsTUFFTSxJQUFBLE9BQUEsQ0FBQSxXQUFBLEtBQUEsTUFBQSxFQUFB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QUFBOzs7QUFFQTtBQUFBOztBQUNBOzs7QUFBQSxJQUFBLE1BQUEsQ0FBQSxNQUFBLEdBQUEsSUFBQTs7O0FBRUE7QUFBQTs7QUFDQTs7QUFBQSxXQUFBLE1BQUEsQ0FBQSxPQUFBO0FBQ0E7QUFBQTs7Ozs7Ozs7Ozs7Ozs7QUN6QkE7OztBQUNBLElBQUEsbUJBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBQSxPQUFBLEVBQUEsVUFBQSxFQUFBO0FBQ0E7QUFBQSxXQUFBLElBQUEsR0FBQSxJQUFBLFVBQUEsRUFBQTtBQUNBO0FBQUEsWUFBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLEVBQUEsR0FBQSxLQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBO0FBQ0E7QUFBQSxVQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQTtBQUF5QyxZQUFBLFVBQUEsRUFBQSxJQUF6QztBQUF5QyxZQUFBLEdBQUEsRUFBQSxVQUFBLENBQUEsR0FBQTtBQUF6QyxXQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUFBO0FBQ0E7O0FBQUEsS0FOQTs7Ozs7Ozs7Ozs7Ozs7QUNEQSxJQUFBLG1CQUFBLENBQUEsQ0FBQSxHQUFBLFlBQUE7QUFDQTtBQUFBLFVBQUEsT0FBQSxVQUFBLEtBQUEsUUFBQSxFQUFBLE9BQUEsVUFBQTtBQUNBOztBQUFBLFVBQUE7QUFDQTtBQUFBLGVBQUEsUUFBQSxJQUFBLFFBQUEsQ0FBQSxhQUFBLEdBQUE7QUFDQTtBQUFBLE9BRkEsQ0FFRyxPQUFBLENBQUEsRUFBQTtBQUNIO0FBQUEsWUFBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLEVBQUEsT0FBQSxNQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUFDLEtBUEQsRUFBQTs7Ozs7Ozs7Ozs7Ozs7QUNBQSxJQUFBLG1CQUFBLENBQUEsR0FBQSxHQUFBLFVBQUEsTUFBQSxFQUFBO0FBQ0E7QUFBQSxNQUFBLE1BQUEsR0FBQSxNQUFBLENBQUEsTUFBQSxDQUFBLE1BQUEsQ0FBQTtBQUNBOztBQUFBLFVBQUEsQ0FBQSxNQUFBLENBQUEsUUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEdBQUEsRUFBQTtBQUNBOztBQUFBLE1BQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxNQUFBLEVBQUEsU0FBQSxFQUFBO0FBQ0E7QUFBQSxRQUFBLFVBQUEsRUFBQSxJQURBOztBQUVBO0FBQUEsUUFBQSxHQUFBLEVBQUEsWUFBQTtBQUNBO0FBQUEsZ0JBQUEsSUFBQSxLQUFBLENBQUEsNEZBQUEsTUFBQSxDQUFBLEVBQUEsQ0FBQTtBQUNBO0FBQUE7QUFDQTs7QUFMQSxPQUFBO0FBTUE7O0FBQUEsYUFBQSxNQUFBO0FBQ0E7QUFBQSxLQVZBOzs7Ozs7Ozs7Ozs7OztBQ0FBLElBQUEsbUJBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBQSxHQUFBLEVBQUEsSUFBQSxFQUFBO0FBQThDLGFBQUEsTUFBQSxDQUFBLFNBQUEsQ0FBQSxjQUFBLENBQUEsSUFBQSxDQUFBLEdBQUEsRUFBQSxJQUFBLENBQUE7QUFBQSxLQUE5Qzs7Ozs7Ozs7Ozs7Ozs7QUNBQTs7O0FBQ0EsSUFBQSxtQkFBQSxDQUFBLENBQUEsR0FBQSxVQUFBLE9BQUEsRUFBQTtBQUNBO0FBQUEsVUFBQSxPQUFBLE1BQUEsS0FBQSxXQUFBLElBQUEsTUFBQSxDQUFBLFdBQUEsRUFBQTtBQUNBO0FBQUEsUUFBQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxNQUFBLENBQUEsV0FBQSxFQUFBO0FBQXVELFVBQUEsS0FBQSxFQUFBO0FBQXZELFNBQUE7QUFDQTtBQUFBO0FBQ0E7OztBQUFBLE1BQUEsTUFBQSxDQUFBLGNBQUEsQ0FBQSxPQUFBLEVBQUEsWUFBQSxFQUFBO0FBQWdELFFBQUEsS0FBQSxFQUFBO0FBQWhELE9BQUE7QUFDQTtBQUFBLEtBTEE7Ozs7Ozs7Ozs7O0FDREE7OztBQUNBOzs7QUFDQTs7OztBQUNBLE1BQUEsbUJBQUEsR0FBQSxtQkFBQSxDQUFBLHFDQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKGRyYWZ0SWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgLy8gTk9URSDQrdGC0LAg0YTRg9C90LrRhtC40Y8g0L7QsdGK0Y/QstC70LXQvdCwINC+0YLQtNC10LvRjNC90L4sINC40LHQviDQvtC90LAg0LLRhdC+0LTQuNGCINCyINGB0L7RgdGC0LDQsiBjbGllbnQuanMg0LhcbiAgICAvLyDQvdC1INC00L7Qu9C20L3QviDQv9GA0L7QuNGB0YXQvtC00LjRgtGMINGD0YLQtdC20LXQu9C10L3QuNGPIGNsaWVudC5qcy3QsFxuICAgIHJldHVybiBgdjEvbnMvJHtkcmFmdElkLm5zfS9kcmFmdHMvJHtkcmFmdElkLmRyYWZ0SWR9L2NsaWVudC1kcmFmdC1pbmZvYDtcbn1cbiIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsIi8qKipcbiAqINCh0YLRgNC+0LPQvtGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LfQsNC80LXQvdCwINC00LvRjyBCb29sZWFuKC4uLilcbiAqINCe0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPIFsuLi5dLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlVbmtub3duRXJyb3IoZXJyb3I6IHVua25vd24pOiB1bmRlZmluZWQgfCBzdHJpbmcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgZXJyb3I/LltcIm1lc3NhZ2VcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBhc3NlcnRzIGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICBpZiAoIWlzTm90TnVsbE9yVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIG11c3QgYmUgZGVmaW5lZGApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgdHlwZSBFcnJvckZpcnN0Q2FsbGJhY2s8VD4gPSAoLi4uYXJnczogW0Vycm9yLCBudWxsIHwgdW5kZWZpbmVkXSB8IFtudWxsIHwgdW5kZWZpbmVkLCBUXSB8IFtFcnJvcl0pID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3QobWVzc2FnZT86IHN0cmluZyB8IEVycm9yKTogbmV2ZXIge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiB8fCBtZXNzYWdlID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSA/PyBcIlVuZGVmaW5lZCBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBtZXNzYWdlO1xuICAgIH1cbn1cblxudHlwZSBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHsgbGVuZ3RoOiBUTGVuZ3RoIH1cbiAgICA/IFRSZXN0XG4gICAgOiBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoLCBbVEl0ZW0sIC4uLlRSZXN0XT47XG5cbmV4cG9ydCB0eXBlIE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHtcbiAgICBsZW5ndGg6IFRMZW5ndGg7XG59XG4gICAgPyBbLi4uVFJlc3QsIC4uLlRJdGVtW11dXG4gICAgOiBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCwgWy4uLlRSZXN0LCBUSXRlbV0+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID49IG1pbkxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbkxlbmd0aE9yVW5kZWZpbmVkPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiB1bmRlZmluZWQgfCBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgaWYgKGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBtaW5MZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID09PSBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzQXRMZWFzdE9uZUl0ZW08VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogYXNzZXJ0cyBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgaWYgKCFhcnJheUlzTm90RW1wdHkoaXRlbXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBiZSBub3QgZW1wdHlgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWFycmF5SGFzTGVuZ3RoKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgc2hvdWxkIGhhcyBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgaGF2ZSBtaW5pbWFsIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke25ldmVyQXJndW1lbnR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkFzeW5jQWN0aW9uKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICBhY3Rpb24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dCA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHN0cmluZyB7XG4gICAgcmV0dXJuICFpc051bGxPckVtcHR5KGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGlucHV0IGlzIHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQudHJpbSgpID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbUxhc3RTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydElzPFQ+KHZhbHVlOiBUKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuIiwiLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkIG5vLWFueSBuby11bnNhZmUtYW55ICovXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gXCJ3aGF0d2ctZmV0Y2hcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAoZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmVlZEVuZ2luZSA9IGVuZ2luZVZlcnNpb24gJiYgIWdsb2JhbFtlbmdpbmVWZXJzaW9uXTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHY6IHJlc291cmNlc1ZlcnNpb24sIHJlc291cmNlWm9uZTogc2V0dGluZ3MucmVzb3VyY2Vab25lIH07XG4gICAgaWYgKG5lZWRMb2FkU3R5bGVzRm9yR2Z2KSB7XG4gICAgICAgIHRhc2tzLnB1c2goY2IgPT5cbiAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzLyR7Z2Z2fSR7bWlufS5jc3NgLCBwYXJhbXMpKSwgdHJ1ZSwgY2IpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2goY2IgPT4gTG9hZEludG9Eb2N1bWVudC5zY3JpcHQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtnZnZ9JHttaW59LmpzYCwgcGFyYW1zKSksIGNiKSk7XG5cbiAgICBpZiAoaXNOZWVkRW5naW5lKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5qc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBydW5QYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb3JtKFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPlxuKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUVudHJ5UG9pbnQgPVxuICAgICAgICBnbG9iYWwuQ0YuZW50cnlQb2ludFtleHRlbmRlZFNldHRpbmdzLmdmdl0gPz8gcmVqZWN0KGBGb3JtIGVudHJ5IHBvaW50ICR7ZXh0ZW5kZWRTZXR0aW5ncy5nZnZ9IG5vdCBmb3VuZC5gKTtcbiAgICBmb3JtRW50cnlQb2ludChwYWdlQ29udGVudCwgZXh0ZW5kZWRTZXR0aW5ncylcbiAgICAgICAgLnRoZW4oZm9ybSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGb3JtID0gZm9ybS5wdWJsaWNGb3JtIHx8IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybSk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHB1YmxpY0Zvcm0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Rm9ybU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPEFVT09wdGlvbnM+IHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKHsgbnM6IG5zLCBkcmFmdElkOiBkcmFmdElkIH0pKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdmdiA9IGNsaWVudERyYWZ0SW5mby5nZnY7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uID0gY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb247XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWQ6IGNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgY2F1bGRyb25BcGlVcmw6IGNsaWVudFNldHRpbmdzLmNhdWxkcm9uQXBpVXJsLFxuICAgICAgICAgICAgICAgIGlzVGVzdFNlcnZlcjogY2xpZW50U2V0dGluZ3MuaXNUZXN0U2VydmVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IGNsaWVudFNldHRpbmdzLnJlbmRlckNhY2hpbmdGb3JJRTgsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBjbGllbnRTZXR0aW5ncy5ub3JtYWxpemF0aW9uT25TZXJ2ZXIsXG4gICAgICAgICAgICAgICAgbm9ybWF0aXZlVXJsOiBjbGllbnRTZXR0aW5ncy5ub3JtYXRpdmVVcmwsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogY2xpZW50U2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYWJvbklkOiBvcHRpb25zLmFib25JZCxcbiAgICAgICAgICAgICAgICBvcmdJZDogb3B0aW9ucy5vcmdJZCxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IG9wdGlvbnMudXNlcklkLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBpc0luZGl2aWR1YWw6IGNsaWVudERyYWZ0SW5mby5pc0luZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgaXNGb3JlaWduOiBjbGllbnREcmFmdEluZm8uaXNGb3JlaWduLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNhbmR5VG91ckF2YWlsYWJsZTogY2xpZW50RHJhZnRJbmZvLmNhbmR5VG91ckF2YWlsYWJsZSxcbiAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXI6IG9wdGlvbnMuZXZlbnRFbWl0dGVyLFxuICAgICAgICAgICAgICAgIGZvcm1JbmZvOiBjbGllbnREcmFmdEluZm8uZm9ybUluZm8sXG4gICAgICAgICAgICAgICAgcHJpbnRJbmZvOiBjbGllbnREcmFmdEluZm8ucHJpbnRJbmZvLFxuICAgICAgICAgICAgICAgIHJlZ2lvbnM6IGNsaWVudERyYWZ0SW5mby5yZWdpb25zLFxuICAgICAgICAgICAgICAgIGhhc1RlbXBsYXRlczogY2xpZW50RHJhZnRJbmZvLmhhc1RlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB7XG4gICAgYXV0aG9yaXplZDogcGFyc2VCb29sKFwie2F1dGhvcml6ZWR9XCIpLFxuICAgIGNhdWxkcm9uQXBpVXJsOiBcIntjYXVsZHJvbkFwaVVybH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJpbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IEVtcGxveWVlIH0gZnJvbSBcIi4uLy4uLy4uL0VtcGxveWVlc0ltcG9ydC9TdGFmZlNlcnZpY2VXaWRnZXQvQ2xpZW50L1R5cGVzXCI7XG5cbmltcG9ydCB7IElMZWdhY3lGb3JtIH0gZnJvbSBcIi4vSUxlZ2FjeUZvcm1cIjtcblxuZXhwb3J0IHR5cGUgTW9kZWxFdmVudFBhdGggPVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHBhdGg/OiBzdHJpbmcsIGZpZWxkTmFtZT86IHN0cmluZyk6IE1vZGVsRXZlbnRQYXRoIHtcbiAgICBpZiAoZmllbGROYW1lICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBiZSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoLCBmaWVsZE5hbWVdO1xuICAgIH1cbiAgICBpZiAocGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGhdO1xuICAgIH1cbiAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl07XG59XG5cbmZ1bmN0aW9uIG1hcENodW5rVmFsdWVzKGNodW5rOiBSZWFkb25seU1vZGVsQ2h1bmspOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2h1bmspXG4gICAgICAgIC5maWx0ZXIocGF0aCA9PiBjaHVua1twYXRoXSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2h1bmtbcGF0aF0sIFwidmFsdWVcIikpXG4gICAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaHVua1twYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgW3BhdGhdOiByZXN1bHQudmFsdWUgfTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZUNodW5rVmFsdWVzKGNodW5rczogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pik6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGNodW5rKSA9PiAoe1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgLi4uY2h1bmssXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICk7XG59XG5cbmNsYXNzIExlZ2FjeVB1YmxpY0Zvcm0gaW1wbGVtZW50cyBJUHVibGljRm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBJTGVnYWN5Rm9ybTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihmb3JtOiBJTGVnYWN5Rm9ybSkge1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vZmZNb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICAvLyBGb3Igb2xkIGtld2ViXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUg0K3RgtC+INCyINGB0YLQsNGA0YvRhSDQtNCy0LjQttC60LDRhSDRgtGD0YIg0YLQsNC60L7QuSDQstGL0LfQvtCyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkYXRvci52YWxpZGF0ZUFsbChrZXlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5obWQgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogJyArIG1vZHVsZS5pZCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnQudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9