@secrecy/lib 1.0.0-dev.2 → 1.0.0-dev.23

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
@@ -2,14 +2,16 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
 
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
5
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
6
 
7
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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";
11
+ import { getLink } from "@secrecy/lib-utils";
10
12
  import { usersCache } from "./cache.js";
11
13
  import { getStorage } from "./client/storage.js";
12
- import { Selectors } from "./zeus/index.js";
14
+ import { Selector } from "./zeus/index.js";
13
15
  import { createThunder } from "./ZeusThunder.js";
14
16
 
15
17
  function internalToPaymentInfos(p) {
@@ -44,23 +46,33 @@ export function isValidPlan(planCode) {
44
46
  }
45
47
 
46
48
  var getUserSelector = function getUserSelector(userId, withPublicKey) {
47
- var _Selectors$query = Selectors.query({
49
+ var _Selector = Selector("Query")({
48
50
  user: [{
49
51
  userId: userId
50
52
  }, {
51
- id: true,
52
- firstname: true,
53
- lastname: true,
54
- lang: true,
55
- publicKey: withPublicKey ? true : undefined,
56
- email: true,
57
- phone: true,
58
- role: true,
59
- deletedAt: true,
60
- 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
+ }
61
73
  }]
62
74
  }),
63
- user = _Selectors$query.user;
75
+ user = _Selector.user;
64
76
 
65
77
  return user;
66
78
  };
@@ -70,50 +82,67 @@ function getUser(_x) {
70
82
  }
71
83
 
72
84
  function _getUser() {
73
- _getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(params) {
74
- var selector, _yield$params$client$, user;
85
+ _getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(params) {
86
+ var selector, _yield$params$client, userResponse;
75
87
 
76
- return _regeneratorRuntime.wrap(function _callee26$(_context26) {
88
+ return _regeneratorRuntime.wrap(function _callee27$(_context27) {
77
89
  while (1) {
78
- switch (_context26.prev = _context26.next) {
90
+ switch (_context27.prev = _context27.next) {
79
91
  case 0:
80
92
  selector = getUserSelector(params.userId, params.withPublicKey);
81
- _context26.next = 3;
82
- return params.client.query({
93
+ _context27.next = 3;
94
+ return params.client("query")({
83
95
  user: selector
84
96
  });
85
97
 
86
98
  case 3:
87
- _yield$params$client$ = _context26.sent;
88
- user = _yield$params$client$.user;
99
+ _yield$params$client = _context27.sent;
100
+ userResponse = _yield$params$client.user;
89
101
 
90
- if (user) {
91
- _context26.next = 7;
102
+ if (userResponse) {
103
+ _context27.next = 7;
92
104
  break;
93
105
  }
94
106
 
95
- return _context26.abrupt("return", null);
107
+ return _context27.abrupt("return", null);
96
108
 
97
109
  case 7:
98
- return _context26.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
99
- lastLogin: new Date(user.lastLogin),
100
- deletedAt: user.deletedAt ? new Date(user.deletedAt) : null
101
- }));
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
+ }
102
122
 
103
- case 8:
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
+ });
133
+
134
+ case 12:
104
135
  case "end":
105
- return _context26.stop();
136
+ return _context27.stop();
106
137
  }
107
138
  }
108
- }, _callee26);
139
+ }, _callee27);
109
140
  }));
110
141
  return _getUser.apply(this, arguments);
111
142
  }
112
143
 
