@secrecy/lib 1.0.0-dev.20 → 1.0.0-dev.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/BaseClient.js CHANGED
@@ -6,6 +6,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
6
6
 
7
7
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8
8
 
9
+ /* eslint-disable @typescript-eslint/naming-convention */
9
10
  import { serialize } from "bson";
10
11
  import { getLink } from "@secrecy/lib-utils";
11
12
  import { usersCache } from "./cache.js";
@@ -49,16 +50,26 @@ var getUserSelector = function getUserSelector(userId, withPublicKey) {
49
50
  user: [{
50
51
  userId: userId
51
52
  }, {
52
- id: true,
53
- firstname: true,
54
- lastname: true,
55
- lang: true,
56
- publicKey: withPublicKey ? true : undefined,
57
- email: true,
58
- phone: true,
59
- role: true,
60
- deletedAt: true,
61
- lastLogin: true
53
+ "...on ErrorNotFound": {
54
+ __typename: true,
55
+ message: true,
56
+ field: true
57
+ },
58
+ "...on UserResponse": {
59
+ __typename: true,
60
+ user: {
61
+ id: true,
62
+ firstname: true,
63
+ lastname: true,
64
+ lang: true,
65
+ publicKey: withPublicKey ? true : undefined,
66
+ email: true,
67
+ phone: true,
68
+ role: true,
69
+ deletedAt: true,
70
+ lastLogin: true
71
+ }
72
+ }
62
73
  }]
63
74
  }),
64
75
  user = _Selector.user;