113
144
  export var BaseClient = /*#__PURE__*/function () {
114
145
  function BaseClient(session, env) {
115
- this.client = void 0;
116
- this.sessionId = void 0;
117
146
  this.sessionId = session;
118
147
  this.client = BaseClient._getBaseClient(env, session);
119
148
  }
@@ -122,33 +151,42 @@ export var BaseClient = /*#__PURE__*/function () {
122
151
 
123
152
  _proto.sessions = /*#__PURE__*/function () {
124
153
  var _sessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
125
- var _data$user$sessions$m, _data$user;
154
+ var data, userResponse, _userResponse$user$se, _sessions2;
126
155
 
127
- var data, sessions;
128
156
  return _regeneratorRuntime.wrap(function _callee$(_context) {
129
157
  while (1) {
130
158
  switch (_context.prev = _context.next) {
131
159
  case 0:
132
160
  _context.next = 2;
133
- return this.client.query({
161
+ return this.client("query")({
134
162
  user: [{}, {
135
- sessions: {
136
- id: true,
137
- lastActivity: true,
138
- userAgent: true,
139
- ip: true,
140
- city: true,
141
- country: true,
142
- appSessions: {
143
- id: true,
144
- lastActivity: true,
145
- userAgent: true,
146
- ip: true,
147
- city: true,
148
- country: true,
149
- userApp: {
150
- app: {
151
- 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
+ }
152
190
  }
153
191
  }
154
192
  }
@@ -158,7 +196,31 @@ export var BaseClient = /*#__PURE__*/function () {
158
196
 
159
197
  case 2:
160
198
  data = _context.sent;
161
- 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) {
162
224
  return {
163
225
  id: s.id,
164
226
  ip: s.ip,
@@ -180,10 +242,16 @@ export var BaseClient = /*#__PURE__*/function () {
180
242
  };
181
243
  })
182
244
  };
183
- })) != null ? _data$user$sessions$m : [];
184
- return _context.abrupt("return", sessions);
245
+ })) != null ? _userResponse$user$se : [];
246
+ return _context.abrupt("return", {
247
+ __typename: "SuccessResponse",
248
+ data: _sessions2
249
+ });
185
250
 
186
- case 5:
251
+ case 11:
252
+ return _context.abrupt("return", userResponse);
253
+
254
+ case 12:
187
255
  case "end":
188
256
  return _context.stop();
189
257
  }
@@ -219,10 +287,23 @@ export var BaseClient = /*#__PURE__*/function () {
219
287
 
220
288
  _context2.prev = 1;
221
289
  _context2.next = 4;
222
- return this.client.mutation({
290
+ return this.client("mutation")({
223
291
  logout: [{
224
292
  sessionId: sessionId
225
- }, true]
293
+ }, {
294
+ "...on ErrorAccessDenied": {
295
+ __typename: true,
296
+ message: true
297
+ },
298
+ "...on ErrorBasic": {
299
+ __typename: true,
300
+ message: true
301
+ },
302
+ "...on LogoutResponse": {
303
+ __typename: true,
304
+ logout: true
305
+ }
306
+ }]
226
307
  });
227
308
 
228
309
  case 4:
@@ -283,19 +364,36 @@ export var BaseClient = /*#__PURE__*/function () {
283
364
  _context4.next = 2;
284
365
  return getUser({
285
366
  client: this._getBaseClient(params.env, sessionId),
286
- userId: params.userId
367
+ userId: params.userId,
368
+ withPublicKey: params.withPublicKey
287
369
  });
288
370
 
289
371
  case 2:
290
372
  user = _context4.sent;
291
373
 
292
374
  if (user) {
293
- usersCache.set(user.id, user);
375
+ _context4.next = 5;
376
+ break;
294
377
  }
295
378
 
296
- return _context4.abrupt("return", user);
379
+ return _context4.abrupt("return", null);
297
380
 
298
381
  case 5:
382
+ if (!(user.__typename === "ErrorNotFound")) {
383
+ _context4.next = 7;
384
+ break;
385
+ }
386
+
387
+ return _context4.abrupt("return", user);
388
+
389
+ case 7:
390
+ if (user) {
391
+ usersCache.set(user.data.id, user.data);
392
+ }
393
+
394
+ return _context4.abrupt("return", user);
395
+
396
+ case 9:
299
397
  case "end":
300
398
  return _context4.stop();
301
399
  }
@@ -328,12 +426,28 @@ export var BaseClient = /*#__PURE__*/function () {
328
426
  user = _context5.sent;
329
427
 
330
428
  if (user) {
331
- usersCache.set(user.id, user);
429
+ _context5.next = 5;
430
+ break;
332
431
  }
333
432
 
334
- return _context5.abrupt("return", user);
433
+ return _context5.abrupt("return", null);
335
434
 
336
435
  case 5:
436
+ if (!(user.__typename === "ErrorNotFound")) {
437
+ _context5.next = 7;
438
+ break;
439
+ }
440
+
441
+ return _context5.abrupt("return", user);
442
+
443
+ case 7:
444
+ if (user) {
445
+ usersCache.set(user.data.id, user.data);
446
+ }
447
+
448
+ return _context5.abrupt("return", user);
449
+
450
+ case 9:
337
451
  case "end":
338
452
  return _context5.stop();
339
453
  }
@@ -350,7 +464,7 @@ export var BaseClient = /*#__PURE__*/function () {
350
464
 
351
465
  _proto.updateProfile = /*#__PURE__*/function () {
352
466
  var _updateProfile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(_ref) {
353
- var firstname, lastname, lang, _yield$this$client$mu, updateProfile;
467
+ var firstname, lastname, lang, _yield$this$client, updateProfile;
354
468
 
355
469
  return _regeneratorRuntime.wrap(function _callee6$(_context6) {
356
470
  while (1) {
@@ -358,42 +472,89 @@ export var BaseClient = /*#__PURE__*/function () {
358
472
  case 0:
359
473
  firstname = _ref.firstname, lastname = _ref.lastname, lang = _ref.lang;
360
474
  _context6.next = 3;
361
- return this.client.mutation({
475
+ return this.client("mutation")({
362
476
  updateProfile: [{
363
477
  firstname: firstname,
364
478
  lastname: lastname,
365
479
  lang: lang
366
480
  }, {
367
- id: true,
368
- firstname: true,
369
- lastname: true,
370
- lang: true,
371
- email: true,
372
- phone: true,
373
- role: true,
374
- deletedAt: true,
375
- lastLogin: true
481
+ "...on ErrorAccessDenied": {
482
+ __typename: true,
483
+ message: true
484
+ },
485
+ "...on ErrorNotFound": {
486
+ __typename: true,
487
+ message: true
488
+ },
489
+ "...on UpdateProfileResponse": {
490
+ __typename: true,
491
+ updateProfile: {
492
+ id: true,
493
+ firstname: true,
494
+ lastname: true,
495
+ lang: true,
496
+ email: true,
497
+ phone: true,
498
+ role: true,
499
+ deletedAt: true,
500
+ lastLogin: true
501
+ }
502
+ }
376
503
  }]
377
504
  });
378
505
 
379
506
  case 3:
380
- _yield$this$client$mu = _context6.sent;
381
- updateProfile = _yield$this$client$mu.updateProfile;
507
+ _yield$this$client = _context6.sent;
508
+ updateProfile = _yield$this$client.updateProfile;
382
509
 
383
510
  if (updateProfile) {
384
511
  _context6.next = 7;
385
512
  break;
386
513
  }
387
514
 
388
- throw new Error("Should not happen");
515
+ return _context6.abrupt("return", null);
389
516
 
390
517
  case 7:
391
- return _context6.abrupt("return", _objectSpread(_objectSpread({}, updateProfile), {}, {
392
- lastLogin: new Date(updateProfile.lastLogin),
393
- deletedAt: updateProfile.deletedAt ? new Date(updateProfile.deletedAt) : null
394
- }));
518
+ if (!(updateProfile.__typename === "ErrorAccessDenied")) {
519
+ _context6.next = 9;
520
+ break;
521
+ }
395
522
 
396
- case 8:
523
+ return _context6.abrupt("return", updateProfile);
524
+
525
+ case 9:
526
+ if (!(updateProfile.__typename === "ErrorNotFound")) {
527
+ _context6.next = 11;
528
+ break;
529
+ }
530
+
531
+ return _context6.abrupt("return", updateProfile);
532
+
533
+ case 11:
534
+ if (updateProfile.updateProfile) {
535
+ _context6.next = 13;
536
+ break;
537
+ }
538
+
539
+ return _context6.abrupt("return", null);
540
+
541
+ case 13:
542
+ return _context6.abrupt("return", {
543
+ __typename: "SuccessResponse",
544
+ data: {
545
+ email: updateProfile.updateProfile.email,
546
+ firstname: updateProfile.updateProfile.firstname,
547
+ id: updateProfile.updateProfile.id,
548
+ lang: updateProfile.updateProfile.lang,
549
+ lastLogin: new Date(updateProfile.updateProfile.lastLogin),
550
+ lastname: updateProfile.updateProfile.lastname,
551
+ phone: updateProfile.updateProfile.phone,
552
+ role: updateProfile.updateProfile.role,
553
+ deletedAt: updateProfile.updateProfile.deletedAt ? new Date(updateProfile.updateProfile.deletedAt) : null
554
+ }
555
+ });
556
+
557
+ case 14:
397
558
  case "end":
398
559
  return _context6.stop();
399
560
  }
@@ -417,35 +578,40 @@ export var BaseClient = /*#__PURE__*/function () {
417
578
  switch (_context7.prev = _context7.next) {
418
579
  case 0:
419
580
  _context7.next = 2;
420
- return BaseClient._getBaseClient(env, sessionId).query({
581
+ return BaseClient._getBaseClient(env, sessionId)("query")({
421
582
  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
583
+ "...on PlanResponse": {
584
+ __typename: true,
585
+ plan: {
586
+ kind: true,
587
+ codes: true,
588
+ limits: {
589
+ downloadBandwidth: true,
590
+ downloadCount: true,
591
+ hardFileCount: true,
592
+ hardFileSize: true,
593
+ perFileSize: true,
594
+ uploadBandwidth: true,
595
+ uploadCount: true,
596
+ receivedMails: {
597
+ count: true,
598
+ fileCount: true,
599
+ fileSize: true,
600
+ hardCount: true,
601
+ hardFileCount: true,
602
+ hardFileSize: true,
603
+ perFileSize: true
604
+ },
605
+ sentMails: {
606
+ count: true,
607
+ fileCount: true,
608
+ fileSize: true,
609
+ hardCount: true,
610
+ hardFileCount: true,
611
+ hardFileSize: true,
612
+ perFileSize: true
613
+ }
614
+ }
449
615
  }
450
616
  }
451
617
  }
@@ -454,9 +620,21 @@ export var BaseClient = /*#__PURE__*/function () {
454
620
  case 2:
455
621
  _yield$BaseClient$_ge = _context7.sent;
456
622
  plans = _yield$BaseClient$_ge.plans;
457
- return _context7.abrupt("return", plans);
458
623
 
459
- case 5:
624
+ if (plans) {
625
+ _context7.next = 6;
626
+ break;
627
+ }
628
+
629
+ return _context7.abrupt("return", null);
630
+
631
+ case 6:
632
+ return _context7.abrupt("return", {
633
+ __typename: "SuccessResponse",
634
+ data: plans.plan
635
+ });
636
+
637
+ case 7:
460
638
  case "end":
461
639
  return _context7.stop();
462
640
  }
@@ -473,27 +651,58 @@ export var BaseClient = /*#__PURE__*/function () {
473
651
 
474
652
  _proto.pay = /*#__PURE__*/function () {
475
653
  var _pay = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(planCode, input, autoRenew) {
476
- var _yield$this$client$mu2, pay;
654
+ var _pay$pay;
655
+
656
+ var _yield$this$client2, pay;
477
657
 
478
658
  return _regeneratorRuntime.wrap(function _callee8$(_context8) {
479
659
  while (1) {
480
660
  switch (_context8.prev = _context8.next) {
481
661
  case 0:
482
662
  _context8.next = 2;
483
- return this.client.mutation({
663
+ return this.client("mutation")({
484
664
  pay: [{
485
665
  input: input,
486
666
  planCode: planCode,
487
667
  autoRenew: autoRenew
488
- }, true]
668
+ }, {
669
+ "...on ErrorAccessDenied": {
670
+ __typename: true,
671
+ message: true
672
+ },
673
+ "...on PayResponse": {
674
+ __typename: true,
675
+ pay: true
676
+ }
677
+ }]
489
678
  });
490
679
 
491
680
  case 2:
492
- _yield$this$client$mu2 = _context8.sent;
493
- pay = _yield$this$client$mu2.pay;
494
- return _context8.abrupt("return", pay != null ? pay : false);
681
+ _yield$this$client2 = _context8.sent;
682
+ pay = _yield$this$client2.pay;
495
683
 
496
- case 5:
684
+ if (pay) {
685
+ _context8.next = 6;
686
+ break;
687
+ }
688
+
689
+ return _context8.abrupt("return", null);
690
+
691
+ case 6:
692
+ if (!(pay.__typename === "ErrorAccessDenied")) {
693
+ _context8.next = 8;
694
+ break;
695
+ }
696
+
697
+ return _context8.abrupt("return", pay);
698
+
699
+ case 8:
700
+ return _context8.abrupt("return", {
701
+ __typename: "SuccessResponse",
702
+ data: (_pay$pay = pay.pay) != null ? _pay$pay : false
703
+ });
704
+
705
+ case 9:
497
706
  case "end":
498
707
  return _context8.stop();
499
708
  }
@@ -510,23 +719,54 @@ export var BaseClient = /*#__PURE__*/function () {
510
719
 
511
720
  _proto.cancelPayment = /*#__PURE__*/function () {
512
721
  var _cancelPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {
513
- var _yield$this$client$mu3, cancelPayment;
722
+ var _cancelPayment$cancel;
723
+
724
+ var _yield$this$client3, cancelPayment;
514
725
 
515
726
  return _regeneratorRuntime.wrap(function _callee9$(_context9) {
516
727
  while (1) {
517
728
  switch (_context9.prev = _context9.next) {
518
729
  case 0:
519
730
  _context9.next = 2;
520
- return this.client.mutation({
521
- cancelPayment: true
731
+ return this.client("mutation")({
732
+ cancelPayment: {
733
+ "...on ErrorAccessDenied": {
734
+ __typename: true,
735
+ message: true
736
+ },
737
+ "...on CancelPaymentResponse": {
738
+ __typename: true,
739
+ cancelPayment: true
740
+ }
741
+ }
522
742
  });
523
743
 
524
744
  case 2:
525
- _yield$this$client$mu3 = _context9.sent;
526
- cancelPayment = _yield$this$client$mu3.cancelPayment;
527
- return _context9.abrupt("return", cancelPayment != null ? cancelPayment : false);
745
+ _yield$this$client3 = _context9.sent;
746
+ cancelPayment = _yield$this$client3.cancelPayment;
528
747
 
529
- case 5:
748
+ if (cancelPayment) {
749
+ _context9.next = 6;
750
+ break;
751
+ }
752
+
753
+ return _context9.abrupt("return", null);
754
+
755
+ case 6:
756
+ if (!(cancelPayment.__typename === "ErrorAccessDenied")) {
757
+ _context9.next = 8;
758
+ break;
759
+ }
760
+
761
+ return _context9.abrupt("return", cancelPayment);
762
+
763
+ case 8:
764
+ return _context9.abrupt("return", {
765
+ __typename: "SuccessResponse",
766
+ data: (_cancelPayment$cancel = cancelPayment.cancelPayment) != null ? _cancelPayment$cancel : false
767
+ });
768
+
769
+ case 9:
530
770
  case "end":
531
771
  return _context9.stop();
532
772
  }
@@ -543,49 +783,58 @@ export var BaseClient = /*#__PURE__*/function () {
543
783
 
544
784
  _proto.paymentInfos = /*#__PURE__*/function () {
545
785
  var _paymentInfos = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
546
- var _yield$this$client$qu, paymentInfos;
786
+ var _yield$this$client4, paymentInfos, result;
547
787
 
548
788
  return _regeneratorRuntime.wrap(function _callee10$(_context10) {
549
789
  while (1) {
550
790
  switch (_context10.prev = _context10.next) {
551
791
  case 0:
552
792
  _context10.next = 2;
553
- return this.client.query({
793
+ return this.client("query")({
554
794
  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
795
+ "...on ErrorAccessDenied": {
796
+ __typename: true,
797
+ message: true
573
798
  },
574
- invoices: {
575
- pdf: true,
576
- date: true,
577
- due: true,
578
- status: true,
579
- total: true,
580
- name: true,
581
- currency: true
799
+ "...on PaymentInfosResponse": {
800
+ __typename: true,
801
+ paymentInfos: {
802
+ hostedUrl: true,
803
+ currentSubscription: {
804
+ autorenew: true,
805
+ activatedAt: true,
806
+ currentPeriodEndsAt: true,
807
+ currentPeriodStartedAt: true,
808
+ canceledAt: true,
809
+ createdAt: true,
810
+ expiresAt: true,
811
+ pausedAt: true,
812
+ trialEndsAt: true,
813
+ trialStartedAt: true,
814
+ updatedAt: true,
815
+ state: true,
816
+ collectionMethod: true,
817
+ plan: true,
818
+ planCode: true,
819
+ total: true
820
+ },
821
+ invoices: {
822
+ pdf: true,
823
+ date: true,
824
+ due: true,
825
+ status: true,
826
+ total: true,
827
+ name: true,
828
+ currency: true
829
+ }
830
+ }
582
831
  }
583
832
  }
584
833
  });
585
834
 
586
835
  case 2:
587
- _yield$this$client$qu = _context10.sent;
588
- paymentInfos = _yield$this$client$qu.paymentInfos;
836
+ _yield$this$client4 = _context10.sent;
837
+ paymentInfos = _yield$this$client4.paymentInfos;
589
838
 
590
839
  if (paymentInfos) {
591
840
  _context10.next = 6;
@@ -595,9 +844,29 @@ export var BaseClient = /*#__PURE__*/function () {
595
844
  return _context10.abrupt("return", null);
596
845
 
597
846
  case 6:
598
- return _context10.abrupt("return", internalToPaymentInfos(paymentInfos));
847
+ if (!(paymentInfos.__typename === "ErrorAccessDenied")) {
848
+ _context10.next = 8;
849
+ break;
850
+ }
599
851
 
600
- case 7:
852
+ return _context10.abrupt("return", paymentInfos);
853
+
854
+ case 8:
855
+ if (paymentInfos.paymentInfos) {
856
+ _context10.next = 10;
857
+ break;
858
+ }
859
+
860
+ return _context10.abrupt("return", null);
861
+
862
+ case 10:
863
+ result = internalToPaymentInfos(paymentInfos.paymentInfos);
864
+ return _context10.abrupt("return", {
865
+ __typename: "SuccessResponse",
866
+ data: result
867
+ });
868
+
869
+ case 12:
601
870
  case "end":
602
871
  return _context10.stop();
603
872
  }
@@ -614,45 +883,64 @@ export var BaseClient = /*#__PURE__*/function () {
614
883
 
615
884
  _proto.limits = /*#__PURE__*/function () {
616
885
  var _limits = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11() {
617
- var _yield$this$client$qu2, limits, cloud, mail;
886
+ var _yield$this$client5, limits, cloud, mail;
618
887
 
619
888
  return _regeneratorRuntime.wrap(function _callee11$(_context11) {
620
889
  while (1) {
621
890
  switch (_context11.prev = _context11.next) {
622
891
  case 0:
623
892
  _context11.next = 2;
624
- return this.client.query({
893
+ return this.client("query")({
625
894
  limits: {
626
- cloud: {
627
- size: true,
628
- maxSize: true,
629
- count: true,
630
- maxCount: true
895
+ "...on ErrorAccessDenied": {
896
+ __typename: true,
897
+ message: true
631
898
  },
632
- mail: {
633
- received: {
899
+ "...on ErrorLimit": {
900
+ __typename: true,
901
+ message: true
902
+ },
903
+ "...on ErrorNotExist": {
904
+ __typename: true,
905
+ message: true
906
+ },
907
+ "...on ErrorNotFound": {
908
+ __typename: true,
909
+ message: true
910
+ },
911
+ "...on QueryLimits": {
912
+ __typename: true,
913
+ cloud: {
914
+ size: true,
915
+ maxSize: true,
634
916
  count: true,
635
- maxCount: true,
636
- fileCount: true,
637
- maxFileCount: true,
638
- fileSize: true,
639
- maxFileSize: true
917
+ maxCount: true
640
918
  },
641
- sent: {
642
- count: true,
643
- maxCount: true,
644
- fileCount: true,
645
- maxFileCount: true,
646
- fileSize: true,
647
- maxFileSize: true
919
+ mail: {
920
+ received: {
921
+ count: true,
922
+ maxCount: true,
923
+ fileCount: true,
924
+ maxFileCount: true,
925
+ fileSize: true,
926
+ maxFileSize: true
927
+ },
928
+ sent: {
929
+ count: true,
930
+ maxCount: true,
931
+ fileCount: true,
932
+ maxFileCount: true,
933
+ fileSize: true,
934
+ maxFileSize: true
935
+ }
648
936
  }
649
937
  }
650
938
  }
651
939
  });
652
940
 
653
941
  case 2:
654
- _yield$this$client$qu2 = _context11.sent;
655
- limits = _yield$this$client$qu2.limits;
942
+ _yield$this$client5 = _context11.sent;
943
+ limits = _yield$this$client5.limits;
656
944
 
657
945
  if (limits) {
658
946
  _context11.next = 6;
@@ -662,35 +950,70 @@ export var BaseClient = /*#__PURE__*/function () {
662
950
  return _context11.abrupt("return", null);
663
951
 
664
952
  case 6:
953
+ if (!(limits.__typename === "ErrorAccessDenied")) {
954
+ _context11.next = 8;
955
+ break;
956
+ }
957
+
958
+ return _context11.abrupt("return", limits);
959
+
960
+ case 8:
961
+ if (!(limits.__typename === "ErrorNotExist")) {
962
+ _context11.next = 10;
963
+ break;
964
+ }
965
+
966
+ return _context11.abrupt("return", limits);
967
+
968
+ case 10:
969
+ if (!(limits.__typename === "ErrorLimit")) {
970
+ _context11.next = 12;
971
+ break;
972
+ }
973
+
974
+ return _context11.abrupt("return", limits);
975
+
976
+ case 12:
977
+ if (!(limits.__typename === "ErrorNotFound")) {
978
+ _context11.next = 14;
979
+ break;
980
+ }
981
+
982
+ return _context11.abrupt("return", limits);
983
+
984
+ case 14:
665
985
  cloud = limits.cloud, mail = limits.mail;
666
986
  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
987
+ __typename: "SuccessResponse",
988
+ data: {
989
+ cloud: {
990
+ count: BigInt(cloud.count),
991
+ size: BigInt(cloud.size),
992
+ maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
993
+ maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
681
994
  },
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
995
+ mail: {
996
+ received: {
997
+ count: BigInt(mail.received.count),
998
+ maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
999
+ fileCount: BigInt(mail.received.fileCount),
1000
+ maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
1001
+ fileSize: BigInt(mail.received.fileSize),
1002
+ maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
1003
+ },
1004
+ sent: {
1005
+ count: BigInt(mail.sent.count),
1006
+ maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
1007
+ fileCount: BigInt(mail.sent.fileCount),
1008
+ maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
1009
+ fileSize: BigInt(mail.sent.fileSize),
1010
+ maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
1011
+ }
689
1012
  }
690
1013
  }
691
1014
  });
692
1015
 
693
- case 8:
1016
+ case 16:
694
1017
  case "end":
695
1018
  return _context11.stop();
696
1019
  }
@@ -707,37 +1030,42 @@ export var BaseClient = /*#__PURE__*/function () {
707
1030
 
708
1031
  _proto.godFatherAndChildren = /*#__PURE__*/function () {
709
1032
  var _godFatherAndChildren = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
710
- var _user$godFather;
711
-
712
- var _yield$this$client$qu3, user;
1033
+ var _yield$this$client6, user;
713
1034
 
714
1035
  return _regeneratorRuntime.wrap(function _callee12$(_context12) {
715
1036
  while (1) {
716
1037
  switch (_context12.prev = _context12.next) {
717
1038
  case 0:
718
1039
  _context12.next = 2;
719
- return this.client.query({
1040
+ return this.client("query")({
720
1041
  user: [{}, {
721
- godChildren: {
722
- id: true,
723
- firstname: true,
724
- lastname: true,
725
- email: true,
726
- phone: true
1042
+ "...on ErrorNotFound": {
1043
+ __typename: true,
1044
+ message: true
727
1045
  },
728
- godFather: {
729
- id: true,
730
- firstname: true,
731
- lastname: true,
732
- email: true,
733
- phone: true
1046
+ "...on UserResponse": {
1047
+ __typename: true,
1048
+ godChildren: {
1049
+ id: true,
1050
+ firstname: true,
1051
+ lastname: true,
1052
+ email: true,
1053
+ phone: true
1054
+ },
1055
+ godFather: {
1056
+ id: true,
1057
+ firstname: true,
1058
+ lastname: true,
1059
+ email: true,
1060
+ phone: true
1061
+ }
734
1062
  }
735
1063
  }]
736
1064
  });
737
1065
 
738
1066
  case 2:
739
- _yield$this$client$qu3 = _context12.sent;
740
- user = _yield$this$client$qu3.user;
1067
+ _yield$this$client6 = _context12.sent;
1068
+ user = _yield$this$client6.user;
741
1069
 
742
1070
  if (user) {
743
1071
  _context12.next = 6;
@@ -747,11 +1075,23 @@ export var BaseClient = /*#__PURE__*/function () {
747
1075
  return _context12.abrupt("return", null);
748
1076
 
749
1077
  case 6:
750
- return _context12.abrupt("return", _objectSpread(_objectSpread({}, user), {}, {
751
- godFather: (_user$godFather = user.godFather) != null ? _user$godFather : null
752
- }));
1078
+ if (!(user.__typename === "ErrorNotFound")) {
1079
+ _context12.next = 8;
1080
+ break;
1081
+ }
753
1082
 
754
- case 7:
1083
+ return _context12.abrupt("return", user);
1084
+
1085
+ case 8:
1086
+ return _context12.abrupt("return", {
1087
+ __typename: "SuccessResponse",
1088
+ data: {
1089
+ godChildren: user.godChildren,
1090
+ godFather: user.godFather
1091
+ }
1092
+ });
1093
+
1094
+ case 9:
755
1095
  case "end":
756
1096
  return _context12.stop();
757
1097
  }
@@ -768,7 +1108,7 @@ export var BaseClient = /*#__PURE__*/function () {
768
1108
 
769
1109
  BaseClient.updateAppDBConfig = /*#__PURE__*/function () {
770
1110
  var _updateAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref2) {
771
- var appCode, config, env, sessionId, _yield$BaseClient$_ge2, dbConfig;
1111
+ var appCode, config, env, sessionId, _yield$BaseClient$_ge2, dbConfigMutation;
772
1112
 
773
1113
  return _regeneratorRuntime.wrap(function _callee13$(_context13) {
774
1114
  while (1) {
@@ -776,19 +1116,48 @@ export var BaseClient = /*#__PURE__*/function () {
776
1116
  case 0:
777
1117
  appCode = _ref2.appCode, config = _ref2.config, env = _ref2.env, sessionId = _ref2.sessionId;
778
1118
  _context13.next = 3;
779
- return BaseClient._getBaseClient(env, sessionId).mutation({
780
- dbConfig: [{
1119
+ return BaseClient._getBaseClient(env, sessionId)("mutation")({
1120
+ dbConfigMutation: [{
781
1121
  appCode: appCode,
782
1122
  config: JSON.stringify(config)
783
- }, true]
1123
+ }, {
1124
+ "...on ErrorAccessDenied": {
1125
+ __typename: true,
1126
+ message: true
1127
+ },
1128
+ "...on DbConfigMutationResponse": {
1129
+ __typename: true,
1130
+ dbConfigMutation: true
1131
+ }
1132
+ }]
784
1133
  });
785
1134
 
786
1135
  case 3:
787
1136
  _yield$BaseClient$_ge2 = _context13.sent;
788
- dbConfig = _yield$BaseClient$_ge2.dbConfig;
789
- return _context13.abrupt("return", dbConfig);
1137
+ dbConfigMutation = _yield$BaseClient$_ge2.dbConfigMutation;
790
1138
 
791
- case 6:
1139
+ if (dbConfigMutation) {
1140
+ _context13.next = 7;
1141
+ break;
1142
+ }
1143
+
1144
+ return _context13.abrupt("return", null);
1145
+
1146
+ case 7:
1147
+ if (!(dbConfigMutation.__typename === "ErrorAccessDenied")) {
1148
+ _context13.next = 9;
1149
+ break;
1150
+ }
1151
+
1152
+ return _context13.abrupt("return", dbConfigMutation);
1153
+
1154
+ case 9:
1155
+ return _context13.abrupt("return", {
1156
+ __typename: "SuccessResponse",
1157
+ data: dbConfigMutation.dbConfigMutation
1158
+ });
1159
+
1160
+ case 10:
792
1161
  case "end":
793
1162
  return _context13.stop();
794
1163
  }
@@ -812,18 +1181,71 @@ export var BaseClient = /*#__PURE__*/function () {
812
1181
  switch (_context14.prev = _context14.next) {
813
1182
  case 0:
814
1183
  _context14.next = 2;
815
- return BaseClient._getBaseClient(env, sessionId).query({
1184
+ return BaseClient._getBaseClient(env, sessionId)("query")({
816
1185
  dbConfig: [{
817
1186
  appCode: appCode
818
- }, true]
1187
+ }, {
1188
+ "...on ErrorAccessDenied": {
1189
+ __typename: true,
1190
+ message: true
1191
+ },
1192
+ "...on ErrorNotFound": {
1193
+ __typename: true,
1194
+ message: true
1195
+ },
1196
+ "...on ErrorNotExist": {
1197
+ __typename: true,
1198
+ message: true
1199
+ },
1200
+ "...on DbConfigResponse": {
1201
+ __typename: true,
1202
+ json: true
1203
+ }
1204
+ }]
819
1205
  });
820
1206
 
821
1207
  case 2:
822
1208
  _yield$BaseClient$_ge3 = _context14.sent;
823
1209
  dbConfig = _yield$BaseClient$_ge3.dbConfig;
1210
+
1211
+ if (dbConfig) {
1212
+ _context14.next = 6;
1213
+ break;
1214
+ }
1215
+
1216
+ return _context14.abrupt("return", null);
1217
+
1218
+ case 6:
1219
+ if (!(dbConfig.__typename === "ErrorAccessDenied")) {
1220
+ _context14.next = 8;
1221
+ break;
1222
+ }
1223
+
824
1224
  return _context14.abrupt("return", dbConfig);
825
1225
 
826
- case 5:
1226
+ case 8:
1227
+ if (!(dbConfig.__typename === "ErrorNotFound")) {
1228
+ _context14.next = 10;
1229
+ break;
1230
+ }
1231
+
1232
+ return _context14.abrupt("return", dbConfig);
1233
+
1234
+ case 10:
1235
+ if (!(dbConfig.__typename === "ErrorNotExist")) {
1236
+ _context14.next = 12;
1237
+ break;
1238
+ }
1239
+
1240
+ return _context14.abrupt("return", dbConfig);
1241
+
1242
+ case 12:
1243
+ return _context14.abrupt("return", {
1244
+ __typename: "SuccessResponse",
1245
+ data: dbConfig.json
1246
+ });
1247
+
1248
+ case 13:
827
1249
  case "end":
828
1250
  return _context14.stop();
829
1251
  }
@@ -848,22 +1270,51 @@ export var BaseClient = /*#__PURE__*/function () {
848
1270
  case 0:
849
1271
  lang = _ref3.lang, env = _ref3.env, sessionId = _ref3.sessionId;
850
1272
  _context15.next = 3;
851
- return BaseClient._getBaseClient(env, sessionId).query({
1273
+ return BaseClient._getBaseClient(env, sessionId)("query")({
852
1274
  faq: [{
853
1275
  lang: lang
854
1276
  }, {
855
- answer: true,
856
- order: true,
857
- question: true
1277
+ "...on ErrorAccessDenied": {
1278
+ __typename: true,
1279
+ message: true
1280
+ },
1281
+ "...on FaqResponse": {
1282
+ __typename: true,
1283
+ faq: {
1284
+ answer: true,
1285
+ order: true,
1286
+ question: true
1287
+ }
1288
+ }
858
1289
  }]
859
1290
  });
860
1291
 
861
1292
  case 3:
862
1293
  _yield$BaseClient$_ge4 = _context15.sent;
863
1294
  faq = _yield$BaseClient$_ge4.faq;
1295
+
1296
+ if (faq) {
1297
+ _context15.next = 7;
1298
+ break;
1299
+ }
1300
+
1301
+ return _context15.abrupt("return", null);
1302
+
1303
+ case 7:
1304
+ if (!(faq.__typename === "ErrorAccessDenied")) {
1305
+ _context15.next = 9;
1306
+ break;
1307
+ }
1308
+
864
1309
  return _context15.abrupt("return", faq);
865
1310
 
866
- case 6:
1311
+ case 9:
1312
+ return _context15.abrupt("return", {
1313
+ __typename: "SuccessResponse",
1314
+ data: faq.faq
1315
+ });
1316
+
1317
+ case 10:
867
1318
  case "end":
868
1319
  return _context15.stop();
869
1320
  }
@@ -888,33 +1339,62 @@ export var BaseClient = /*#__PURE__*/function () {
888
1339
  case 0:
889
1340
  env = _ref4.env, lang = _ref4.lang, sessionId = _ref4.sessionId;
890
1341
  _context16.next = 3;
891
- return BaseClient._getBaseClient(env, sessionId).query({
1342
+ return BaseClient._getBaseClient(env, sessionId)("query")({
892
1343
  blog: [{
893
1344
  lang: lang
894
1345
  }, {
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
1346
+ "...on ErrorLangNotExist": {
1347
+ __typename: true,
1348
+ message: true
1349
+ },
1350
+ "...on BlogResponse": {
1351
+ __typename: true,
1352
+ blogItems: {
1353
+ id: true,
1354
+ blogId: true,
1355
+ author: true,
1356
+ body: true,
1357
+ date: true,
1358
+ image: true,
1359
+ imageAlt: true,
1360
+ summary: true,
1361
+ title: true,
1362
+ order: true
1363
+ }
1364
+ }
905
1365
  }]
906
1366
  });
907
1367
 
908
1368
  case 3:
909
1369
  _yield$BaseClient$_ge5 = _context16.sent;
910
1370
  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
1371
 
917
- case 6:
1372
+ if (blog) {
1373
+ _context16.next = 7;
1374
+ break;
1375
+ }
1376
+
1377
+ return _context16.abrupt("return", null);
1378
+
1379
+ case 7:
1380
+ if (!(blog.__typename === "ErrorLangNotExist")) {
1381
+ _context16.next = 9;
1382
+ break;
1383
+ }
1384
+
1385
+ return _context16.abrupt("return", blog);
1386
+
1387
+ case 9:
1388
+ return _context16.abrupt("return", {
1389
+ __typename: "SuccessResponse",
1390
+ data: blog.blogItems.map(function (b) {
1391
+ return _objectSpread(_objectSpread({}, b), {}, {
1392
+ date: new Date(b.date)
1393
+ });
1394
+ })
1395
+ });
1396
+
1397
+ case 10:
918
1398
  case "end":
919
1399
  return _context16.stop();
920
1400
  }
@@ -931,41 +1411,90 @@ export var BaseClient = /*#__PURE__*/function () {
931
1411
 
932
1412
  _proto.reportUser = /*#__PURE__*/function () {
933
1413
  var _reportUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(reportedUserId, customMessage) {
934
- var _yield$this$client$mu4, sendReport;
1414
+ var _yield$this$client7, sendReport;
935
1415
 
936
1416
  return _regeneratorRuntime.wrap(function _callee17$(_context17) {
937
1417
  while (1) {
938
1418
  switch (_context17.prev = _context17.next) {
939
1419
  case 0:
940
1420
  _context17.next = 2;
941
- return this.client.mutation({
1421
+ return this.client("mutation")({
942
1422
  sendReport: [{
943
1423
  reportedUserId: reportedUserId,
944
1424
  customMessage: customMessage
945
1425
  }, {
946
- id: true,
947
- customMessage: true,
948
- user: {
949
- id: true,
950
- firstname: true,
951
- lastname: true,
952
- email: true
1426
+ "...on ErrorAccessDenied": {
1427
+ __typename: true,
1428
+ message: true
953
1429
  },
954
- reportedUser: {
955
- id: true,
956
- firstname: true,
957
- lastname: true,
958
- email: true
1430
+ "...on ErrorNotFound": {
1431
+ __typename: true,
1432
+ message: true
1433
+ },
1434
+ "...on SendReportResponse": {
1435
+ __typename: true,
1436
+ sendReport: {
1437
+ id: true,
1438
+ customMessage: true,
1439
+ user: {
1440
+ id: true,
1441
+ firstname: true,
1442
+ lastname: true,
1443
+ email: true
1444
+ },
1445
+ reportedUser: {
1446
+ id: true,
1447
+ firstname: true,
1448
+ lastname: true,
1449
+ email: true
1450
+ }
1451
+ }
959
1452
  }
960
1453
  }]
961
1454
  });
962
1455
 
963
1456
  case 2:
964
- _yield$this$client$mu4 = _context17.sent;
965
- sendReport = _yield$this$client$mu4.sendReport;
1457
+ _yield$this$client7 = _context17.sent;
1458
+ sendReport = _yield$this$client7.sendReport;
1459
+
1460
+ if (sendReport) {
1461
+ _context17.next = 6;
1462
+ break;
1463
+ }
1464
+
1465
+ return _context17.abrupt("return", null);
1466
+
1467
+ case 6:
1468
+ if (!(sendReport.__typename === "ErrorAccessDenied")) {
1469
+ _context17.next = 8;
1470
+ break;
1471
+ }
1472
+
966
1473
  return _context17.abrupt("return", sendReport);
967
1474
 
968
- case 5:
1475
+ case 8:
1476
+ if (!(sendReport.__typename === "ErrorNotFound")) {
1477
+ _context17.next = 10;
1478
+ break;
1479
+ }
1480
+
1481
+ return _context17.abrupt("return", sendReport);
1482
+
1483
+ case 10:
1484
+ if (sendReport.sendReport) {
1485
+ _context17.next = 12;
1486
+ break;
1487
+ }
1488
+
1489
+ return _context17.abrupt("return", null);
1490
+
1491
+ case 12:
1492
+ return _context17.abrupt("return", {
1493
+ __typename: "SuccessResponse",
1494
+ data: sendReport.sendReport
1495
+ });
1496
+
1497
+ case 13:
969
1498
  case "end":
970
1499
  return _context17.stop();
971
1500
  }
@@ -990,18 +1519,55 @@ export var BaseClient = /*#__PURE__*/function () {
990
1519
  case 0:
991
1520
  sessionId = _ref5.sessionId, userId = _ref5.userId, env = _ref5.env;
992
1521
  _context18.next = 3;
993
- return BaseClient._getBaseClient(env, sessionId).mutation({
1522
+ return BaseClient._getBaseClient(env, sessionId)("mutation")({
994
1523
  deleteUser: [{
995
1524
  userId: userId
996
- }, true]
1525
+ }, {
1526
+ "...on ErrorAccessDenied": {
1527
+ __typename: true,
1528
+ message: true
1529
+ },
1530
+ "...on DeleteUserResponse": {
1531
+ __typename: true,
1532
+ deleteUser: true
1533
+ }
1534
+ }]
997
1535
  });
998
1536
 
999
1537
  case 3:
1000
1538
  _yield$BaseClient$_ge6 = _context18.sent;
1001
1539
  deleteUser = _yield$BaseClient$_ge6.deleteUser;
1002
- return _context18.abrupt("return", deleteUser != null ? deleteUser : false);
1003
1540
 
1004
- case 6:
1541
+ if (deleteUser) {
1542
+ _context18.next = 7;
1543
+ break;
1544
+ }
1545
+
1546
+ return _context18.abrupt("return", null);
1547
+
1548
+ case 7:
1549
+ if (!(deleteUser.__typename === "ErrorAccessDenied")) {
1550
+ _context18.next = 9;
1551
+ break;
1552
+ }
1553
+
1554
+ return _context18.abrupt("return", deleteUser);
1555
+
1556
+ case 9:
1557
+ if (deleteUser.deleteUser) {
1558
+ _context18.next = 11;
1559
+ break;
1560
+ }
1561
+
1562
+ return _context18.abrupt("return", null);
1563
+
1564
+ case 11:
1565
+ return _context18.abrupt("return", {
1566
+ __typename: "SuccessResponse",
1567
+ data: deleteUser.deleteUser
1568
+ });
1569
+
1570
+ case 12:
1005
1571
  case "end":
1006
1572
  return _context18.stop();
1007
1573
  }
@@ -1018,7 +1584,7 @@ export var BaseClient = /*#__PURE__*/function () {
1018
1584
 
1019
1585
  _proto.dbGet = /*#__PURE__*/function () {
1020
1586
  var _dbGet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19(_ref6) {
1021
- var field, userId, _yield$this$client$qu4, dbGet;
1587
+ var field, userId, _yield$this$client8, dbGet;
1022
1588
 
1023
1589
  return _regeneratorRuntime.wrap(function _callee19$(_context19) {
1024
1590
  while (1) {
@@ -1026,19 +1592,72 @@ export var BaseClient = /*#__PURE__*/function () {
1026
1592
  case 0:
1027
1593
  field = _ref6.field, userId = _ref6.userId;
1028
1594
  _context19.next = 3;
1029
- return this.client.query({
1595
+ return this.client("query")({
1030
1596
  dbGet: [{
1031
1597
  field: field,
1032
1598
  userId: userId
1033
- }, true]
1599
+ }, {
1600
+ "...on ErrorAccessDenied": {
1601
+ __typename: true,
1602
+ message: true
1603
+ },
1604
+ "...on ErrorNotExist": {
1605
+ __typename: true,
1606
+ message: true
1607
+ },
1608
+ "...on ErrorNotFound": {
1609
+ __typename: true,
1610
+ message: true
1611
+ },
1612
+ "...on DbGetResponse": {
1613
+ __typename: true,
1614
+ json: true
1615
+ }
1616
+ }]
1034
1617
  });
1035
1618
 
1036
1619
  case 3:
1037
- _yield$this$client$qu4 = _context19.sent;
1038
- dbGet = _yield$this$client$qu4.dbGet;
1039
- return _context19.abrupt("return", dbGet.res);
1620
+ _yield$this$client8 = _context19.sent;
1621
+ dbGet = _yield$this$client8.dbGet;
1040
1622
 
1041
- case 6:
1623
+ if (dbGet) {
1624
+ _context19.next = 7;
1625
+ break;
1626
+ }
1627
+
1628
+ return _context19.abrupt("return", null);
1629
+
1630
+ case 7:
1631
+ if (!(dbGet.__typename === "ErrorAccessDenied")) {
1632
+ _context19.next = 9;
1633
+ break;
1634
+ }
1635
+
1636
+ return _context19.abrupt("return", dbGet);
1637
+
1638
+ case 9:
1639
+ if (!(dbGet.__typename === "ErrorNotExist")) {
1640
+ _context19.next = 11;
1641
+ break;
1642
+ }
1643
+
1644
+ return _context19.abrupt("return", dbGet);
1645
+
1646
+ case 11:
1647
+ if (!(dbGet.__typename === "ErrorNotFound")) {
1648
+ _context19.next = 13;
1649
+ break;
1650
+ }
1651
+
1652
+ return _context19.abrupt("return", dbGet);
1653
+
1654
+ case 13:
1655
+ return _context19.abrupt("return", {
1656
+ __typename: "SuccessResponse",
1657
+ data: dbGet.json
1658
+ });
1659
+
1660
+ case 14:
1042
1661
  case "end":
1043
1662
  return _context19.stop();
1044
1663
  }
@@ -1055,7 +1674,7 @@ export var BaseClient = /*#__PURE__*/function () {
1055
1674
 
1056
1675
  _proto.dbSet = /*#__PURE__*/function () {
1057
1676
  var _dbSet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20(_ref7) {
1058
- var value, userId, _yield$this$client$mu5, dbSet;
1677
+ var value, userId, _yield$this$client9, dbSet;
1059
1678
 
1060
1679
  return _regeneratorRuntime.wrap(function _callee20$(_context20) {
1061
1680
  while (1) {
@@ -1072,19 +1691,68 @@ export var BaseClient = /*#__PURE__*/function () {
1072
1691
 
1073
1692
  case 3:
1074
1693
  _context20.next = 5;
1075
- return this.client.mutation({
1694
+ return this.client("mutation")({
1076
1695
  dbSet: [{
1077
1696
  userId: userId,
1078
1697
  value: serialize(value).toString("base64")
1079
- }, true]
1698
+ }, {
1699
+ "...on ErrorAccessDenied": {
1700
+ __typename: true,
1701
+ message: true
1702
+ },
1703
+ "...on ErrorNotFound": {
1704
+ __typename: true,
1705
+ message: true
1706
+ },
1707
+ "...on DbSetResponse": {
1708
+ __typename: true,
1709
+ dbSet: true
1710
+ }
1711
+ }]
1080
1712
  });
1081
1713
 
1082
1714
  case 5:
1083
- _yield$this$client$mu5 = _context20.sent;
1084
- dbSet = _yield$this$client$mu5.dbSet;
1085
- return _context20.abrupt("return", dbSet.res);
1715
+ _yield$this$client9 = _context20.sent;
1716
+ dbSet = _yield$this$client9.dbSet;
1086
1717
 
1087
- case 8:
1718
+ if (dbSet) {
1719
+ _context20.next = 9;
1720
+ break;
1721
+ }
1722
+
1723
+ return _context20.abrupt("return", null);
1724
+
1725
+ case 9:
1726
+ if (!(dbSet.__typename === "ErrorAccessDenied")) {
1727
+ _context20.next = 11;
1728
+ break;
1729
+ }
1730
+
1731
+ return _context20.abrupt("return", dbSet);
1732
+
1733
+ case 11:
1734
+ if (!(dbSet.__typename === "ErrorNotFound")) {
1735
+ _context20.next = 13;
1736
+ break;
1737
+ }
1738
+
1739
+ return _context20.abrupt("return", dbSet);
1740
+
1741
+ case 13:
1742
+ if (dbSet.dbSet) {
1743
+ _context20.next = 15;
1744
+ break;
1745
+ }
1746
+
1747
+ return _context20.abrupt("return", null);
1748
+
1749
+ case 15:
1750
+ return _context20.abrupt("return", {
1751
+ __typename: "SuccessResponse",
1752
+ data: dbSet.dbSet.res
1753
+ });
1754
+
1755
+ case 16:
1088
1756
  case "end":
1089
1757
  return _context20.stop();
1090
1758
  }
@@ -1101,7 +1769,7 @@ export var BaseClient = /*#__PURE__*/function () {
1101
1769
 
1102
1770
  _proto.dbSearch = /*#__PURE__*/function () {
1103
1771
  var _dbSearch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21(_ref8) {
1104
- var search, field, _yield$this$client$qu5, dbSearch;
1772
+ var search, field, _yield$this$client10, dbSearch;
1105
1773
 
1106
1774
  return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1107
1775
  while (1) {
@@ -1109,19 +1777,72 @@ export var BaseClient = /*#__PURE__*/function () {
1109
1777
  case 0:
1110
1778
  search = _ref8.search, field = _ref8.field;
1111
1779
  _context21.next = 3;
1112
- return this.client.query({
1780
+ return this.client("query")({
1113
1781
  dbSearch: [{
1114
1782
  search: search,
1115
1783
  field: field
1116
- }, true]
1784
+ }, {
1785
+ "...on ErrorAccessDenied": {
1786
+ __typename: true,
1787
+ message: true
1788
+ },
1789
+ "...on ErrorBasic": {
1790
+ __typename: true,
1791
+ message: true
1792
+ },
1793
+ "...on ErrorNotExist": {
1794
+ __typename: true,
1795
+ message: true
1796
+ },
1797
+ "...on DbSearchResponse": {
1798
+ __typename: true,
1799
+ json: true
1800
+ }
1801
+ }]
1117
1802
  });
1118
1803
 
1119
1804
  case 3:
1120
- _yield$this$client$qu5 = _context21.sent;
1121
- dbSearch = _yield$this$client$qu5.dbSearch;
1805
+ _yield$this$client10 = _context21.sent;
1806
+ dbSearch = _yield$this$client10.dbSearch;
1807
+
1808
+ if (dbSearch) {
1809
+ _context21.next = 7;
1810
+ break;
1811
+ }
1812
+
1813
+ return _context21.abrupt("return", null);
1814
+
1815
+ case 7:
1816
+ if (!(dbSearch.__typename === "ErrorAccessDenied")) {
1817
+ _context21.next = 9;
1818
+ break;
1819
+ }
1820
+
1122
1821
  return _context21.abrupt("return", dbSearch);
1123
1822
 
1124
- case 6:
1823
+ case 9:
1824
+ if (!(dbSearch.__typename === "ErrorBasic")) {
1825
+ _context21.next = 11;
1826
+ break;
1827
+ }
1828
+
1829
+ return _context21.abrupt("return", dbSearch);
1830
+
1831
+ case 11:
1832
+ if (!(dbSearch.__typename === "ErrorNotExist")) {
1833
+ _context21.next = 13;
1834
+ break;
1835
+ }
1836
+
1837
+ return _context21.abrupt("return", dbSearch);
1838
+
1839
+ case 13:
1840
+ return _context21.abrupt("return", {
1841
+ __typename: "SuccessResponse",
1842
+ data: dbSearch.json
1843
+ });
1844
+
1845
+ case 14:
1125
1846
  case "end":
1126
1847
  return _context21.stop();
1127
1848
  }
@@ -1138,7 +1859,9 @@ export var BaseClient = /*#__PURE__*/function () {
1138
1859
 
1139
1860
  _proto.deleteFolder = /*#__PURE__*/function () {
1140
1861
  var _deleteFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22(_ref9) {
1141
- var id, _yield$this$client$mu6, deleteFolder;
1862
+ var _deleteFolder$deleteF;
1863
+
1864
+ var id, _yield$this$client11, deleteFolder;
1142
1865
 
1143
1866
  return _regeneratorRuntime.wrap(function _callee22$(_context22) {
1144
1867
  while (1) {
@@ -1146,18 +1869,59 @@ export var BaseClient = /*#__PURE__*/function () {
1146
1869
  case 0:
1147
1870
  id = _ref9.id;
1148
1871
  _context22.next = 3;
1149
- return this.client.mutation({
1872
+ return this.client("mutation")({
1150
1873
  deleteFolder: [{
1151
1874
  id: id
1152
- }, true]
1875
+ }, {
1876
+ "...on ErrorNotExist": {
1877
+ __typename: true,
1878
+ message: true
1879
+ },
1880
+ "...on ErrorAccessDenied": {
1881
+ __typename: true,
1882
+ message: true
1883
+ },
1884
+ "...on DeleteFolderResponse": {
1885
+ __typename: true,
1886
+ deleteFolder: true
1887
+ }
1888
+ }]
1153
1889
  });
1154
1890
 
1155
1891
  case 3:
1156
- _yield$this$client$mu6 = _context22.sent;
1157
- deleteFolder = _yield$this$client$mu6.deleteFolder;
1158
- return _context22.abrupt("return", deleteFolder != null ? deleteFolder : false);
1892
+ _yield$this$client11 = _context22.sent;
1893
+ deleteFolder = _yield$this$client11.deleteFolder;
1159
1894
 
1160
- case 6:
1895
+ if (deleteFolder) {
1896
+ _context22.next = 7;
1897
+ break;
1898
+ }
1899
+
1900
+ return _context22.abrupt("return", null);
1901
+
1902
+ case 7:
1903
+ if (!(deleteFolder.__typename === "ErrorNotExist")) {
1904
+ _context22.next = 9;
1905
+ break;
1906
+ }
1907
+
1908
+ return _context22.abrupt("return", deleteFolder);
1909
+
1910
+ case 9:
1911
+ if (!(deleteFolder.__typename === "ErrorAccessDenied")) {
1912
+ _context22.next = 11;
1913
+ break;
1914
+ }
1915
+
1916
+ return _context22.abrupt("return", deleteFolder);
1917
+
1918
+ case 11:
1919
+ return _context22.abrupt("return", {
1920
+ __typename: "SuccessResponse",
1921
+ data: (_deleteFolder$deleteF = deleteFolder.deleteFolder) != null ? _deleteFolder$deleteF : false
1922
+ });
1923
+
1924
+ case 12:
1161
1925
  case "end":
1162
1926
  return _context22.stop();
1163
1927
  }
@@ -1174,7 +1938,9 @@ export var BaseClient = /*#__PURE__*/function () {
1174
1938
 
1175
1939
  _proto.moveFolders = /*#__PURE__*/function () {
1176
1940
  var _moveFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23(_ref10) {
1177
- var foldersId, parentFolderId, _yield$this$client$mu7, moveFolders;
1941
+ var _moveFolders$moveFold;
1942
+
1943
+ var foldersId, parentFolderId, _yield$this$client12, moveFolders;
1178
1944
 
1179
1945
  return _regeneratorRuntime.wrap(function _callee23$(_context23) {
1180
1946
  while (1) {
@@ -1182,19 +1948,48 @@ export var BaseClient = /*#__PURE__*/function () {
1182
1948
  case 0:
1183
1949
  foldersId = _ref10.foldersId, parentFolderId = _ref10.parentFolderId;
1184
1950
  _context23.next = 3;
1185
- return this.client.mutation({
1951
+ return this.client("mutation")({
1186
1952
  moveFolders: [{
1187
1953
  foldersId: foldersId,
1188
1954
  parentFolderId: parentFolderId
1189
- }, true]
1955
+ }, {
1956
+ "...on ErrorAccessDenied": {
1957
+ __typename: true,
1958
+ message: true
1959
+ },
1960
+ "...on MoveFoldersResponse": {
1961
+ __typename: true,
1962
+ moveFolders: true
1963
+ }
1964
+ }]
1190
1965
  });
1191
1966
 
1192
1967
  case 3:
1193
- _yield$this$client$mu7 = _context23.sent;
1194
- moveFolders = _yield$this$client$mu7.moveFolders;
1195
- return _context23.abrupt("return", moveFolders != null ? moveFolders : false);
1968
+ _yield$this$client12 = _context23.sent;
1969
+ moveFolders = _yield$this$client12.moveFolders;
1196
1970
 
1197
- case 6:
1971
+ if (moveFolders) {
1972
+ _context23.next = 7;
1973
+ break;
1974
+ }
1975
+
1976
+ return _context23.abrupt("return", null);
1977
+
1978
+ case 7:
1979
+ if (!(moveFolders.__typename === "ErrorAccessDenied")) {
1980
+ _context23.next = 9;
1981
+ break;
1982
+ }
1983
+
1984
+ return _context23.abrupt("return", moveFolders);
1985
+
1986
+ case 9:
1987
+ return _context23.abrupt("return", {
1988
+ __typename: "SuccessResponse",
1989
+ data: (_moveFolders$moveFold = moveFolders.moveFolders) != null ? _moveFolders$moveFold : false
1990
+ });
1991
+
1992
+ case 10:
1198
1993
  case "end":
1199
1994
  return _context23.stop();
1200
1995
  }
@@ -1211,7 +2006,9 @@ export var BaseClient = /*#__PURE__*/function () {
1211
2006
 
1212
2007
  _proto.moveFiles = /*#__PURE__*/function () {
1213
2008
  var _moveFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref11) {
1214
- var filesId, parentFolderId, _yield$this$client$mu8, moveFiles;
2009
+ var _moveFiles$moveFiles;
2010
+
2011
+ var filesId, parentFolderId, _yield$this$client13, moveFiles;
1215
2012
 
1216
2013
  return _regeneratorRuntime.wrap(function _callee24$(_context24) {
1217
2014
  while (1) {
@@ -1219,19 +2016,48 @@ export var BaseClient = /*#__PURE__*/function () {
1219
2016
  case 0:
1220
2017
  filesId = _ref11.filesId, parentFolderId = _ref11.parentFolderId;
1221
2018
  _context24.next = 3;
1222
- return this.client.mutation({
2019
+ return this.client("mutation")({
1223
2020
  moveFiles: [{
1224
2021
  filesId: filesId,
1225
2022
  parentFolderId: parentFolderId
1226
- }, true]
2023
+ }, {
2024
+ "...on ErrorAccessDenied": {
2025
+ __typename: true,
2026
+ message: true
2027
+ },
2028
+ "...on MoveFilesResponse": {
2029
+ __typename: true,
2030
+ moveFiles: true
2031
+ }
2032
+ }]
1227
2033
  });
1228
2034
 
1229
2035
  case 3:
1230
- _yield$this$client$mu8 = _context24.sent;
1231
- moveFiles = _yield$this$client$mu8.moveFiles;
1232
- return _context24.abrupt("return", moveFiles != null ? moveFiles : false);
2036
+ _yield$this$client13 = _context24.sent;
2037
+ moveFiles = _yield$this$client13.moveFiles;
1233
2038
 
1234
- case 6:
2039
+ if (moveFiles) {
2040
+ _context24.next = 7;
2041
+ break;
2042
+ }
2043
+
2044
+ return _context24.abrupt("return", null);
2045
+
2046
+ case 7:
2047
+ if (!(moveFiles.__typename === "ErrorAccessDenied")) {
2048
+ _context24.next = 9;
2049
+ break;
2050
+ }
2051
+
2052
+ return _context24.abrupt("return", moveFiles);
2053
+
2054
+ case 9:
2055
+ return _context24.abrupt("return", {
2056
+ __typename: "SuccessResponse",
2057
+ data: (_moveFiles$moveFiles = moveFiles.moveFiles) != null ? _moveFiles$moveFiles : false
2058
+ });
2059
+
2060
+ case 10:
1235
2061
  case "end":
1236
2062
  return _context24.stop();
1237
2063
  }
@@ -1248,7 +2074,7 @@ export var BaseClient = /*#__PURE__*/function () {
1248
2074
 
1249
2075
  _proto.folderSize = /*#__PURE__*/function () {
1250
2076
  var _folderSize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref12) {
1251
- var folderId, _yield$this$client$qu6, folderSize;
2077
+ var folderId, _yield$this$client14, folderSize;
1252
2078
 
1253
2079
  return _regeneratorRuntime.wrap(function _callee25$(_context25) {
1254
2080
  while (1) {
@@ -1256,18 +2082,25 @@ export var BaseClient = /*#__PURE__*/function () {
1256
2082
  case 0:
1257
2083
  folderId = _ref12.folderId;
1258
2084
  _context25.next = 3;
1259
- return this.client.query({
2085
+ return this.client("query")({
1260
2086
  folderSize: [{
1261
2087
  folderId: folderId
1262
2088
  }, {
1263
- size: true,
1264
- sizeBefore: true
2089
+ "...on ErrorAccessDenied": {
2090
+ __typename: true,
2091
+ message: true
2092
+ },
2093
+ "...on FolderSizeResponse": {
2094
+ __typename: true,
2095
+ size: true,
2096
+ sizeBefore: true
2097
+ }
1265
2098
  }]
1266
2099
  });
1267
2100
 
1268
2101
  case 3:
1269
- _yield$this$client$qu6 = _context25.sent;
1270
- folderSize = _yield$this$client$qu6.folderSize;
2102
+ _yield$this$client14 = _context25.sent;
2103
+ folderSize = _yield$this$client14.folderSize;
1271
2104
 
1272
2105
  if (folderSize) {
1273
2106
  _context25.next = 7;
@@ -1277,12 +2110,23 @@ export var BaseClient = /*#__PURE__*/function () {
1277
2110
  return _context25.abrupt("return", null);
1278
2111
 
1279
2112
  case 7:
2113
+ if (!(folderSize.__typename === "ErrorAccessDenied")) {
2114
+ _context25.next = 9;
2115
+ break;
2116
+ }
2117
+
2118
+ return _context25.abrupt("return", folderSize);
2119
+
2120
+ case 9:
1280
2121
  return _context25.abrupt("return", {
1281
- size: BigInt(folderSize.size),
1282
- sizeBefore: BigInt(folderSize.sizeBefore)
2122
+ __typename: "SuccessResponse",
2123
+ data: {
2124
+ size: BigInt(folderSize.size),
2125
+ sizeBefore: BigInt(folderSize.sizeBefore)
2126
+ }
1283
2127
  });
1284
2128
 
1285
- case 8:
2129
+ case 10:
1286
2130
  case "end":
1287
2131
  return _context25.stop();
1288
2132
  }
@@ -1297,6 +2141,58 @@ export var BaseClient = /*#__PURE__*/function () {
1297
2141
  return folderSize;
1298
2142
  }();
1299
2143
 
2144
+ _proto.getSponsorshipLink = /*#__PURE__*/function () {
2145
+ var _getSponsorshipLink = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(_ref13) {
2146
+ var backUrl, me;
2147
+ return _regeneratorRuntime.wrap(function _callee26$(_context26) {
2148
+ while (1) {
2149
+ switch (_context26.prev = _context26.next) {
2150
+ case 0:
2151
+ backUrl = _ref13.backUrl;
2152
+ _context26.next = 3;
2153
+ return this.me({
2154
+ withPublicKey: false
2155
+ });
2156
+
2157
+ case 3:
2158
+ me = _context26.sent;
2159
+
2160
+ if (me) {
2161
+ _context26.next = 6;
2162
+ break;
2163
+ }
2164
+
2165
+ return _context26.abrupt("return", null);
2166
+
2167
+ case 6:
2168
+ if (!(me.__typename === "ErrorNotFound")) {
2169
+ _context26.next = 8;
2170
+ break;
2171
+ }
2172
+
2173
+ return _context26.abrupt("return", null);
2174
+
2175
+ case 8:
2176
+ return _context26.abrupt("return", getLink({
2177
+ app: "auth",
2178
+ path: "/sign-up?gf=" + btoa(me.data.email) + "&au=" + btoa(backUrl)
2179
+ }));
2180
+
2181
+ case 9:
2182
+ case "end":
2183
+ return _context26.stop();
2184
+ }
2185
+ }
2186
+ }, _callee26, this);
2187
+ }));
2188
+
2189
+ function getSponsorshipLink(_x29) {
2190
+ return _getSponsorshipLink.apply(this, arguments);
2191
+ }
2192
+
2193
+ return getSponsorshipLink;
2194
+ }();
2195
+
1300
2196
  return BaseClient;
1301
2197
  }();
1302
2198
 
@@ -1318,15 +2214,15 @@ BaseClient.getBaseUrl = function (env, graphcdn) {
1318
2214
  return graphcdn ? "https://secrecy.graphcdn.app" : "https://api.secrecy.me/graphql";
1319
2215
 
1320
2216
  case "staging":
1321
- return "https:/api.staging.secrecy.me/graphql";
2217
+ return "https://api.staging.secrecy.me/graphql";
1322
2218
 
1323
2219
  case "dev":
1324
2220
  default:
1325
- return "https:/api.dev.secrecy.me/graphql";
2221
+ return "https://api.dev.secrecy.me/graphql";
1326
2222
  }
1327
2223
  };
1328
2224
 
1329
2225
  BaseClient._getBaseClient = function (env, session) {
1330
2226
  return createThunder(BaseClient.getBaseUrl(env), session);
1331
2227
  };
1332
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsInVzZXJzQ2FjaGUiLCJnZXRTdG9yYWdlIiwiU2VsZWN0b3JzIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInF1ZXJ5IiwidXNlciIsImlkIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJsYW5nIiwicHVibGljS2V5IiwidW5kZWZpbmVkIiwiZW1haWwiLCJwaG9uZSIsInJvbGUiLCJkZWxldGVkQXQiLCJsYXN0TG9naW4iLCJnZXRVc2VyIiwicGFyYW1zIiwic2VsZWN0b3IiLCJjbGllbnQiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsImRhdGEiLCJzIiwiYSIsImxvZ291dCIsImxvY2FsIiwiand0IiwiY2xlYXIiLCJ1c2VyQXBwS2V5cyIsInVzZXJBcHBTZXNzaW9uIiwibXV0YXRpb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJFcnJvciIsInBsYW5zIiwia2luZCIsImNvZGVzIiwibGltaXRzIiwiZG93bmxvYWRCYW5kd2lkdGgiLCJkb3dubG9hZENvdW50IiwiaGFyZEZpbGVDb3VudCIsImhhcmRGaWxlU2l6ZSIsInBlckZpbGVTaXplIiwidXBsb2FkQmFuZHdpZHRoIiwidXBsb2FkQ291bnQiLCJyZWNlaXZlZE1haWxzIiwiY291bnQiLCJmaWxlQ291bnQiLCJmaWxlU2l6ZSIsImhhcmRDb3VudCIsInNlbnRNYWlscyIsInBheSIsImlucHV0IiwiYXV0b1JlbmV3IiwiY2FuY2VsUGF5bWVudCIsInBheW1lbnRJbmZvcyIsImhvc3RlZFVybCIsImF1dG9yZW5ldyIsInBsYW4iLCJ0b3RhbCIsInBkZiIsImN1cnJlbmN5IiwiY2xvdWQiLCJzaXplIiwibWF4U2l6ZSIsIm1heENvdW50IiwibWFpbCIsInJlY2VpdmVkIiwibWF4RmlsZUNvdW50IiwibWF4RmlsZVNpemUiLCJzZW50IiwiQmlnSW50IiwiZ29kRmF0aGVyQW5kQ2hpbGRyZW4iLCJnb2RDaGlsZHJlbiIsImdvZEZhdGhlciIsInVwZGF0ZUFwcERCQ29uZmlnIiwiYXBwQ29kZSIsImNvbmZpZyIsImRiQ29uZmlnIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwiZ2V0RkFRIiwiZmFxIiwiYW5zd2VyIiwib3JkZXIiLCJxdWVzdGlvbiIsImdldEJsb2ciLCJibG9nIiwiYmxvZ0lkIiwiYXV0aG9yIiwiYm9keSIsImltYWdlIiwiaW1hZ2VBbHQiLCJzdW1tYXJ5IiwidGl0bGUiLCJiIiwicmVwb3J0VXNlciIsInJlcG9ydGVkVXNlcklkIiwiY3VzdG9tTWVzc2FnZSIsInNlbmRSZXBvcnQiLCJyZXBvcnRlZFVzZXIiLCJkZWxldGVVc2VyIiwiZGJHZXQiLCJmaWVsZCIsInJlcyIsImRiU2V0IiwidmFsdWUiLCJ0b1N0cmluZyIsImRiU2VhcmNoIiwic2VhcmNoIiwiZGVsZXRlRm9sZGVyIiwibW92ZUZvbGRlcnMiLCJmb2xkZXJzSWQiLCJwYXJlbnRGb2xkZXJJZCIsIm1vdmVGaWxlcyIsImZpbGVzSWQiLCJmb2xkZXJTaXplIiwiZm9sZGVySWQiLCJzaXplQmVmb3JlIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwicHJvY2VzcyIsIk5PREVfRU5WIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUVBLFNBQVNBLFNBQVQsUUFBMEIsTUFBMUI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLFlBQTNCO0FBR0EsU0FBU0MsVUFBVCxRQUEyQixxQkFBM0I7QUFRQSxTQUFTQyxTQUFULFFBQTBCLGlCQUExQjtBQUNBLFNBQVNDLGFBQVQsUUFBOEIsa0JBQTlCOztBQXlLQSxTQUFTQyxzQkFBVCxDQUFnQ0MsQ0FBaEMsRUFBdUU7QUFDckUseUNBQ0tBLENBREw7QUFFRUMsSUFBQUEsbUJBQW1CLGtDQUNkRCxDQUFDLENBQUNDLG1CQURZO0FBRWpCQyxNQUFBQSxLQUFLLEVBQUVGLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JDLEtBRlo7QUFHakJDLE1BQUFBLGdCQUFnQixFQUFFSCxDQUFDLENBQUNDLG1CQUFGLENBQ2ZFLGdCQUpjO0FBS2pCQyxNQUFBQSxXQUFXLEVBQUVKLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JHLFdBQXRCLEdBQ1QsSUFBSUMsSUFBSixDQUFTTCxDQUFDLENBQUNDLG1CQUFGLENBQXNCRyxXQUEvQixDQURTLEdBRVQsSUFQYTtBQVFqQkUsTUFBQUEsU0FBUyxFQUFFTixDQUFDLENBQUNDLG1CQUFGLENBQXNCSyxTQUF0QixHQUNQLElBQUlELElBQUosQ0FBU0wsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkssU0FBL0IsQ0FETyxHQUVQLElBVmE7QUFXakJDLE1BQUFBLFNBQVMsRUFBRVAsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQk0sU0FBdEIsR0FDUCxJQUFJRixJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JNLFNBQS9CLENBRE8sR0FFUCxJQWJhO0FBY2pCQyxNQUFBQSxXQUFXLEVBQUVSLENB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QlcsSUFsQlg7O0FBQUE7QUFBQSxpREFxQlM7QUFDTHRELGdCQUFBQSxJQUFJLEVBQUVRLE1BQU0sQ0FBQzhDLFVBQVUsQ0FBQ3RELElBQVosQ0FEUDtBQUVMd0QsZ0JBQUFBLFVBQVUsRUFBRWhELE1BQU0sQ0FBQzhDLFVBQVUsQ0FBQ0UsVUFBWjtBQUZiLGVBckJUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBL3FCRjs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBOztBQUFhbEgsVSxDQUNZbUgsVSxHQUFhLFVBQ2xDakgsR0FEa0MsRUFFbENrSCxRQUZrQyxFQUd2QjtBQUFBLE1BRlhsSCxHQUVXO0FBRlhBLElBQUFBLEdBRVcsR0FGTyxNQUVQO0FBQUE7O0FBQUEsTUFEWGtILFFBQ1c7QUFEWEEsSUFBQUEsUUFDVyxHQURBLElBQ0E7QUFBQTs7QUFDWCxNQUFJQyxPQUFPLENBQUNuSCxHQUFSLENBQVlvSCxRQUFaLEtBQXlCLE1BQTdCLEVBQXFDO0FBQ25DLFdBQU8sK0JBQVA7QUFDRDs7QUFFRCxVQUFRcEgsR0FBUjtBQUNFLFNBQUssTUFBTDtBQUNFLGFBQU9rSCxRQUFRLEdBQ1gsOEJBRFcsR0FFWCxnQ0FGSjs7QUFHRixTQUFLLFNBQUw7QUFDRSxhQUFPLHVDQUFQOztBQUNGLFNBQUssS0FBTDtBQUNBO0FBQ0UsYUFBTyxtQ0FBUDtBQVRKO0FBV0QsQzs7QUFwQlVwSCxVLENBc0JhSSxjLEdBQWlCLFVBQ3ZDRixHQUR1QyxFQUV2Q0QsT0FGdUM7QUFBQSxTQUl2Q2hELGFBQWEsQ0FBQytDLFVBQVUsQ0FBQ21ILFVBQVgsQ0FBc0JqSCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDQUowQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERvd25sb2FkUHJvZ3Jlc3MgYXMgRExQcm9ncmVzcyB9IGZyb20gXCJreVwiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgdXNlcnNDYWNoZSB9IGZyb20gXCIuL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVzZXJTZXNzaW9uIH0gZnJvbSBcIi4vY2xpZW50L3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9jbGllbnQvaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCIuL2NsaWVudC9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIExhbmcsXG4gIFBheUlucHV0VHlwZSxcbiAgUGxhbktpbmQsXG4gIFRodW5kZXIsXG4gIFVzZXJSb2xlXG59IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNlbGVjdG9ycyB9IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNyZWF0ZVRodW5kZXIgfSBmcm9tIFwiLi9aZXVzVGh1bmRlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFJlY3VybHlJbnZvaWNlU3RhdHVzID1cbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicGFpZFwiXG4gIHwgXCJmYWlsZWRcIlxuICB8IFwicGFzdF9kdWVcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zZWRcIlxuICB8IFwidm9pZGVkXCJcbiAgfCBcInByb2Nlc3NpbmdcIjtcblxudHlwZSBJbnRlcm5hbFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgZHVlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZHVlOiBEYXRlO1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHA6IEludGVybmFsUGF5bWVudEluZm9zKTogUGF5bWVudEluZm9zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wLFxuICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgIC4uLnAuY3VycmVudFN1YnNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uc3RhdGUgYXMgU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBjb2xsZWN0aW9uTWV0aG9kOiBwLmN1cnJlbnRTdWJzY3JpcHRpb25cbiAgICAgICAgLmNvbGxlY3Rpb25NZXRob2QgYXMgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgICAgIGFjdGl2YXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHBhdXNlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNhbmNlbGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG4gICAgaW52b2ljZXM6IHAuaW52b2ljZXMubWFwKGkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBkYXRlOiBuZXcgRGF0ZShpLmRhdGUpLFxuICAgICAgZHVlOiBuZXcgRGF0ZShpLmR1ZSksXG4gICAgICBzdGF0dXM6IGkuc3RhdHVzIGFzIFJlY3VybHlJbnZvaWNlU3RhdHVzXG4gICAgfSkpXG4gIH07XG59XG5cbmNvbnN0IHBsYW5zQ29kZXMgPSBbXG4gIFwiYmFzaWNfbW9udGhcIixcbiAgXCJhZHZhbmNlZF9tb250aFwiLFxuICBcInByb19tb250aFwiLFxuICBcImJhc2ljX3llYXJcIixcbiAgXCJhZHZhbmNlZF95ZWFyXCIsXG4gIFwicHJvX3llYXJcIlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VjcmVjeVBsYW5zQ29kZXMgPSB0eXBlb2YgcGxhbnNDb2Rlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsYW4ocGxhbkNvZGU6IHN0cmluZyk6IHBsYW5Db2RlIGlzIFNlY3JlY3lQbGFuc0NvZGVzIHtcbiAgcmV0dXJuIHBsYW5zQ29kZXMuaW5jbHVkZXMocGxhbkNvZGUgYXMgU2VjcmVjeVBsYW5zQ29kZXMpO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRm9sZGVyU2l6ZSA9IHsgc2l6ZTogYmlnaW50OyBzaXplQmVmb3JlOiBiaWdpbnQgfTtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9ycy5xdWVyeSh7XG4gICAgdXNlcjogW1xuICAgICAgeyB1c2VySWQgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgIHB1YmxpY0tleTogd2l0aFB1YmxpY0tleSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICByZXR1cm4gdXNlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERCQ29uZmlnRmllbGQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwib2JqZWN0XCI7XG4gIGlzQXJyYXk/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc051bGxhYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNFZGl0YWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzS2V5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZGVmYXVsdD86IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZyA9IHtcbiAgZmllbGRzOiBBcHBEQkNvbmZpZ0ZpZWxkW107XG59O1xuXG5leHBvcnQgdHlwZSBGYXFJdGVtID0ge1xuICBvcmRlcjogbnVtYmVyO1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICBhbnN3ZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEJsb2dJdGVtID0ge1xuICBpZDogc3RyaW5nO1xuICBibG9nSWQ6IHN0cmluZztcbiAgb3JkZXI6IG51bWJlcjtcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgaW1hZ2U6IHN0cmluZztcbiAgaW1hZ2VBbHQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXNlckJhc2UgPSB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGxhc3RuYW1lOiBzdHJpbmc7XG4gIHJvbGU6IFVzZXJSb2xlO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgZGVsZXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgbGFzdExvZ2luOiBEYXRlO1xuICBsYW5nOiBMYW5nO1xufTtcblxudHlwZSBXaXRoUHVibGljS2V5ID0geyB3aXRoUHVibGljS2V5PzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBVc2VyPFQgZXh0ZW5kcyBXaXRoUHVibGljS2V5ID0gV2l0aFB1YmxpY0tleT4gPSBUIGV4dGVuZHMge1xuICB3aXRoUHVibGljS2V5OiB0cnVlO1xufVxuICA/IFVzZXJCYXNlICYgeyBwdWJsaWNLZXk6IHN0cmluZyB9XG4gIDogVXNlckJhc2U7XG5cbnR5cGUgQ2xhc3NHZXRVc2VyUGFyYW1zID0gV2l0aFB1YmxpY0tleSAmIHtcbiAgdXNlcklkPzogc3RyaW5nO1xufTtcbnR5cGUgR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcbn07XG5cbnR5cGUgU3RhdGljR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgZW52OiBTZWNyZWN5RW52O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0VXNlcjxVIGV4dGVuZHMgV2l0aFB1YmxpY0tleT4oXG4gIHBhcmFtczogR2V0VXNlclBhcmFtc1xuKTogUHJvbWlzZTxVc2VyPFU+IHwgbnVsbD4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFVzZXJTZWxlY3RvcihwYXJhbXMudXNlcklkLCBwYXJhbXMud2l0aFB1YmxpY0tleSk7XG4gIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgcGFyYW1zLmNsaWVudC5xdWVyeSh7XG4gICAgdXNlcjogc2VsZWN0b3JcbiAgfSk7XG5cbiAgaWYgKCF1c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnVzZXIsXG4gICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1c2VyLmxhc3RMb2dpbiksXG4gICAgZGVsZXRlZEF0OiB1c2VyLmRlbGV0ZWRBdCA/IG5ldyBEYXRlKHVzZXIuZGVsZXRlZEF0KSA6IG51bGxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvdWRMaW1pdHMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBzaXplOiBiaWdpbnQ7XG4gIG1heFNpemU6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzVmFsdWVzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgZmlsZVNpemU6IGJpZ2ludDtcbiAgbWF4RmlsZVNpemU6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVDb3VudDogYmlnaW50O1xuICBtYXhGaWxlQ291bnQ6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUxpbWl0cyA9IHtcbiAgY2xvdWQ6IENsb3VkTGltaXRzO1xuICBtYWlsOiB7XG4gICAgc2VudDogTWFpbExpbWl0c1ZhbHVlcztcbiAgICByZWNlaXZlZDogTWFpbExpbWl0c1ZhbHVlcztcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBnZXRCYXNlVXJsID0gKFxuICAgIGVudjogU2VjcmVjeUVudiA9IFwicHJvZFwiLFxuICAgIGdyYXBoY2RuID0gdHJ1ZVxuICApOiBzdHJpbmcgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHJldHVybiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDAwMC9ncmFwaHFsXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnYpIHtcbiAgICAgIGNhc2UgXCJwcm9kXCI6XG4gICAgICAgIHJldHVybiBncmFwaGNkblxuICAgICAgICAgID8gXCJodHRwczovL3NlY3JlY3kuZ3JhcGhjZG4uYXBwXCJcbiAgICAgICAgICA6IFwiaHR0cHM6Ly9hcGkuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwic3RhZ2luZ1wiOlxuICAgICAgICByZXR1cm4gXCJodHRwczovYXBpLnN0YWdpbmcuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwiZGV2XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJodHRwczovYXBpLmRldi5zZWNyZWN5Lm1lL2dyYXBocWxcIjtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2dldEJhc2VDbGllbnQgPSAoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb24/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+ID0+XG4gICAgY3JlYXRlVGh1bmRlcihCYXNlQ2xpZW50LmdldEJhc2VVcmwoZW52KSwgc2Vzc2lvbik7XG5cbiAgcHJvdGVjdGVkIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG5cbiAgcHVibGljIHNlc3Npb25JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNlc3Npb246IHN0cmluZywgZW52OiBTZWNyZWN5RW52KSB7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uO1xuICAgIHRoaXMuY2xpZW50ID0gQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb24pO1xuICB9XG5cbiAgYXN5bmMgc2Vzc2lvbnMoKTogUHJvbWlzZTxVc2VyU2Vzc2lvbltdPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBzZXNzaW9uczoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRydWUsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IHRydWUsXG4gICAgICAgICAgICBpcDogdHJ1ZSxcbiAgICAgICAgICAgIGNpdHk6IHRydWUsXG4gICAgICAgICAgICBjb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgYXBwU2Vzc2lvbnM6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXNlckFnZW50OiB0cnVlLFxuICAgICAgICAgICAgICBpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgY291bnRyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXNlckFwcDoge1xuICAgICAgICAgICAgICAgIGFwcDoge1xuICAgICAgICAgICAgICAgICAgbmFtZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2Vzc2lvbnM6IFVzZXJTZXNzaW9uW10gPVxuICAgICAgZGF0YS51c2VyPy5zZXNzaW9ucy5tYXAocyA9PiAoe1xuICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgaXA6IHMuaXAsXG4gICAgICAgIGNpdHk6IHMuY2l0eSxcbiAgICAgICAgY291bnRyeTogcy5jb3VudHJ5LFxuICAgICAgICBsYXN0QWN0aXZpdHk6IHMubGFzdEFjdGl2aXR5ID8gbmV3IERhdGUocy5sYXN0QWN0aXZpdHkpIDogdW5kZWZpbmVkLFxuICAgICAgICB1c2VyQWdlbnQ6IHMudXNlckFnZW50LFxuICAgICAgICBhcHBTZXNzaW9uczogcy5hcHBTZXNzaW9ucy5tYXAoYSA9PiAoe1xuICAgICAgICAgIGlkOiBhLmlkLFxuICAgICAgICAgIGlwOiBhLmlwLFxuICAgICAgICAgIGNpdHk6IGEuY2l0eSxcbiAgICAgICAgICBjb3VudHJ5OiBhLmNvdW50cnksXG4gICAgICAgICAgbGFzdEFjdGl2aXR5OiBhLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKGEubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB1c2VyQWdlbnQ6IGEudXNlckFnZW50LFxuICAgICAgICAgIGFwcDogYS51c2VyQXBwPy5hcHAubmFtZSA/PyBcIlwiXG4gICAgICAgIH0pKVxuICAgICAgfSkpID8/IFtdO1xuXG4gICAgcmV0dXJuIHNlc3Npb25zO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgY29uc3QgbG9jYWwgPSBnZXRTdG9yYWdlKGZhbHNlKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBnZXRTdG9yYWdlKHRydWUpO1xuICAgICAgbG9jYWwuand0LmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHNlc3Npb24uand0LmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICB1c2Vyc0NhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICAgIGxvZ291dDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlc3Npb25JZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWU8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PihcbiAgICBwYXJhbXM/OiBUXG4gICk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyKHBhcmFtcyB8fCAoeyB3aXRoUHVibGljS2V5OiB0cnVlIH0gYXMgVCkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVzZXI8VCBleHRlbmRzIFN0YXRpY0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVCxcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8VXNlcjxUPiB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuX2dldEJhc2VDbGllbnQocGFyYW1zLmVudiwgc2Vzc2lvbklkKSxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZFxuICAgIH0pO1xuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuaWQsIHVzZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9XG5cbiAgYXN5bmMgdXNlcjxUIGV4dGVuZHMgQ2xhc3NHZXRVc2VyUGFyYW1zPihwYXJhbXM6IFQpOiBQcm9taXNlPFVzZXI8VD4gfCBudWxsPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXI8VD4oe1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCxcbiAgICAgIHdpdGhQdWJsaWNLZXk6IHBhcmFtcy53aXRoUHVibGljS2V5XG4gICAgfSk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5pZCwgdXNlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1cGRhdGVQcm9maWxlKHtcbiAgICBmaXJzdG5hbWUsXG4gICAgbGFzdG5hbWUsXG4gICAgbGFuZ1xuICB9OiB7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhbmc6IExhbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxVc2VyPiB7XG4gICAgY29uc3QgeyB1cGRhdGVQcm9maWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICB1cGRhdGVQcm9maWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaXJzdG5hbWUsXG4gICAgICAgICAgbGFzdG5hbWUsXG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgICBkZWxldGVkQXQ6IHRydWUsXG4gICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlUHJvZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZVByb2ZpbGUsXG4gICAgICBsYXN0TG9naW46IG5ldyBEYXRlKHVwZGF0ZVByb2ZpbGUubGFzdExvZ2luKSxcbiAgICAgIGRlbGV0ZWRBdDogdXBkYXRlUHJvZmlsZS5kZWxldGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZSh1cGRhdGVQcm9maWxlLmRlbGV0ZWRBdClcbiAgICAgICAgOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwbGFucyhcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFBsYW5bXT4ge1xuICAgIGNvbnN0IHsgcGxhbnMgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpLnF1ZXJ5KHtcbiAgICAgIHBsYW5zOiB7XG4gICAgICAgIGtpbmQ6IHRydWUsXG4gICAgICAgIGNvZGVzOiB0cnVlLFxuICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICBkb3dubG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICBkb3dubG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgIHVwbG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICB1cGxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICByZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgaGFyZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZW50TWFpbHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwbGFucztcbiAgfVxuXG4gIGFzeW5jIHBheShcbiAgICBwbGFuQ29kZTogU2VjcmVjeVBsYW5zQ29kZXMsXG4gICAgaW5wdXQ6IFBheUlucHV0LFxuICAgIGF1dG9SZW5ldz86IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgcGF5IH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBwYXk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHBsYW5Db2RlLFxuICAgICAgICAgIGF1dG9SZW5ld1xuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGF5ID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsUGF5bWVudCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGNhbmNlbFBheW1lbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIGNhbmNlbFBheW1lbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBjYW5jZWxQYXltZW50ID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcGF5bWVudEluZm9zKCk6IFByb21pc2U8UGF5bWVudEluZm9zIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcGF5bWVudEluZm9zIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeSh7XG4gICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgaG9zdGVkVXJsOiB0cnVlLFxuICAgICAgICBjdXJyZW50U3Vic2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXV0b3JlbmV3OiB0cnVlLFxuICAgICAgICAgIGFjdGl2YXRlZEF0OiB0cnVlLFxuICAgICAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxlZEF0OiB0cnVlLFxuICAgICAgICAgIGNyZWF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICBleHBpcmVzQXQ6IHRydWUsXG4gICAgICAgICAgcGF1c2VkQXQ6IHRydWUsXG4gICAgICAgICAgdHJpYWxFbmRzQXQ6IHRydWUsXG4gICAgICAgICAgdHJpYWxTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgdXBkYXRlZEF0OiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiB0cnVlLFxuICAgICAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHRydWUsXG4gICAgICAgICAgcGxhbjogdHJ1ZSxcbiAgICAgICAgICBwbGFuQ29kZTogdHJ1ZSxcblxuICAgICAgICAgIHRvdGFsOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGludm9pY2VzOiB7XG4gICAgICAgICAgcGRmOiB0cnVlLFxuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgZHVlOiB0cnVlLFxuICAgICAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgICAgICB0b3RhbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgIGN1cnJlbmN5OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGF5bWVudEluZm9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJuYWxUb1BheW1lbnRJbmZvcyhwYXltZW50SW5mb3MpO1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8UXVlcnlMaW1pdHMgfCBudWxsPiB7XG4gICAgY29uc3QgeyBsaW1pdHMgfSA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KHtcbiAgICAgIGxpbWl0czoge1xuICAgICAgICBjbG91ZDoge1xuICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgbWF4U2l6ZTogdHJ1ZSxcbiAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICBtYXhDb3VudDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtYWlsOiB7XG4gICAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZW50OiB7XG4gICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFsaW1pdHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2xvdWQsIG1haWwgfSA9IGxpbWl0cztcblxuICAgIHJldHVybiB7XG4gICAgICBjbG91ZDoge1xuICAgICAgICBjb3VudDogQmlnSW50KGNsb3VkLmNvdW50KSxcbiAgICAgICAgc2l6ZTogQmlnSW50KGNsb3VkLnNpemUpLFxuICAgICAgICBtYXhDb3VudDogY2xvdWQubWF4Q291bnQgPyBCaWdJbnQoY2xvdWQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgbWF4U2l6ZTogY2xvdWQubWF4U2l6ZSA/IEJpZ0ludChjbG91ZC5tYXhTaXplKSA6IG51bGxcbiAgICAgIH0sXG4gICAgICBtYWlsOiB7XG4gICAgICAgIHJlY2VpdmVkOiB7XG4gICAgICAgICAgY291bnQ6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmNvdW50KSxcbiAgICAgICAgICBtYXhDb3VudDogbWFpbC5yZWNlaXZlZC5tYXhDb3VudFxuICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhDb3VudClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBmaWxlQ291bnQ6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmZpbGVDb3VudCksXG4gICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudFxuICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmZpbGVTaXplKSxcbiAgICAgICAgICBtYXhGaWxlU2l6ZTogbWFpbC5yZWNlaXZlZC5tYXhGaWxlU2l6ZVxuICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhGaWxlU2l6ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBzZW50OiB7XG4gICAgICAgICAgY291bnQ6IEJpZ0ludChtYWlsLnNlbnQuY291bnQpLFxuICAgICAgICAgIG1heENvdW50OiBtYWlsLnNlbnQubWF4Q291bnQgPyBCaWdJbnQobWFpbC5zZW50Lm1heENvdW50KSA6IG51bGwsXG4gICAgICAgICAgZmlsZUNvdW50OiBCaWdJbnQobWFpbC5zZW50LmZpbGVDb3VudCksXG4gICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnNlbnQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnNlbnQubWF4RmlsZUNvdW50KVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGZpbGVTaXplOiBCaWdJbnQobWFpbC5zZW50LmZpbGVTaXplKSxcbiAgICAgICAgICBtYXhGaWxlU2l6ZTogbWFpbC5zZW50Lm1heEZpbGVTaXplXG4gICAgICAgICAgICA/IEJpZ0ludChtYWlsLnNlbnQubWF4RmlsZVNpemUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnb2RGYXRoZXJBbmRDaGlsZHJlbigpOiBQcm9taXNlPEdvZEZhdGhlckFuZENoaWxkcmVuIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGdvZENoaWxkcmVuOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICBwaG9uZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ29kRmF0aGVyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICBwaG9uZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udXNlcixcbiAgICAgIGdvZEZhdGhlcjogdXNlci5nb2RGYXRoZXIgPz8gbnVsbFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXBkYXRlQXBwREJDb25maWcoe1xuICAgIGFwcENvZGUsXG4gICAgY29uZmlnLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGFwcENvZGU6IHN0cmluZztcbiAgICBjb25maWc6IEFwcERCQ29uZmlnO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxBcHBEQkNvbmZpZz4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApLm11dGF0aW9uKHtcbiAgICAgIGRiQ29uZmlnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlLFxuICAgICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJDb25maWc7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QXBwREJDb25maWcoXG4gICAgYXBwQ29kZTogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8QXBwREJDb25maWc+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKS5xdWVyeSh7XG4gICAgICBkYkNvbmZpZzogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwQ29kZVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJDb25maWc7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0RkFRKHtcbiAgICBsYW5nLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxGYXFJdGVtW10+IHtcbiAgICBjb25zdCB7IGZhcSB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkucXVlcnkoe1xuICAgICAgZmFxOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhbnN3ZXI6IHRydWUsXG4gICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgcXVlc3Rpb246IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhcTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRCbG9nKHtcbiAgICBlbnYsXG4gICAgbGFuZyxcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBsYW5nPzogTGFuZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8QmxvZ0l0ZW1bXT4ge1xuICAgIGNvbnN0IHsgYmxvZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkucXVlcnkoe1xuICAgICAgYmxvZzogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgYmxvZ0lkOiB0cnVlLFxuICAgICAgICAgIGF1dGhvcjogdHJ1ZSxcbiAgICAgICAgICBib2R5OiB0cnVlLFxuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgaW1hZ2U6IHRydWUsXG4gICAgICAgICAgaW1hZ2VBbHQ6IHRydWUsXG4gICAgICAgICAgc3VtbWFyeTogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogdHJ1ZSxcbiAgICAgICAgICBvcmRlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmxvZy5tYXAoYiA9PiAoeyAuLi5iLCBkYXRlOiBuZXcgRGF0ZShiLmRhdGUpIH0pKTtcbiAgfVxuXG4gIGFzeW5jIHJlcG9ydFVzZXIoXG4gICAgcmVwb3J0ZWRVc2VySWQ6IHN0cmluZyxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8U2VuZFJlcG9ydCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgc2VuZFJlcG9ydDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVwb3J0ZWRVc2VySWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcG9ydGVkVXNlcjoge1xuICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VuZFJlcG9ydDtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkZWxldGVVc2VyKHtcbiAgICBzZXNzaW9uSWQsXG4gICAgdXNlcklkLFxuICAgIGVudlxuICB9OiB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVXNlciB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkubXV0YXRpb24oe1xuICAgICAgZGVsZXRlVXNlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWxldGVVc2VyID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZGJHZXQ8VT4oe1xuICAgIGZpZWxkLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxVPiB7XG4gICAgY29uc3QgeyBkYkdldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJHZXQucmVzO1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgZGJTZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICB2YWx1ZTogc2VyaWFsaXplKHZhbHVlKS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJTZXQucmVzO1xuICB9XG5cbiAgYXN5bmMgZGJTZWFyY2g8VD4oe1xuICAgIHNlYXJjaCxcbiAgICBmaWVsZFxuICB9OiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgeyBkYlNlYXJjaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZGJTZWFyY2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGJTZWFyY2g7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXIoeyBpZCB9OiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5tdXRhdGlvbih7XG4gICAgICBkZWxldGVGb2xkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWxldGVGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBtb3ZlRm9sZGVycyh7XG4gICAgZm9sZGVyc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJzSWQ6IHN0cmluZ1tdO1xuICAgIHBhcmVudEZvbGRlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgbW92ZUZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm11dGF0aW9uKHtcbiAgICAgIG1vdmVGb2xkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJzSWQsXG4gICAgICAgICAgcGFyZW50Rm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAgdHJ1ZVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1vdmVGb2xkZXJzID8/IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgbW92ZUZpbGVzKHtcbiAgICBmaWxlc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IG1vdmVGaWxlcyB9ID0gYXdhaXQgdGhpcy5jbGllbnQubXV0YXRpb24oe1xuICAgICAgbW92ZUZpbGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlc0lkLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHRydWVcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJldHVybiBtb3ZlRmlsZXMgPz8gZmFsc2U7XG4gIH1cblxuICBhc3luYyBmb2xkZXJTaXplKHtcbiAgICBmb2xkZXJJZFxuICB9OiB7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxGb2xkZXJTaXplIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyU2l6ZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoe1xuICAgICAgZm9sZGVyU2l6ZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZm9sZGVySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgc2l6ZUJlZm9yZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzaXplOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplKSxcbiAgICAgIHNpemVCZWZvcmU6IEJpZ0ludChmb2xkZXJTaXplLnNpemVCZWZvcmUpXG4gICAgfTtcbiAgfVxufVxuIl19
2228
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsImNsaWVudCIsInVzZXJSZXNwb25zZSIsImRhdGEiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsInMiLCJhIiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJwbGFucyIsInBsYW4iLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwidG90YWwiLCJwZGYiLCJjdXJyZW5jeSIsInJlc3VsdCIsImNsb3VkIiwic2l6ZSIsIm1heFNpemUiLCJtYXhDb3VudCIsIm1haWwiLCJyZWNlaXZlZCIsIm1heEZpbGVDb3VudCIsIm1heEZpbGVTaXplIiwic2VudCIsIkJpZ0ludCIsImdvZEZhdGhlckFuZENoaWxkcmVuIiwiZ29kQ2hpbGRyZW4iLCJnb2RGYXRoZXIiLCJ1cGRhdGVBcHBEQkNvbmZpZyIsImFwcENvZGUiLCJjb25maWciLCJkYkNvbmZpZ011dGF0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwiZGJDb25maWciLCJqc29uIiwiZ2V0RkFRIiwiZmFxIiwiYW5zd2VyIiwib3JkZXIiLCJxdWVzdGlvbiIsImdldEJsb2ciLCJibG9nIiwiYmxvZ0l0ZW1zIiwiYmxvZ0lkIiwiYXV0aG9yIiwiYm9keSIsImltYWdlIiwiaW1hZ2VBbHQiLCJzdW1tYXJ5IiwidGl0bGUiLCJiIiwicmVwb3J0VXNlciIsInJlcG9ydGVkVXNlcklkIiwiY3VzdG9tTWVzc2FnZSIsInNlbmRSZXBvcnQiLCJyZXBvcnRlZFVzZXIiLCJkZWxldGVVc2VyIiwiZGJHZXQiLCJkYlNldCIsInZhbHVlIiwiRXJyb3IiLCJ0b1N0cmluZyIsInJlcyIsImRiU2VhcmNoIiwic2VhcmNoIiwiZGVsZXRlRm9sZGVyIiwibW92ZUZvbGRlcnMiLCJmb2xkZXJzSWQiLCJwYXJlbnRGb2xkZXJJZCIsIm1vdmVGaWxlcyIsImZpbGVzSWQiLCJmb2xkZXJTaXplIiwiZm9sZGVySWQiLCJzaXplQmVmb3JlIiwiZ2V0U3BvbnNvcnNoaXBMaW5rIiwiYmFja1VybCIsInBhdGgiLCJidG9hIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwicHJvY2VzcyIsIk5PREVfRU5WIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBR0EsU0FBU0EsU0FBVCxRQUEwQixNQUExQjtBQUNBLFNBQVNDLE9BQVQsUUFBd0Isb0JBQXhCO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixZQUEzQjtBQUdBLFNBQVNDLFVBQVQsUUFBMkIscUJBQTNCO0FBUUEsU0FBU0MsUUFBVCxRQUF5QixpQkFBekI7QUFDQSxTQUFTQyxhQUFULFFBQThCLGtCQUE5Qjs7QUFzTEEsU0FBU0Msc0JBQVQsQ0FBZ0NDLENBQWhDLEVBQXVFO0FBQ3JFLHlDQUNLQSxDQURMO0FBRUVDLElBQUFBLG1CQUFtQixrQ0FDZEQsQ0FBQyxDQUFDQyxtQkFEWTtBQUVqQkMsTUFBQUEsS0FBSyxFQUFFRixDQUFDLENBQUNDLG1CQUFGLENBQXNCQyxLQUZaO0FBR2pCQyxNQUFBQSxnQkFBZ0IsRUFBRUgsQ0FBQyxDQUFDQyxtQkFBRixDQUNmRSxnQkFKYztBQUtqQkMsTUFBQUEsV0FBVyxFQUFFSixDQUFDLENBQUNDLG1CQUFGLENBQXNCRyxXQUF0QixHQUNULElBQUlDLElBQUosQ0FBU0wsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkcsV0FBL0IsQ0FEUyxHQUVULElBUGE7QUFRakJFLE1BQUFBLFNBQVMsRUFBRU4sQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkssU0FBdEIsR0FDUCxJQUFJRCxJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JLLFNBQS9CLENBRE8sR0FF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SSxjLEdBQWlCLFVBQ3ZDRixHQUR1QyxFQUV2Q0QsT0FGdUM7QUFBQSxTQUl2Q3BELGFBQWEsQ0FBQ21ELFVBQVUsQ0FBQ3dILFVBQVgsQ0FBc0J0SCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDQUowQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgRG93bmxvYWRQcm9ncmVzcyBhcyBETFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQgdHlwZSB7IERvY3VtZW50IH0gZnJvbSBcImJzb25cIjtcbmltcG9ydCB7IHNlcmlhbGl6ZSB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBnZXRMaW5rIH0gZnJvbSBcIkBzZWNyZWN5L2xpYi11dGlsc1wiO1xuaW1wb3J0IHsgdXNlcnNDYWNoZSB9IGZyb20gXCIuL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVzZXJTZXNzaW9uIH0gZnJvbSBcIi4vY2xpZW50L3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9jbGllbnQvaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCIuL2NsaWVudC9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIExhbmcsXG4gIFBheUlucHV0VHlwZSxcbiAgUGxhbktpbmQsXG4gIFRodW5kZXIsXG4gIFVzZXJSb2xlXG59IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlVGh1bmRlciB9IGZyb20gXCIuL1pldXNUaHVuZGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvckxpbWl0LFxuICBFcnJvck5vdEZvdW5kLFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvckxhbmdOb3RFeGlzdCxcbiAgRXJyb3JCYXNpY1xufSBmcm9tIFwiLi9lcnJvci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTdWNjZXNzUmVzcG9uc2U8VD4gPSB7XG4gIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCI7XG4gIGRhdGE6IFQ7XG59O1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFJlY3VybHlJbnZvaWNlU3RhdHVzID1cbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicGFpZFwiXG4gIHwgXCJmYWlsZWRcIlxuICB8IFwicGFzdF9kdWVcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zZWRcIlxuICB8IFwidm9pZGVkXCJcbiAgfCBcInByb2Nlc3NpbmdcIjtcblxudHlwZSBJbnRlcm5hbFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgZHVlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZHVlOiBEYXRlO1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHA6IEludGVybmFsUGF5bWVudEluZm9zKTogUGF5bWVudEluZm9zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wLFxuICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgIC4uLnAuY3VycmVudFN1YnNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uc3RhdGUgYXMgU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBjb2xsZWN0aW9uTWV0aG9kOiBwLmN1cnJlbnRTdWJzY3JpcHRpb25cbiAgICAgICAgLmNvbGxlY3Rpb25NZXRob2QgYXMgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgICAgIGFjdGl2YXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHBhdXNlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNhbmNlbGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG4gICAgaW52b2ljZXM6IHAuaW52b2ljZXMubWFwKGkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBkYXRlOiBuZXcgRGF0ZShpLmRhdGUpLFxuICAgICAgZHVlOiBuZXcgRGF0ZShpLmR1ZSksXG4gICAgICBzdGF0dXM6IGkuc3RhdHVzIGFzIFJlY3VybHlJbnZvaWNlU3RhdHVzXG4gICAgfSkpXG4gIH07XG59XG5cbmNvbnN0IHBsYW5zQ29kZXMgPSBbXG4gIFwiYmFzaWNfbW9udGhcIixcbiAgXCJhZHZhbmNlZF9tb250aFwiLFxuICBcInByb19tb250aFwiLFxuICBcImJhc2ljX3llYXJcIixcbiAgXCJhZHZhbmNlZF95ZWFyXCIsXG4gIFwicHJvX3llYXJcIlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VjcmVjeVBsYW5zQ29kZXMgPSB0eXBlb2YgcGxhbnNDb2Rlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsYW4ocGxhbkNvZGU6IHN0cmluZyk6IHBsYW5Db2RlIGlzIFNlY3JlY3lQbGFuc0NvZGVzIHtcbiAgcmV0dXJuIHBsYW5zQ29kZXMuaW5jbHVkZXMocGxhbkNvZGUgYXMgU2VjcmVjeVBsYW5zQ29kZXMpO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRm9sZGVyU2l6ZSA9IHsgc2l6ZTogYmlnaW50OyBzaXplQmVmb3JlOiBiaWdpbnQgfTtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9yKFwiUXVlcnlcIikoe1xuICAgIHVzZXI6IFtcbiAgICAgIHsgdXNlcklkIH0sXG4gICAgICB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIGZpZWxkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgICAgcHVibGljS2V5OiB3aXRoUHVibGljS2V5ID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgcmV0dXJuIHVzZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZ0ZpZWxkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcIm9iamVjdFwiO1xuICBpc0FycmF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0tleT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWcgPSB7XG4gIGZpZWxkczogQXBwREJDb25maWdGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgRmFxSXRlbSA9IHtcbiAgb3JkZXI6IG51bWJlcjtcbiAgcXVlc3Rpb246IHN0cmluZztcbiAgYW5zd2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCbG9nSXRlbSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYmxvZ0lkOiBzdHJpbmc7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGRhdGU6IERhdGU7XG4gIGltYWdlOiBzdHJpbmc7XG4gIGltYWdlQWx0OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJCYXNlID0ge1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICByb2xlOiBVc2VyUm9sZTtcbiAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGRlbGV0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGxhc3RMb2dpbjogRGF0ZTtcbiAgbGFuZzogTGFuZztcbn07XG5cbnR5cGUgV2l0aFB1YmxpY0tleSA9IHsgd2l0aFB1YmxpY0tleT86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVXNlcjxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+ID0gVCBleHRlbmRzIHtcbiAgd2l0aFB1YmxpY0tleTogdHJ1ZTtcbn1cbiAgPyBVc2VyQmFzZSAmIHsgcHVibGljS2V5OiBzdHJpbmcgfVxuICA6IFVzZXJCYXNlO1xuXG50eXBlIENsYXNzR2V0VXNlclBhcmFtcyA9IFdpdGhQdWJsaWNLZXkgJiB7XG4gIHVzZXJJZD86IHN0cmluZztcbn07XG50eXBlIEdldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG59O1xuXG50eXBlIFN0YXRpY0dldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGVudjogU2VjcmVjeUVudjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXI8VSBleHRlbmRzIFdpdGhQdWJsaWNLZXk+KFxuICBwYXJhbXM6IEdldFVzZXJQYXJhbXNcbik6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VT4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRVc2VyU2VsZWN0b3IocGFyYW1zLnVzZXJJZCwgcGFyYW1zLndpdGhQdWJsaWNLZXkpO1xuICBjb25zdCB7IHVzZXI6IHVzZXJSZXNwb25zZSB9ID0gYXdhaXQgcGFyYW1zLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICB1c2VyOiBzZWxlY3RvclxuICB9KTtcblxuICBpZiAoIXVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZXJSZXNwb25zZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgIHJldHVybiB1c2VyUmVzcG9uc2U7XG4gIH1cblxuICBpZiAoIXVzZXJSZXNwb25zZS51c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgZGF0YToge1xuICAgICAgLi4udXNlclJlc3BvbnNlLnVzZXIsXG4gICAgICBsYXN0TG9naW46IG5ldyBEYXRlKHVzZXJSZXNwb25zZS51c2VyLmxhc3RMb2dpbiksXG4gICAgICBkZWxldGVkQXQ6IHVzZXJSZXNwb25zZS51c2VyLmRlbGV0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHVzZXJSZXNwb25zZS51c2VyLmRlbGV0ZWRBdClcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDbG91ZExpbWl0cyA9IHtcbiAgY291bnQ6IGJpZ2ludDtcbiAgbWF4Q291bnQ6IGJpZ2ludCB8IG51bGw7XG4gIHNpemU6IGJpZ2ludDtcbiAgbWF4U2l6ZTogYmlnaW50IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHNWYWx1ZXMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBmaWxlU2l6ZTogYmlnaW50O1xuICBtYXhGaWxlU2l6ZTogYmlnaW50IHwgbnVsbDtcbiAgZmlsZUNvdW50OiBiaWdpbnQ7XG4gIG1heEZpbGVDb3VudDogYmlnaW50IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5TGltaXRzID0ge1xuICBjbG91ZDogQ2xvdWRMaW1pdHM7XG4gIG1haWw6IHtcbiAgICBzZW50OiBNYWlsTGltaXRzVmFsdWVzO1xuICAgIHJlY2VpdmVkOiBNYWlsTGltaXRzVmFsdWVzO1xuICB9O1xufTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGllbnQge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGdldEJhc2VVcmwgPSAoXG4gICAgZW52OiBTZWNyZWN5RW52ID0gXCJwcm9kXCIsXG4gICAgZ3JhcGhjZG4gPSB0cnVlXG4gICk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIFwiaHR0cDovL2xvY2FsaG9zdDo0MDAwL2dyYXBocWxcIjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGVudikge1xuICAgICAgY2FzZSBcInByb2RcIjpcbiAgICAgICAgcmV0dXJuIGdyYXBoY2RuXG4gICAgICAgICAgPyBcImh0dHBzOi8vc2VjcmVjeS5ncmFwaGNkbi5hcHBcIlxuICAgICAgICAgIDogXCJodHRwczovL2FwaS5zZWNyZWN5Lm1lL2dyYXBocWxcIjtcbiAgICAgIGNhc2UgXCJzdGFnaW5nXCI6XG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vYXBpLnN0YWdpbmcuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwiZGV2XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJodHRwczovL2FwaS5kZXYuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9nZXRCYXNlQ2xpZW50ID0gKFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPiA9PlxuICAgIGNyZWF0ZVRodW5kZXIoQmFzZUNsaWVudC5nZXRCYXNlVXJsKGVudiksIHNlc3Npb24pO1xuXG4gIHByb3RlY3RlZCBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xuXG4gIHB1YmxpYyBzZXNzaW9uSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZXNzaW9uOiBzdHJpbmcsIGVudjogU2VjcmVjeUVudikge1xuICAgIHRoaXMuc2Vzc2lvbklkID0gc2Vzc2lvbjtcbiAgICB0aGlzLmNsaWVudCA9IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNlc3Npb25zKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVzZXJTZXNzaW9uW10+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmllbGQ6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBzZXNzaW9uczoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGFwcFNlc3Npb25zOiB7XG4gICAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGlwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICAgICAgICB1c2VyQXBwOiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcDoge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhLnVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB1c2VyUmVzcG9uc2UgPSBkYXRhLnVzZXI7XG4gICAgaWYgKHVzZXJSZXNwb25zZS5fX3R5cGVuYW1lID09PSBcIlVzZXJSZXNwb25zZVwiKSB7XG4gICAgICBpZiAoIXVzZXJSZXNwb25zZS51c2VyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2Vzc2lvbnM6IFVzZXJTZXNzaW9uW10gPVxuICAgICAgICB1c2VyUmVzcG9uc2UudXNlci5zZXNzaW9ucy5tYXAocyA9PiAoe1xuICAgICAgICAgIGlkOiBzLmlkLFxuICAgICAgICAgIGlwOiBzLmlwLFxuICAgICAgICAgIGNpdHk6IHMuY2l0eSxcbiAgICAgICAgICBjb3VudHJ5OiBzLmNvdW50cnksXG4gICAgICAgICAgbGFzdEFjdGl2aXR5OiBzLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKHMubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB1c2VyQWdlbnQ6IHMudXNlckFnZW50LFxuICAgICAgICAgIGFwcFNlc3Npb25zOiBzLmFwcFNlc3Npb25zLm1hcChhID0+ICh7XG4gICAgICAgICAgICBpZDogYS5pZCxcbiAgICAgICAgICAgIGlwOiBhLmlwLFxuICAgICAgICAgICAgY2l0eTogYS5jaXR5LFxuICAgICAgICAgICAgY291bnRyeTogYS5jb3VudHJ5LFxuICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiBhLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKGEubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogYS51c2VyQWdlbnQsXG4gICAgICAgICAgICBhcHA6IGEudXNlckFwcD8uYXBwLm5hbWUgPz8gXCJcIlxuICAgICAgICAgIH0pKVxuICAgICAgICB9KSkgPz8gW107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBzZXNzaW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlclJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgY29uc3QgbG9jYWwgPSBnZXRTdG9yYWdlKGZhbHNlKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBnZXRTdG9yYWdlKHRydWUpO1xuICAgICAgbG9jYWwuand0LmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHNlc3Npb24uand0LmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICB1c2Vyc0NhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgbG9nb3V0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gTG9nb3V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsb2dvdXQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy9cbiAgICB9XG4gIH1cblxuICBhc3luYyBtZTxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+KFxuICAgIHBhcmFtcz86IFRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnVzZXIocGFyYW1zIHx8ICh7IHdpdGhQdWJsaWNLZXk6IHRydWUgfSBhcyBUKSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXNlcjxUIGV4dGVuZHMgU3RhdGljR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBULFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyPFQ+KHtcbiAgICAgIGNsaWVudDogdGhpcy5fZ2V0QmFzZUNsaWVudChwYXJhbXMuZW52LCBzZXNzaW9uSWQpLFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmRhdGEuaWQsIHVzZXIuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1c2VyPFQgZXh0ZW5kcyBDbGFzc0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFQ+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXI8VD4oe1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCxcbiAgICAgIHdpdGhQdWJsaWNLZXk6IHBhcmFtcy53aXRoUHVibGljS2V5XG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgdXNlcnNDYWNoZS5zZXQodXNlci5kYXRhLmlkLCB1c2VyLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUHJvZmlsZSh7XG4gICAgZmlyc3RuYW1lLFxuICAgIGxhc3RuYW1lLFxuICAgIGxhbmdcbiAgfToge1xuICAgIGZpcnN0bmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBsYXN0bmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBsYW5nOiBMYW5nIHwgbnVsbDtcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVzZXI+IHwgRXJyb3JOb3RGb3VuZCB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVwZGF0ZVByb2ZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlUHJvZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlyc3RuYW1lLFxuICAgICAgICAgIGxhc3RuYW1lLFxuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVQcm9maWxlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZVByb2ZpbGU6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlUHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVByb2ZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlUHJvZmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBlbWFpbDogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmVtYWlsLFxuICAgICAgICBmaXJzdG5hbWU6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5maXJzdG5hbWUsXG4gICAgICAgIGlkOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuaWQsXG4gICAgICAgIGxhbmc6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5sYW5nLFxuICAgICAgICBsYXN0TG9naW46IG5ldyBEYXRlKHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5sYXN0TG9naW4pLFxuICAgICAgICBsYXN0bmFtZTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmxhc3RuYW1lLFxuICAgICAgICBwaG9uZTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLnBob25lLFxuICAgICAgICByb2xlOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUucm9sZSxcbiAgICAgICAgZGVsZXRlZEF0OiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0XG4gICAgICAgICAgPyBuZXcgRGF0ZSh1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuZGVsZXRlZEF0KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGxhbnMoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8UGxhbltdPiB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBsYW5zIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIHBsYW5zOiB7XG4gICAgICAgIFwiLi4ub24gUGxhblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHBsYW46IHtcbiAgICAgICAgICAgIGtpbmQ6IHRydWUsXG4gICAgICAgICAgICBjb2RlczogdHJ1ZSxcbiAgICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgICBkb3dubG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgZG93bmxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkQmFuZHdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VudE1haWxzOiB7XG4gICAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXBsYW5zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHBsYW5zLnBsYW5cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGF5KFxuICAgIHBsYW5Db2RlOiBTZWNyZWN5UGxhbnNDb2RlcyxcbiAgICBpbnB1dDogUGF5SW5wdXQsXG4gICAgYXV0b1JlbmV3PzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBheSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBwYXk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHBsYW5Db2RlLFxuICAgICAgICAgIGF1dG9SZW5ld1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBQYXlSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcGF5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXBheSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBheS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBwYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBwYXkucGF5ID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbFBheW1lbnQoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBjYW5jZWxQYXltZW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNhbmNlbFBheW1lbnQ6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gQ2FuY2VsUGF5bWVudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbFBheW1lbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFjYW5jZWxQYXltZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsUGF5bWVudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBjYW5jZWxQYXltZW50O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogY2FuY2VsUGF5bWVudC5jYW5jZWxQYXltZW50ID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBheW1lbnRJbmZvcygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxQYXltZW50SW5mb3M+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcGF5bWVudEluZm9zIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHBheW1lbnRJbmZvczoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBQYXltZW50SW5mb3NSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgICAgIGhvc3RlZFVybDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgYXV0b3JlbmV3OiB0cnVlLFxuICAgICAgICAgICAgICBhY3RpdmF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3JlYXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBleHBpcmVzQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHBhdXNlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICB0cmlhbEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgdHJpYWxTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHRydWUsXG4gICAgICAgICAgICAgIHBsYW46IHRydWUsXG4gICAgICAgICAgICAgIHBsYW5Db2RlOiB0cnVlLFxuICAgICAgICAgICAgICB0b3RhbDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGludm9pY2VzOiB7XG4gICAgICAgICAgICAgIHBkZjogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZHVlOiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRydWUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0cnVlLFxuICAgICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFwYXltZW50SW5mb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwYXltZW50SW5mb3MuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcGF5bWVudEluZm9zO1xuICAgIH1cblxuICAgIGlmICghcGF5bWVudEluZm9zLnBheW1lbnRJbmZvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsVG9QYXltZW50SW5mb3MocGF5bWVudEluZm9zLnBheW1lbnRJbmZvcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8UXVlcnlMaW1pdHM+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGxpbWl0cyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBsaW1pdHM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gUXVlcnlMaW1pdHNcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHtcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBtYXhTaXplOiB0cnVlLFxuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb3VudDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFpbDoge1xuICAgICAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VudDoge1xuICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghbGltaXRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG5cbiAgICBjb25zdCB7IGNsb3VkLCBtYWlsIH0gPSBsaW1pdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY2xvdWQ6IHtcbiAgICAgICAgICBjb3VudDogQmlnSW50KGNsb3VkLmNvdW50KSxcbiAgICAgICAgICBzaXplOiBCaWdJbnQoY2xvdWQuc2l6ZSksXG4gICAgICAgICAgbWF4Q291bnQ6IGNsb3VkLm1heENvdW50ID8gQmlnSW50KGNsb3VkLm1heENvdW50KSA6IG51bGwsXG4gICAgICAgICAgbWF4U2l6ZTogY2xvdWQubWF4U2l6ZSA/IEJpZ0ludChjbG91ZC5tYXhTaXplKSA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgbWFpbDoge1xuICAgICAgICAgIHJlY2VpdmVkOiB7XG4gICAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwucmVjZWl2ZWQuY291bnQpLFxuICAgICAgICAgICAgbWF4Q291bnQ6IG1haWwucmVjZWl2ZWQubWF4Q291bnRcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZUNvdW50OiBCaWdJbnQobWFpbC5yZWNlaXZlZC5maWxlQ291bnQpLFxuICAgICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudFxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heEZpbGVDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmZpbGVTaXplKSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnJlY2VpdmVkLm1heEZpbGVTaXplXG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwucmVjZWl2ZWQubWF4RmlsZVNpemUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VudDoge1xuICAgICAgICAgICAgY291bnQ6IEJpZ0ludChtYWlsLnNlbnQuY291bnQpLFxuICAgICAgICAgICAgbWF4Q291bnQ6IG1haWwuc2VudC5tYXhDb3VudCA/IEJpZ0ludChtYWlsLnNlbnQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVDb3VudDogQmlnSW50KG1haWwuc2VudC5maWxlQ291bnQpLFxuICAgICAgICAgICAgbWF4RmlsZUNvdW50OiBtYWlsLnNlbnQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwuc2VudC5tYXhGaWxlQ291bnQpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGZpbGVTaXplOiBCaWdJbnQobWFpbC5zZW50LmZpbGVTaXplKSxcbiAgICAgICAgICAgIG1heEZpbGVTaXplOiBtYWlsLnNlbnQubWF4RmlsZVNpemVcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5zZW50Lm1heEZpbGVTaXplKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ29kRmF0aGVyQW5kQ2hpbGRyZW4oKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8R29kRmF0aGVyQW5kQ2hpbGRyZW4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBnb2RDaGlsZHJlbjoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHBob25lOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ29kRmF0aGVyOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBnb2RDaGlsZHJlbjogdXNlci5nb2RDaGlsZHJlbixcbiAgICAgICAgZ29kRmF0aGVyOiB1c2VyLmdvZEZhdGhlclxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXBkYXRlQXBwREJDb25maWcoe1xuICAgIGFwcENvZGUsXG4gICAgY29uZmlnLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGFwcENvZGU6IHN0cmluZztcbiAgICBjb25maWc6IEFwcERCQ29uZmlnO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8QXBwREJDb25maWc+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZ011dGF0aW9uIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KFxuICAgICAgZW52LFxuICAgICAgc2Vzc2lvbklkXG4gICAgKShcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRiQ29uZmlnTXV0YXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGUsXG4gICAgICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShjb25maWcpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiQ29uZmlnTXV0YXRpb25SZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJDb25maWdNdXRhdGlvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkNvbmZpZ011dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWdNdXRhdGlvbi5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZ011dGF0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWdNdXRhdGlvbi5kYkNvbmZpZ011dGF0aW9uXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRBcHBEQkNvbmZpZyhcbiAgICBhcHBDb2RlOiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxBcHBEQkNvbmZpZz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwicXVlcnlcIikoe1xuICAgICAgZGJDb25maWc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiQ29uZmlnUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiQ29uZmlnLmpzb25cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEZBUSh7XG4gICAgbGFuZyxcbiAgICBlbnYsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBsYW5nPzogTGFuZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEZhcUl0ZW1bXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZhcSB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBmYXE6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmFxUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZhcToge1xuICAgICAgICAgICAgICBhbnN3ZXI6IHRydWUsXG4gICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBxdWVzdGlvbjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFmYXEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmYXEuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmFxO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZmFxLmZhcVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QmxvZyh7XG4gICAgZW52LFxuICAgIGxhbmcsXG4gICAgc2Vzc2lvbklkXG4gIH06IHtcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gICAgbGFuZz86IExhbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxCbG9nSXRlbVtdPiB8IEVycm9yTGFuZ05vdEV4aXN0IHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgYmxvZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb25JZCkoXCJxdWVyeVwiKSh7XG4gICAgICBibG9nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTGFuZ05vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEJsb2dSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgYmxvZ0l0ZW1zOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBibG9nSWQ6IHRydWUsXG4gICAgICAgICAgICAgIGF1dGhvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYm9keTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaW1hZ2U6IHRydWUsXG4gICAgICAgICAgICAgIGltYWdlQWx0OiB0cnVlLFxuICAgICAgICAgICAgICBzdW1tYXJ5OiB0cnVlLFxuICAgICAgICAgICAgICB0aXRsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghYmxvZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJsb2cuX190eXBlbmFtZSA9PT0gXCJFcnJvckxhbmdOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gYmxvZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGJsb2cuYmxvZ0l0ZW1zLm1hcChiID0+ICh7IC4uLmIsIGRhdGU6IG5ldyBEYXRlKGIuZGF0ZSkgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlcG9ydFVzZXIoXG4gICAgcmVwb3J0ZWRVc2VySWQ6IHN0cmluZyxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFNlbmRSZXBvcnQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHNlbmRSZXBvcnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgc2VuZFJlcG9ydDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVwb3J0ZWRVc2VySWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNlbmRSZXBvcnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2VuZFJlcG9ydDoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXBvcnRlZFVzZXI6IHtcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzZW5kUmVwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZFJlcG9ydC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICAgIH1cblxuICAgIGlmIChzZW5kUmVwb3J0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2VuZFJlcG9ydDtcbiAgICB9XG5cbiAgICBpZiAoIXNlbmRSZXBvcnQuc2VuZFJlcG9ydCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzZW5kUmVwb3J0LnNlbmRSZXBvcnRcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRlbGV0ZVVzZXIoe1xuICAgIHNlc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZVVzZXIgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlVXNlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZVVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlVXNlcjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVVc2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlVXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVVc2VyO1xuICAgIH1cblxuICAgIGlmICghZGVsZXRlVXNlci5kZWxldGVVc2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZVVzZXIuZGVsZXRlVXNlclxuICAgIH07XG4gIH1cblxuICBhc3luYyBkYkdldDxVPih7XG4gICAgZmllbGQsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPFU+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiR2V0IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGRiR2V0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiR2V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJHZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYkdldDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiR2V0Lmpzb25cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJTZXQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoIWRiU2V0LmRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiU2V0LmRiU2V0LnJlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNlYXJjaDxUPih7XG4gICAgc2VhcmNoLFxuICAgIGZpZWxkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VFtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJTZWFyY2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJTZWFyY2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZWFyY2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNlYXJjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZWFyY2guanNvblxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXIoe1xuICAgIGlkXG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvck5vdEV4aXN0IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVGb2xkZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlRm9sZGVyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZUZvbGRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRm9sZGVyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZUZvbGRlci5kZWxldGVGb2xkZXIgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZUZvbGRlcnMoe1xuICAgIGZvbGRlcnNJZCxcbiAgICBwYXJlbnRGb2xkZXJJZFxuICB9OiB7XG4gICAgZm9sZGVyc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbW92ZUZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZUZvbGRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcnNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlRm9sZGVyc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtb3ZlRm9sZGVyczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtb3ZlRm9sZGVycykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVGb2xkZXJzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1vdmVGb2xkZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbW92ZUZvbGRlcnMubW92ZUZvbGRlcnMgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZUZpbGVzKHtcbiAgICBmaWxlc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbW92ZUZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVGaWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZXNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlRmlsZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbW92ZUZpbGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVGaWxlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVGaWxlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBtb3ZlRmlsZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlRmlsZXMubW92ZUZpbGVzID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlclNpemUoe1xuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxGb2xkZXJTaXplPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyU2l6ZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBmb2xkZXJTaXplOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGb2xkZXJTaXplUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBzaXplQmVmb3JlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXJTaXplLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZvbGRlclNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNpemU6IEJpZ0ludChmb2xkZXJTaXplLnNpemUpLFxuICAgICAgICBzaXplQmVmb3JlOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplQmVmb3JlKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRTcG9uc29yc2hpcExpbmsoe1xuICAgIGJhY2tVcmxcbiAgfToge1xuICAgIGJhY2tVcmw6IHN0cmluZztcbiAgfSk6IFByb21pc2U8c3RyaW5nIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCBtZSA9IGF3YWl0IHRoaXMubWUoeyB3aXRoUHVibGljS2V5OiBmYWxzZSB9KTtcblxuICAgIGlmICghbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExpbmsoe1xuICAgICAgYXBwOiBcImF1dGhcIixcbiAgICAgIHBhdGg6IGAvc2lnbi11cD9nZj0ke2J0b2EobWUuZGF0YS5lbWFpbCl9JmF1PSR7YnRvYShiYWNrVXJsKX1gXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==