@@ -72,7 +83,7 @@ function getUser(_x) {
72
83
 
73
84
  function _getUser() {
74
85
  _getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(params) {
75
- var selector, _yield$params$client, user;
86
+ var selector, _yield$params$client, userResponse;
76
87
 
77
88
  return _regeneratorRuntime.wrap(function _callee27$(_context27) {
78
89
  while (1) {
@@ -86,9 +97,9 @@ function _getUser() {
86
97
 
87
98
  case 3:
88
99
  _yield$params$client = _context27.sent;
89
- user = _yield$params$client.user;
100
+ userResponse = _yield$params$client.user;
90
101
 
91
- if (user) {
102
+ if (userResponse) {
92
103
  _context27.next = 7;
93
104
  break;
94
105
  }
@@ -96,12 +107,31 @@ function _getUser() {
96
107
  return _context27.abrupt("return", null);
97
108
 
98
109
  case 7:
99
- return _context27.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
100
- lastLogin: new Date(user.lastLogin),
101
- deletedAt: user.deletedAt ? new Date(user.deletedAt) : null
102
- }));
110
+ if (!(userResponse.__typename === "ErrorNotFound")) {
111
+ _context27.next = 9;
112
+ break;
113
+ }
114
+
115
+ return _context27.abrupt("return", userResponse);
116
+
117
+ case 9:
118
+ if (userResponse.user) {
119
+ _context27.next = 11;
120
+ break;
121
+ }
122
+
123
+ return _context27.abrupt("return", null);
124
+
125
+ case 11:
126
+ return _context27.abrupt("return", {
127
+ __typename: "SuccessResponse",
128
+ data: _objectSpread(_objectSpread({}, userResponse.user), {}, {
129
+ lastLogin: new Date(userResponse.user.lastLogin),
130
+ deletedAt: userResponse.user.deletedAt ? new Date(userResponse.user.deletedAt) : null
131
+ })
132
+ });
103
133
 
104
- case 8:
134
+ case 12:
105
135
  case "end":
106
136
  return _context27.stop();
107
137
  }
@@ -121,9 +151,8 @@ export var BaseClient = /*#__PURE__*/function () {
121
151
 
122
152
  _proto.sessions = /*#__PURE__*/function () {
123
153
  var _sessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
124
- var _data$user$sessions$m, _data$user;
154
+ var data, userResponse, _userResponse$user$se, _sessions2;
125
155
 
126
- var data, sessions;
127
156
  return _regeneratorRuntime.wrap(function _callee$(_context) {
128
157
  while (1) {
129
158
  switch (_context.prev = _context.next) {
@@ -131,23 +160,33 @@ export var BaseClient = /*#__PURE__*/function () {
131
160
  _context.next = 2;
132
161
  return this.client("query")({
133
162
  user: [{}, {
134
- sessions: {
135
- id: true,
136
- lastActivity: true,
137
- userAgent: true,
138
- ip: true,
139
- city: true,
140
- country: true,
141
- appSessions: {
142
- id: true,
143
- lastActivity: true,
144
- userAgent: true,
145
- ip: true,
146
- city: true,
147
- country: true,
148
- userApp: {
149
- app: {
150
- name: true
163
+ "...on ErrorNotFound": {
164
+ __typename: true,
165
+ field: true,
166
+ message: true
167
+ },
168
+ "...on UserResponse": {
169
+ __typename: true,
170
+ user: {
171
+ sessions: {
172
+ id: true,
173
+ lastActivity: true,
174
+ userAgent: true,
175
+ ip: true,
176
+ city: true,
177
+ country: true,
178
+ appSessions: {
179
+ id: true,
180
+ lastActivity: true,
181
+ userAgent: true,
182
+ ip: true,
183
+ city: true,
184
+ country: true,
185
+ userApp: {
186
+ app: {
187
+ name: true
188
+ }
189
+ }
151
190
  }
152
191
  }
153
192
  }
@@ -157,7 +196,31 @@ export var BaseClient = /*#__PURE__*/function () {
157
196
 
158
197
  case 2:
159
198
  data = _context.sent;
160
- sessions = (_data$user$sessions$m = (_data$user = data.user) == null ? void 0 : _data$user.sessions.map(function (s) {
199
+
200
+ if (data.user) {
201
+ _context.next = 5;
202
+ break;
203
+ }
204
+
205
+ return _context.abrupt("return", null);
206
+
207
+ case 5:
208
+ userResponse = data.user;
209
+
210
+ if (!(userResponse.__typename === "UserResponse")) {
211
+ _context.next = 11;
212
+ break;
213
+ }
214
+
215
+ if (userResponse.user) {
216
+ _context.next = 9;
217
+ break;
218
+ }
219
+
220
+ return _context.abrupt("return", null);
221
+
222
+ case 9:
223
+ _sessions2 = (_userResponse$user$se = userResponse.user.sessions.map(function (s) {
161
224
  return {
162
225
  id: s.id,
163
226
  ip: s.ip,
@@ -179,10 +242,16 @@ export var BaseClient = /*#__PURE__*/function () {
179
242
  };
180
243
  })
181
244
  };
182
- })) != null ? _data$user$sessions$m : [];
183
- return _context.abrupt("return", sessions);
245
+ })) != null ? _userResponse$user$se : [];
246
+ return _context.abrupt("return", {
247
+ __typename: "SuccessResponse",
248
+ data: _sessions2
249
+ });
184
250
 
185
- case 5:
251
+ case 11:
252
+ return _context.abrupt("return", userResponse);
253
+
254
+ case 12:
186
255
  case "end":
187
256
  return _context.stop();
188
257
  }
@@ -290,12 +359,28 @@ export var BaseClient = /*#__PURE__*/function () {
290
359
  user = _context4.sent;
291
360
 
292
361
  if (user) {
293
- usersCache.set(user.id, user);
362
+ _context4.next = 5;
363
+ break;
294
364
  }
295
365
 
296
- return _context4.abrupt("return", user);
366
+ return _context4.abrupt("return", null);
297
367
 
298
368
  case 5:
369
+ if (!(user.__typename === "ErrorNotFound")) {
370
+ _context4.next = 7;
371
+ break;
372
+ }
373
+
374
+ return _context4.abrupt("return", user);
375
+
376
+ case 7:
377
+ if (user) {
378
+ usersCache.set(user.data.id, user.data);
379
+ }
380
+
381
+ return _context4.abrupt("return", user);
382
+
383
+ case 9:
299
384
  case "end":
300
385
  return _context4.stop();
301
386
  }
@@ -328,12 +413,28 @@ export var BaseClient = /*#__PURE__*/function () {
328
413
  user = _context5.sent;
329
414
 
330
415
  if (user) {
331
- usersCache.set(user.id, user);
416
+ _context5.next = 5;
417
+ break;
332
418
  }
333
419
 
334
- return _context5.abrupt("return", user);
420
+ return _context5.abrupt("return", null);
335
421
 
336
422
  case 5:
423
+ if (!(user.__typename === "ErrorNotFound")) {
424
+ _context5.next = 7;
425
+ break;
426
+ }
427
+
428
+ return _context5.abrupt("return", user);
429
+
430
+ case 7:
431
+ if (user) {
432
+ usersCache.set(user.data.id, user.data);
433
+ }
434
+
435
+ return _context5.abrupt("return", user);
436
+
437
+ case 9:
337
438
  case "end":
338
439
  return _context5.stop();
339
440
  }
@@ -419,33 +520,38 @@ export var BaseClient = /*#__PURE__*/function () {
419
520
  _context7.next = 2;
420
521
  return BaseClient._getBaseClient(env, sessionId)("query")({
421
522
  plans: {
422
- kind: true,
423
- codes: true,
424
- limits: {
425
- downloadBandwidth: true,
426
- downloadCount: true,
427
- hardFileCount: true,
428
- hardFileSize: true,
429
- perFileSize: true,
430
- uploadBandwidth: true,
431
- uploadCount: true,
432
- receivedMails: {
433
- count: true,
434
- fileCount: true,
435
- fileSize: true,
436
- hardCount: true,
437
- hardFileCount: true,
438
- hardFileSize: true,
439
- perFileSize: true
440
- },
441
- sentMails: {
442
- count: true,
443
- fileCount: true,
444
- fileSize: true,
445
- hardCount: true,
446
- hardFileCount: true,
447
- hardFileSize: true,
448
- perFileSize: true
523
+ "...on PlanResponse": {
524
+ __typename: true,
525
+ plan: {
526
+ kind: true,
527
+ codes: true,
528
+ limits: {
529
+ downloadBandwidth: true,
530
+ downloadCount: true,
531
+ hardFileCount: true,
532
+ hardFileSize: true,
533
+ perFileSize: true,
534
+ uploadBandwidth: true,
535
+ uploadCount: true,
536
+ receivedMails: {
537
+ count: true,
538
+ fileCount: true,
539
+ fileSize: true,
540
+ hardCount: true,
541
+ hardFileCount: true,
542
+ hardFileSize: true,
543
+ perFileSize: true
544
+ },
545
+ sentMails: {
546
+ count: true,
547
+ fileCount: true,
548
+ fileSize: true,
549
+ hardCount: true,
550
+ hardFileCount: true,
551
+ hardFileSize: true,
552
+ perFileSize: true
553
+ }
554
+ }
449
555
  }
450
556
  }
451
557
  }
@@ -454,9 +560,21 @@ export var BaseClient = /*#__PURE__*/function () {
454
560
  case 2:
455
561
  _yield$BaseClient$_ge = _context7.sent;
456
562
  plans = _yield$BaseClient$_ge.plans;
457
- return _context7.abrupt("return", plans);
458
563
 
459
- case 5:
564
+ if (plans) {
565
+ _context7.next = 6;
566
+ break;
567
+ }
568
+
569
+ return _context7.abrupt("return", null);
570
+
571
+ case 6:
572
+ return _context7.abrupt("return", {
573
+ __typename: "SuccessResponse",
574
+ data: plans.plan
575
+ });
576
+
577
+ case 7:
460
578
  case "end":
461
579
  return _context7.stop();
462
580
  }
@@ -543,7 +661,7 @@ export var BaseClient = /*#__PURE__*/function () {
543
661
 
544
662
  _proto.paymentInfos = /*#__PURE__*/function () {
545
663
  var _paymentInfos = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
546
- var _yield$this$client4, paymentInfos;
664
+ var _yield$this$client4, paymentInfos, result;
547
665
 
548
666
  return _regeneratorRuntime.wrap(function _callee10$(_context10) {
549
667
  while (1) {
@@ -552,33 +670,42 @@ export var BaseClient = /*#__PURE__*/function () {
552
670
  _context10.next = 2;
553
671
  return this.client("query")({
554
672
  paymentInfos: {
555
- hostedUrl: true,
556
- currentSubscription: {
557
- autorenew: true,
558
- activatedAt: true,
559
- currentPeriodEndsAt: true,
560
- currentPeriodStartedAt: true,
561
- canceledAt: true,
562
- createdAt: true,
563
- expiresAt: true,
564
- pausedAt: true,
565
- trialEndsAt: true,
566
- trialStartedAt: true,
567
- updatedAt: true,
568
- state: true,
569
- collectionMethod: true,
570
- plan: true,
571
- planCode: true,
572
- total: true
673
+ "...on ErrorAccessDenied": {
674
+ __typename: true,
675
+ message: true
573
676
  },
574
- invoices: {
575
- pdf: true,
576
- date: true,
577
- due: true,
578
- status: true,
579
- total: true,
580
- name: true,
581
- currency: true
677
+ "...on PaymentInfosResponse": {
678
+ __typename: true,
679
+ paymentInfos: {
680
+ hostedUrl: true,
681
+ currentSubscription: {
682
+ autorenew: true,
683
+ activatedAt: true,
684
+ currentPeriodEndsAt: true,
685
+ currentPeriodStartedAt: true,
686
+ canceledAt: true,
687
+ createdAt: true,
688
+ expiresAt: true,
689
+ pausedAt: true,
690
+ trialEndsAt: true,
691
+ trialStartedAt: true,
692
+ updatedAt: true,
693
+ state: true,
694
+ collectionMethod: true,
695
+ plan: true,
696
+ planCode: true,
697
+ total: true
698
+ },
699
+ invoices: {
700
+ pdf: true,
701
+ date: true,
702
+ due: true,
703
+ status: true,
704
+ total: true,
705
+ name: true,
706
+ currency: true
707
+ }
708
+ }
582
709
  }
583
710
  }
584
711
  });
@@ -595,9 +722,29 @@ export var BaseClient = /*#__PURE__*/function () {
595
722
  return _context10.abrupt("return", null);
596
723
 
597
724
  case 6:
598
- return _context10.abrupt("return", internalToPaymentInfos(paymentInfos));
725
+ if (!(paymentInfos.__typename === "ErrorAccessDenied")) {
726
+ _context10.next = 8;
727
+ break;
728
+ }
599
729
 
600
- case 7:
730
+ return _context10.abrupt("return", paymentInfos);
731
+
732
+ case 8:
733
+ if (paymentInfos.paymentInfos) {
734
+ _context10.next = 10;
735
+ break;
736
+ }
737
+
738
+ return _context10.abrupt("return", null);
739
+
740
+ case 10:
741
+ result = internalToPaymentInfos(paymentInfos.paymentInfos);
742
+ return _context10.abrupt("return", {
743
+ __typename: "SuccessResponse",
744
+ data: result
745
+ });
746
+
747
+ case 12:
601
748
  case "end":
602
749
  return _context10.stop();
603
750
  }
@@ -623,28 +770,47 @@ export var BaseClient = /*#__PURE__*/function () {
623
770
  _context11.next = 2;
624
771
  return this.client("query")({
625
772
  limits: {
626
- cloud: {
627
- size: true,
628
- maxSize: true,
629
- count: true,
630
- maxCount: true
773
+ "...on ErrorAccessDenied": {
774
+ __typename: true,
775
+ message: true
631
776
  },
632
- mail: {
633
- received: {
777
+ "...on ErrorLimit": {
778
+ __typename: true,
779
+ message: true
780
+ },
781
+ "...on ErrorNotExist": {
782
+ __typename: true,
783
+ message: true
784
+ },
785
+ "...on ErrorNotFound": {
786
+ __typename: true,
787
+ message: true
788
+ },
789
+ "...on QueryLimits": {
790
+ __typename: true,
791
+ cloud: {
792
+ size: true,
793
+ maxSize: true,
634
794
  count: true,
635
- maxCount: true,
636
- fileCount: true,
637
- maxFileCount: true,
638
- fileSize: true,
639
- maxFileSize: true
795
+ maxCount: true
640
796
  },
641
- sent: {
642
- count: true,
643
- maxCount: true,
644
- fileCount: true,
645
- maxFileCount: true,
646
- fileSize: true,
647
- maxFileSize: true
797
+ mail: {
798
+ received: {
799
+ count: true,
800
+ maxCount: true,
801
+ fileCount: true,
802
+ maxFileCount: true,
803
+ fileSize: true,
804
+ maxFileSize: true
805
+ },
806
+ sent: {
807
+ count: true,
808
+ maxCount: true,
809
+ fileCount: true,
810
+ maxFileCount: true,
811
+ fileSize: true,
812
+ maxFileSize: true
813
+ }
648
814
  }
649
815
  }
650
816
  }
@@ -662,35 +828,70 @@ export var BaseClient = /*#__PURE__*/function () {
662
828
  return _context11.abrupt("return", null);
663
829
 
664
830
  case 6:
831
+ if (!(limits.__typename === "ErrorAccessDenied")) {
832
+ _context11.next = 8;
833
+ break;
834
+ }
835
+
836
+ return _context11.abrupt("return", limits);
837
+
838
+ case 8:
839
+ if (!(limits.__typename === "ErrorNotExist")) {
840
+ _context11.next = 10;
841
+ break;
842
+ }
843
+
844
+ return _context11.abrupt("return", limits);
845
+
846
+ case 10:
847
+ if (!(limits.__typename === "ErrorLimit")) {
848
+ _context11.next = 12;
849
+ break;
850
+ }
851
+
852
+ return _context11.abrupt("return", limits);
853
+
854
+ case 12:
855
+ if (!(limits.__typename === "ErrorNotFound")) {
856
+ _context11.next = 14;
857
+ break;
858
+ }
859
+
860
+ return _context11.abrupt("return", limits);
861
+
862
+ case 14:
665
863
  cloud = limits.cloud, mail = limits.mail;
666
864
  return _context11.abrupt("return", {
667
- cloud: {
668
- count: BigInt(cloud.count),
669
- size: BigInt(cloud.size),
670
- maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
671
- maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
672
- },
673
- mail: {
674
- received: {
675
- count: BigInt(mail.received.count),
676
- maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
677
- fileCount: BigInt(mail.received.fileCount),
678
- maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
679
- fileSize: BigInt(mail.received.fileSize),
680
- maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
865
+ __typename: "SuccessResponse",
866
+ data: {
867
+ cloud: {
868
+ count: BigInt(cloud.count),
869
+ size: BigInt(cloud.size),
870
+ maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
871
+ maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
681
872
  },
682
- sent: {
683
- count: BigInt(mail.sent.count),
684
- maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
685
- fileCount: BigInt(mail.sent.fileCount),
686
- maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
687
- fileSize: BigInt(mail.sent.fileSize),
688
- maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
873
+ mail: {
874
+ received: {
875
+ count: BigInt(mail.received.count),
876
+ maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
877
+ fileCount: BigInt(mail.received.fileCount),
878
+ maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
879
+ fileSize: BigInt(mail.received.fileSize),
880
+ maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
881
+ },
882
+ sent: {
883
+ count: BigInt(mail.sent.count),
884
+ maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
885
+ fileCount: BigInt(mail.sent.fileCount),
886
+ maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
887
+ fileSize: BigInt(mail.sent.fileSize),
888
+ maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
889
+ }
689
890
  }
690
891
  }
691
892
  });
692
893
 
693
- case 8:
894
+ case 16:
694
895
  case "end":
695
896
  return _context11.stop();
696
897
  }
@@ -707,8 +908,6 @@ export var BaseClient = /*#__PURE__*/function () {
707
908
 
708
909
  _proto.godFatherAndChildren = /*#__PURE__*/function () {
709
910
  var _godFatherAndChildren = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
710
- var _user$godFather;
711
-
712
911
  var _yield$this$client6, user;
713
912
 
714
913
  return _regeneratorRuntime.wrap(function _callee12$(_context12) {
@@ -718,19 +917,26 @@ export var BaseClient = /*#__PURE__*/function () {
718
917
  _context12.next = 2;
719
918
  return this.client("query")({
720
919
  user: [{}, {
721
- godChildren: {
722
- id: true,
723
- firstname: true,
724
- lastname: true,
725
- email: true,
726
- phone: true
920
+ "...on ErrorNotFound": {
921
+ __typename: true,
922
+ message: true
727
923
  },
728
- godFather: {
729
- id: true,
730
- firstname: true,
731
- lastname: true,
732
- email: true,
733
- phone: true
924
+ "...on UserResponse": {
925
+ __typename: true,
926
+ godChildren: {
927
+ id: true,
928
+ firstname: true,
929
+ lastname: true,
930
+ email: true,
931
+ phone: true
932
+ },
933
+ godFather: {
934
+ id: true,
935
+ firstname: true,
936
+ lastname: true,
937
+ email: true,
938
+ phone: true
939
+ }
734
940
  }
735
941
  }]
736
942
  });
@@ -747,11 +953,23 @@ export var BaseClient = /*#__PURE__*/function () {
747
953
  return _context12.abrupt("return", null);
748
954
 
749
955
  case 6:
750
- return _context12.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
751
- godFather: (_user$godFather = user.godFather) != null ? _user$godFather : null
752
- }));
956
+ if (!(user.__typename === "ErrorNotFound")) {
957
+ _context12.next = 8;
958
+ break;
959
+ }
753
960
 
754
- case 7:
961
+ return _context12.abrupt("return", user);
962
+
963
+ case 8:
964
+ return _context12.abrupt("return", {
965
+ __typename: "SuccessResponse",
966
+ data: {
967
+ godChildren: user.godChildren,
968
+ godFather: user.godFather
969
+ }
970
+ });
971
+
972
+ case 9:
755
973
  case "end":
756
974
  return _context12.stop();
757
975
  }
@@ -815,15 +1033,68 @@ export var BaseClient = /*#__PURE__*/function () {
815
1033
  return BaseClient._getBaseClient(env, sessionId)("query")({
816
1034
  dbConfig: [{
817
1035
  appCode: appCode
818
- }, true]
1036
+ }, {
1037
+ "...on ErrorAccessDenied": {
1038
+ __typename: true,
1039
+ message: true
1040
+ },
1041
+ "...on ErrorNotFound": {
1042
+ __typename: true,
1043
+ message: true
1044
+ },
1045
+ "...on ErrorNotExist": {
1046
+ __typename: true,
1047
+ message: true
1048
+ },
1049
+ "...on DbConfigResponse": {
1050
+ __typename: true,
1051
+ json: true
1052
+ }
1053
+ }]
819
1054
  });
820
1055
 
821
1056
  case 2:
822
1057
  _yield$BaseClient$_ge3 = _context14.sent;
823
1058
  dbConfig = _yield$BaseClient$_ge3.dbConfig;
1059
+
1060
+ if (dbConfig) {
1061
+ _context14.next = 6;
1062
+ break;
1063
+ }
1064
+
1065
+ return _context14.abrupt("return", null);
1066
+
1067
+ case 6:
1068
+ if (!(dbConfig.__typename === "ErrorAccessDenied")) {
1069
+ _context14.next = 8;
1070
+ break;
1071
+ }
1072
+
824
1073
  return _context14.abrupt("return", dbConfig);
825
1074
 
826
- case 5:
1075
+ case 8:
1076
+ if (!(dbConfig.__typename === "ErrorNotFound")) {
1077
+ _context14.next = 10;
1078
+ break;
1079
+ }
1080
+
1081
+ return _context14.abrupt("return", dbConfig);
1082
+
1083
+ case 10:
1084
+ if (!(dbConfig.__typename === "ErrorNotExist")) {
1085
+ _context14.next = 12;
1086
+ break;
1087
+ }
1088
+
1089
+ return _context14.abrupt("return", dbConfig);
1090
+
1091
+ case 12:
1092
+ return _context14.abrupt("return", {
1093
+ __typename: "SuccessResponse",
1094
+ data: dbConfig.json
1095
+ });
1096
+
1097
+ case 13:
827
1098
  case "end":
828
1099
  return _context14.stop();
829
1100
  }
@@ -852,18 +1123,47 @@ export var BaseClient = /*#__PURE__*/function () {
852
1123
  faq: [{
853
1124
  lang: lang
854
1125
  }, {
855
- answer: true,
856
- order: true,
857
- question: true
1126
+ "...on ErrorAccessDenied": {
1127
+ __typename: true,
1128
+ message: true
1129
+ },
1130
+ "...on FaqResponse": {
1131
+ __typename: true,
1132
+ faq: {
1133
+ answer: true,
1134
+ order: true,
1135
+ question: true
1136
+ }
1137
+ }
858
1138
  }]
859
1139
  });
860
1140
 
861
1141
  case 3:
862
1142
  _yield$BaseClient$_ge4 = _context15.sent;
863
1143
  faq = _yield$BaseClient$_ge4.faq;
1144
+
1145
+ if (faq) {
1146
+ _context15.next = 7;
1147
+ break;
1148
+ }
1149
+
1150
+ return _context15.abrupt("return", null);
1151
+
1152
+ case 7:
1153
+ if (!(faq.__typename === "ErrorAccessDenied")) {
1154
+ _context15.next = 9;
1155
+ break;
1156
+ }
1157
+
864
1158
  return _context15.abrupt("return", faq);
865
1159
 
866
- case 6:
1160
+ case 9:
1161
+ return _context15.abrupt("return", {
1162
+ __typename: "SuccessResponse",
1163
+ data: faq.faq
1164
+ });
1165
+
1166
+ case 10:
867
1167
  case "end":
868
1168
  return _context15.stop();
869
1169
  }
@@ -892,29 +1192,58 @@ export var BaseClient = /*#__PURE__*/function () {
892
1192
  blog: [{
893
1193
  lang: lang
894
1194
  }, {
895
- id: true,
896
- blogId: true,
897
- author: true,
898
- body: true,
899
- date: true,
900
- image: true,
901
- imageAlt: true,
902
- summary: true,
903
- title: true,
904
- order: true
1195
+ "...on ErrorLangNotExist": {
1196
+ __typename: true,
1197
+ message: true
1198
+ },
1199
+ "...on BlogResponse": {
1200
+ __typename: true,
1201
+ blogItems: {
1202
+ id: true,
1203
+ blogId: true,
1204
+ author: true,
1205
+ body: true,
1206
+ date: true,
1207
+ image: true,
1208
+ imageAlt: true,
1209
+ summary: true,
1210
+ title: true,
1211
+ order: true
1212
+ }
1213
+ }
905
1214
  }]
906
1215
  });
907
1216
 
908
1217
  case 3:
909
1218
  _yield$BaseClient$_ge5 = _context16.sent;
910
1219
  blog = _yield$BaseClient$_ge5.blog;
911
- return _context16.abrupt("return", blog.map(function (b) {
912
- return _objectSpread(_objectSpread({}, b), {}, {
913
- date: new Date(b.date)
914
- });
915
- }));
916
1220
 
917
- case 6:
1221
+ if (blog) {
1222
+ _context16.next = 7;
1223
+ break;
1224
+ }
1225
+
1226
+ return _context16.abrupt("return", null);
1227
+
1228
+ case 7:
1229
+ if (!(blog.__typename === "ErrorLangNotExist")) {
1230
+ _context16.next = 9;
1231
+ break;
1232
+ }
1233
+
1234
+ return _context16.abrupt("return", blog);
1235
+
1236
+ case 9:
1237
+ return _context16.abrupt("return", {
1238
+ __typename: "SuccessResponse",
1239
+ data: blog.blogItems.map(function (b) {
1240
+ return _objectSpread(_objectSpread({}, b), {}, {
1241
+ date: new Date(b.date)
1242
+ });
1243
+ })
1244
+ });
1245
+
1246
+ case 10:
918
1247
  case "end":
919
1248
  return _context16.stop();
920
1249
  }
@@ -1030,15 +1359,68 @@ export var BaseClient = /*#__PURE__*/function () {
1030
1359
  dbGet: [{
1031
1360
  field: field,
1032
1361
  userId: userId
1033
- }, true]
1362
+ }, {
1363
+ "...on ErrorAccessDenied": {
1364
+ __typename: true,
1365
+ message: true
1366
+ },
1367
+ "...on ErrorNotExist": {
1368
+ __typename: true,
1369
+ message: true
1370
+ },
1371
+ "...on ErrorNotFound": {
1372
+ __typename: true,
1373
+ message: true
1374
+ },
1375
+ "...on DbGetResponse": {
1376
+ __typename: true,
1377
+ json: true
1378
+ }
1379
+ }]
1034
1380
  });
1035
1381
 
1036
1382
  case 3:
1037
1383
  _yield$this$client8 = _context19.sent;
1038
1384
  dbGet = _yield$this$client8.dbGet;
1039
- return _context19.abrupt("return", dbGet.res);
1040
1385
 
1041
- case 6:
1386
+ if (dbGet) {
1387
+ _context19.next = 7;
1388
+ break;
1389
+ }
1390
+
1391
+ return _context19.abrupt("return", null);
1392
+
1393
+ case 7:
1394
+ if (!(dbGet.__typename === "ErrorAccessDenied")) {
1395
+ _context19.next = 9;
1396
+ break;
1397
+ }
1398
+
1399
+ return _context19.abrupt("return", dbGet);
1400
+
1401
+ case 9:
1402
+ if (!(dbGet.__typename === "ErrorNotExist")) {
1403
+ _context19.next = 11;
1404
+ break;
1405
+ }
1406
+
1407
+ return _context19.abrupt("return", dbGet);
1408
+
1409
+ case 11:
1410
+ if (!(dbGet.__typename === "ErrorNotFound")) {
1411
+ _context19.next = 13;
1412
+ break;
1413
+ }
1414
+
1415
+ return _context19.abrupt("return", dbGet);
1416
+
1417
+ case 13:
1418
+ return _context19.abrupt("return", {
1419
+ __typename: "SuccessResponse",
1420
+ data: dbGet.json
1421
+ });
1422
+
1423
+ case 14:
1042
1424
  case "end":
1043
1425
  return _context19.stop();
1044
1426
  }
@@ -1113,15 +1495,68 @@ export var BaseClient = /*#__PURE__*/function () {
1113
1495
  dbSearch: [{
1114
1496
  search: search,
1115
1497
  field: field
1116
- }, true]
1498
+ }, {
1499
+ "...on ErrorAccessDenied": {
1500
+ __typename: true,
1501
+ message: true
1502
+ },
1503
+ "...on ErrorBasic": {
1504
+ __typename: true,
1505
+ message: true
1506
+ },
1507
+ "...on ErrorNotExist": {
1508
+ __typename: true,
1509
+ message: true
1510
+ },
1511
+ "...on DbSearchResponse": {
1512
+ __typename: true,
1513
+ json: true
1514
+ }
1515
+ }]
1117
1516
  });
1118
1517
 
1119
1518
  case 3:
1120
1519
  _yield$this$client10 = _context21.sent;
1121
1520
  dbSearch = _yield$this$client10.dbSearch;
1521
+
1522
+ if (dbSearch) {
1523
+ _context21.next = 7;
1524
+ break;
1525
+ }
1526
+
1527
+ return _context21.abrupt("return", null);
1528
+
1529
+ case 7:
1530
+ if (!(dbSearch.__typename === "ErrorAccessDenied")) {
1531
+ _context21.next = 9;
1532
+ break;
1533
+ }
1534
+
1122
1535
  return _context21.abrupt("return", dbSearch);
1123
1536
 
1124
- case 6:
1537
+ case 9:
1538
+ if (!(dbSearch.__typename === "ErrorBasic")) {
1539
+ _context21.next = 11;
1540
+ break;
1541
+ }
1542
+
1543
+ return _context21.abrupt("return", dbSearch);
1544
+
1545
+ case 11:
1546
+ if (!(dbSearch.__typename === "ErrorNotExist")) {
1547
+ _context21.next = 13;
1548
+ break;
1549
+ }
1550
+
1551
+ return _context21.abrupt("return", dbSearch);
1552
+
1553
+ case 13:
1554
+ return _context21.abrupt("return", {
1555
+ __typename: "SuccessResponse",
1556
+ data: dbSearch.json
1557
+ });
1558
+
1559
+ case 14:
1125
1560
  case "end":
1126
1561
  return _context21.stop();
1127
1562
  }
@@ -1260,8 +1695,15 @@ export var BaseClient = /*#__PURE__*/function () {
1260
1695
  folderSize: [{
1261
1696
  folderId: folderId
1262
1697
  }, {
1263
- size: true,
1264
- sizeBefore: true
1698
+ "...on ErrorAccessDenied": {
1699
+ __typename: true,
1700
+ message: true
1701
+ },
1702
+ "...on FolderSizeResponse": {
1703
+ __typename: true,
1704
+ size: true,
1705
+ sizeBefore: true
1706
+ }
1265
1707
  }]
1266
1708
  });
1267
1709
 
@@ -1277,12 +1719,23 @@ export var BaseClient = /*#__PURE__*/function () {
1277
1719
  return _context25.abrupt("return", null);
1278
1720
 
1279
1721
  case 7:
1722
+ if (!(folderSize.__typename === "ErrorAccessDenied")) {
1723
+ _context25.next = 9;
1724
+ break;
1725
+ }
1726
+
1727
+ return _context25.abrupt("return", folderSize);
1728
+
1729
+ case 9:
1280
1730
  return _context25.abrupt("return", {
1281
- size: BigInt(folderSize.size),
1282
- sizeBefore: BigInt(folderSize.sizeBefore)
1731
+ __typename: "SuccessResponse",
1732
+ data: {
1733
+ size: BigInt(folderSize.size),
1734
+ sizeBefore: BigInt(folderSize.sizeBefore)
1735
+ }
1283
1736
  });
1284
1737
 
1285
- case 8:
1738
+ case 10:
1286
1739
  case "end":
1287
1740
  return _context25.stop();
1288
1741
  }
@@ -1321,12 +1774,20 @@ export var BaseClient = /*#__PURE__*/function () {
1321
1774
  return _context26.abrupt("return", null);
1322
1775
 
1323
1776
  case 6:
1777
+ if (!(me.__typename === "ErrorNotFound")) {
1778
+ _context26.next = 8;
1779
+ break;
1780
+ }
1781
+
1782
+ return _context26.abrupt("return", null);
1783
+
1784
+ case 8:
1324
1785
  return _context26.abrupt("return", getLink({
1325
1786
  app: "auth",
1326
- path: "/sign-up?gf=" + btoa(me.email) + "&au=" + btoa(backUrl)
1787
+ path: "/sign-up?gf=" + btoa(me.data.email) + "&au=" + btoa(backUrl)
1327
1788
  }));
1328
1789
 
1329
- case 7:
1790
+ case 9:
1330
1791
  case "end":
1331
1792
  return _context26.stop();
1332
1793
  }
@@ -1373,4 +1834,4 @@ BaseClient.getBaseUrl = function (env, graphcdn) {
1373
1834
  BaseClient._getBaseClient = function (env, session) {
1374
1835
  return createThunder(BaseClient.getBaseUrl(env), session);
1375
1836
  };
1376
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJpZCIsImZpcnN0bmFtZSIsImxhc3RuYW1lIiwibGFuZyIsInB1YmxpY0tleSIsInVuZGVmaW5lZCIsImVtYWlsIiwicGhvbmUiLCJyb2xlIiwiZGVsZXRlZEF0IiwibGFzdExvZ2luIiwiZ2V0VXNlciIsInBhcmFtcyIsInNlbGVjdG9yIiwiY2xpZW50IiwiQmFzZUNsaWVudCIsInNlc3Npb24iLCJlbnYiLCJzZXNzaW9uSWQiLCJfZ2V0QmFzZUNsaWVudCIsInNlc3Npb25zIiwibGFzdEFjdGl2aXR5IiwidXNlckFnZW50IiwiaXAiLCJjaXR5IiwiY291bnRyeSIsImFwcFNlc3Npb25zIiwidXNlckFwcCIsImFwcCIsIm5hbWUiLCJkYXRhIiwicyIsImEiLCJsb2dvdXQiLCJsb2NhbCIsImp3dCIsImNsZWFyIiwidXNlckFwcEtleXMiLCJ1c2VyQXBwU2Vzc2lvbiIsIm1lIiwic2V0IiwidXBkYXRlUHJvZmlsZSIsIkVycm9yIiwicGxhbnMiLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwicGxhbiIsInRvdGFsIiwicGRmIiwiY3VycmVuY3kiLCJjbG91ZCIsInNpemUiLCJtYXhTaXplIiwibWF4Q291bnQiLCJtYWlsIiwicmVjZWl2ZWQiLCJtYXhGaWxlQ291bnQiLCJtYXhGaWxlU2l6ZSIsInNlbnQiLCJCaWdJbnQiLCJnb2RGYXRoZXJBbmRDaGlsZHJlbiIsImdvZENoaWxkcmVuIiwiZ29kRmF0aGVyIiwidXBkYXRlQXBwREJDb25maWciLCJhcHBDb2RlIiwiY29uZmlnIiwiZGJDb25maWciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0QXBwREJDb25maWciLCJnZXRGQVEiLCJmYXEiLCJhbnN3ZXIiLCJvcmRlciIsInF1ZXN0aW9uIiwiZ2V0QmxvZyIsImJsb2ciLCJibG9nSWQiLCJhdXRob3IiLCJib2R5IiwiaW1hZ2UiLCJpbWFnZUFsdCIsInN1bW1hcnkiLCJ0aXRsZSIsImIiLCJyZXBvcnRVc2VyIiwicmVwb3J0ZWRVc2VySWQiLCJjdXN0b21NZXNzYWdlIiwic2VuZFJlcG9ydCIsInJlcG9ydGVkVXNlciIsImRlbGV0ZVVzZXIiLCJkYkdldCIsImZpZWxkIiwicmVzIiwiZGJTZXQiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiZGJTZWFyY2giLCJzZWFyY2giLCJkZWxldGVGb2xkZXIiLCJtb3ZlRm9sZGVycyIsImZvbGRlcnNJZCIsInBhcmVudEZvbGRlcklkIiwibW92ZUZpbGVzIiwiZmlsZXNJZCIsImZvbGRlclNpemUiLCJmb2xkZXJJZCIsInNpemVCZWZvcmUiLCJnZXRTcG9uc29yc2hpcExpbmsiLCJiYWNrVXJsIiwicGF0aCIsImJ0b2EiLCJnZXRCYXNlVXJsIiwiZ3JhcGhjZG4iLCJwcm9jZXNzIiwiTk9ERV9FTlYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsU0FBU0EsU0FBVCxRQUEwQixNQUExQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0Isb0JBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixZQUEzQjtBQUdBLFNBQVNDLFVBQVQsUUFBMkIscUJBQTNCO0FBUUEsU0FBU0MsUUFBVCxRQUF5QixpQkFBekI7QUFDQSxTQUFTQyxhQUFULFFBQThCLGtCQUE5Qjs7QUF5S0EsU0FBU0Msc0JBQVQsQ0FBZ0NDLENBQWhDLEVBQXVFO0FBQ3JFLHlDQUNLQSxDQURMO0FBRUVDLElBQUFBLG1CQUFtQixrQ0FDZEQsQ0FBQyxDQUFDQyxtQkFEWTtBQUVqQkMsTUFBQUEsS0FBSyxFQUFFRixDQUFDLENBQUNDLG1CQUFGLENBQXNCQyxLQUZaO0FBR2pCQyxNQUFBQSxnQkFBZ0IsRUFBRUgsQ0FBQyxDQUFDQyxtQkFBRixDQUNmRSxnQkFKYztBQUtqQkMsTUFBQUEsV0FBVyxFQUFFSixDQUFDLENBQUNDLG1CQUFGLENBQXNCRyxXQUF0QixHQUNULElBQUlDLElBQUosQ0FBU0wsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkcsV0FBL0IsQ0FEUyxHQUVULElBUGE7QUFRakJFLE1BQUFBLFNBQVMsRUFBRU4sQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkssU0FBdEIsR0FDUCxJQUFJRCxJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JLLFNBQS9CLENBRE8sR0FFUCxJQVZhO0FBV2pCQyxNQUFBQSxTQUFTLEVBQUVQLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JNLFNBQXRCLEdBQ1AsSUFBSUYsSUFBSixDQUFTTCxDQUFDLENB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QUFSLENBQVl1SCxRQUFaLEtBQXlCLE1BQTdCLEVBQXFDO0FBQ25DLFdBQU8sK0JBQVA7QUFDRDs7QUFFRCxVQUFRdkgsR0FBUjtBQUNFLFNBQUssTUFBTDtBQUNFLGFBQU9xSCxRQUFRLEdBQ1gsOEJBRFcsR0FFWCxnQ0FGSjs7QUFHRixTQUFLLFNBQUw7QUFDRSxhQUFPLHdDQUFQOztBQUNGLFNBQUssS0FBTDtBQUNBO0FBQ0UsYUFBTyxvQ0FBUDtBQVRKO0FBV0QsQzs7QUFwQlV2SCxVLENBc0JhSSxjLEdBQWlCLFVBQ3ZDRixHQUR1QyxFQUV2Q0QsT0FGdUM7QUFBQSxTQUl2Qy9DLGFBQWEsQ0FBQzhDLFVBQVUsQ0FBQ3NILFVBQVgsQ0FBc0JwSCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDQUowQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgYXMgRExQcm9ncmVzcyB9IGZyb20gXCJreVwiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgZ2V0TGluayB9IGZyb20gXCJAc2VjcmVjeS9saWItdXRpbHNcIjtcbmltcG9ydCB7IHVzZXJzQ2FjaGUgfSBmcm9tIFwiLi9jYWNoZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVc2VyU2Vzc2lvbiB9IGZyb20gXCIuL2NsaWVudC90eXBlcy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5RW52IH0gZnJvbSBcIi4vY2xpZW50L2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2UgfSBmcm9tIFwiLi9jbGllbnQvc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBMYW5nLFxuICBQYXlJbnB1dFR5cGUsXG4gIFBsYW5LaW5kLFxuICBUaHVuZGVyLFxuICBVc2VyUm9sZVxufSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNyZWF0ZVRodW5kZXIgfSBmcm9tIFwiLi9aZXVzVGh1bmRlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFJlY3VybHlJbnZvaWNlU3RhdHVzID1cbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicGFpZFwiXG4gIHwgXCJmYWlsZWRcIlxuICB8IFwicGFzdF9kdWVcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zZWRcIlxuICB8IFwidm9pZGVkXCJcbiAgfCBcInByb2Nlc3NpbmdcIjtcblxudHlwZSBJbnRlcm5hbFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgZHVlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZHVlOiBEYXRlO1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHA6IEludGVybmFsUGF5bWVudEluZm9zKTogUGF5bWVudEluZm9zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wLFxuICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgIC4uLnAuY3VycmVudFN1YnNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uc3RhdGUgYXMgU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBjb2xsZWN0aW9uTWV0aG9kOiBwLmN1cnJlbnRTdWJzY3JpcHRpb25cbiAgICAgICAgLmNvbGxlY3Rpb25NZXRob2QgYXMgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgICAgIGFjdGl2YXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHBhdXNlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNhbmNlbGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG4gICAgaW52b2ljZXM6IHAuaW52b2ljZXMubWFwKGkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBkYXRlOiBuZXcgRGF0ZShpLmRhdGUpLFxuICAgICAgZHVlOiBuZXcgRGF0ZShpLmR1ZSksXG4gICAgICBzdGF0dXM6IGkuc3RhdHVzIGFzIFJlY3VybHlJbnZvaWNlU3RhdHVzXG4gICAgfSkpXG4gIH07XG59XG5cbmNvbnN0IHBsYW5zQ29kZXMgPSBbXG4gIFwiYmFzaWNfbW9udGhcIixcbiAgXCJhZHZhbmNlZF9tb250aFwiLFxuICBcInByb19tb250aFwiLFxuICBcImJhc2ljX3llYXJcIixcbiAgXCJhZHZhbmNlZF95ZWFyXCIsXG4gIFwicHJvX3llYXJcIlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VjcmVjeVBsYW5zQ29kZXMgPSB0eXBlb2YgcGxhbnNDb2Rlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsYW4ocGxhbkNvZGU6IHN0cmluZyk6IHBsYW5Db2RlIGlzIFNlY3JlY3lQbGFuc0NvZGVzIHtcbiAgcmV0dXJuIHBsYW5zQ29kZXMuaW5jbHVkZXMocGxhbkNvZGUgYXMgU2VjcmVjeVBsYW5zQ29kZXMpO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRm9sZGVyU2l6ZSA9IHsgc2l6ZTogYmlnaW50OyBzaXplQmVmb3JlOiBiaWdpbnQgfTtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9yKFwiUXVlcnlcIikoe1xuICAgIHVzZXI6IFtcbiAgICAgIHsgdXNlcklkIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiB0cnVlLFxuICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICBwdWJsaWNLZXk6IHdpdGhQdWJsaWNLZXkgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgcmV0dXJuIHVzZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZ0ZpZWxkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcIm9iamVjdFwiO1xuICBpc0FycmF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0tleT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWcgPSB7XG4gIGZpZWxkczogQXBwREJDb25maWdGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgRmFxSXRlbSA9IHtcbiAgb3JkZXI6IG51bWJlcjtcbiAgcXVlc3Rpb246IHN0cmluZztcbiAgYW5zd2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCbG9nSXRlbSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYmxvZ0lkOiBzdHJpbmc7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGRhdGU6IERhdGU7XG4gIGltYWdlOiBzdHJpbmc7XG4gIGltYWdlQWx0OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJCYXNlID0ge1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICByb2xlOiBVc2VyUm9sZTtcbiAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGRlbGV0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGxhc3RMb2dpbjogRGF0ZTtcbiAgbGFuZzogTGFuZztcbn07XG5cbnR5cGUgV2l0aFB1YmxpY0tleSA9IHsgd2l0aFB1YmxpY0tleT86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVXNlcjxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+ID0gVCBleHRlbmRzIHtcbiAgd2l0aFB1YmxpY0tleTogdHJ1ZTtcbn1cbiAgPyBVc2VyQmFzZSAmIHsgcHVibGljS2V5OiBzdHJpbmcgfVxuICA6IFVzZXJCYXNlO1xuXG50eXBlIENsYXNzR2V0VXNlclBhcmFtcyA9IFdpdGhQdWJsaWNLZXkgJiB7XG4gIHVzZXJJZD86IHN0cmluZztcbn07XG50eXBlIEdldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG59O1xuXG50eXBlIFN0YXRpY0dldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGVudjogU2VjcmVjeUVudjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXI8VSBleHRlbmRzIFdpdGhQdWJsaWNLZXk+KFxuICBwYXJhbXM6IEdldFVzZXJQYXJhbXNcbik6IFByb21pc2U8VXNlcjxVPiB8IG51bGw+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRVc2VyU2VsZWN0b3IocGFyYW1zLnVzZXJJZCwgcGFyYW1zLndpdGhQdWJsaWNLZXkpO1xuICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHBhcmFtcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgdXNlcjogc2VsZWN0b3JcbiAgfSk7XG5cbiAgaWYgKCF1c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnVzZXIsXG4gICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1c2VyLmxhc3RMb2dpbiksXG4gICAgZGVsZXRlZEF0OiB1c2VyLmRlbGV0ZWRBdCA/IG5ldyBEYXRlKHVzZXIuZGVsZXRlZEF0KSA6IG51bGxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvdWRMaW1pdHMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBzaXplOiBiaWdpbnQ7XG4gIG1heFNpemU6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzVmFsdWVzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgZmlsZVNpemU6IGJpZ2ludDtcbiAgbWF4RmlsZVNpemU6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVDb3VudDogYmlnaW50O1xuICBtYXhGaWxlQ291bnQ6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUxpbWl0cyA9IHtcbiAgY2xvdWQ6IENsb3VkTGltaXRzO1xuICBtYWlsOiB7XG4gICAgc2VudDogTWFpbExpbWl0c1ZhbHVlcztcbiAgICByZWNlaXZlZDogTWFpbExpbWl0c1ZhbHVlcztcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBnZXRCYXNlVXJsID0gKFxuICAgIGVudjogU2VjcmVjeUVudiA9IFwicHJvZFwiLFxuICAgIGdyYXBoY2RuID0gdHJ1ZVxuICApOiBzdHJpbmcgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHJldHVybiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDAwMC9ncmFwaHFsXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnYpIHtcbiAgICAgIGNhc2UgXCJwcm9kXCI6XG4gICAgICAgIHJldHVybiBncmFwaGNkblxuICAgICAgICAgID8gXCJodHRwczovL3NlY3JlY3kuZ3JhcGhjZG4uYXBwXCJcbiAgICAgICAgICA6IFwiaHR0cHM6Ly9hcGkuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwic3RhZ2luZ1wiOlxuICAgICAgICByZXR1cm4gXCJodHRwczovL2FwaS5zdGFnaW5nLnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgICAgY2FzZSBcImRldlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9hcGkuZGV2LnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZ2V0QmFzZUNsaWVudCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj4gPT5cbiAgICBjcmVhdGVUaHVuZGVyKEJhc2VDbGllbnQuZ2V0QmFzZVVybChlbnYpLCBzZXNzaW9uKTtcblxuICBwcm90ZWN0ZWQgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcblxuICBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2Vzc2lvbjogc3RyaW5nLCBlbnY6IFNlY3JlY3lFbnYpIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb247XG4gICAgdGhpcy5jbGllbnQgPSBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbik7XG4gIH1cblxuICBhc3luYyBzZXNzaW9ucygpOiBQcm9taXNlPFVzZXJTZXNzaW9uW10+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgc2Vzc2lvbnM6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0cnVlLFxuICAgICAgICAgICAgdXNlckFnZW50OiB0cnVlLFxuICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICBjaXR5OiB0cnVlLFxuICAgICAgICAgICAgY291bnRyeTogdHJ1ZSxcbiAgICAgICAgICAgIGFwcFNlc3Npb25zOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRydWUsXG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICAgIGNpdHk6IHRydWUsXG4gICAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICAgIHVzZXJBcHA6IHtcbiAgICAgICAgICAgICAgICBhcHA6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNlc3Npb25zOiBVc2VyU2Vzc2lvbltdID1cbiAgICAgIGRhdGEudXNlcj8uc2Vzc2lvbnMubWFwKHMgPT4gKHtcbiAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgIGlwOiBzLmlwLFxuICAgICAgICBjaXR5OiBzLmNpdHksXG4gICAgICAgIGNvdW50cnk6IHMuY291bnRyeSxcbiAgICAgICAgbGFzdEFjdGl2aXR5OiBzLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKHMubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXNlckFnZW50OiBzLnVzZXJBZ2VudCxcbiAgICAgICAgYXBwU2Vzc2lvbnM6IHMuYXBwU2Vzc2lvbnMubWFwKGEgPT4gKHtcbiAgICAgICAgICBpZDogYS5pZCxcbiAgICAgICAgICBpcDogYS5pcCxcbiAgICAgICAgICBjaXR5OiBhLmNpdHksXG4gICAgICAgICAgY291bnRyeTogYS5jb3VudHJ5LFxuICAgICAgICAgIGxhc3RBY3Rpdml0eTogYS5sYXN0QWN0aXZpdHkgPyBuZXcgRGF0ZShhLmxhc3RBY3Rpdml0eSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdXNlckFnZW50OiBhLnVzZXJBZ2VudCxcbiAgICAgICAgICBhcHA6IGEudXNlckFwcD8uYXBwLm5hbWUgPz8gXCJcIlxuICAgICAgICB9KSlcbiAgICAgIH0pKSA/PyBbXTtcblxuICAgIHJldHVybiBzZXNzaW9ucztcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0U3RvcmFnZShmYWxzZSk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gZ2V0U3RvcmFnZSh0cnVlKTtcbiAgICAgIGxvY2FsLmp3dC5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLmp3dC5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgdXNlcnNDYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIGxvZ291dDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlc3Npb25JZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWU8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PihcbiAgICBwYXJhbXM/OiBUXG4gICk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyKHBhcmFtcyB8fCAoeyB3aXRoUHVibGljS2V5OiB0cnVlIH0gYXMgVCkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVzZXI8VCBleHRlbmRzIFN0YXRpY0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVCxcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuX2dldEJhc2VDbGllbnQocGFyYW1zLmVudiwgc2Vzc2lvbklkKSxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCxcbiAgICAgIHdpdGhQdWJsaWNLZXk6IHBhcmFtcy53aXRoUHVibGljS2V5XG4gICAgfSk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5pZCwgdXNlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1c2VyPFQgZXh0ZW5kcyBDbGFzc0dldFVzZXJQYXJhbXM+KHBhcmFtczogVCk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmlkLCB1c2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVByb2ZpbGUoe1xuICAgIGZpcnN0bmFtZSxcbiAgICBsYXN0bmFtZSxcbiAgICBsYW5nXG4gIH06IHtcbiAgICBmaXJzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZzogTGFuZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFVzZXI+IHtcbiAgICBjb25zdCB7IHVwZGF0ZVByb2ZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlUHJvZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlyc3RuYW1lLFxuICAgICAgICAgIGxhc3RuYW1lLFxuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgIHBob25lOiB0cnVlLFxuICAgICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgIGxhc3RMb2dpbjogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi51cGRhdGVQcm9maWxlLFxuICAgICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1cGRhdGVQcm9maWxlLmxhc3RMb2dpbiksXG4gICAgICBkZWxldGVkQXQ6IHVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUodXBkYXRlUHJvZmlsZS5kZWxldGVkQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGxhbnMoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxQbGFuW10+IHtcbiAgICBjb25zdCB7IHBsYW5zIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIHBsYW5zOiB7XG4gICAgICAgIGtpbmQ6IHRydWUsXG4gICAgICAgIGNvZGVzOiB0cnVlLFxuICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICBkb3dubG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICBkb3dubG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgIHVwbG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICB1cGxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICByZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgaGFyZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZW50TWFpbHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwbGFucztcbiAgfVxuXG4gIGFzeW5jIHBheShcbiAgICBwbGFuQ29kZTogU2VjcmVjeVBsYW5zQ29kZXMsXG4gICAgaW5wdXQ6IFBheUlucHV0LFxuICAgIGF1dG9SZW5ldz86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcGF5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHBheTogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcGxhbkNvZGUsXG4gICAgICAgICAgYXV0b1JlbmV3XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXkgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBjYW5jZWxQYXltZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgY2FuY2VsUGF5bWVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBjYW5jZWxQYXltZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FuY2VsUGF5bWVudCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHBheW1lbnRJbmZvcygpOiBQcm9taXNlPFBheW1lbnRJbmZvcyB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBheW1lbnRJbmZvcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgaG9zdGVkVXJsOiB0cnVlLFxuICAgICAgICBjdXJyZW50U3Vic2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXV0b3JlbmV3OiB0cnVlLFxuICAgICAgICAgIGFjdGl2YXRlZEF0OiB0cnVlLFxuICAgICAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxlZEF0OiB0cnVlLFxuICAgICAgICAgIGNyZWF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBleHBpcmVzQXQ6IHRydWUsXG4gICAgICAgICAgcGF1c2VkQXQ6IHRydWUsXG4gICAgICAgICAgdHJpYWxFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgdHJpYWxTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgdXBkYXRlZEF0OiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHRydWUsXG4gICAgICAgICAgcGxhbjogdHJ1ZSxcbiAgICAgICAgICBwbGFuQ29kZTogdHJ1ZSxcblxuICAgICAgICAgIHRvdGFsOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGludm9pY2VzOiB7XG4gICAgICAgICAgcGRmOiB0cnVlLFxuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgZHVlOiB0cnVlLFxuICAgICAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgICAgICB0b3RhbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgIGN1cnJlbmN5OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGF5bWVudEluZm9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJuYWxUb1BheW1lbnRJbmZvcyhwYXltZW50SW5mb3MpO1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8UXVlcnlMaW1pdHMgfCBudWxsPiB7XG4gICAgY29uc3QgeyBsaW1pdHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgbGltaXRzOiB7XG4gICAgICAgIGNsb3VkOiB7XG4gICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICBtYXhTaXplOiB0cnVlLFxuICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgIG1heENvdW50OiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG1haWw6IHtcbiAgICAgICAgICByZWNlaXZlZDoge1xuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWxpbWl0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjbG91ZCwgbWFpbCB9ID0gbGltaXRzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3VkOiB7XG4gICAgICAgIGNvdW50OiBCaWdJbnQoY2xvdWQuY291bnQpLFxuICAgICAgICBzaXplOiBCaWdJbnQoY2xvdWQuc2l6ZSksXG4gICAgICAgIG1heENvdW50OiBjbG91ZC5tYXhDb3VudCA/IEJpZ0ludChjbG91ZC5tYXhDb3VudCkgOiBudWxsLFxuICAgICAgICBtYXhTaXplOiBjbG91ZC5tYXhTaXplID8gQmlnSW50KGNsb3VkLm1heFNpemUpIDogbnVsbFxuICAgICAgfSxcbiAgICAgIG1haWw6IHtcbiAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuY291bnQpLFxuICAgICAgICAgIG1heENvdW50OiBtYWlsLnJlY2VpdmVkLm1heENvdW50XG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heENvdW50KVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGZpbGVDb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZUNvdW50KSxcbiAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwucmVjZWl2ZWQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBmaWxlU2l6ZTogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZVNpemUpLFxuICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplXG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHNlbnQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwuc2VudC5jb3VudCksXG4gICAgICAgICAgbWF4Q291bnQ6IG1haWwuc2VudC5tYXhDb3VudCA/IEJpZ0ludChtYWlsLnNlbnQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICBmaWxlQ291bnQ6IEJpZ0ludChtYWlsLnNlbnQuZmlsZUNvdW50KSxcbiAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwuc2VudC5tYXhGaWxlQ291bnRcbiAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnNlbnQuZmlsZVNpemUpLFxuICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnNlbnQubWF4RmlsZVNpemVcbiAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlU2l6ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdvZEZhdGhlckFuZENoaWxkcmVuKCk6IFByb21pc2U8R29kRmF0aGVyQW5kQ2hpbGRyZW4gfCBudWxsPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBnb2RDaGlsZHJlbjoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdvZEZhdGhlcjoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVzZXIsXG4gICAgICBnb2RGYXRoZXI6IHVzZXIuZ29kRmF0aGVyID8/IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVwZGF0ZUFwcERCQ29uZmlnKHtcbiAgICBhcHBDb2RlLFxuICAgIGNvbmZpZyxcbiAgICBlbnYsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBhcHBDb2RlOiBzdHJpbmc7XG4gICAgY29uZmlnOiBBcHBEQkNvbmZpZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8QXBwREJDb25maWc+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiQ29uZmlnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlLFxuICAgICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJDb25maWc7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QXBwREJDb25maWcoXG4gICAgYXBwQ29kZTogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8QXBwREJDb25maWc+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcInF1ZXJ5XCIpKHtcbiAgICAgIGRiQ29uZmlnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYkNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRGQVEoe1xuICAgIGxhbmcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgbGFuZz86IExhbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEZhcUl0ZW1bXT4ge1xuICAgIGNvbnN0IHsgZmFxIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIGZhcTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYW5zd2VyOiB0cnVlLFxuICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgIHF1ZXN0aW9uOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBmYXE7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QmxvZyh7XG4gICAgZW52LFxuICAgIGxhbmcsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgbGFuZz86IExhbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPEJsb2dJdGVtW10+IHtcbiAgICBjb25zdCB7IGJsb2cgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpKFwicXVlcnlcIikoe1xuICAgICAgYmxvZzogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgYmxvZ0lkOiB0cnVlLFxuICAgICAgICAgIGF1dGhvcjogdHJ1ZSxcbiAgICAgICAgICBib2R5OiB0cnVlLFxuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgaW1hZ2U6IHRydWUsXG4gICAgICAgICAgaW1hZ2VBbHQ6IHRydWUsXG4gICAgICAgICAgc3VtbWFyeTogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogdHJ1ZSxcbiAgICAgICAgICBvcmRlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmxvZy5tYXAoYiA9PiAoeyAuLi5iLCBkYXRlOiBuZXcgRGF0ZShiLmRhdGUpIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHJlcG9ydFVzZXIoXG4gICAgcmVwb3J0ZWRVc2VySWQ6IHN0cmluZyxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8U2VuZFJlcG9ydCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kUmVwb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVVzZXIoe1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVVc2VyIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZVVzZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVsZXRlVXNlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRiR2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8VT4ge1xuICAgIGNvbnN0IHsgZGJHZXQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJHZXQucmVzO1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYlNldC5yZXM7XG4gIH1cblxuICBhc3luYyBkYlNlYXJjaDxUPih7XG4gICAgc2VhcmNoLFxuICAgIGZpZWxkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCB7IGRiU2VhcmNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGRiU2VhcmNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZWFyY2gsXG4gICAgICAgICAgZmllbGRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRiU2VhcmNoO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRm9sZGVyKHsgaWQgfTogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUZvbGRlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVGb2xkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWxldGVGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBtb3ZlRm9sZGVycyh7XG4gICAgZm9sZGVyc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgbW92ZUZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZUZvbGRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcnNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW92ZUZvbGRlcnMgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBtb3ZlRmlsZXMoe1xuICAgIGZpbGVzSWQsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIGZpbGVzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgbW92ZUZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVGaWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZXNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW92ZUZpbGVzID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZm9sZGVyU2l6ZSh7XG4gICAgZm9sZGVySWRcbiAgfToge1xuICAgIGZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Rm9sZGVyU2l6ZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZvbGRlclNpemUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZm9sZGVyU2l6ZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgc2l6ZUJlZm9yZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzaXplOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplKSxcbiAgICAgIHNpemVCZWZvcmU6IEJpZ0ludChmb2xkZXJTaXplLnNpemVCZWZvcmUpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFNwb25zb3JzaGlwTGluayh7XG4gICAgYmFja1VybFxuICB9OiB7XG4gICAgYmFja1VybDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbWUgPSBhd2FpdCB0aGlzLm1lKHsgd2l0aFB1YmxpY0tleTogZmFsc2UgfSk7XG5cbiAgICBpZiAoIW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0TGluayh7XG4gICAgICBhcHA6IFwiYXV0aFwiLFxuICAgICAgcGF0aDogYC9zaWduLXVwP2dmPSR7YnRvYShtZS5lbWFpbCl9JmF1PSR7YnRvYShiYWNrVXJsKX1gXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
1837
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsImNsaWVudCIsInVzZXJSZXNwb25zZSIsImRhdGEiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsInMiLCJhIiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJFcnJvciIsInBsYW5zIiwicGxhbiIsImtpbmQiLCJjb2RlcyIsImxpbWl0cyIsImRvd25sb2FkQmFuZHdpZHRoIiwiZG93bmxvYWRDb3VudCIsImhhcmRGaWxlQ291bnQiLCJoYXJkRmlsZVNpemUiLCJwZXJGaWxlU2l6ZSIsInVwbG9hZEJhbmR3aWR0aCIsInVwbG9hZENvdW50IiwicmVjZWl2ZWRNYWlscyIsImNvdW50IiwiZmlsZUNvdW50IiwiZmlsZVNpemUiLCJoYXJkQ291bnQiLCJzZW50TWFpbHMiLCJwYXkiLCJpbnB1dCIsImF1dG9SZW5ldyIsImNhbmNlbFBheW1lbnQiLCJwYXltZW50SW5mb3MiLCJob3N0ZWRVcmwiLCJhdXRvcmVuZXciLCJ0b3RhbCIsInBkZiIsImN1cnJlbmN5IiwicmVzdWx0IiwiY2xvdWQiLCJzaXplIiwibWF4U2l6ZSIsIm1heENvdW50IiwibWFpbCIsInJlY2VpdmVkIiwibWF4RmlsZUNvdW50IiwibWF4RmlsZVNpemUiLCJzZW50IiwiQmlnSW50IiwiZ29kRmF0aGVyQW5kQ2hpbGRyZW4iLCJnb2RDaGlsZHJlbiIsImdvZEZhdGhlciIsInVwZGF0ZUFwcERCQ29uZmlnIiwiYXBwQ29kZSIsImNvbmZpZyIsImRiQ29uZmlnIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwianNvbiIsImdldEZBUSIsImZhcSIsImFuc3dlciIsIm9yZGVyIiwicXVlc3Rpb24iLCJnZXRCbG9nIiwiYmxvZyIsImJsb2dJdGVtcyIsImJsb2dJZCIsImF1dGhvciIsImJvZHkiLCJpbWFnZSIsImltYWdlQWx0Iiwic3VtbWFyeSIsInRpdGxlIiwiYiIsInJlcG9ydFVzZXIiLCJyZXBvcnRlZFVzZXJJZCIsImN1c3RvbU1lc3NhZ2UiLCJzZW5kUmVwb3J0IiwicmVwb3J0ZWRVc2VyIiwiZGVsZXRlVXNlciIsImRiR2V0IiwiZGJTZXQiLCJ2YWx1ZSIsInRvU3RyaW5nIiwicmVzIiwiZGJTZWFyY2giLCJzZWFyY2giLCJkZWxldGVGb2xkZXIiLCJtb3ZlRm9sZGVycyIsImZvbGRlcnNJZCIsInBhcmVudEZvbGRlcklkIiwibW92ZUZpbGVzIiwiZmlsZXNJZCIsImZvbGRlclNpemUiLCJmb2xkZXJJZCIsInNpemVCZWZvcmUiLCJnZXRTcG9uc29yc2hpcExpbmsiLCJiYWNrVXJsIiwicGF0aCIsImJ0b2EiLCJnZXRCYXNlVXJsIiwiZ3JhcGhjZG4iLCJwcm9jZXNzIiwiTk9ERV9FTlYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFHQSxTQUFTQSxTQUFULFFBQTBCLE1BQTFCO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixvQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLFlBQTNCO0FBR0EsU0FBU0MsVUFBVCxRQUEyQixxQkFBM0I7QUFRQSxTQUFTQyxRQUFULFFBQXlCLGlCQUF6QjtBQUNBLFNBQVNDLGFBQVQsUUFBOEIsa0JBQTlCOztBQXNMQSxTQUFTQyxzQkFBVCxDQUFnQ0MsQ0FBaEMsRUFBdUU7QUFDckUseUNBQ0tBLENBREw7QUFFRUMsSUFBQUEsbUJBQW1CLGtDQUNkRCxDQUFDLENBQUNDLG1CQURZO0FBRWpCQyxNQUFBQSxLQUFLLEVBQUVGLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JDLEtBRlo7QUFHakJDLE1BQUFBLGdCQUFnQixFQUFFSCxDQUFDLENBQUNDLG1CQUFGLENBQ2ZFLGdCQUpjO0FBS2pCQyxNQUFBQSxXQUFXLEVBQUVKLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JHLFdBQXRCLEdBQ1QsSUFBSUMsSUFBSixDQUFTTCxDQUFDLENBQUNDLG1CQUFGLENBQXNCRyxXQUEvQixDQURTLEdBRVQsSUFQYTtBQVFqQkUsTUFBQUEsU0FBUyxFQUFFTixDQUFDLENBQUNDLG1CQUFGLENBQXNCSyxTQUF0QixHQUNQLElBQUlELElBQUosQ0FBU0wsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkssU0FBL0IsQ0FETyxHQUVQLElBVmE7QUFXakJDLE1BQUFB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cUM7QUFDbkMsV0FBTywrQkFBUDtBQUNEOztBQUVELFVBQVF4SCxHQUFSO0FBQ0UsU0FBSyxNQUFMO0FBQ0UsYUFBT3NILFFBQVEsR0FDWCw4QkFEVyxHQUVYLGdDQUZKOztBQUdGLFNBQUssU0FBTDtBQUNFLGFBQU8sd0NBQVA7O0FBQ0YsU0FBSyxLQUFMO0FBQ0E7QUFDRSxhQUFPLG9DQUFQO0FBVEo7QUFXRCxDOztBQXBCVXhILFUsQ0FzQmFJLGMsR0FBaUIsVUFDdkNGLEdBRHVDLEVBRXZDRCxPQUZ1QztBQUFBLFNBSXZDcEQsYUFBYSxDQUFDbUQsVUFBVSxDQUFDdUgsVUFBWCxDQUFzQnJILEdBQXRCLENBQUQsRUFBNkJELE9BQTdCLENBSjBCO0FBQUEsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIGFzIERMUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCB0eXBlIHsgRG9jdW1lbnQgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgc2VyaWFsaXplIH0gZnJvbSBcImJzb25cIjtcbmltcG9ydCB7IGdldExpbmsgfSBmcm9tIFwiQHNlY3JlY3kvbGliLXV0aWxzXCI7XG5pbXBvcnQgeyB1c2Vyc0NhY2hlIH0gZnJvbSBcIi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgVXNlclNlc3Npb24gfSBmcm9tIFwiLi9jbGllbnQvdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgU2VjcmVjeUVudiB9IGZyb20gXCIuL2NsaWVudC9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIi4vY2xpZW50L3N0b3JhZ2UuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTGFuZyxcbiAgUGF5SW5wdXRUeXBlLFxuICBQbGFuS2luZCxcbiAgVGh1bmRlcixcbiAgVXNlclJvbGVcbn0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVUaHVuZGVyIH0gZnJvbSBcIi4vWmV1c1RodW5kZXIuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRXJyb3JBY2Nlc3NEZW5pZWQsXG4gIEVycm9yTGltaXQsXG4gIEVycm9yTm90Rm91bmQsXG4gIEVycm9yTm90RXhpc3QsXG4gIEVycm9yTGFuZ05vdEV4aXN0LFxuICBFcnJvckJhc2ljXG59IGZyb20gXCIuL2Vycm9yLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFN1Y2Nlc3NSZXNwb25zZTxUPiA9IHtcbiAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIjtcbiAgZGF0YTogVDtcbn07XG5cbmV4cG9ydCB0eXBlIERvd25sb2FkUHJvZ3Jlc3MgPSBETFByb2dyZXNzO1xuXG5leHBvcnQgdHlwZSBQYXlJbnB1dCA9IHtcbiAgdHlwZTogUGF5SW5wdXRUeXBlO1xuICB0b2tlbjogc3RyaW5nO1xuICBmaXJzdE5hbWU6IHN0cmluZztcbiAgbGFzdE5hbWU6IHN0cmluZztcbiAgc3RyZWV0OiBzdHJpbmc7XG4gIHBvc3RhbENvZGU6IHN0cmluZztcbiAgY2l0eTogc3RyaW5nO1xuICBjb3VudHJ5OiBzdHJpbmc7XG4gIG1vbnRoOiBzdHJpbmc7XG4gIHllYXI6IHN0cmluZztcbiAgY3Z2OiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTWFpbExpbWl0cyA9IHtcbiAgY291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFyZEZpbGVDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaGFyZEZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwZXJGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIExpbWl0cyA9IHtcbiAgZG93bmxvYWRCYW5kd2lkdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRvd25sb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlY2VpdmVkTWFpbHM6IE1haWxMaW1pdHM7XG4gIHNlbnRNYWlsczogTWFpbExpbWl0cztcbiAgdXBsb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB1cGxvYWRDb3VudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIEdvZFVzZXIgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGZpcnN0bmFtZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgR29kRmF0aGVyQW5kQ2hpbGRyZW4gPSB7XG4gIGdvZEZhdGhlcjogR29kVXNlciB8IG51bGw7XG4gIGdvZENoaWxkcmVuOiBHb2RVc2VyW107XG59O1xuXG5leHBvcnQgdHlwZSBQbGFuID0ge1xuICBjb2Rlczogc3RyaW5nW107XG4gIGtpbmQ6IFBsYW5LaW5kO1xuICBsaW1pdHM6IExpbWl0cztcbn07XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvblN0YXRlID1cbiAgfCBcImFjdGl2ZVwiXG4gIHwgXCJjYW5jZWxlZFwiXG4gIHwgXCJwYXVzZWRcIlxuICB8IFwiZXhwaXJlZFwiXG4gIHwgXCJmdXR1cmVcIlxuICB8IFwiaW5fdHJpYWxcIlxuICB8IFwibGl2ZVwiXG4gIHwgXCJwYXN0X2R1ZVwiO1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25Db2xsZWN0aW9uTWV0aG9kID0gXCJhdXRvbWF0aWNcIiB8IFwibWFudWFsXCI7XG5cbnR5cGUgSW50ZXJuYWxTdWJzY3JpcHRpb24gPSB7XG4gIGF1dG9yZW5ldzogYm9vbGVhbjtcbiAgYWN0aXZhdGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjdXJyZW50UGVyaW9kRW5kc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNhbmNlbGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXVzZWRBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsRW5kc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB1cGRhdGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjb2xsZWN0aW9uTWV0aG9kOiBzdHJpbmc7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIHBsYW4/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwbGFuQ29kZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRvdGFsPzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbn07XG5cbnR5cGUgUmVjdXJseUludm9pY2VTdGF0dXMgPVxuICB8IFwicGVuZGluZ1wiXG4gIHwgXCJwYWlkXCJcbiAgfCBcImZhaWxlZFwiXG4gIHwgXCJwYXN0X2R1ZVwiXG4gIHwgXCJvcGVuXCJcbiAgfCBcImNsb3NlZFwiXG4gIHwgXCJ2b2lkZWRcIlxuICB8IFwicHJvY2Vzc2luZ1wiO1xuXG50eXBlIEludGVybmFsUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogc3RyaW5nO1xuICBkdWU6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHRvdGFsOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgY3VycmVuY3k6IHN0cmluZztcbn07XG5cbnR5cGUgSW50ZXJuYWxQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBJbnRlcm5hbFN1YnNjcmlwdGlvbjtcbiAgaW52b2ljZXM6IEludGVybmFsUmVjdXJseUludm9pY2VzW107XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gIGF1dG9yZW5ldzogYm9vbGVhbjtcbiAgYWN0aXZhdGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjdXJyZW50UGVyaW9kU3RhcnRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNhbmNlbGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGV4cGlyZXNBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXVzZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB1cGRhdGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZDtcbiAgc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBSZWN1cmx5SW52b2ljZXMgPSB7XG4gIHBkZjogc3RyaW5nO1xuICBkYXRlOiBEYXRlO1xuICBkdWU6IERhdGU7XG4gIHN0YXR1czogUmVjdXJseUludm9pY2VTdGF0dXM7XG4gIHRvdGFsOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgY3VycmVuY3k6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFBheW1lbnRJbmZvcyA9IHtcbiAgaG9zdGVkVXJsOiBzdHJpbmc7XG4gIGN1cnJlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgaW52b2ljZXM6IFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU2VuZFJlcG9ydCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXNlcjoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gICAgbGFzdG5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICB9O1xuICByZXBvcnRlZFVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIGludGVybmFsVG9QYXltZW50SW5mb3MocDogSW50ZXJuYWxQYXltZW50SW5mb3MpOiBQYXltZW50SW5mb3Mge1xuICByZXR1cm4ge1xuICAgIC4uLnAsXG4gICAgY3VycmVudFN1YnNjcmlwdGlvbjoge1xuICAgICAgLi4ucC5jdXJyZW50U3Vic2NyaXB0aW9uLFxuICAgICAgc3RhdGU6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5zdGF0ZSBhcyBTdWJzY3JpcHRpb25TdGF0ZSxcbiAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHAuY3VycmVudFN1YnNjcmlwdGlvblxuICAgICAgICAuY29sbGVjdGlvbk1ldGhvZCBhcyBTdWJzY3JpcHRpb25Db2xsZWN0aW9uTWV0aG9kLFxuICAgICAgYWN0aXZhdGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5hY3RpdmF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5hY3RpdmF0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY3JlYXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3JlYXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgdXBkYXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udXBkYXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgdHJpYWxFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbEVuZHNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbEVuZHNBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgdHJpYWxTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbFN0YXJ0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi50cmlhbFN0YXJ0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgcGF1c2VkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5wYXVzZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5wYXVzZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY3VycmVudFBlcmlvZEVuZHNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3VycmVudFBlcmlvZEVuZHNBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uY3VycmVudFBlcmlvZFN0YXJ0ZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgY2FuY2VsZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uY2FuY2VsZWRBdClcbiAgICAgICAgOiBudWxsLFxuICAgICAgZXhwaXJlc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uZXhwaXJlc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcbiAgICBpbnZvaWNlczogcC5pbnZvaWNlcy5tYXAoaSA9PiAoe1xuICAgICAgLi4uaSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKGkuZGF0ZSksXG4gICAgICBkdWU6IG5ldyBEYXRlKGkuZHVlKSxcbiAgICAgIHN0YXR1czogaS5zdGF0dXMgYXMgUmVjdXJseUludm9pY2VTdGF0dXNcbiAgICB9KSlcbiAgfTtcbn1cblxuY29uc3QgcGxhbnNDb2RlcyA9IFtcbiAgXCJiYXNpY19tb250aFwiLFxuICBcImFkdmFuY2VkX21vbnRoXCIsXG4gIFwicHJvX21vbnRoXCIsXG4gIFwiYmFzaWNfeWVhclwiLFxuICBcImFkdmFuY2VkX3llYXJcIixcbiAgXCJwcm9feWVhclwiXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBTZWNyZWN5UGxhbnNDb2RlcyA9IHR5cGVvZiBwbGFuc0NvZGVzW251bWJlcl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUGxhbihwbGFuQ29kZTogc3RyaW5nKTogcGxhbkNvZGUgaXMgU2VjcmVjeVBsYW5zQ29kZXMge1xuICByZXR1cm4gcGxhbnNDb2Rlcy5pbmNsdWRlcyhwbGFuQ29kZSBhcyBTZWNyZWN5UGxhbnNDb2Rlcyk7XG59XG5cbmV4cG9ydCB0eXBlIFVzZXJEYXRhPFxuICBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuPiA9IHtcbiAgaXNTdXBlcnVzZXI6IGJvb2xlYW47XG4gIGlzU2VhcmNoYWJsZTogYm9vbGVhbjtcbn0gJiBUO1xuXG5leHBvcnQgdHlwZSBGb2xkZXJTaXplID0geyBzaXplOiBiaWdpbnQ7IHNpemVCZWZvcmU6IGJpZ2ludCB9O1xuXG5jb25zdCBnZXRVc2VyU2VsZWN0b3IgPSAoXG4gIHVzZXJJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgd2l0aFB1YmxpY0tleTogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKSA9PiB7XG4gIGNvbnN0IHsgdXNlciB9ID0gU2VsZWN0b3IoXCJRdWVyeVwiKSh7XG4gICAgdXNlcjogW1xuICAgICAgeyB1c2VySWQgfSxcbiAgICAgIHtcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWUsXG4gICAgICAgICAgZmllbGQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHdpdGhQdWJsaWNLZXkgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVkQXQ6IHRydWUsXG4gICAgICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICByZXR1cm4gdXNlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERCQ29uZmlnRmllbGQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwib2JqZWN0XCI7XG4gIGlzQXJyYXk/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc051bGxhYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNFZGl0YWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzS2V5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdD86IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZyA9IHtcbiAgZmllbGRzOiBBcHBEQkNvbmZpZ0ZpZWxkW107XG59O1xuXG5leHBvcnQgdHlwZSBGYXFJdGVtID0ge1xuICBvcmRlcjogbnVtYmVyO1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICBhbnN3ZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEJsb2dJdGVtID0ge1xuICBpZDogc3RyaW5nO1xuICBibG9nSWQ6IHN0cmluZztcbiAgb3JkZXI6IG51bWJlcjtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgaW1hZ2U6IHN0cmluZztcbiAgaW1hZ2VBbHQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXNlckJhc2UgPSB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGxhc3RuYW1lOiBzdHJpbmc7XG4gIHJvbGU6IFVzZXJSb2xlO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgZGVsZXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgbGFzdExvZ2luOiBEYXRlO1xuICBsYW5nOiBMYW5nO1xufTtcblxudHlwZSBXaXRoUHVibGljS2V5ID0geyB3aXRoUHVibGljS2V5PzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBVc2VyPFQgZXh0ZW5kcyBXaXRoUHVibGljS2V5ID0gV2l0aFB1YmxpY0tleT4gPSBUIGV4dGVuZHMge1xuICB3aXRoUHVibGljS2V5OiB0cnVlO1xufVxuICA/IFVzZXJCYXNlICYgeyBwdWJsaWNLZXk6IHN0cmluZyB9XG4gIDogVXNlckJhc2U7XG5cbnR5cGUgQ2xhc3NHZXRVc2VyUGFyYW1zID0gV2l0aFB1YmxpY0tleSAmIHtcbiAgdXNlcklkPzogc3RyaW5nO1xufTtcbnR5cGUgR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcbn07XG5cbnR5cGUgU3RhdGljR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgZW52OiBTZWNyZWN5RW52O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0VXNlcjxVIGV4dGVuZHMgV2l0aFB1YmxpY0tleT4oXG4gIHBhcmFtczogR2V0VXNlclBhcmFtc1xuKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxVPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFVzZXJTZWxlY3RvcihwYXJhbXMudXNlcklkLCBwYXJhbXMud2l0aFB1YmxpY0tleSk7XG4gIGNvbnN0IHsgdXNlcjogdXNlclJlc3BvbnNlIH0gPSBhd2FpdCBwYXJhbXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgIHVzZXI6IHNlbGVjdG9yXG4gIH0pO1xuXG4gIGlmICghdXNlclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlclJlc3BvbnNlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgcmV0dXJuIHVzZXJSZXNwb25zZTtcbiAgfVxuXG4gIGlmICghdXNlclJlc3BvbnNlLnVzZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICBkYXRhOiB7XG4gICAgICAuLi51c2VyUmVzcG9uc2UudXNlcixcbiAgICAgIGxhc3RMb2dpbjogbmV3IERhdGUodXNlclJlc3BvbnNlLnVzZXIubGFzdExvZ2luKSxcbiAgICAgIGRlbGV0ZWRBdDogdXNlclJlc3BvbnNlLnVzZXIuZGVsZXRlZEF0XG4gICAgICAgID8gbmV3IERhdGUodXNlclJlc3BvbnNlLnVzZXIuZGVsZXRlZEF0KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENsb3VkTGltaXRzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgc2l6ZTogYmlnaW50O1xuICBtYXhTaXplOiBiaWdpbnQgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgTWFpbExpbWl0c1ZhbHVlcyA9IHtcbiAgY291bnQ6IGJpZ2ludDtcbiAgbWF4Q291bnQ6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVTaXplOiBiaWdpbnQ7XG4gIG1heEZpbGVTaXplOiBiaWdpbnQgfCBudWxsO1xuICBmaWxlQ291bnQ6IGJpZ2ludDtcbiAgbWF4RmlsZUNvdW50OiBiaWdpbnQgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUXVlcnlMaW1pdHMgPSB7XG4gIGNsb3VkOiBDbG91ZExpbWl0cztcbiAgbWFpbDoge1xuICAgIHNlbnQ6IE1haWxMaW1pdHNWYWx1ZXM7XG4gICAgcmVjZWl2ZWQ6IE1haWxMaW1pdHNWYWx1ZXM7XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgQmFzZUNsaWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZ2V0QmFzZVVybCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYgPSBcInByb2RcIixcbiAgICBncmFwaGNkbiA9IHRydWVcbiAgKTogc3RyaW5nID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICByZXR1cm4gXCJodHRwOi8vbG9jYWxob3N0OjQwMDAvZ3JhcGhxbFwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZW52KSB7XG4gICAgICBjYXNlIFwicHJvZFwiOlxuICAgICAgICByZXR1cm4gZ3JhcGhjZG5cbiAgICAgICAgICA/IFwiaHR0cHM6Ly9zZWNyZWN5LmdyYXBoY2RuLmFwcFwiXG4gICAgICAgICAgOiBcImh0dHBzOi8vYXBpLnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgICAgY2FzZSBcInN0YWdpbmdcIjpcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9hcGkuc3RhZ2luZy5zZWNyZWN5Lm1lL2dyYXBocWxcIjtcbiAgICAgIGNhc2UgXCJkZXZcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vYXBpLmRldi5zZWNyZWN5Lm1lL2dyYXBocWxcIjtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2dldEJhc2VDbGllbnQgPSAoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb24/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+ID0+XG4gICAgY3JlYXRlVGh1bmRlcihCYXNlQ2xpZW50LmdldEJhc2VVcmwoZW52KSwgc2Vzc2lvbik7XG5cbiAgcHJvdGVjdGVkIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG5cbiAgcHVibGljIHNlc3Npb25JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNlc3Npb246IHN0cmluZywgZW52OiBTZWNyZWN5RW52KSB7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uO1xuICAgIHRoaXMuY2xpZW50ID0gQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb24pO1xuICB9XG5cbiAgYXN5bmMgc2Vzc2lvbnMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlclNlc3Npb25bXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBmaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIHNlc3Npb25zOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICAgICAgYXBwU2Vzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdXNlckFnZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjaXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY291bnRyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHVzZXJBcHA6IHtcbiAgICAgICAgICAgICAgICAgICAgYXBwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRhdGEudXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJSZXNwb25zZSA9IGRhdGEudXNlcjtcbiAgICBpZiAodXNlclJlc3BvbnNlLl9fdHlwZW5hbWUgPT09IFwiVXNlclJlc3BvbnNlXCIpIHtcbiAgICAgIGlmICghdXNlclJlc3BvbnNlLnVzZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBzZXNzaW9uczogVXNlclNlc3Npb25bXSA9XG4gICAgICAgIHVzZXJSZXNwb25zZS51c2VyLnNlc3Npb25zLm1hcChzID0+ICh7XG4gICAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgICAgaXA6IHMuaXAsXG4gICAgICAgICAgY2l0eTogcy5jaXR5LFxuICAgICAgICAgIGNvdW50cnk6IHMuY291bnRyeSxcbiAgICAgICAgICBsYXN0QWN0aXZpdHk6IHMubGFzdEFjdGl2aXR5ID8gbmV3IERhdGUocy5sYXN0QWN0aXZpdHkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHVzZXJBZ2VudDogcy51c2VyQWdlbnQsXG4gICAgICAgICAgYXBwU2Vzc2lvbnM6IHMuYXBwU2Vzc2lvbnMubWFwKGEgPT4gKHtcbiAgICAgICAgICAgIGlkOiBhLmlkLFxuICAgICAgICAgICAgaXA6IGEuaXAsXG4gICAgICAgICAgICBjaXR5OiBhLmNpdHksXG4gICAgICAgICAgICBjb3VudHJ5OiBhLmNvdW50cnksXG4gICAgICAgICAgICBsYXN0QWN0aXZpdHk6IGEubGFzdEFjdGl2aXR5ID8gbmV3IERhdGUoYS5sYXN0QWN0aXZpdHkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdXNlckFnZW50OiBhLnVzZXJBZ2VudCxcbiAgICAgICAgICAgIGFwcDogYS51c2VyQXBwPy5hcHAubmFtZSA/PyBcIlwiXG4gICAgICAgICAgfSkpXG4gICAgICAgIH0pKSA/PyBbXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IHNlc3Npb25zXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICBjb25zdCBsb2NhbCA9IGdldFN0b3JhZ2UoZmFsc2UpO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGdldFN0b3JhZ2UodHJ1ZSk7XG4gICAgICBsb2NhbC5qd3QuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi5qd3QuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIHNlc3Npb24udXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHVzZXJzQ2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgICBsb2dvdXQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXNzaW9uSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvL1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1lPFQgZXh0ZW5kcyBXaXRoUHVibGljS2V5ID0gV2l0aFB1YmxpY0tleT4oXG4gICAgcGFyYW1zPzogVFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFQ+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcihwYXJhbXMgfHwgKHsgd2l0aFB1YmxpY0tleTogdHJ1ZSB9IGFzIFQpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1c2VyPFQgZXh0ZW5kcyBTdGF0aWNHZXRVc2VyUGFyYW1zPihcbiAgICBwYXJhbXM6IFQsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFQ+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXI8VD4oe1xuICAgICAgY2xpZW50OiB0aGlzLl9nZXRCYXNlQ2xpZW50KHBhcmFtcy5lbnYsIHNlc3Npb25JZCksXG4gICAgICB1c2VySWQ6IHBhcmFtcy51c2VySWQsXG4gICAgICB3aXRoUHVibGljS2V5OiBwYXJhbXMud2l0aFB1YmxpY0tleVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuZGF0YS5pZCwgdXNlci5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVzZXI8VCBleHRlbmRzIENsYXNzR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBUXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmRhdGEuaWQsIHVzZXIuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1cGRhdGVQcm9maWxlKHtcbiAgICBmaXJzdG5hbWUsXG4gICAgbGFzdG5hbWUsXG4gICAgbGFuZ1xuICB9OiB7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhbmc6IExhbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxVc2VyPiB7XG4gICAgY29uc3QgeyB1cGRhdGVQcm9maWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZVByb2ZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpcnN0bmFtZSxcbiAgICAgICAgICBsYXN0bmFtZSxcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgbGFuZzogdHJ1ZSxcbiAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlUHJvZmlsZSxcbiAgICAgIGxhc3RMb2dpbjogbmV3IERhdGUodXBkYXRlUHJvZmlsZS5sYXN0TG9naW4pLFxuICAgICAgZGVsZXRlZEF0OiB1cGRhdGVQcm9maWxlLmRlbGV0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0KVxuICAgICAgICA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBsYW5zKFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFBsYW5bXT4gfCBudWxsPiB7XG4gICAgY29uc3QgeyBwbGFucyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBwbGFuczoge1xuICAgICAgICBcIi4uLm9uIFBsYW5SZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBwbGFuOiB7XG4gICAgICAgICAgICBraW5kOiB0cnVlLFxuICAgICAgICAgICAgY29kZXM6IHRydWUsXG4gICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgZG93bmxvYWRCYW5kd2lkdGg6IHRydWUsXG4gICAgICAgICAgICAgIGRvd25sb2FkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIHVwbG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIHJlY2VpdmVkTWFpbHM6IHtcbiAgICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNlbnRNYWlsczoge1xuICAgICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFwbGFucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBwbGFucy5wbGFuXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBheShcbiAgICBwbGFuQ29kZTogU2VjcmVjeVBsYW5zQ29kZXMsXG4gICAgaW5wdXQ6IFBheUlucHV0LFxuICAgIGF1dG9SZW5ldz86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcGF5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHBheTogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcGxhbkNvZGUsXG4gICAgICAgICAgYXV0b1JlbmV3XG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBwYXkgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBjYW5jZWxQYXltZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgY2FuY2VsUGF5bWVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBjYW5jZWxQYXltZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FuY2VsUGF5bWVudCA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHBheW1lbnRJbmZvcygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxQYXltZW50SW5mb3M+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcGF5bWVudEluZm9zIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHBheW1lbnRJbmZvczoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBQYXltZW50SW5mb3NSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgICAgIGhvc3RlZFVybDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgYXV0b3JlbmV3OiB0cnVlLFxuICAgICAgICAgICAgICBhY3RpdmF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3JlYXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBleHBpcmVzQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHBhdXNlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICB0cmlhbEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgdHJpYWxTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHRydWUsXG4gICAgICAgICAgICAgIHBsYW46IHRydWUsXG4gICAgICAgICAgICAgIHBsYW5Db2RlOiB0cnVlLFxuICAgICAgICAgICAgICB0b3RhbDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGludm9pY2VzOiB7XG4gICAgICAgICAgICAgIHBkZjogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZHVlOiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRydWUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0cnVlLFxuICAgICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFwYXltZW50SW5mb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwYXltZW50SW5mb3MuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcGF5bWVudEluZm9zO1xuICAgIH1cblxuICAgIGlmICghcGF5bWVudEluZm9zLnBheW1lbnRJbmZvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsVG9QYXltZW50SW5mb3MocGF5bWVudEluZm9zLnBheW1lbnRJbmZvcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8UXVlcnlMaW1pdHM+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGxpbWl0cyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBsaW1pdHM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gUXVlcnlMaW1pdHNcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHtcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBtYXhTaXplOiB0cnVlLFxuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb3VudDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFpbDoge1xuICAgICAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VudDoge1xuICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghbGltaXRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG5cbiAgICBjb25zdCB7IGNsb3VkLCBtYWlsIH0gPSBsaW1pdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY2xvdWQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KGNsb3VkLmNvdW50KSxcbiAgICAgICAgICBzaXplOiBCaWdJbnQoY2xvdWQuc2l6ZSksXG4gICAgICAgICAgbWF4Q291bnQ6IGNsb3VkLm1heENvdW50ID8gQmlnSW50KGNsb3VkLm1heENvdW50KSA6IG51bGwsXG4gICAgICAgICAgbWF4U2l6ZTogY2xvdWQubWF4U2l6ZSA/IEJpZ0ludChjbG91ZC5tYXhTaXplKSA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgbWFpbDoge1xuICAgICAgICAgIHJlY2VpdmVkOiB7XG4gICAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuY291bnQpLFxuICAgICAgICAgICAgbWF4Q291bnQ6IG1haWwucmVjZWl2ZWQubWF4Q291bnRcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZUNvdW50OiBCaWdJbnQobWFpbC5yZWNlaXZlZC5maWxlQ291bnQpLFxuICAgICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudFxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmZpbGVTaXplKSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplXG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwucmVjZWl2ZWQubWF4RmlsZVNpemUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VudDoge1xuICAgICAgICAgICAgY291bnQ6IEJpZ0ludChtYWlsLnNlbnQuY291bnQpLFxuICAgICAgICAgICAgbWF4Q291bnQ6IG1haWwuc2VudC5tYXhDb3VudCA/IEJpZ0ludChtYWlsLnNlbnQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVDb3VudDogQmlnSW50KG1haWwuc2VudC5maWxlQ291bnQpLFxuICAgICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnNlbnQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVTaXplOiBCaWdJbnQobWFpbC5zZW50LmZpbGVTaXplKSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnNlbnQubWF4RmlsZVNpemVcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5zZW50Lm1heEZpbGVTaXplKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ29kRmF0aGVyQW5kQ2hpbGRyZW4oKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8R29kRmF0aGVyQW5kQ2hpbGRyZW4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBnb2RDaGlsZHJlbjoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHBob25lOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ29kRmF0aGVyOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBnb2RDaGlsZHJlbjogdXNlci5nb2RDaGlsZHJlbixcbiAgICAgICAgZ29kRmF0aGVyOiB1c2VyLmdvZEZhdGhlclxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXBkYXRlQXBwREJDb25maWcoe1xuICAgIGFwcENvZGUsXG4gICAgY29uZmlnLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGFwcENvZGU6IHN0cmluZztcbiAgICBjb25maWc6IEFwcERCQ29uZmlnO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxBcHBEQkNvbmZpZz4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwibXV0YXRpb25cIikoe1xuICAgICAgZGJDb25maWc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGUsXG4gICAgICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShjb25maWcpXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYkNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRBcHBEQkNvbmZpZyhcbiAgICBhcHBDb2RlOiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxBcHBEQkNvbmZpZz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwicXVlcnlcIikoe1xuICAgICAgZGJDb25maWc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiQ29uZmlnUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiQ29uZmlnLmpzb25cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEZBUSh7XG4gICAgbGFuZyxcbiAgICBlbnYsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBsYW5nPzogTGFuZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEZhcUl0ZW1bXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZhcSB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBmYXE6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmFxUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZhcToge1xuICAgICAgICAgICAgICBhbnN3ZXI6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBxdWVzdGlvbjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFmYXEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmYXEuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmFxO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZmFxLmZhcVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QmxvZyh7XG4gICAgZW52LFxuICAgIGxhbmcsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgbGFuZz86IExhbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxCbG9nSXRlbVtdPiB8IEVycm9yTGFuZ05vdEV4aXN0IHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgYmxvZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBibG9nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTGFuZ05vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEJsb2dSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgYmxvZ0l0ZW1zOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBibG9nSWQ6IHRydWUsXG4gICAgICAgICAgICAgIGF1dGhvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYm9keTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaW1hZ2U6IHRydWUsXG4gICAgICAgICAgICAgIGltYWdlQWx0OiB0cnVlLFxuICAgICAgICAgICAgICBzdW1tYXJ5OiB0cnVlLFxuICAgICAgICAgICAgICB0aXRsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghYmxvZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJsb2cuX190eXBlbmFtZSA9PT0gXCJFcnJvckxhbmdOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gYmxvZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGJsb2cuYmxvZ0l0ZW1zLm1hcChiID0+ICh7IC4uLmIsIGRhdGU6IG5ldyBEYXRlKGIuZGF0ZSkgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlcG9ydFVzZXIoXG4gICAgcmVwb3J0ZWRVc2VySWQ6IHN0cmluZyxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8U2VuZFJlcG9ydCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kUmVwb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVVzZXIoe1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVVc2VyIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZVVzZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVsZXRlVXNlciA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRiR2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8VT5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJHZXQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkdldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJHZXQuanNvblxuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNldDxUIGV4dGVuZHMgVXNlckRhdGEsIFUgZXh0ZW5kcyBEb2N1bWVudD4oe1xuICAgIHZhbHVlLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgdmFsdWU6IFU7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgaW5jbHVkaW5nIGZpZWxkcyB5b3Ugd2FudCB0byB1cGRhdGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRiU2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiU2V0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgdmFsdWU6IHNlcmlhbGl6ZSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRiU2V0LnJlcztcbiAgfVxuXG4gIGFzeW5jIGRiU2VhcmNoPFQ+KHtcbiAgICBzZWFyY2gsXG4gICAgZmllbGRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxUW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYlNlYXJjaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkYlNlYXJjaDogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VhcmNoLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYlNlYXJjaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiU2VhcmNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYlNlYXJjaC5qc29uXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvbGRlcih7IGlkIH06IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkZWxldGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVsZXRlRm9sZGVyID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgbW92ZUZvbGRlcnMoe1xuICAgIGZvbGRlcnNJZCxcbiAgICBwYXJlbnRGb2xkZXJJZFxuICB9OiB7XG4gICAgZm9sZGVyc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IG1vdmVGb2xkZXJzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVGb2xkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJzSWQsXG4gICAgICAgICAgcGFyZW50Rm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1vdmVGb2xkZXJzID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgbW92ZUZpbGVzKHtcbiAgICBmaWxlc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IG1vdmVGaWxlcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBtb3ZlRmlsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVzSWQsXG4gICAgICAgICAgcGFyZW50Rm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1vdmVGaWxlcyA/PyBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlclNpemUoe1xuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxGb2xkZXJTaXplPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyU2l6ZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBmb2xkZXJTaXplOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGb2xkZXJTaXplUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBzaXplQmVmb3JlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXJTaXplLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZvbGRlclNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNpemU6IEJpZ0ludChmb2xkZXJTaXplLnNpemUpLFxuICAgICAgICBzaXplQmVmb3JlOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplQmVmb3JlKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRTcG9uc29yc2hpcExpbmsoe1xuICAgIGJhY2tVcmxcbiAgfToge1xuICAgIGJhY2tVcmw6IHN0cmluZztcbiAgfSk6IFByb21pc2U8c3RyaW5nIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCBtZSA9IGF3YWl0IHRoaXMubWUoeyB3aXRoUHVibGljS2V5OiBmYWxzZSB9KTtcblxuICAgIGlmICghbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExpbmsoe1xuICAgICAgYXBwOiBcImF1dGhcIixcbiAgICAgIHBhdGg6IGAvc2lnbi11cD9nZj0ke2J0b2EobWUuZGF0YS5lbWFpbCl9JmF1PSR7YnRvYShiYWNrVXJsKX1gXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==