@secrecy/lib 1.0.0-dev.39 → 1.0.0-dev.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/BaseClient.d.ts +33 -53
  2. package/dist/BaseClient.js +886 -2093
  3. package/dist/PopupTools.js +20 -21
  4. package/dist/ZeusThunder.js +50 -84
  5. package/dist/cache.d.ts +2 -3
  6. package/dist/cache.js +4 -5
  7. package/dist/client/admin/index.js +77 -165
  8. package/dist/client/convert/file.d.ts +3 -3
  9. package/dist/client/convert/file.js +18 -23
  10. package/dist/client/convert/mail.js +13 -13
  11. package/dist/client/convert/node.d.ts +9 -0
  12. package/dist/client/convert/node.js +101 -0
  13. package/dist/client/helpers.js +41 -41
  14. package/dist/client/index.d.ts +63 -74
  15. package/dist/client/index.js +2727 -5759
  16. package/dist/client/storage.js +7 -7
  17. package/dist/client/types/File.d.ts +6 -13
  18. package/dist/client/types/File.js +1 -1
  19. package/dist/client/types/Inputs.d.ts +2 -7
  20. package/dist/client/types/Inputs.js +1 -1
  21. package/dist/client/types/Node.d.ts +49 -0
  22. package/dist/client/types/Node.js +3 -0
  23. package/dist/client/types/UserAppNotifications.d.ts +1 -1
  24. package/dist/client/types/UserAppNotifications.js +1 -1
  25. package/dist/client/types/UserAppSettings.js +1 -1
  26. package/dist/client/types/index.d.ts +7 -13
  27. package/dist/client/types/index.js +2 -4
  28. package/dist/client/types/selectors.d.ts +476 -0
  29. package/dist/client/types/selectors.js +125 -0
  30. package/dist/crypto/file.js +122 -203
  31. package/dist/crypto/index.js +14 -12
  32. package/dist/error.js +1 -1
  33. package/dist/index.d.ts +1 -2
  34. package/dist/index.js +2 -34
  35. package/dist/minify/index.js +7 -7
  36. package/dist/minify/lz4.js +87 -93
  37. package/dist/sodium.js +3 -25
  38. package/dist/utils/store-buddy.js +11 -15
  39. package/dist/utils/time.js +4 -12
  40. package/dist/{utils.d.ts → utils/utils.d.ts} +0 -0
  41. package/dist/utils/utils.js +57 -0
  42. package/dist/worker/__mock__/sodium.worker.js +35 -32
  43. package/dist/worker/md5.js +21 -39
  44. package/dist/worker/sodium.js +95 -130
  45. package/dist/worker/workerCodes.js +3 -3
  46. package/dist/zeus/const.d.ts +5 -0
  47. package/dist/zeus/const.js +303 -1360
  48. package/dist/zeus/index.d.ts +1805 -1817
  49. package/dist/zeus/index.js +542 -434
  50. package/package.json +40 -39
  51. package/dist/client/convert/folder.d.ts +0 -8
  52. package/dist/client/convert/folder.js +0 -264
  53. package/dist/client/convert/vFile.d.ts +0 -5
  54. package/dist/client/convert/vFile.js +0 -164
  55. package/dist/client/types/FilesOnUsersOnApplications.d.ts +0 -9
  56. package/dist/client/types/FilesOnUsersOnApplications.js +0 -3
  57. package/dist/client/types/Folder.d.ts +0 -68
  58. package/dist/client/types/Folder.js +0 -7
  59. package/dist/client/types/VFile.d.ts +0 -62
  60. package/dist/client/types/VFile.js +0 -4
  61. package/dist/client/types/queries.d.ts +0 -535
  62. package/dist/client/types/queries.js +0 -192
  63. package/dist/utils.js +0 -188
@@ -1,13 +1,10 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _regeneratorRuntime from "@babel/runtime/regenerator";
4
2
 
5
3
  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
4
 
7
5
  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
6
 
9
7
  /* eslint-disable @typescript-eslint/naming-convention */
10
- import { serialize } from "bson";
11
8
  import { getLink } from "@secrecy/lib-utils";
12
9
  import { usersCache } from "./cache.js";
13
10
  import { getStorage } from "./client/storage.js";
@@ -18,37 +15,25 @@ function internalToPaymentInfos(p) {
18
15
  return _objectSpread(_objectSpread({}, p), {}, {
19
16
  currentSubscription: _objectSpread(_objectSpread({}, p.currentSubscription), {}, {
20
17
  state: p.currentSubscription.state,
21
- collectionMethod: p.currentSubscription.collectionMethod,
22
- activatedAt: p.currentSubscription.activatedAt ? new Date(p.currentSubscription.activatedAt) : null,
23
- createdAt: p.currentSubscription.createdAt ? new Date(p.currentSubscription.createdAt) : null,
24
- updatedAt: p.currentSubscription.updatedAt ? new Date(p.currentSubscription.updatedAt) : null,
25
- trialEndsAt: p.currentSubscription.trialEndsAt ? new Date(p.currentSubscription.trialEndsAt) : null,
26
- trialStartedAt: p.currentSubscription.trialStartedAt ? new Date(p.currentSubscription.trialStartedAt) : null,
27
- pausedAt: p.currentSubscription.pausedAt ? new Date(p.currentSubscription.pausedAt) : null,
28
- currentPeriodEndsAt: p.currentSubscription.currentPeriodEndsAt ? new Date(p.currentSubscription.currentPeriodEndsAt) : null,
29
- currentPeriodStartedAt: p.currentSubscription.currentPeriodStartedAt ? new Date(p.currentSubscription.currentPeriodStartedAt) : null,
30
- canceledAt: p.currentSubscription.canceledAt ? new Date(p.currentSubscription.canceledAt) : null,
31
- expiresAt: p.currentSubscription.expiresAt ? new Date(p.currentSubscription.expiresAt) : null
18
+ collectionMethod: p.currentSubscription.collectionMethod
32
19
  }),
33
- invoices: p.invoices.map(function (i) {
34
- return _objectSpread(_objectSpread({}, i), {}, {
35
- date: new Date(i.date),
36
- due: new Date(i.due),
37
- status: i.status
38
- });
39
- })
20
+ invoices: p.invoices.map(i => _objectSpread(_objectSpread({}, i), {}, {
21
+ status: i.status
22
+ }))
40
23
  });
41
24
  }
42
25
 
43
- var plansCodes = ["basic_month", "advanced_month", "pro_month", "basic_year", "advanced_year", "pro_year"];
26
+ const plansCodes = ["basic_month", "advanced_month", "pro_month", "basic_year", "advanced_year", "pro_year"];
44
27
  export function isValidPlan(planCode) {
45
28
  return plansCodes.includes(planCode);
46
29
  }
47
30
 
48
- var getUserSelector = function getUserSelector(userId, withPublicKey) {
49
- var _Selector = Selector("Query")({
31
+ const getUserSelector = (userId, withPublicKey) => {
32
+ const {
33
+ user
34
+ } = Selector("Query")({
50
35
  user: [{
51
- userId: userId
36
+ userId
52
37
  }, {
53
38
  "...on ErrorNotFound": {
54
39
  __typename: true,
@@ -71,2234 +56,1044 @@ var getUserSelector = function getUserSelector(userId, withPublicKey) {
71
56
  }
72
57
  }
73
58
  }]
74
- }),
75
- user = _Selector.user;
76
-
59
+ });
77
60
  return user;
78
61
  };
79
62
 
80
- function getUser(_x) {
81
- return _getUser.apply(this, arguments);
82
- }
83
-
84
- function _getUser() {
85
- _getUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee28(params) {
86
- var _params$userId3;
87
-
88
- var selector, _yield$params$client, userResponse;
89
-
90
- return _regeneratorRuntime.wrap(function _callee28$(_context28) {
91
- while (1) {
92
- switch (_context28.prev = _context28.next) {
93
- case 0:
94
- selector = getUserSelector((_params$userId3 = params.userId) != null ? _params$userId3 : params.userEmail, params.withPublicKey);
95
- _context28.next = 3;
96
- return params.client("query")({
97
- user: selector
98
- });
99
-
100
- case 3:
101
- _yield$params$client = _context28.sent;
102
- userResponse = _yield$params$client.user;
103
-
104
- if (userResponse) {
105
- _context28.next = 7;
106
- break;
107
- }
108
-
109
- return _context28.abrupt("return", null);
110
-
111
- case 7:
112
- if (!(userResponse.__typename === "ErrorNotFound")) {
113
- _context28.next = 9;
114
- break;
115
- }
116
-
117
- return _context28.abrupt("return", userResponse);
63
+ async function getUser(params) {
64
+ var _params$userId;
65
+
66
+ const selector = getUserSelector((_params$userId = params.userId) != null ? _params$userId : params.userEmail, params.withPublicKey);
67
+ const {
68
+ user: userResponse
69
+ } = await params.client("query", {
70
+ scalars: {
71
+ Json: {
72
+ encode: e => JSON.stringify(e),
73
+ decode: e => JSON.parse(e)
74
+ },
75
+ DateTime: {
76
+ decode: e => new Date(e),
77
+ encode: e => e.toISOString()
78
+ },
79
+ BigInt: {
80
+ decode: e => BigInt(e),
81
+ encode: e => e.toString()
82
+ }
83
+ }
84
+ })({
85
+ user: selector
86
+ });
118
87
 
119
- case 9:
120
- if (userResponse.user) {
121
- _context28.next = 11;
122
- break;
123
- }
88
+ if (!userResponse) {
89
+ return null;
90
+ }
124
91
 
125
- return _context28.abrupt("return", null);
92
+ if (userResponse.__typename === "ErrorNotFound") {
93
+ return userResponse;
94
+ }
126
95
 
127
- case 11:
128
- return _context28.abrupt("return", {
129
- __typename: "SuccessResponse",
130
- data: _objectSpread(_objectSpread({}, userResponse.user), {}, {
131
- lastLogin: new Date(userResponse.user.lastLogin),
132
- deletedAt: userResponse.user.deletedAt ? new Date(userResponse.user.deletedAt) : null
133
- })
134
- });
96
+ if (!userResponse.user) {
97
+ return null;
98
+ }
135
99
 
136
- case 12:
137
- case "end":
138
- return _context28.stop();
139
- }
140
- }
141
- }, _callee28);
142
- }));
143
- return _getUser.apply(this, arguments);
100
+ return {
101
+ __typename: "SuccessResponse",
102
+ data: userResponse.user
103
+ };
144
104
  }
145
105
 
146
- export var BaseClient = /*#__PURE__*/function () {
147
- function BaseClient(session, env) {
106
+ export class BaseClient {
107
+ constructor(session, env) {
148
108
  this.sessionId = session;
149
109
  this.client = BaseClient._getBaseClient(env, session);
150
110
  }
151
111
 
152
- var _proto = BaseClient.prototype;
153
-
154
- _proto.sessions = /*#__PURE__*/function () {
155
- var _sessions = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
156
- var data, userResponse, _userResponse$user$se, _sessions2;
157
-
158
- return _regeneratorRuntime.wrap(function _callee$(_context) {
159
- while (1) {
160
- switch (_context.prev = _context.next) {
161
- case 0:
162
- _context.next = 2;
163
- return this.client("query")({
164
- user: [{}, {
165
- "...on ErrorNotFound": {
166
- __typename: true,
167
- field: true,
168
- message: true
169
- },
170
- "...on UserResponse": {
171
- __typename: true,
172
- user: {
173
- sessions: {
174
- id: true,
175
- lastActivity: true,
176
- userAgent: true,
177
- ip: true,
178
- city: true,
179
- country: true,
180
- appSessions: {
181
- id: true,
182
- lastActivity: true,
183
- userAgent: true,
184
- ip: true,
185
- city: true,
186
- country: true,
187
- userApp: {
188
- app: {
189
- name: true
190
- }
191
- }
192
- }
193
- }
194
- }
112
+ async sessions() {
113
+ const data = await this.client("query", {
114
+ scalars: {
115
+ Json: {
116
+ encode: e => JSON.stringify(e),
117
+ decode: e => JSON.parse(e)
118
+ },
119
+ DateTime: {
120
+ decode: e => new Date(e),
121
+ encode: e => e.toISOString()
122
+ },
123
+ BigInt: {
124
+ decode: e => BigInt(e),
125
+ encode: e => e.toString()
126
+ }
127
+ }
128
+ })({
129
+ user: [{}, {
130
+ "...on ErrorNotFound": {
131
+ __typename: true,
132
+ field: true,
133
+ message: true
134
+ },
135
+ "...on UserResponse": {
136
+ __typename: true,
137
+ user: {
138
+ sessions: {
139
+ id: true,
140
+ lastActivity: true,
141
+ userAgent: true,
142
+ ip: true,
143
+ city: true,
144
+ country: true,
145
+ appSessions: {
146
+ id: true,
147
+ lastActivity: true,
148
+ userAgent: true,
149
+ ip: true,
150
+ city: true,
151
+ country: true,
152
+ userApp: {
153
+ app: {
154
+ name: true
195
155
  }
196
- }]
197
- });
198
-
199
- case 2:
200
- data = _context.sent;
201
-
202
- if (data.user) {
203
- _context.next = 5;
204
- break;
205
- }
206
-
207
- return _context.abrupt("return", null);
208
-
209
- case 5:
210
- userResponse = data.user;
211
-
212
- if (!(userResponse.__typename === "UserResponse")) {
213
- _context.next = 11;
214
- break;
215
- }
216
-
217
- if (userResponse.user) {
218
- _context.next = 9;
219
- break;
156
+ }
220
157
  }
221
-
222
- return _context.abrupt("return", null);
223
-
224
- case 9:
225
- _sessions2 = (_userResponse$user$se = userResponse.user.sessions.map(function (s) {
226
- return {
227
- id: s.id,
228
- ip: s.ip,
229
- city: s.city,
230
- country: s.country,
231
- lastActivity: s.lastActivity ? new Date(s.lastActivity) : undefined,
232
- userAgent: s.userAgent,
233
- appSessions: s.appSessions.map(function (a) {
234
- var _a$userApp$app$name, _a$userApp;
235
-
236
- return {
237
- id: a.id,
238
- ip: a.ip,
239
- city: a.city,
240
- country: a.country,
241
- lastActivity: a.lastActivity ? new Date(a.lastActivity) : undefined,
242
- userAgent: a.userAgent,
243
- app: (_a$userApp$app$name = (_a$userApp = a.userApp) == null ? void 0 : _a$userApp.app.name) != null ? _a$userApp$app$name : ""
244
- };
245
- })
246
- };
247
- })) != null ? _userResponse$user$se : [];
248
- return _context.abrupt("return", {
249
- __typename: "SuccessResponse",
250
- data: _sessions2
251
- });
252
-
253
- case 11:
254
- return _context.abrupt("return", userResponse);
255
-
256
- case 12:
257
- case "end":
258
- return _context.stop();
158
+ }
259
159
  }
260
160
  }
261
- }, _callee, this);
262
- }));
161
+ }]
162
+ });
263
163
 
264
- function sessions() {
265
- return _sessions.apply(this, arguments);
164
+ if (!data.user) {
165
+ return null;
266
166
  }
267
167
 
268
- return sessions;
269
- }();
270
-
271
- _proto.logout = /*#__PURE__*/function () {
272
- var _logout = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sessionId) {
273
- var local, session;
274
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
275
- while (1) {
276
- switch (_context2.prev = _context2.next) {
277
- case 0:
278
- if (!sessionId) {
279
- local = getStorage(false);
280
- session = getStorage(true);
281
- local.jwt.clear();
282
- local.userAppKeys.clear();
283
- local.userAppSession.clear();
284
- session.jwt.clear();
285
- session.userAppKeys.clear();
286
- session.userAppSession.clear();
287
- usersCache.clear();
288
- }
168
+ const userResponse = data.user;
289
169
 
290
- _context2.prev = 1;
291
- _context2.next = 4;
292
- return this.client("mutation")({
293
- logout: [{
294
- sessionId: sessionId
295
- }, {
296
- "...on ErrorAccessDenied": {
297
- __typename: true,
298
- message: true
299
- },
300
- "...on ErrorBasic": {
301
- __typename: true,
302
- message: true
303
- },
304
- "...on LogoutResponse": {
305
- __typename: true,
306
- logout: true
307
- }
308
- }]
309
- });
170
+ if (userResponse.__typename === "UserResponse") {
171
+ var _userResponse$user$se;
310
172
 
311
- case 4:
312
- _context2.next = 8;
313
- break;
173
+ if (!userResponse.user) {
174
+ return null;
175
+ }
314
176
 
315
- case 6:
316
- _context2.prev = 6;
317
- _context2.t0 = _context2["catch"](1);
177
+ const sessions = (_userResponse$user$se = userResponse.user.sessions.map(s => ({
178
+ id: s.id,
179
+ ip: s.ip,
180
+ city: s.city,
181
+ country: s.country,
182
+ lastActivity: s.lastActivity ? new Date(s.lastActivity) : undefined,
183
+ userAgent: s.userAgent,
184
+ appSessions: s.appSessions.map(a => {
185
+ var _a$userApp$app$name, _a$userApp;
186
+
187
+ return {
188
+ id: a.id,
189
+ ip: a.ip,
190
+ city: a.city,
191
+ country: a.country,
192
+ lastActivity: a.lastActivity ? new Date(a.lastActivity) : undefined,
193
+ userAgent: a.userAgent,
194
+ app: (_a$userApp$app$name = (_a$userApp = a.userApp) == null ? void 0 : _a$userApp.app.name) != null ? _a$userApp$app$name : ""
195
+ };
196
+ })
197
+ }))) != null ? _userResponse$user$se : [];
198
+ return {
199
+ __typename: "SuccessResponse",
200
+ data: sessions
201
+ };
202
+ }
318
203
 
319
- case 8:
320
- case "end":
321
- return _context2.stop();
322
- }
323
- }
324
- }, _callee2, this, [[1, 6]]);
325
- }));
204
+ return userResponse;
205
+ }
326
206
 
327
- function logout(_x2) {
328
- return _logout.apply(this, arguments);
207
+ async logout(sessionId) {
208
+ if (!sessionId) {
209
+ const local = getStorage(false);
210
+ const session = getStorage(true);
211
+ local.jwt.clear();
212
+ local.userAppKeys.clear();
213
+ local.userAppSession.clear();
214
+ session.jwt.clear();
215
+ session.userAppKeys.clear();
216
+ session.userAppSession.clear();
217
+ usersCache.clear();
329
218
  }
330
219
 
331
- return logout;
332
- }();
333
-
334
- _proto.me = /*#__PURE__*/function () {
335
- var _me = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(params) {
336
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
337
- while (1) {
338
- switch (_context3.prev = _context3.next) {
339
- case 0:
340
- return _context3.abrupt("return", this.user(params || {
341
- withPublicKey: true
342
- }));
343
-
344
- case 1:
345
- case "end":
346
- return _context3.stop();
220
+ try {
221
+ await this.client("mutation")({
222
+ logout: [{
223
+ sessionId: sessionId
224
+ }, {
225
+ "...on ErrorAccessDenied": {
226
+ __typename: true,
227
+ message: true
228
+ },
229
+ "...on ErrorBasic": {
230
+ __typename: true,
231
+ message: true
232
+ },
233
+ "...on LogoutResponse": {
234
+ __typename: true,
235
+ logout: true
347
236
  }
348
- }
349
- }, _callee3, this);
350
- }));
351
-
352
- function me(_x3) {
353
- return _me.apply(this, arguments);
237
+ }]
238
+ });
239
+ } catch {//
354
240
  }
241
+ }
355
242
 
356
- return me;
357
- }();
358
-
359
- BaseClient.user = /*#__PURE__*/function () {
360
- var _user = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(params, sessionId) {
361
- var _params$userId;
362
-
363
- var user;
364
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
365
- while (1) {
366
- switch (_context4.prev = _context4.next) {
367
- case 0:
368
- _context4.next = 2;
369
- return getUser({
370
- client: this._getBaseClient(params.env, sessionId),
371
- userId: (_params$userId = params.userId) != null ? _params$userId : params.userEmail,
372
- withPublicKey: params.withPublicKey
373
- });
374
-
375
- case 2:
376
- user = _context4.sent;
377
-
378
- if (user) {
379
- _context4.next = 5;
380
- break;
381
- }
382
-
383
- return _context4.abrupt("return", null);
384
-
385
- case 5:
386
- if (!(user.__typename === "ErrorNotFound")) {
387
- _context4.next = 7;
388
- break;
389
- }
243
+ async me(params) {
244
+ return this.user(params || {
245
+ withPublicKey: true
246
+ });
247
+ }
390
248
 
391
- return _context4.abrupt("return", user);
249
+ static async user(params, sessionId) {
250
+ var _params$userId2;
392
251
 
393
- case 7:
394
- if (user) {
395
- usersCache.set(user.data.id, user.data);
396
- }
252
+ const user = await getUser({
253
+ client: this._getBaseClient(params.env, sessionId),
254
+ userId: (_params$userId2 = params.userId) != null ? _params$userId2 : params.userEmail,
255
+ withPublicKey: params.withPublicKey
256
+ });
397
257
 
398
- return _context4.abrupt("return", user);
258
+ if (!user) {
259
+ return null;
260
+ }
399
261
 
400
- case 9:
401
- case "end":
402
- return _context4.stop();
403
- }
404
- }
405
- }, _callee4, this);
406
- }));
262
+ if (user.__typename === "ErrorNotFound") {
263
+ return user;
264
+ }
407
265
 
408
- function user(_x4, _x5) {
409
- return _user.apply(this, arguments);
266
+ if (user) {
267
+ usersCache.set(user.data.id, user.data);
410
268
  }
411
269
 
412
270
  return user;
413
- }();
414
-
415
- _proto.user = /*#__PURE__*/function () {
416
- var _user2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(params) {
417
- var _params$userId2;
418
-
419
- var user;
420
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
421
- while (1) {
422
- switch (_context5.prev = _context5.next) {
423
- case 0:
424
- _context5.next = 2;
425
- return getUser({
426
- client: this.client,
427
- userId: (_params$userId2 = params.userId) != null ? _params$userId2 : params.userEmail,
428
- withPublicKey: params.withPublicKey
429
- });
430
-
431
- case 2:
432
- user = _context5.sent;
433
-
434
- if (user) {
435
- _context5.next = 5;
436
- break;
437
- }
438
-
439
- return _context5.abrupt("return", null);
440
-
441
- case 5:
442
- if (!(user.__typename === "ErrorNotFound")) {
443
- _context5.next = 7;
444
- break;
445
- }
271
+ }
446
272
 
447
- return _context5.abrupt("return", user);
273
+ async user(params) {
274
+ var _params$userId3;
448
275
 
449
- case 7:
450
- if (user) {
451
- usersCache.set(user.data.id, user.data);
452
- }
276
+ const user = await getUser({
277
+ client: this.client,
278
+ userId: (_params$userId3 = params.userId) != null ? _params$userId3 : params.userEmail,
279
+ withPublicKey: params.withPublicKey
280
+ });
453
281
 
454
- return _context5.abrupt("return", user);
282
+ if (!user) {
283
+ return null;
284
+ }
455
285
 
456
- case 9:
457
- case "end":
458
- return _context5.stop();
459
- }
460
- }
461
- }, _callee5, this);
462
- }));
286
+ if (user.__typename === "ErrorNotFound") {
287
+ return user;
288
+ }
463
289
 
464
- function user(_x6) {
465
- return _user2.apply(this, arguments);
290
+ if (user) {
291
+ usersCache.set(user.data.id, user.data);
466
292
  }
467
293
 
468
294
  return user;
469
- }();
470
-
471
- _proto.updateProfile = /*#__PURE__*/function () {
472
- var _updateProfile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(_ref) {
473
- var firstname, lastname, lang, _yield$this$client, updateProfile;
474
-
475
- return _regeneratorRuntime.wrap(function _callee6$(_context6) {
476
- while (1) {
477
- switch (_context6.prev = _context6.next) {
478
- case 0:
479
- firstname = _ref.firstname, lastname = _ref.lastname, lang = _ref.lang;
480
- _context6.next = 3;
481
- return this.client("mutation")({
482
- updateProfile: [{
483
- firstname: firstname,
484
- lastname: lastname,
485
- lang: lang
486
- }, {
487
- "...on ErrorAccessDenied": {
488
- __typename: true,
489
- message: true
490
- },
491
- "...on ErrorNotFound": {
492
- __typename: true,
493
- message: true
494
- },
495
- "...on UpdateProfileResponse": {
496
- __typename: true,
497
- updateProfile: {
498
- id: true,
499
- firstname: true,
500
- lastname: true,
501
- lang: true,
502
- email: true,
503
- phone: true,
504
- role: true,
505
- deletedAt: true,
506
- lastLogin: true
507
- }
508
- }
509
- }]
510
- });
511
-
512
- case 3:
513
- _yield$this$client = _context6.sent;
514
- updateProfile = _yield$this$client.updateProfile;
515
-
516
- if (updateProfile) {
517
- _context6.next = 7;
518
- break;
519
- }
520
-
521
- return _context6.abrupt("return", null);
522
-
523
- case 7:
524
- if (!(updateProfile.__typename === "ErrorAccessDenied")) {
525
- _context6.next = 9;
526
- break;
527
- }
528
-
529
- return _context6.abrupt("return", updateProfile);
530
-
531
- case 9:
532
- if (!(updateProfile.__typename === "ErrorNotFound")) {
533
- _context6.next = 11;
534
- break;
535
- }
536
-
537
- return _context6.abrupt("return", updateProfile);
538
-
539
- case 11:
540
- if (updateProfile.updateProfile) {
541
- _context6.next = 13;
542
- break;
543
- }
544
-
545
- return _context6.abrupt("return", null);
546
-
547
- case 13:
548
- return _context6.abrupt("return", {
549
- __typename: "SuccessResponse",
550
- data: {
551
- email: updateProfile.updateProfile.email,
552
- firstname: updateProfile.updateProfile.firstname,
553
- id: updateProfile.updateProfile.id,
554
- lang: updateProfile.updateProfile.lang,
555
- lastLogin: new Date(updateProfile.updateProfile.lastLogin),
556
- lastname: updateProfile.updateProfile.lastname,
557
- phone: updateProfile.updateProfile.phone,
558
- role: updateProfile.updateProfile.role,
559
- deletedAt: updateProfile.updateProfile.deletedAt ? new Date(updateProfile.updateProfile.deletedAt) : null
560
- }
561
- });
295
+ }
562
296
 
563
- case 14:
564
- case "end":
565
- return _context6.stop();
566
- }
297
+ async updateProfile(_ref) {
298
+ let {
299
+ firstname,
300
+ lastname,
301
+ lang
302
+ } = _ref;
303
+ const {
304
+ updateProfile
305
+ } = await this.client("mutation", {
306
+ scalars: {
307
+ Json: {
308
+ encode: e => JSON.stringify(e),
309
+ decode: e => JSON.parse(e)
310
+ },
311
+ DateTime: {
312
+ decode: e => new Date(e),
313
+ encode: e => e.toISOString()
314
+ },
315
+ BigInt: {
316
+ decode: e => BigInt(e),
317
+ encode: e => e.toString()
567
318
  }
568
- }, _callee6, this);
569
- }));
570
-
571
- function updateProfile(_x7) {
572
- return _updateProfile.apply(this, arguments);
573
- }
574
-
575
- return updateProfile;
576
- }();
577
-
578
- BaseClient.plans = /*#__PURE__*/function () {
579
- var _plans = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(env, sessionId) {
580
- var _yield$BaseClient$_ge, plans;
581
-
582
- return _regeneratorRuntime.wrap(function _callee7$(_context7) {
583
- while (1) {
584
- switch (_context7.prev = _context7.next) {
585
- case 0:
586
- _context7.next = 2;
587
- return BaseClient._getBaseClient(env, sessionId)("query")({
588
- plans: {
589
- "...on PlanResponse": {
590
- __typename: true,
591
- plan: {
592
- kind: true,
593
- codes: true,
594
- limits: {
595
- downloadBandwidth: true,
596
- downloadCount: true,
597
- hardFileCount: true,
598
- hardFileSize: true,
599
- perFileSize: true,
600
- uploadBandwidth: true,
601
- uploadCount: true,
602
- receivedMails: {
603
- count: true,
604
- fileCount: true,
605
- fileSize: true,
606
- hardCount: true,
607
- hardFileCount: true,
608
- hardFileSize: true,
609
- perFileSize: true
610
- },
611
- sentMails: {
612
- count: true,
613
- fileCount: true,
614
- fileSize: true,
615
- hardCount: true,
616
- hardFileCount: true,
617
- hardFileSize: true,
618
- perFileSize: true
619
- }
620
- }
621
- }
622
- }
623
- }
624
- });
625
-
626
- case 2:
627
- _yield$BaseClient$_ge = _context7.sent;
628
- plans = _yield$BaseClient$_ge.plans;
629
-
630
- if (plans) {
631
- _context7.next = 6;
632
- break;
633
- }
634
-
635
- return _context7.abrupt("return", null);
636
-
637
- case 6:
638
- return _context7.abrupt("return", {
639
- __typename: "SuccessResponse",
640
- data: plans.plan
641
- });
642
-
643
- case 7:
644
- case "end":
645
- return _context7.stop();
319
+ }
320
+ })({
321
+ updateProfile: [{
322
+ firstname,
323
+ lastname,
324
+ lang
325
+ }, {
326
+ "...on ErrorAccessDenied": {
327
+ __typename: true,
328
+ message: true
329
+ },
330
+ "...on ErrorNotFound": {
331
+ __typename: true,
332
+ message: true
333
+ },
334
+ "...on UpdateProfileResponse": {
335
+ __typename: true,
336
+ updateProfile: {
337
+ id: true,
338
+ firstname: true,
339
+ lastname: true,
340
+ lang: true,
341
+ email: true,
342
+ phone: true,
343
+ role: true,
344
+ deletedAt: true,
345
+ lastLogin: true
646
346
  }
647
347
  }
648
- }, _callee7);
649
- }));
348
+ }]
349
+ });
650
350
 
651
- function plans(_x8, _x9) {
652
- return _plans.apply(this, arguments);
351
+ if (!updateProfile) {
352
+ return null;
653
353
  }
654
354
 
655
- return plans;
656
- }();
657
-
658
- _proto.pay = /*#__PURE__*/function () {
659
- var _pay = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(planCode, input, autoRenew) {
660
- var _pay$pay;
661
-
662
- var _yield$this$client2, pay;
663
-
664
- return _regeneratorRuntime.wrap(function _callee8$(_context8) {
665
- while (1) {
666
- switch (_context8.prev = _context8.next) {
667
- case 0:
668
- _context8.next = 2;
669
- return this.client("mutation")({
670
- pay: [{
671
- input: input,
672
- planCode: planCode,
673
- autoRenew: autoRenew
674
- }, {
675
- "...on ErrorAccessDenied": {
676
- __typename: true,
677
- message: true
678
- },
679
- "...on PayResponse": {
680
- __typename: true,
681
- pay: true
682
- }
683
- }]
684
- });
685
-
686
- case 2:
687
- _yield$this$client2 = _context8.sent;
688
- pay = _yield$this$client2.pay;
689
-
690
- if (pay) {
691
- _context8.next = 6;
692
- break;
693
- }
694
-
695
- return _context8.abrupt("return", null);
696
-
697
- case 6:
698
- if (!(pay.__typename === "ErrorAccessDenied")) {
699
- _context8.next = 8;
700
- break;
701
- }
702
-
703
- return _context8.abrupt("return", pay);
704
-
705
- case 8:
706
- return _context8.abrupt("return", {
707
- __typename: "SuccessResponse",
708
- data: (_pay$pay = pay.pay) != null ? _pay$pay : false
709
- });
710
-
711
- case 9:
712
- case "end":
713
- return _context8.stop();
714
- }
715
- }
716
- }, _callee8, this);
717
- }));
718
-
719
- function pay(_x10, _x11, _x12) {
720
- return _pay.apply(this, arguments);
355
+ if (updateProfile.__typename === "ErrorAccessDenied") {
356
+ return updateProfile;
721
357
  }
722
358
 
723
- return pay;
724
- }();
725
-
726
- _proto.cancelPayment = /*#__PURE__*/function () {
727
- var _cancelPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {
728
- var _cancelPayment$cancel;
729
-
730
- var _yield$this$client3, cancelPayment;
731
-
732
- return _regeneratorRuntime.wrap(function _callee9$(_context9) {
733
- while (1) {
734
- switch (_context9.prev = _context9.next) {
735
- case 0:
736
- _context9.next = 2;
737
- return this.client("mutation")({
738
- cancelPayment: {
739
- "...on ErrorAccessDenied": {
740
- __typename: true,
741
- message: true
742
- },
743
- "...on CancelPaymentResponse": {
744
- __typename: true,
745
- cancelPayment: true
746
- }
747
- }
748
- });
749
-
750
- case 2:
751
- _yield$this$client3 = _context9.sent;
752
- cancelPayment = _yield$this$client3.cancelPayment;
753
-
754
- if (cancelPayment) {
755
- _context9.next = 6;
756
- break;
757
- }
758
-
759
- return _context9.abrupt("return", null);
760
-
761
- case 6:
762
- if (!(cancelPayment.__typename === "ErrorAccessDenied")) {
763
- _context9.next = 8;
764
- break;
765
- }
766
-
767
- return _context9.abrupt("return", cancelPayment);
768
-
769
- case 8:
770
- return _context9.abrupt("return", {
771
- __typename: "SuccessResponse",
772
- data: (_cancelPayment$cancel = cancelPayment.cancelPayment) != null ? _cancelPayment$cancel : false
773
- });
774
-
775
- case 9:
776
- case "end":
777
- return _context9.stop();
778
- }
779
- }
780
- }, _callee9, this);
781
- }));
782
-
783
- function cancelPayment() {
784
- return _cancelPayment.apply(this, arguments);
359
+ if (updateProfile.__typename === "ErrorNotFound") {
360
+ return updateProfile;
785
361
  }
786
362
 
787
- return cancelPayment;
788
- }();
789
-
790
- _proto.paymentInfos = /*#__PURE__*/function () {
791
- var _paymentInfos = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
792
- var _yield$this$client4, paymentInfos, result;
793
-
794
- return _regeneratorRuntime.wrap(function _callee10$(_context10) {
795
- while (1) {
796
- switch (_context10.prev = _context10.next) {
797
- case 0:
798
- _context10.next = 2;
799
- return this.client("query")({
800
- paymentInfos: {
801
- "...on ErrorAccessDenied": {
802
- __typename: true,
803
- message: true
804
- },
805
- "...on PaymentInfosResponse": {
806
- __typename: true,
807
- paymentInfos: {
808
- hostedUrl: true,
809
- currentSubscription: {
810
- autorenew: true,
811
- activatedAt: true,
812
- currentPeriodEndsAt: true,
813
- currentPeriodStartedAt: true,
814
- canceledAt: true,
815
- createdAt: true,
816
- expiresAt: true,
817
- pausedAt: true,
818
- trialEndsAt: true,
819
- trialStartedAt: true,
820
- updatedAt: true,
821
- state: true,
822
- collectionMethod: true,
823
- plan: true,
824
- planCode: true,
825
- total: true
826
- },
827
- invoices: {
828
- pdf: true,
829
- date: true,
830
- due: true,
831
- status: true,
832
- total: true,
833
- name: true,
834
- currency: true
835
- }
836
- }
837
- }
838
- }
839
- });
840
-
841
- case 2:
842
- _yield$this$client4 = _context10.sent;
843
- paymentInfos = _yield$this$client4.paymentInfos;
844
-
845
- if (paymentInfos) {
846
- _context10.next = 6;
847
- break;
848
- }
849
-
850
- return _context10.abrupt("return", null);
851
-
852
- case 6:
853
- if (!(paymentInfos.__typename === "ErrorAccessDenied")) {
854
- _context10.next = 8;
855
- break;
856
- }
857
-
858
- return _context10.abrupt("return", paymentInfos);
859
-
860
- case 8:
861
- if (paymentInfos.paymentInfos) {
862
- _context10.next = 10;
863
- break;
864
- }
865
-
866
- return _context10.abrupt("return", null);
867
-
868
- case 10:
869
- result = internalToPaymentInfos(paymentInfos.paymentInfos);
870
- return _context10.abrupt("return", {
871
- __typename: "SuccessResponse",
872
- data: result
873
- });
874
-
875
- case 12:
876
- case "end":
877
- return _context10.stop();
878
- }
879
- }
880
- }, _callee10, this);
881
- }));
882
-
883
- function paymentInfos() {
884
- return _paymentInfos.apply(this, arguments);
363
+ if (!updateProfile.updateProfile) {
364
+ return null;
885
365
  }
886
366
 
887
- return paymentInfos;
888
- }();
889
-
890
- _proto.limits = /*#__PURE__*/function () {
891
- var _limits = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11() {
892
- var _yield$this$client5, limits, cloud, mail;
893
-
894
- return _regeneratorRuntime.wrap(function _callee11$(_context11) {
895
- while (1) {
896
- switch (_context11.prev = _context11.next) {
897
- case 0:
898
- _context11.next = 2;
899
- return this.client("query")({
900
- limits: {
901
- "...on ErrorAccessDenied": {
902
- __typename: true,
903
- message: true
904
- },
905
- "...on ErrorLimit": {
906
- __typename: true,
907
- message: true
908
- },
909
- "...on ErrorNotExist": {
910
- __typename: true,
911
- message: true
912
- },
913
- "...on ErrorNotFound": {
914
- __typename: true,
915
- message: true
916
- },
917
- "...on QueryLimits": {
918
- __typename: true,
919
- cloud: {
920
- size: true,
921
- maxSize: true,
922
- count: true,
923
- maxCount: true
924
- },
925
- mail: {
926
- received: {
927
- count: true,
928
- maxCount: true,
929
- fileCount: true,
930
- maxFileCount: true,
931
- fileSize: true,
932
- maxFileSize: true
933
- },
934
- sent: {
935
- count: true,
936
- maxCount: true,
937
- fileCount: true,
938
- maxFileCount: true,
939
- fileSize: true,
940
- maxFileSize: true
941
- }
942
- }
943
- }
944
- }
945
- });
946
-
947
- case 2:
948
- _yield$this$client5 = _context11.sent;
949
- limits = _yield$this$client5.limits;
950
-
951
- if (limits) {
952
- _context11.next = 6;
953
- break;
954
- }
955
-
956
- return _context11.abrupt("return", null);
957
-
958
- case 6:
959
- if (!(limits.__typename === "ErrorAccessDenied")) {
960
- _context11.next = 8;
961
- break;
962
- }
963
-
964
- return _context11.abrupt("return", limits);
965
-
966
- case 8:
967
- if (!(limits.__typename === "ErrorNotExist")) {
968
- _context11.next = 10;
969
- break;
970
- }
971
-
972
- return _context11.abrupt("return", limits);
973
-
974
- case 10:
975
- if (!(limits.__typename === "ErrorLimit")) {
976
- _context11.next = 12;
977
- break;
978
- }
979
-
980
- return _context11.abrupt("return", limits);
981
-
982
- case 12:
983
- if (!(limits.__typename === "ErrorNotFound")) {
984
- _context11.next = 14;
985
- break;
986
- }
987
-
988
- return _context11.abrupt("return", limits);
989
-
990
- case 14:
991
- cloud = limits.cloud, mail = limits.mail;
992
- return _context11.abrupt("return", {
993
- __typename: "SuccessResponse",
994
- data: {
995
- cloud: {
996
- count: BigInt(cloud.count),
997
- size: BigInt(cloud.size),
998
- maxCount: cloud.maxCount ? BigInt(cloud.maxCount) : null,
999
- maxSize: cloud.maxSize ? BigInt(cloud.maxSize) : null
1000
- },
1001
- mail: {
1002
- received: {
1003
- count: BigInt(mail.received.count),
1004
- maxCount: mail.received.maxCount ? BigInt(mail.received.maxCount) : null,
1005
- fileCount: BigInt(mail.received.fileCount),
1006
- maxFileCount: mail.received.maxFileCount ? BigInt(mail.received.maxFileCount) : null,
1007
- fileSize: BigInt(mail.received.fileSize),
1008
- maxFileSize: mail.received.maxFileSize ? BigInt(mail.received.maxFileSize) : null
1009
- },
1010
- sent: {
1011
- count: BigInt(mail.sent.count),
1012
- maxCount: mail.sent.maxCount ? BigInt(mail.sent.maxCount) : null,
1013
- fileCount: BigInt(mail.sent.fileCount),
1014
- maxFileCount: mail.sent.maxFileCount ? BigInt(mail.sent.maxFileCount) : null,
1015
- fileSize: BigInt(mail.sent.fileSize),
1016
- maxFileSize: mail.sent.maxFileSize ? BigInt(mail.sent.maxFileSize) : null
1017
- }
1018
- }
1019
- }
1020
- });
367
+ return {
368
+ __typename: "SuccessResponse",
369
+ data: updateProfile.updateProfile
370
+ };
371
+ }
1021
372
 
1022
- case 16:
1023
- case "end":
1024
- return _context11.stop();
1025
- }
373
+ static async plans(env, sessionId) {
374
+ const {
375
+ plans
376
+ } = await BaseClient._getBaseClient(env, sessionId)("query", {
377
+ scalars: {
378
+ Json: {
379
+ encode: e => JSON.stringify(e),
380
+ decode: e => JSON.parse(e)
381
+ },
382
+ DateTime: {
383
+ decode: e => new Date(e),
384
+ encode: e => e.toISOString()
385
+ },
386
+ BigInt: {
387
+ decode: e => BigInt(e),
388
+ encode: e => e.toString()
1026
389
  }
1027
- }, _callee11, this);
1028
- }));
1029
-
1030
- function limits() {
1031
- return _limits.apply(this, arguments);
1032
- }
1033
-
1034
- return limits;
1035
- }();
1036
-
1037
- _proto.godFatherAndChildren = /*#__PURE__*/function () {
1038
- var _godFatherAndChildren = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
1039
- var _yield$this$client6, user;
1040
-
1041
- return _regeneratorRuntime.wrap(function _callee12$(_context12) {
1042
- while (1) {
1043
- switch (_context12.prev = _context12.next) {
1044
- case 0:
1045
- _context12.next = 2;
1046
- return this.client("query")({
1047
- user: [{}, {
1048
- "...on ErrorNotFound": {
1049
- __typename: true,
1050
- message: true
1051
- },
1052
- "...on UserResponse": {
1053
- __typename: true,
1054
- godChildren: {
1055
- id: true,
1056
- firstname: true,
1057
- lastname: true,
1058
- email: true,
1059
- phone: true
1060
- },
1061
- godFather: {
1062
- id: true,
1063
- firstname: true,
1064
- lastname: true,
1065
- email: true,
1066
- phone: true
1067
- }
1068
- }
1069
- }]
1070
- });
1071
-
1072
- case 2:
1073
- _yield$this$client6 = _context12.sent;
1074
- user = _yield$this$client6.user;
1075
-
1076
- if (user) {
1077
- _context12.next = 6;
1078
- break;
1079
- }
1080
-
1081
- return _context12.abrupt("return", null);
1082
-
1083
- case 6:
1084
- if (!(user.__typename === "ErrorNotFound")) {
1085
- _context12.next = 8;
1086
- break;
390
+ }
391
+ })({
392
+ plans: {
393
+ "...on PlanResponse": {
394
+ __typename: true,
395
+ plan: {
396
+ kind: true,
397
+ codes: true,
398
+ limits: {
399
+ downloadBandwidth: true,
400
+ downloadCount: true,
401
+ hardFileCount: true,
402
+ hardFileSize: true,
403
+ perFileSize: true,
404
+ uploadBandwidth: true,
405
+ uploadCount: true,
406
+ receivedMails: {
407
+ count: true,
408
+ fileCount: true,
409
+ fileSize: true,
410
+ hardCount: true,
411
+ hardFileCount: true,
412
+ hardFileSize: true,
413
+ perFileSize: true
414
+ },
415
+ sentMails: {
416
+ count: true,
417
+ fileCount: true,
418
+ fileSize: true,
419
+ hardCount: true,
420
+ hardFileCount: true,
421
+ hardFileSize: true,
422
+ perFileSize: true
1087
423
  }
1088
-
1089
- return _context12.abrupt("return", user);
1090
-
1091
- case 8:
1092
- return _context12.abrupt("return", {
1093
- __typename: "SuccessResponse",
1094
- data: {
1095
- godChildren: user.godChildren,
1096
- godFather: user.godFather
1097
- }
1098
- });
1099
-
1100
- case 9:
1101
- case "end":
1102
- return _context12.stop();
424
+ }
1103
425
  }
1104
426
  }
1105
- }, _callee12, this);
1106
- }));
427
+ }
428
+ });
1107
429
 
1108
- function godFatherAndChildren() {
1109
- return _godFatherAndChildren.apply(this, arguments);
430
+ if (!plans) {
431
+ return null;
1110
432
  }
1111
433
 
1112
- return godFatherAndChildren;
1113
- }();
1114
-
1115
- BaseClient.updateAppDBConfig = /*#__PURE__*/function () {
1116
- var _updateAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref2) {
1117
- var appCode, config, env, sessionId, _yield$BaseClient$_ge2, dbConfigMutation;
1118
-
1119
- return _regeneratorRuntime.wrap(function _callee13$(_context13) {
1120
- while (1) {
1121
- switch (_context13.prev = _context13.next) {
1122
- case 0:
1123
- appCode = _ref2.appCode, config = _ref2.config, env = _ref2.env, sessionId = _ref2.sessionId;
1124
- _context13.next = 3;
1125
- return BaseClient._getBaseClient(env, sessionId)("mutation")({
1126
- dbConfigMutation: [{
1127
- appCode: appCode,
1128
- config: JSON.stringify(config)
1129
- }, {
1130
- "...on ErrorAccessDenied": {
1131
- __typename: true,
1132
- message: true
1133
- },
1134
- "...on DbConfigMutationResponse": {
1135
- __typename: true,
1136
- dbConfigMutation: true
1137
- }
1138
- }]
1139
- });
1140
-
1141
- case 3:
1142
- _yield$BaseClient$_ge2 = _context13.sent;
1143
- dbConfigMutation = _yield$BaseClient$_ge2.dbConfigMutation;
1144
-
1145
- if (dbConfigMutation) {
1146
- _context13.next = 7;
1147
- break;
1148
- }
1149
-
1150
- return _context13.abrupt("return", null);
1151
-
1152
- case 7:
1153
- if (!(dbConfigMutation.__typename === "ErrorAccessDenied")) {
1154
- _context13.next = 9;
1155
- break;
1156
- }
1157
-
1158
- return _context13.abrupt("return", dbConfigMutation);
1159
-
1160
- case 9:
1161
- return _context13.abrupt("return", {
1162
- __typename: "SuccessResponse",
1163
- data: dbConfigMutation.dbConfigMutation
1164
- });
434
+ return {
435
+ __typename: "SuccessResponse",
436
+ data: plans.plan
437
+ };
438
+ }
1165
439
 
1166
- case 10:
1167
- case "end":
1168
- return _context13.stop();
1169
- }
440
+ async pay(planCode, input, autoRenew) {
441
+ var _pay$pay;
442
+
443
+ const {
444
+ pay
445
+ } = await this.client("mutation")({
446
+ pay: [{
447
+ input,
448
+ planCode,
449
+ autoRenew
450
+ }, {
451
+ "...on ErrorAccessDenied": {
452
+ __typename: true,
453
+ message: true
454
+ },
455
+ "...on PayResponse": {
456
+ __typename: true,
457
+ pay: true
1170
458
  }
1171
- }, _callee13);
1172
- }));
459
+ }]
460
+ });
1173
461
 
1174
- function updateAppDBConfig(_x13) {
1175
- return _updateAppDBConfig.apply(this, arguments);
462
+ if (!pay) {
463
+ return null;
1176
464
  }
1177
465
 
1178
- return updateAppDBConfig;
1179
- }();
1180
-
1181
- BaseClient.getAppDBConfig = /*#__PURE__*/function () {
1182
- var _getAppDBConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(appCode, env, sessionId) {
1183
- var _yield$BaseClient$_ge3, dbConfig;
1184
-
1185
- return _regeneratorRuntime.wrap(function _callee14$(_context14) {
1186
- while (1) {
1187
- switch (_context14.prev = _context14.next) {
1188
- case 0:
1189
- _context14.next = 2;
1190
- return BaseClient._getBaseClient(env, sessionId)("query")({
1191
- dbConfig: [{
1192
- appCode: appCode
1193
- }, {
1194
- "...on ErrorAccessDenied": {
1195
- __typename: true,
1196
- message: true
1197
- },
1198
- "...on ErrorNotFound": {
1199
- __typename: true,
1200
- message: true
1201
- },
1202
- "...on ErrorNotExist": {
1203
- __typename: true,
1204
- message: true
1205
- },
1206
- "...on DbConfigResponse": {
1207
- __typename: true,
1208
- json: true
1209
- }
1210
- }]
1211
- });
1212
-
1213
- case 2:
1214
- _yield$BaseClient$_ge3 = _context14.sent;
1215
- dbConfig = _yield$BaseClient$_ge3.dbConfig;
1216
-
1217
- if (dbConfig) {
1218
- _context14.next = 6;
1219
- break;
1220
- }
1221
-
1222
- return _context14.abrupt("return", null);
1223
-
1224
- case 6:
1225
- if (!(dbConfig.__typename === "ErrorAccessDenied")) {
1226
- _context14.next = 8;
1227
- break;
1228
- }
1229
-
1230
- return _context14.abrupt("return", dbConfig);
1231
-
1232
- case 8:
1233
- if (!(dbConfig.__typename === "ErrorNotFound")) {
1234
- _context14.next = 10;
1235
- break;
1236
- }
1237
-
1238
- return _context14.abrupt("return", dbConfig);
1239
-
1240
- case 10:
1241
- if (!(dbConfig.__typename === "ErrorNotExist")) {
1242
- _context14.next = 12;
1243
- break;
1244
- }
1245
-
1246
- return _context14.abrupt("return", dbConfig);
1247
-
1248
- case 12:
1249
- return _context14.abrupt("return", {
1250
- __typename: "SuccessResponse",
1251
- data: dbConfig.json
1252
- });
1253
-
1254
- case 13:
1255
- case "end":
1256
- return _context14.stop();
1257
- }
1258
- }
1259
- }, _callee14);
1260
- }));
1261
-
1262
- function getAppDBConfig(_x14, _x15, _x16) {
1263
- return _getAppDBConfig.apply(this, arguments);
466
+ if (pay.__typename === "ErrorAccessDenied") {
467
+ return pay;
1264
468
  }
1265
469
 
1266
- return getAppDBConfig;
1267
- }();
1268
-
1269
- BaseClient.getFAQ = /*#__PURE__*/function () {
1270
- var _getFAQ = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(_ref3) {
1271
- var lang, env, sessionId, _yield$BaseClient$_ge4, faq;
1272
-
1273
- return _regeneratorRuntime.wrap(function _callee15$(_context15) {
1274
- while (1) {
1275
- switch (_context15.prev = _context15.next) {
1276
- case 0:
1277
- lang = _ref3.lang, env = _ref3.env, sessionId = _ref3.sessionId;
1278
- _context15.next = 3;
1279
- return BaseClient._getBaseClient(env, sessionId)("query")({
1280
- faq: [{
1281
- lang: lang
1282
- }, {
1283
- "...on ErrorAccessDenied": {
1284
- __typename: true,
1285
- message: true
1286
- },
1287
- "...on FaqResponse": {
1288
- __typename: true,
1289
- faq: {
1290
- answer: true,
1291
- order: true,
1292
- question: true
1293
- }
1294
- }
1295
- }]
1296
- });
1297
-
1298
- case 3:
1299
- _yield$BaseClient$_ge4 = _context15.sent;
1300
- faq = _yield$BaseClient$_ge4.faq;
1301
-
1302
- if (faq) {
1303
- _context15.next = 7;
1304
- break;
1305
- }
1306
-
1307
- return _context15.abrupt("return", null);
1308
-
1309
- case 7:
1310
- if (!(faq.__typename === "ErrorAccessDenied")) {
1311
- _context15.next = 9;
1312
- break;
1313
- }
1314
-
1315
- return _context15.abrupt("return", faq);
1316
-
1317
- case 9:
1318
- return _context15.abrupt("return", {
1319
- __typename: "SuccessResponse",
1320
- data: faq.faq
1321
- });
470
+ return {
471
+ __typename: "SuccessResponse",
472
+ data: (_pay$pay = pay.pay) != null ? _pay$pay : false
473
+ };
474
+ }
1322
475
 
1323
- case 10:
1324
- case "end":
1325
- return _context15.stop();
1326
- }
476
+ async cancelPayment() {
477
+ var _cancelPayment$cancel;
478
+
479
+ const {
480
+ cancelPayment
481
+ } = await this.client("mutation")({
482
+ cancelPayment: {
483
+ "...on ErrorAccessDenied": {
484
+ __typename: true,
485
+ message: true
486
+ },
487
+ "...on CancelPaymentResponse": {
488
+ __typename: true,
489
+ cancelPayment: true
1327
490
  }
1328
- }, _callee15);
1329
- }));
491
+ }
492
+ });
1330
493
 
1331
- function getFAQ(_x17) {
1332
- return _getFAQ.apply(this, arguments);
494
+ if (!cancelPayment) {
495
+ return null;
1333
496
  }
1334
497
 
1335
- return getFAQ;
1336
- }();
1337
-
1338
- BaseClient.getBlog = /*#__PURE__*/function () {
1339
- var _getBlog = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16(_ref4) {
1340
- var env, lang, sessionId, _yield$BaseClient$_ge5, blog;
1341
-
1342
- return _regeneratorRuntime.wrap(function _callee16$(_context16) {
1343
- while (1) {
1344
- switch (_context16.prev = _context16.next) {
1345
- case 0:
1346
- env = _ref4.env, lang = _ref4.lang, sessionId = _ref4.sessionId;
1347
- _context16.next = 3;
1348
- return BaseClient._getBaseClient(env, sessionId)("query")({
1349
- blog: [{
1350
- lang: lang
1351
- }, {
1352
- "...on ErrorLangNotExist": {
1353
- __typename: true,
1354
- message: true
1355
- },
1356
- "...on BlogResponse": {
1357
- __typename: true,
1358
- blogItems: {
1359
- id: true,
1360
- blogId: true,
1361
- author: true,
1362
- body: true,
1363
- date: true,
1364
- image: true,
1365
- imageAlt: true,
1366
- summary: true,
1367
- title: true,
1368
- order: true
1369
- }
1370
- }
1371
- }]
1372
- });
1373
-
1374
- case 3:
1375
- _yield$BaseClient$_ge5 = _context16.sent;
1376
- blog = _yield$BaseClient$_ge5.blog;
1377
-
1378
- if (blog) {
1379
- _context16.next = 7;
1380
- break;
1381
- }
1382
-
1383
- return _context16.abrupt("return", null);
498
+ if (cancelPayment.__typename === "ErrorAccessDenied") {
499
+ return cancelPayment;
500
+ }
1384
501
 
1385
- case 7:
1386
- if (!(blog.__typename === "ErrorLangNotExist")) {
1387
- _context16.next = 9;
1388
- break;
1389
- }
502
+ return {
503
+ __typename: "SuccessResponse",
504
+ data: (_cancelPayment$cancel = cancelPayment.cancelPayment) != null ? _cancelPayment$cancel : false
505
+ };
506
+ }
1390
507
 
1391
- return _context16.abrupt("return", blog);
1392
-
1393
- case 9:
1394
- return _context16.abrupt("return", {
1395
- __typename: "SuccessResponse",
1396
- data: blog.blogItems.map(function (b) {
1397
- return _objectSpread(_objectSpread({}, b), {}, {
1398
- date: new Date(b.date)
1399
- });
1400
- })
1401
- });
1402
-
1403
- case 10:
1404
- case "end":
1405
- return _context16.stop();
508
+ async paymentInfos() {
509
+ const {
510
+ paymentInfos
511
+ } = await this.client("query", {
512
+ scalars: {
513
+ Json: {
514
+ encode: e => JSON.stringify(e),
515
+ decode: e => JSON.parse(e)
516
+ },
517
+ DateTime: {
518
+ decode: e => new Date(e),
519
+ encode: e => e.toISOString()
520
+ },
521
+ BigInt: {
522
+ decode: e => BigInt(e),
523
+ encode: e => e.toString()
524
+ }
525
+ }
526
+ })({
527
+ paymentInfos: {
528
+ "...on ErrorAccessDenied": {
529
+ __typename: true,
530
+ message: true
531
+ },
532
+ "...on PaymentInfosResponse": {
533
+ __typename: true,
534
+ paymentInfos: {
535
+ hostedUrl: true,
536
+ currentSubscription: {
537
+ autorenew: true,
538
+ activatedAt: true,
539
+ currentPeriodEndsAt: true,
540
+ currentPeriodStartedAt: true,
541
+ canceledAt: true,
542
+ createdAt: true,
543
+ expiresAt: true,
544
+ pausedAt: true,
545
+ trialEndsAt: true,
546
+ trialStartedAt: true,
547
+ updatedAt: true,
548
+ state: true,
549
+ collectionMethod: true,
550
+ plan: true,
551
+ planCode: true,
552
+ total: true
553
+ },
554
+ invoices: {
555
+ pdf: true,
556
+ date: true,
557
+ due: true,
558
+ status: true,
559
+ total: true,
560
+ name: true,
561
+ currency: true
562
+ }
1406
563
  }
1407
564
  }
1408
- }, _callee16);
1409
- }));
565
+ }
566
+ });
1410
567
 
1411
- function getBlog(_x18) {
1412
- return _getBlog.apply(this, arguments);
568
+ if (!paymentInfos) {
569
+ return null;
1413
570
  }
1414
571
 
1415
- return getBlog;
1416
- }();
1417
-
1418
- _proto.reportUser = /*#__PURE__*/function () {
1419
- var _reportUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(reportedUserId, customMessage) {
1420
- var _yield$this$client7, sendReport;
1421
-
1422
- return _regeneratorRuntime.wrap(function _callee17$(_context17) {
1423
- while (1) {
1424
- switch (_context17.prev = _context17.next) {
1425
- case 0:
1426
- _context17.next = 2;
1427
- return this.client("mutation")({
1428
- sendReport: [{
1429
- reportedUserId: reportedUserId,
1430
- customMessage: customMessage
1431
- }, {
1432
- "...on ErrorAccessDenied": {
1433
- __typename: true,
1434
- message: true
1435
- },
1436
- "...on ErrorNotFound": {
1437
- __typename: true,
1438
- message: true
1439
- },
1440
- "...on SendReportResponse": {
1441
- __typename: true,
1442
- sendReport: {
1443
- id: true,
1444
- customMessage: true,
1445
- user: {
1446
- id: true,
1447
- firstname: true,
1448
- lastname: true,
1449
- email: true
1450
- },
1451
- reportedUser: {
1452
- id: true,
1453
- firstname: true,
1454
- lastname: true,
1455
- email: true
1456
- }
1457
- }
1458
- }
1459
- }]
1460
- });
1461
-
1462
- case 2:
1463
- _yield$this$client7 = _context17.sent;
1464
- sendReport = _yield$this$client7.sendReport;
1465
-
1466
- if (sendReport) {
1467
- _context17.next = 6;
1468
- break;
1469
- }
1470
-
1471
- return _context17.abrupt("return", null);
1472
-
1473
- case 6:
1474
- if (!(sendReport.__typename === "ErrorAccessDenied")) {
1475
- _context17.next = 8;
1476
- break;
1477
- }
1478
-
1479
- return _context17.abrupt("return", sendReport);
1480
-
1481
- case 8:
1482
- if (!(sendReport.__typename === "ErrorNotFound")) {
1483
- _context17.next = 10;
1484
- break;
1485
- }
1486
-
1487
- return _context17.abrupt("return", sendReport);
1488
-
1489
- case 10:
1490
- if (sendReport.sendReport) {
1491
- _context17.next = 12;
1492
- break;
1493
- }
572
+ if (paymentInfos.__typename === "ErrorAccessDenied") {
573
+ return paymentInfos;
574
+ }
1494
575
 
1495
- return _context17.abrupt("return", null);
576
+ if (!paymentInfos.paymentInfos) {
577
+ return null;
578
+ }
1496
579
 
1497
- case 12:
1498
- return _context17.abrupt("return", {
1499
- __typename: "SuccessResponse",
1500
- data: sendReport.sendReport
1501
- });
580
+ const result = internalToPaymentInfos(paymentInfos.paymentInfos);
581
+ return {
582
+ __typename: "SuccessResponse",
583
+ data: result
584
+ };
585
+ }
1502
586
 
1503
- case 13:
1504
- case "end":
1505
- return _context17.stop();
587
+ async limits() {
588
+ const {
589
+ limits
590
+ } = await this.client("query", {
591
+ scalars: {
592
+ Json: {
593
+ encode: e => JSON.stringify(e),
594
+ decode: e => JSON.parse(e)
595
+ },
596
+ DateTime: {
597
+ decode: e => new Date(e),
598
+ encode: e => e.toISOString()
599
+ },
600
+ BigInt: {
601
+ decode: e => BigInt(e),
602
+ encode: e => e.toString()
603
+ }
604
+ }
605
+ })({
606
+ limits: {
607
+ "...on ErrorAccessDenied": {
608
+ __typename: true,
609
+ message: true
610
+ },
611
+ "...on ErrorLimit": {
612
+ __typename: true,
613
+ message: true
614
+ },
615
+ "...on ErrorNotExist": {
616
+ __typename: true,
617
+ message: true
618
+ },
619
+ "...on ErrorNotFound": {
620
+ __typename: true,
621
+ message: true
622
+ },
623
+ "...on QueryLimits": {
624
+ __typename: true,
625
+ cloud: {
626
+ size: true,
627
+ maxSize: true,
628
+ count: true,
629
+ maxCount: true
630
+ },
631
+ mail: {
632
+ received: {
633
+ count: true,
634
+ maxCount: true,
635
+ fileCount: true,
636
+ maxFileCount: true,
637
+ fileSize: true,
638
+ maxFileSize: true
639
+ },
640
+ sent: {
641
+ count: true,
642
+ maxCount: true,
643
+ fileCount: true,
644
+ maxFileCount: true,
645
+ fileSize: true,
646
+ maxFileSize: true
647
+ }
1506
648
  }
1507
649
  }
1508
- }, _callee17, this);
1509
- }));
650
+ }
651
+ });
1510
652
 
1511
- function reportUser(_x19, _x20) {
1512
- return _reportUser.apply(this, arguments);
653
+ if (!limits) {
654
+ return null;
1513
655
  }
1514
656
 
1515
- return reportUser;
1516
- }();
1517
-
1518
- BaseClient.deleteUser = /*#__PURE__*/function () {
1519
- var _deleteUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18(_ref5) {
1520
- var sessionId, userId, env, _yield$BaseClient$_ge6, deleteUser;
1521
-
1522
- return _regeneratorRuntime.wrap(function _callee18$(_context18) {
1523
- while (1) {
1524
- switch (_context18.prev = _context18.next) {
1525
- case 0:
1526
- sessionId = _ref5.sessionId, userId = _ref5.userId, env = _ref5.env;
1527
- _context18.next = 3;
1528
- return BaseClient._getBaseClient(env, sessionId)("mutation")({
1529
- deleteUser: [{
1530
- userId: userId
1531
- }, {
1532
- "...on ErrorAccessDenied": {
1533
- __typename: true,
1534
- message: true
1535
- },
1536
- "...on DeleteUserResponse": {
1537
- __typename: true,
1538
- deleteUser: true
1539
- }
1540
- }]
1541
- });
1542
-
1543
- case 3:
1544
- _yield$BaseClient$_ge6 = _context18.sent;
1545
- deleteUser = _yield$BaseClient$_ge6.deleteUser;
1546
-
1547
- if (deleteUser) {
1548
- _context18.next = 7;
1549
- break;
1550
- }
1551
-
1552
- return _context18.abrupt("return", null);
1553
-
1554
- case 7:
1555
- if (!(deleteUser.__typename === "ErrorAccessDenied")) {
1556
- _context18.next = 9;
1557
- break;
1558
- }
657
+ if (limits.__typename === "ErrorAccessDenied") {
658
+ return limits;
659
+ }
1559
660
 
1560
- return _context18.abrupt("return", deleteUser);
661
+ if (limits.__typename === "ErrorNotExist") {
662
+ return limits;
663
+ }
1561
664
 
1562
- case 9:
1563
- if (deleteUser.deleteUser) {
1564
- _context18.next = 11;
1565
- break;
1566
- }
665
+ if (limits.__typename === "ErrorLimit") {
666
+ return limits;
667
+ }
1567
668
 
1568
- return _context18.abrupt("return", null);
669
+ if (limits.__typename === "ErrorNotFound") {
670
+ return limits;
671
+ }
1569
672
 
1570
- case 11:
1571
- return _context18.abrupt("return", {
1572
- __typename: "SuccessResponse",
1573
- data: deleteUser.deleteUser
1574
- });
673
+ return {
674
+ __typename: "SuccessResponse",
675
+ data: limits
676
+ };
677
+ }
1575
678
 
1576
- case 12:
1577
- case "end":
1578
- return _context18.stop();
679
+ async godFatherAndChildren() {
680
+ const {
681
+ user
682
+ } = await this.client("query")({
683
+ user: [{}, {
684
+ "...on ErrorNotFound": {
685
+ __typename: true,
686
+ message: true
687
+ },
688
+ "...on UserResponse": {
689
+ __typename: true,
690
+ godChildren: {
691
+ id: true,
692
+ firstname: true,
693
+ lastname: true,
694
+ email: true,
695
+ phone: true
696
+ },
697
+ godFather: {
698
+ id: true,
699
+ firstname: true,
700
+ lastname: true,
701
+ email: true,
702
+ phone: true
1579
703
  }
1580
704
  }
1581
- }, _callee18);
1582
- }));
705
+ }]
706
+ });
1583
707
 
1584
- function deleteUser(_x21) {
1585
- return _deleteUser.apply(this, arguments);
708
+ if (!user) {
709
+ return null;
1586
710
  }
1587
711
 
1588
- return deleteUser;
1589
- }();
1590
-
1591
- _proto.dbGet = /*#__PURE__*/function () {
1592
- var _dbGet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19(_ref6) {
1593
- var field, userId, _yield$this$client8, dbGet;
1594
-
1595
- return _regeneratorRuntime.wrap(function _callee19$(_context19) {
1596
- while (1) {
1597
- switch (_context19.prev = _context19.next) {
1598
- case 0:
1599
- field = _ref6.field, userId = _ref6.userId;
1600
- _context19.next = 3;
1601
- return this.client("query")({
1602
- dbGet: [{
1603
- field: field,
1604
- userId: userId
1605
- }, {
1606
- "...on ErrorAccessDenied": {
1607
- __typename: true,
1608
- message: true
1609
- },
1610
- "...on ErrorNotExist": {
1611
- __typename: true,
1612
- message: true
1613
- },
1614
- "...on ErrorNotFound": {
1615
- __typename: true,
1616
- message: true
1617
- },
1618
- "...on DbGetResponse": {
1619
- __typename: true,
1620
- json: true
1621
- }
1622
- }]
1623
- });
1624
-
1625
- case 3:
1626
- _yield$this$client8 = _context19.sent;
1627
- dbGet = _yield$this$client8.dbGet;
1628
-
1629
- if (dbGet) {
1630
- _context19.next = 7;
1631
- break;
1632
- }
1633
-
1634
- return _context19.abrupt("return", null);
1635
-
1636
- case 7:
1637
- if (!(dbGet.__typename === "ErrorAccessDenied")) {
1638
- _context19.next = 9;
1639
- break;
1640
- }
1641
-
1642
- return _context19.abrupt("return", dbGet);
1643
-
1644
- case 9:
1645
- if (!(dbGet.__typename === "ErrorNotExist")) {
1646
- _context19.next = 11;
1647
- break;
1648
- }
1649
-
1650
- return _context19.abrupt("return", dbGet);
1651
-
1652
- case 11:
1653
- if (!(dbGet.__typename === "ErrorNotFound")) {
1654
- _context19.next = 13;
1655
- break;
1656
- }
1657
-
1658
- return _context19.abrupt("return", dbGet);
712
+ if (user.__typename === "ErrorNotFound") {
713
+ return user;
714
+ }
1659
715
 
1660
- case 13:
1661
- return _context19.abrupt("return", {
1662
- __typename: "SuccessResponse",
1663
- data: dbGet.json.res
1664
- });
716
+ return {
717
+ __typename: "SuccessResponse",
718
+ data: {
719
+ godChildren: user.godChildren,
720
+ godFather: user.godFather
721
+ }
722
+ };
723
+ }
1665
724
 
1666
- case 14:
1667
- case "end":
1668
- return _context19.stop();
1669
- }
725
+ static async updateAppDBConfig(_ref2) {
726
+ let {
727
+ appCode,
728
+ config,
729
+ env,
730
+ sessionId
731
+ } = _ref2;
732
+ const {
733
+ dbConfigMutation
734
+ } = await BaseClient._getBaseClient(env, sessionId)("mutation")({
735
+ dbConfigMutation: [{
736
+ appCode,
737
+ config: JSON.stringify(config)
738
+ }, {
739
+ "...on ErrorAccessDenied": {
740
+ __typename: true,
741
+ message: true
742
+ },
743
+ "...on DbConfigMutationResponse": {
744
+ __typename: true,
745
+ dbConfigMutation: true
1670
746
  }
1671
- }, _callee19, this);
1672
- }));
747
+ }]
748
+ });
1673
749
 
1674
- function dbGet(_x22) {
1675
- return _dbGet.apply(this, arguments);
750
+ if (!dbConfigMutation) {
751
+ return null;
1676
752
  }
1677
753
 
1678
- return dbGet;
1679
- }();
1680
-
1681
- _proto.dbSet = /*#__PURE__*/function () {
1682
- var _dbSet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20(_ref7) {
1683
- var value, userId, _yield$this$client9, dbSet;
1684
-
1685
- return _regeneratorRuntime.wrap(function _callee20$(_context20) {
1686
- while (1) {
1687
- switch (_context20.prev = _context20.next) {
1688
- case 0:
1689
- value = _ref7.value, userId = _ref7.userId;
1690
-
1691
- if (!(typeof value !== "object")) {
1692
- _context20.next = 3;
1693
- break;
1694
- }
1695
-
1696
- throw new Error("value should be an object including fields you want to update.");
1697
-
1698
- case 3:
1699
- _context20.next = 5;
1700
- return this.client("mutation")({
1701
- dbSet: [{
1702
- userId: userId,
1703
- value: serialize(value).toString("base64")
1704
- }, {
1705
- "...on ErrorAccessDenied": {
1706
- __typename: true,
1707
- message: true
1708
- },
1709
- "...on ErrorNotFound": {
1710
- __typename: true,
1711
- message: true
1712
- },
1713
- "...on DbSetResponse": {
1714
- __typename: true,
1715
- dbSet: true
1716
- }
1717
- }]
1718
- });
1719
-
1720
- case 5:
1721
- _yield$this$client9 = _context20.sent;
1722
- dbSet = _yield$this$client9.dbSet;
1723
-
1724
- if (dbSet) {
1725
- _context20.next = 9;
1726
- break;
1727
- }
1728
-
1729
- return _context20.abrupt("return", null);
1730
-
1731
- case 9:
1732
- if (!(dbSet.__typename === "ErrorAccessDenied")) {
1733
- _context20.next = 11;
1734
- break;
1735
- }
1736
-
1737
- return _context20.abrupt("return", dbSet);
1738
-
1739
- case 11:
1740
- if (!(dbSet.__typename === "ErrorNotFound")) {
1741
- _context20.next = 13;
1742
- break;
1743
- }
1744
-
1745
- return _context20.abrupt("return", dbSet);
1746
-
1747
- case 13:
1748
- if (dbSet.dbSet) {
1749
- _context20.next = 15;
1750
- break;
1751
- }
1752
-
1753
- return _context20.abrupt("return", null);
754
+ if (dbConfigMutation.__typename === "ErrorAccessDenied") {
755
+ return dbConfigMutation;
756
+ }
1754
757
 
1755
- case 15:
1756
- return _context20.abrupt("return", {
1757
- __typename: "SuccessResponse",
1758
- data: dbSet.dbSet.res
1759
- });
758
+ return {
759
+ __typename: "SuccessResponse",
760
+ data: dbConfigMutation.dbConfigMutation
761
+ };
762
+ }
1760
763
 
1761
- case 16:
1762
- case "end":
1763
- return _context20.stop();
1764
- }
764
+ static async getAppDBConfig(appCode, env, sessionId) {
765
+ const {
766
+ dbConfig
767
+ } = await BaseClient._getBaseClient(env, sessionId)("query")({
768
+ dbConfig: [{
769
+ appCode
770
+ }, {
771
+ "...on ErrorAccessDenied": {
772
+ __typename: true,
773
+ message: true
774
+ },
775
+ "...on ErrorNotFound": {
776
+ __typename: true,
777
+ message: true
778
+ },
779
+ "...on ErrorNotExist": {
780
+ __typename: true,
781
+ message: true
782
+ },
783
+ "...on DbConfigResponse": {
784
+ __typename: true,
785
+ json: true
1765
786
  }
1766
- }, _callee20, this);
1767
- }));
787
+ }]
788
+ });
1768
789
 
1769
- function dbSet(_x23) {
1770
- return _dbSet.apply(this, arguments);
790
+ if (!dbConfig) {
791
+ return null;
1771
792
  }
1772
793
 
1773
- return dbSet;
1774
- }();
1775
-
1776
- _proto.dbSearch = /*#__PURE__*/function () {
1777
- var _dbSearch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21(_ref8) {
1778
- var search, field, _yield$this$client10, dbSearch;
1779
-
1780
- return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1781
- while (1) {
1782
- switch (_context21.prev = _context21.next) {
1783
- case 0:
1784
- search = _ref8.search, field = _ref8.field;
1785
- _context21.next = 3;
1786
- return this.client("query")({
1787
- dbSearch: [{
1788
- search: search,
1789
- field: field
1790
- }, {
1791
- "...on ErrorAccessDenied": {
1792
- __typename: true,
1793
- message: true
1794
- },
1795
- "...on ErrorBasic": {
1796
- __typename: true,
1797
- message: true
1798
- },
1799
- "...on ErrorNotExist": {
1800
- __typename: true,
1801
- message: true
1802
- },
1803
- "...on DbSearchResponse": {
1804
- __typename: true,
1805
- json: true
1806
- }
1807
- }]
1808
- });
1809
-
1810
- case 3:
1811
- _yield$this$client10 = _context21.sent;
1812
- dbSearch = _yield$this$client10.dbSearch;
1813
-
1814
- if (dbSearch) {
1815
- _context21.next = 7;
1816
- break;
1817
- }
1818
-
1819
- return _context21.abrupt("return", null);
1820
-
1821
- case 7:
1822
- if (!(dbSearch.__typename === "ErrorAccessDenied")) {
1823
- _context21.next = 9;
1824
- break;
1825
- }
1826
-
1827
- return _context21.abrupt("return", dbSearch);
1828
-
1829
- case 9:
1830
- if (!(dbSearch.__typename === "ErrorBasic")) {
1831
- _context21.next = 11;
1832
- break;
1833
- }
1834
-
1835
- return _context21.abrupt("return", dbSearch);
794
+ if (dbConfig.__typename === "ErrorAccessDenied") {
795
+ return dbConfig;
796
+ }
1836
797
 
1837
- case 11:
1838
- if (!(dbSearch.__typename === "ErrorNotExist")) {
1839
- _context21.next = 13;
1840
- break;
1841
- }
798
+ if (dbConfig.__typename === "ErrorNotFound") {
799
+ return dbConfig;
800
+ }
1842
801
 
1843
- return _context21.abrupt("return", dbSearch);
802
+ if (dbConfig.__typename === "ErrorNotExist") {
803
+ return dbConfig;
804
+ }
1844
805
 
1845
- case 13:
1846
- return _context21.abrupt("return", {
1847
- __typename: "SuccessResponse",
1848
- data: dbSearch.json
1849
- });
806
+ return {
807
+ __typename: "SuccessResponse",
808
+ data: dbConfig.json
809
+ };
810
+ }
1850
811
 
1851
- case 14:
1852
- case "end":
1853
- return _context21.stop();
812
+ static async getFAQ(_ref3) {
813
+ let {
814
+ lang,
815
+ env,
816
+ sessionId
817
+ } = _ref3;
818
+ const {
819
+ faq
820
+ } = await BaseClient._getBaseClient(env, sessionId)("query")({
821
+ faq: [{
822
+ lang
823
+ }, {
824
+ "...on ErrorAccessDenied": {
825
+ __typename: true,
826
+ message: true
827
+ },
828
+ "...on FaqResponse": {
829
+ __typename: true,
830
+ faq: {
831
+ answer: true,
832
+ order: true,
833
+ question: true
1854
834
  }
1855
835
  }
1856
- }, _callee21, this);
1857
- }));
836
+ }]
837
+ });
1858
838
 
1859
- function dbSearch(_x24) {
1860
- return _dbSearch.apply(this, arguments);
839
+ if (!faq) {
840
+ return null;
1861
841
  }
1862
842
 
1863
- return dbSearch;
1864
- }();
1865
-
1866
- _proto.deleteFolder = /*#__PURE__*/function () {
1867
- var _deleteFolder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22(_ref9) {
1868
- var _deleteFolder$deleteF;
1869
-
1870
- var id, _yield$this$client11, deleteFolder;
1871
-
1872
- return _regeneratorRuntime.wrap(function _callee22$(_context22) {
1873
- while (1) {
1874
- switch (_context22.prev = _context22.next) {
1875
- case 0:
1876
- id = _ref9.id;
1877
- _context22.next = 3;
1878
- return this.client("mutation")({
1879
- deleteFolder: [{
1880
- id: id
1881
- }, {
1882
- "...on ErrorNotExist": {
1883
- __typename: true,
1884
- message: true
1885
- },
1886
- "...on ErrorAccessDenied": {
1887
- __typename: true,
1888
- message: true
1889
- },
1890
- "...on DeleteFolderResponse": {
1891
- __typename: true,
1892
- deleteFolder: true
1893
- }
1894
- }]
1895
- });
1896
-
1897
- case 3:
1898
- _yield$this$client11 = _context22.sent;
1899
- deleteFolder = _yield$this$client11.deleteFolder;
1900
-
1901
- if (deleteFolder) {
1902
- _context22.next = 7;
1903
- break;
1904
- }
1905
-
1906
- return _context22.abrupt("return", null);
1907
-
1908
- case 7:
1909
- if (!(deleteFolder.__typename === "ErrorNotExist")) {
1910
- _context22.next = 9;
1911
- break;
1912
- }
1913
-
1914
- return _context22.abrupt("return", deleteFolder);
1915
-
1916
- case 9:
1917
- if (!(deleteFolder.__typename === "ErrorAccessDenied")) {
1918
- _context22.next = 11;
1919
- break;
1920
- }
1921
-
1922
- return _context22.abrupt("return", deleteFolder);
843
+ if (faq.__typename === "ErrorAccessDenied") {
844
+ return faq;
845
+ }
1923
846
 
1924
- case 11:
1925
- return _context22.abrupt("return", {
1926
- __typename: "SuccessResponse",
1927
- data: (_deleteFolder$deleteF = deleteFolder.deleteFolder) != null ? _deleteFolder$deleteF : false
1928
- });
847
+ return {
848
+ __typename: "SuccessResponse",
849
+ data: faq.faq
850
+ };
851
+ }
1929
852
 
1930
- case 12:
1931
- case "end":
1932
- return _context22.stop();
853
+ static async getBlog(_ref4) {
854
+ let {
855
+ env,
856
+ lang,
857
+ sessionId
858
+ } = _ref4;
859
+ const {
860
+ blog
861
+ } = await BaseClient._getBaseClient(env, sessionId)("query", {
862
+ scalars: {
863
+ Json: {
864
+ encode: e => JSON.stringify(e),
865
+ decode: e => JSON.parse(e)
866
+ },
867
+ DateTime: {
868
+ decode: e => new Date(e),
869
+ encode: e => e.toISOString()
870
+ },
871
+ BigInt: {
872
+ decode: e => BigInt(e),
873
+ encode: e => e.toString()
874
+ }
875
+ }
876
+ })({
877
+ blog: [{
878
+ lang
879
+ }, {
880
+ "...on ErrorLangNotExist": {
881
+ __typename: true,
882
+ message: true
883
+ },
884
+ "...on BlogResponse": {
885
+ __typename: true,
886
+ blogItems: {
887
+ id: true,
888
+ blogId: true,
889
+ author: true,
890
+ body: true,
891
+ date: true,
892
+ image: true,
893
+ imageAlt: true,
894
+ summary: true,
895
+ title: true,
896
+ order: true
1933
897
  }
1934
898
  }
1935
- }, _callee22, this);
1936
- }));
899
+ }]
900
+ });
1937
901
 
1938
- function deleteFolder(_x25) {
1939
- return _deleteFolder.apply(this, arguments);
902
+ if (!blog) {
903
+ return null;
1940
904
  }
1941
905
 
1942
- return deleteFolder;
1943
- }();
1944
-
1945
- _proto.moveFolders = /*#__PURE__*/function () {
1946
- var _moveFolders = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23(_ref10) {
1947
- var _moveFolders$moveFold;
1948
-
1949
- var foldersId, parentFolderId, _yield$this$client12, moveFolders;
1950
-
1951
- return _regeneratorRuntime.wrap(function _callee23$(_context23) {
1952
- while (1) {
1953
- switch (_context23.prev = _context23.next) {
1954
- case 0:
1955
- foldersId = _ref10.foldersId, parentFolderId = _ref10.parentFolderId;
1956
- _context23.next = 3;
1957
- return this.client("mutation")({
1958
- moveFolders: [{
1959
- foldersId: foldersId,
1960
- parentFolderId: parentFolderId
1961
- }, {
1962
- "...on ErrorAccessDenied": {
1963
- __typename: true,
1964
- message: true
1965
- },
1966
- "...on MoveFoldersResponse": {
1967
- __typename: true,
1968
- moveFolders: true
1969
- }
1970
- }]
1971
- });
1972
-
1973
- case 3:
1974
- _yield$this$client12 = _context23.sent;
1975
- moveFolders = _yield$this$client12.moveFolders;
1976
-
1977
- if (moveFolders) {
1978
- _context23.next = 7;
1979
- break;
1980
- }
1981
-
1982
- return _context23.abrupt("return", null);
1983
-
1984
- case 7:
1985
- if (!(moveFolders.__typename === "ErrorAccessDenied")) {
1986
- _context23.next = 9;
1987
- break;
1988
- }
1989
-
1990
- return _context23.abrupt("return", moveFolders);
906
+ if (blog.__typename === "ErrorLangNotExist") {
907
+ return blog;
908
+ }
1991
909
 
1992
- case 9:
1993
- return _context23.abrupt("return", {
1994
- __typename: "SuccessResponse",
1995
- data: (_moveFolders$moveFold = moveFolders.moveFolders) != null ? _moveFolders$moveFold : false
1996
- });
910
+ return {
911
+ __typename: "SuccessResponse",
912
+ data: blog.blogItems
913
+ };
914
+ }
1997
915
 
1998
- case 10:
1999
- case "end":
2000
- return _context23.stop();
916
+ async reportUser(reportedUserId, customMessage) {
917
+ const {
918
+ sendReport
919
+ } = await this.client("mutation")({
920
+ sendReport: [{
921
+ reportedUserId,
922
+ customMessage
923
+ }, {
924
+ "...on ErrorAccessDenied": {
925
+ __typename: true,
926
+ message: true
927
+ },
928
+ "...on ErrorNotFound": {
929
+ __typename: true,
930
+ message: true
931
+ },
932
+ "...on SendReportResponse": {
933
+ __typename: true,
934
+ sendReport: {
935
+ id: true,
936
+ customMessage: true,
937
+ user: {
938
+ id: true,
939
+ firstname: true,
940
+ lastname: true,
941
+ email: true
942
+ },
943
+ reportedUser: {
944
+ id: true,
945
+ firstname: true,
946
+ lastname: true,
947
+ email: true
948
+ }
2001
949
  }
2002
950
  }
2003
- }, _callee23, this);
2004
- }));
951
+ }]
952
+ });
2005
953
 
2006
- function moveFolders(_x26) {
2007
- return _moveFolders.apply(this, arguments);
954
+ if (!sendReport) {
955
+ return null;
2008
956
  }
2009
957
 
2010
- return moveFolders;
2011
- }();
2012
-
2013
- _proto.moveFiles = /*#__PURE__*/function () {
2014
- var _moveFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee24(_ref11) {
2015
- var _moveFiles$moveFiles;
2016
-
2017
- var filesId, parentFolderId, _yield$this$client13, moveFiles;
2018
-
2019
- return _regeneratorRuntime.wrap(function _callee24$(_context24) {
2020
- while (1) {
2021
- switch (_context24.prev = _context24.next) {
2022
- case 0:
2023
- filesId = _ref11.filesId, parentFolderId = _ref11.parentFolderId;
2024
- _context24.next = 3;
2025
- return this.client("mutation")({
2026
- moveFiles: [{
2027
- filesId: filesId,
2028
- parentFolderId: parentFolderId
2029
- }, {
2030
- "...on ErrorAccessDenied": {
2031
- __typename: true,
2032
- message: true
2033
- },
2034
- "...on MoveFilesResponse": {
2035
- __typename: true,
2036
- moveFiles: true
2037
- }
2038
- }]
2039
- });
2040
-
2041
- case 3:
2042
- _yield$this$client13 = _context24.sent;
2043
- moveFiles = _yield$this$client13.moveFiles;
2044
-
2045
- if (moveFiles) {
2046
- _context24.next = 7;
2047
- break;
2048
- }
2049
-
2050
- return _context24.abrupt("return", null);
958
+ if (sendReport.__typename === "ErrorAccessDenied") {
959
+ return sendReport;
960
+ }
2051
961
 
2052
- case 7:
2053
- if (!(moveFiles.__typename === "ErrorAccessDenied")) {
2054
- _context24.next = 9;
2055
- break;
2056
- }
962
+ if (sendReport.__typename === "ErrorNotFound") {
963
+ return sendReport;
964
+ }
2057
965
 
2058
- return _context24.abrupt("return", moveFiles);
966
+ if (!sendReport.sendReport) {
967
+ return null;
968
+ }
2059
969
 
2060
- case 9:
2061
- return _context24.abrupt("return", {
2062
- __typename: "SuccessResponse",
2063
- data: (_moveFiles$moveFiles = moveFiles.moveFiles) != null ? _moveFiles$moveFiles : false
2064
- });
970
+ return {
971
+ __typename: "SuccessResponse",
972
+ data: sendReport.sendReport
973
+ };
974
+ }
2065
975
 
2066
- case 10:
2067
- case "end":
2068
- return _context24.stop();
2069
- }
976
+ static async deleteUser(_ref5) {
977
+ let {
978
+ sessionId,
979
+ userId,
980
+ env
981
+ } = _ref5;
982
+ const {
983
+ deleteUser
984
+ } = await BaseClient._getBaseClient(env, sessionId)("mutation")({
985
+ deleteUser: [{
986
+ userId
987
+ }, {
988
+ "...on ErrorAccessDenied": {
989
+ __typename: true,
990
+ message: true
991
+ },
992
+ "...on DeleteUserResponse": {
993
+ __typename: true,
994
+ deleteUser: true
2070
995
  }
2071
- }, _callee24, this);
2072
- }));
996
+ }]
997
+ });
2073
998
 
2074
- function moveFiles(_x27) {
2075
- return _moveFiles.apply(this, arguments);
999
+ if (!deleteUser) {
1000
+ return null;
2076
1001
  }
2077
1002
 
2078
- return moveFiles;
2079
- }();
2080
-
2081
- _proto.folderSize = /*#__PURE__*/function () {
2082
- var _folderSize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee25(_ref12) {
2083
- var folderId, _yield$this$client14, folderSize;
2084
-
2085
- return _regeneratorRuntime.wrap(function _callee25$(_context25) {
2086
- while (1) {
2087
- switch (_context25.prev = _context25.next) {
2088
- case 0:
2089
- folderId = _ref12.folderId;
2090
- _context25.next = 3;
2091
- return this.client("query")({
2092
- folderSize: [{
2093
- folderId: folderId
2094
- }, {
2095
- "...on ErrorAccessDenied": {
2096
- __typename: true,
2097
- message: true
2098
- },
2099
- "...on FolderSizeResponse": {
2100
- __typename: true,
2101
- size: true,
2102
- sizeBefore: true
2103
- }
2104
- }]
2105
- });
2106
-
2107
- case 3:
2108
- _yield$this$client14 = _context25.sent;
2109
- folderSize = _yield$this$client14.folderSize;
2110
-
2111
- if (folderSize) {
2112
- _context25.next = 7;
2113
- break;
2114
- }
2115
-
2116
- return _context25.abrupt("return", null);
2117
-
2118
- case 7:
2119
- if (!(folderSize.__typename === "ErrorAccessDenied")) {
2120
- _context25.next = 9;
2121
- break;
2122
- }
2123
-
2124
- return _context25.abrupt("return", folderSize);
2125
-
2126
- case 9:
2127
- return _context25.abrupt("return", {
2128
- __typename: "SuccessResponse",
2129
- data: {
2130
- size: BigInt(folderSize.size),
2131
- sizeBefore: BigInt(folderSize.sizeBefore)
2132
- }
2133
- });
2134
-
2135
- case 10:
2136
- case "end":
2137
- return _context25.stop();
2138
- }
2139
- }
2140
- }, _callee25, this);
2141
- }));
1003
+ if (deleteUser.__typename === "ErrorAccessDenied") {
1004
+ return deleteUser;
1005
+ }
2142
1006
 
2143
- function folderSize(_x28) {
2144
- return _folderSize.apply(this, arguments);
1007
+ if (!deleteUser.deleteUser) {
1008
+ return null;
2145
1009
  }
2146
1010
 
2147
- return folderSize;
2148
- }();
2149
-
2150
- _proto.getSponsorshipLink = /*#__PURE__*/function () {
2151
- var _getSponsorshipLink = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee26(_ref13) {
2152
- var backUrl, me;
2153
- return _regeneratorRuntime.wrap(function _callee26$(_context26) {
2154
- while (1) {
2155
- switch (_context26.prev = _context26.next) {
2156
- case 0:
2157
- backUrl = _ref13.backUrl;
2158
- _context26.next = 3;
2159
- return this.me({
2160
- withPublicKey: false
2161
- });
2162
-
2163
- case 3:
2164
- me = _context26.sent;
2165
-
2166
- if (me) {
2167
- _context26.next = 6;
2168
- break;
2169
- }
1011
+ return {
1012
+ __typename: "SuccessResponse",
1013
+ data: deleteUser.deleteUser
1014
+ };
1015
+ }
2170
1016
 
2171
- return _context26.abrupt("return", null);
1017
+ async getSponsorshipLink(_ref6) {
1018
+ let {
1019
+ backUrl
1020
+ } = _ref6;
1021
+ const me = await this.me({
1022
+ withPublicKey: false
1023
+ });
2172
1024
 
2173
- case 6:
2174
- if (!(me.__typename === "ErrorNotFound")) {
2175
- _context26.next = 8;
2176
- break;
2177
- }
1025
+ if (!me) {
1026
+ return null;
1027
+ }
2178
1028
 
2179
- return _context26.abrupt("return", null);
1029
+ if (me.__typename === "ErrorNotFound") {
1030
+ return null;
1031
+ }
2180
1032
 
2181
- case 8:
2182
- return _context26.abrupt("return", getLink({
2183
- app: "auth",
2184
- path: "/sign-up?gf=" + btoa(me.data.email) + "&au=" + btoa(backUrl)
2185
- }));
1033
+ return getLink({
1034
+ app: "auth",
1035
+ path: "/sign-up?gf=" + btoa(me.data.email) + "&au=" + btoa(backUrl)
1036
+ });
1037
+ }
2186
1038
 
2187
- case 9:
2188
- case "end":
2189
- return _context26.stop();
2190
- }
1039
+ async updateAutoDisconnectDelay(_ref7) {
1040
+ let {
1041
+ id,
1042
+ delay
1043
+ } = _ref7;
1044
+ const {
1045
+ updateAutoDisconnectDelay
1046
+ } = await this.client("mutation")({
1047
+ updateAutoDisconnectDelay: [{
1048
+ userId: id,
1049
+ delay: delay != null ? delay : null
1050
+ }, {
1051
+ "...on ErrorAccessDenied": {
1052
+ __typename: true,
1053
+ message: true
1054
+ },
1055
+ "...on ErrorNotFound": {
1056
+ __typename: true,
1057
+ message: true
1058
+ },
1059
+ "...on ErrorBasic": {
1060
+ __typename: true,
1061
+ message: true
1062
+ },
1063
+ "...on UpdateAutoDisconnectDelayResponse": {
1064
+ __typename: true,
1065
+ updateAutoDisconnectDelay: true
2191
1066
  }
2192
- }, _callee26, this);
2193
- }));
1067
+ }]
1068
+ });
2194
1069
 
2195
- function getSponsorshipLink(_x29) {
2196
- return _getSponsorshipLink.apply(this, arguments);
1070
+ if (!updateAutoDisconnectDelay) {
1071
+ return null;
2197
1072
  }
2198
1073
 
2199
- return getSponsorshipLink;
2200
- }();
2201
-
2202
- _proto.updateAutoDisconnectDelay = /*#__PURE__*/function () {
2203
- var _updateAutoDisconnectDelay = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee27(_ref14) {
2204
- var id, delay, _yield$this$client15, updateAutoDisconnectDelay;
2205
-
2206
- return _regeneratorRuntime.wrap(function _callee27$(_context27) {
2207
- while (1) {
2208
- switch (_context27.prev = _context27.next) {
2209
- case 0:
2210
- id = _ref14.id, delay = _ref14.delay;
2211
- _context27.next = 3;
2212
- return this.client("mutation")({
2213
- updateAutoDisconnectDelay: [{
2214
- userId: id,
2215
- delay: delay != null ? delay : null
2216
- }, {
2217
- "...on ErrorAccessDenied": {
2218
- __typename: true,
2219
- message: true
2220
- },
2221
- "...on ErrorNotFound": {
2222
- __typename: true,
2223
- message: true
2224
- },
2225
- "...on ErrorBasic": {
2226
- __typename: true,
2227
- message: true
2228
- },
2229
- "...on UpdateAutoDisconnectDelayResponse": {
2230
- __typename: true,
2231
- updateAutoDisconnectDelay: true
2232
- }
2233
- }]
2234
- });
2235
-
2236
- case 3:
2237
- _yield$this$client15 = _context27.sent;
2238
- updateAutoDisconnectDelay = _yield$this$client15.updateAutoDisconnectDelay;
2239
-
2240
- if (updateAutoDisconnectDelay) {
2241
- _context27.next = 7;
2242
- break;
2243
- }
2244
-
2245
- return _context27.abrupt("return", null);
2246
-
2247
- case 7:
2248
- if (!(updateAutoDisconnectDelay.__typename === "ErrorAccessDenied")) {
2249
- _context27.next = 9;
2250
- break;
2251
- }
2252
-
2253
- return _context27.abrupt("return", updateAutoDisconnectDelay);
2254
-
2255
- case 9:
2256
- if (!(updateAutoDisconnectDelay.__typename === "ErrorBasic")) {
2257
- _context27.next = 11;
2258
- break;
2259
- }
2260
-
2261
- return _context27.abrupt("return", updateAutoDisconnectDelay);
2262
-
2263
- case 11:
2264
- if (!(updateAutoDisconnectDelay.__typename === "ErrorNotFound")) {
2265
- _context27.next = 13;
2266
- break;
2267
- }
2268
-
2269
- return _context27.abrupt("return", updateAutoDisconnectDelay);
2270
-
2271
- case 13:
2272
- if (updateAutoDisconnectDelay.updateAutoDisconnectDelay) {
2273
- _context27.next = 15;
2274
- break;
2275
- }
2276
-
2277
- return _context27.abrupt("return", null);
1074
+ if (updateAutoDisconnectDelay.__typename === "ErrorAccessDenied") {
1075
+ return updateAutoDisconnectDelay;
1076
+ }
2278
1077
 
2279
- case 15:
2280
- return _context27.abrupt("return", {
2281
- __typename: "SuccessResponse",
2282
- data: updateAutoDisconnectDelay.updateAutoDisconnectDelay
2283
- });
1078
+ if (updateAutoDisconnectDelay.__typename === "ErrorBasic") {
1079
+ return updateAutoDisconnectDelay;
1080
+ }
2284
1081
 
2285
- case 16:
2286
- case "end":
2287
- return _context27.stop();
2288
- }
2289
- }
2290
- }, _callee27, this);
2291
- }));
1082
+ if (updateAutoDisconnectDelay.__typename === "ErrorNotFound") {
1083
+ return updateAutoDisconnectDelay;
1084
+ }
2292
1085
 
2293
- function updateAutoDisconnectDelay(_x30) {
2294
- return _updateAutoDisconnectDelay.apply(this, arguments);
1086
+ if (!updateAutoDisconnectDelay.updateAutoDisconnectDelay) {
1087
+ return null;
2295
1088
  }
2296
1089
 
2297
- return updateAutoDisconnectDelay;
2298
- }();
1090
+ return {
1091
+ __typename: "SuccessResponse",
1092
+ data: updateAutoDisconnectDelay.updateAutoDisconnectDelay
1093
+ };
1094
+ }
2299
1095
 
2300
- return BaseClient;
2301
- }();
1096
+ }
2302
1097
 
2303
1098
  BaseClient.getBaseUrl = function (env, graphcdn) {
2304
1099
  if (env === void 0) {
@@ -2309,7 +1104,7 @@ BaseClient.getBaseUrl = function (env, graphcdn) {
2309
1104
  graphcdn = true;
2310
1105
  }
2311
1106
 
2312
- var apiUrl = process.env.NEXT_PUBLIC_SECRECY_API_URL;
1107
+ const apiUrl = process.env.NEXT_PUBLIC_SECRECY_API_URL;
2313
1108
 
2314
1109
  if (apiUrl) {
2315
1110
  return apiUrl;
@@ -2325,7 +1120,5 @@ BaseClient.getBaseUrl = function (env, graphcdn) {
2325
1120
  }
2326
1121
  };
2327
1122
 
2328
- BaseClient._getBaseClient = function (env, session) {
2329
- return createThunder(BaseClient.getBaseUrl(env), session);
2330
- };
2331
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sIm5hbWVzIjpbInNlcmlhbGl6ZSIsImdldExpbmsiLCJ1c2Vyc0NhY2hlIiwiZ2V0U3RvcmFnZSIsIlNlbGVjdG9yIiwiY3JlYXRlVGh1bmRlciIsImludGVybmFsVG9QYXltZW50SW5mb3MiLCJwIiwiY3VycmVudFN1YnNjcmlwdGlvbiIsInN0YXRlIiwiY29sbGVjdGlvbk1ldGhvZCIsImFjdGl2YXRlZEF0IiwiRGF0ZSIsImNyZWF0ZWRBdCIsInVwZGF0ZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJwYXVzZWRBdCIsImN1cnJlbnRQZXJpb2RFbmRzQXQiLCJjdXJyZW50UGVyaW9kU3RhcnRlZEF0IiwiY2FuY2VsZWRBdCIsImV4cGlyZXNBdCIsImludm9pY2VzIiwibWFwIiwiaSIsImRhdGUiLCJkdWUiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsInVzZXJFbWFpbCIsImNsaWVudCIsInVzZXJSZXNwb25zZSIsImRhdGEiLCJCYXNlQ2xpZW50Iiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsInMiLCJhIiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJwbGFucyIsInBsYW4iLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwidG90YWwiLCJwZGYiLCJjdXJyZW5jeSIsInJlc3VsdCIsImNsb3VkIiwic2l6ZSIsIm1heFNpemUiLCJtYXhDb3VudCIsIm1haWwiLCJyZWNlaXZlZCIsIm1heEZpbGVDb3VudCIsIm1heEZpbGVTaXplIiwic2VudCIsIkJpZ0ludCIsImdvZEZhdGhlckFuZENoaWxkcmVuIiwiZ29kQ2hpbGRyZW4iLCJnb2RGYXRoZXIiLCJ1cGRhdGVBcHBEQkNvbmZpZyIsImFwcENvZGUiLCJjb25maWciLCJkYkNvbmZpZ011dGF0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEFwcERCQ29uZmlnIiwiZGJDb25maWciLCJqc29uIiwiZ2V0RkFRIiwiZmFxIiwiYW5zd2VyIiwib3JkZXIiLCJxdWVzdGlvbiIsImdldEJsb2ciLCJibG9nIiwiYmxvZ0l0ZW1zIiwiYmxvZ0lkIiwiYXV0aG9yIiwiYm9keSIsImltYWdlIiwiaW1hZ2VBbHQiLCJzdW1tYXJ5IiwidGl0bGUiLCJiIiwicmVwb3J0VXNlciIsInJlcG9ydGVkVXNlcklkIiwiY3VzdG9tTWVzc2FnZSIsInNlbmRSZXBvcnQiLCJyZXBvcnRlZFVzZXIiLCJkZWxldGVVc2VyIiwiZGJHZXQiLCJyZXMiLCJkYlNldCIsInZhbHVlIiwiRXJyb3IiLCJ0b1N0cmluZyIsImRiU2VhcmNoIiwic2VhcmNoIiwiZGVsZXRlRm9sZGVyIiwibW92ZUZvbGRlcnMiLCJmb2xkZXJzSWQiLCJwYXJlbnRGb2xkZXJJZCIsIm1vdmVGaWxlcyIsImZpbGVzSWQiLCJmb2xkZXJTaXplIiwiZm9sZGVySWQiLCJzaXplQmVmb3JlIiwiZ2V0U3BvbnNvcnNoaXBMaW5rIiwiYmFja1VybCIsInBhdGgiLCJidG9hIiwidXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheSIsImRlbGF5IiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwiYXBpVXJsIiwicHJvY2VzcyIsIk5FWFRfUFVCTElDX1NFQ1JFQ1lfQVBJX1VSTCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUdBLFNBQVNBLFNBQVQsUUFBMEIsTUFBMUI7QUFDQSxTQUFTQyxPQUFULFFBQXdCLG9CQUF4QjtBQUNBLFNBQVNDLFVBQVQsUUFBMkIsWUFBM0I7QUFHQSxTQUFTQyxVQUFULFFBQTJCLHFCQUEzQjtBQVFBLFNBQVNDLFFBQVQsUUFBeUIsaUJBQXpCO0FBQ0EsU0FBU0MsYUFBVCxRQUE4QixrQkFBOUI7O0FBc0xBLFNBQVNDLHNCQUFULENBQWdDQyxDQUFoQyxFQUF1RTtBQUNyRSx5Q0FDS0EsQ0FETDtBQUVFQyxJQUFBQSxtQkFBbUIsa0NBQ2RELENBQUMsQ0FBQ0MsbUJBRFk7QUFFakJDLE1BQUFBLEtBQUssRUFBRUYsQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkMsS0FGWjtBQUdqQkMsTUFBQUEsZ0JBQWdCLEVBQUVILENBQUMsQ0FBQ0MsbUJBQUYsQ0FDZkUsZ0JBSmM7QUFLakJDLE1BQUFBLFdBQVcsRUFBRUosQ0FBQyxDQUFDQyxtQkFBRixDQUFzQkcsV0FBdEIsR0FDVCxJQUFJQyxJQUFKLENBQVNMLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JHLFdBQS9CLENBRFMsR0FFVCxJQVBhO0FBUWpCRSxNQUFBQSxTQUFTLEVBQUVOLENBQUMsQ0FBQ0MsbUJB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RUFBRXlILHlCQUF5QixDQUFDQTtBQUYzQixlQTVEVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxLQTN5Q0Y7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBYXhILFUsQ0FDWTBILFUsR0FBYSxVQUNsQ3hILEdBRGtDLEVBRWxDeUgsUUFGa0MsRUFHdkI7QUFBQSxNQUZYekgsR0FFVztBQUZYQSxJQUFBQSxHQUVXLEdBRk8sTUFFUDtBQUFBOztBQUFBLE1BRFh5SCxRQUNXO0FBRFhBLElBQUFBLFFBQ1csR0FEQSxJQUNBO0FBQUE7O0FBQ1gsTUFBTUMsTUFBTSxHQUFHQyxPQUFPLENBQUMzSCxHQUFSLENBQVk0SCwyQkFBM0I7O0FBQ0EsTUFBSUYsTUFBSixFQUFZO0FBQ1YsV0FBT0EsTUFBUDtBQUNEOztBQUVELFVBQVExSCxHQUFSO0FBQ0UsU0FBSyxNQUFMO0FBQ0UsYUFBT3lILFFBQVEsR0FDWCw4QkFEVyxHQUVYLGdDQUZKOztBQUdGLFNBQUssS0FBTDtBQUNBO0FBQ0UsYUFBTyxvQ0FBUDtBQVBKO0FBU0QsQzs7QUFuQlUzSCxVLENBcUJhSSxjLEdBQWlCLFVBQ3ZDRixHQUR1QyxFQUV2Q0QsT0FGdUM7QUFBQSxTQUl2Q3JELGFBQWEsQ0FBQ29ELFVBQVUsQ0FBQzBILFVBQVgsQ0FBc0J4SCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDQUowQjtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgRG93bmxvYWRQcm9ncmVzcyBhcyBETFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQgdHlwZSB7IERvY3VtZW50IH0gZnJvbSBcImJzb25cIjtcbmltcG9ydCB7IHNlcmlhbGl6ZSB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBnZXRMaW5rIH0gZnJvbSBcIkBzZWNyZWN5L2xpYi11dGlsc1wiO1xuaW1wb3J0IHsgdXNlcnNDYWNoZSB9IGZyb20gXCIuL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVzZXJTZXNzaW9uIH0gZnJvbSBcIi4vY2xpZW50L3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9jbGllbnQvaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCIuL2NsaWVudC9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIExhbmcsXG4gIFBheUlucHV0VHlwZSxcbiAgUGxhbktpbmQsXG4gIFRodW5kZXIsXG4gIFVzZXJSb2xlXG59IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlVGh1bmRlciB9IGZyb20gXCIuL1pldXNUaHVuZGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvckxpbWl0LFxuICBFcnJvck5vdEZvdW5kLFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvckxhbmdOb3RFeGlzdCxcbiAgRXJyb3JCYXNpY1xufSBmcm9tIFwiLi9lcnJvci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTdWNjZXNzUmVzcG9uc2U8VD4gPSB7XG4gIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCI7XG4gIGRhdGE6IFQ7XG59O1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZXhwaXJlc0F0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0cmlhbEVuZHNBdD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHRyaWFsU3RhcnRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0Pzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwbGFuPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGxhbkNvZGU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB0b3RhbD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFJlY3VybHlJbnZvaWNlU3RhdHVzID1cbiAgfCBcInBlbmRpbmdcIlxuICB8IFwicGFpZFwiXG4gIHwgXCJmYWlsZWRcIlxuICB8IFwicGFzdF9kdWVcIlxuICB8IFwib3BlblwiXG4gIHwgXCJjbG9zZWRcIlxuICB8IFwidm9pZGVkXCJcbiAgfCBcInByb2Nlc3NpbmdcIjtcblxudHlwZSBJbnRlcm5hbFJlY3VybHlJbnZvaWNlcyA9IHtcbiAgcGRmOiBzdHJpbmc7XG4gIGRhdGU6IHN0cmluZztcbiAgZHVlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUmVjdXJseUludm9pY2VzID0ge1xuICBwZGY6IHN0cmluZztcbiAgZGF0ZTogRGF0ZTtcbiAgZHVlOiBEYXRlO1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXltZW50SW5mb3MgPSB7XG4gIGhvc3RlZFVybDogc3RyaW5nO1xuICBjdXJyZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBSZWN1cmx5SW52b2ljZXNbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBpbnRlcm5hbFRvUGF5bWVudEluZm9zKHA6IEludGVybmFsUGF5bWVudEluZm9zKTogUGF5bWVudEluZm9zIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wLFxuICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgIC4uLnAuY3VycmVudFN1YnNjcmlwdGlvbixcbiAgICAgIHN0YXRlOiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uc3RhdGUgYXMgU3Vic2NyaXB0aW9uU3RhdGUsXG4gICAgICBjb2xsZWN0aW9uTWV0aG9kOiBwLmN1cnJlbnRTdWJzY3JpcHRpb25cbiAgICAgICAgLmNvbGxlY3Rpb25NZXRob2QgYXMgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCxcbiAgICAgIGFjdGl2YXRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24uYWN0aXZhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmNyZWF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi51cGRhdGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsRW5kc0F0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRyaWFsU3RhcnRlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24udHJpYWxTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHBhdXNlZEF0OiBwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXRcbiAgICAgICAgPyBuZXcgRGF0ZShwLmN1cnJlbnRTdWJzY3JpcHRpb24ucGF1c2VkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RFbmRzQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kRW5kc0F0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RFbmRzQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGN1cnJlbnRQZXJpb2RTdGFydGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jdXJyZW50UGVyaW9kU3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmN1cnJlbnRQZXJpb2RTdGFydGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGNhbmNlbGVkQXQ6IHAuY3VycmVudFN1YnNjcmlwdGlvbi5jYW5jZWxlZEF0XG4gICAgICAgID8gbmV3IERhdGUocC5jdXJyZW50U3Vic2NyaXB0aW9uLmNhbmNlbGVkQXQpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGV4cGlyZXNBdDogcC5jdXJyZW50U3Vic2NyaXB0aW9uLmV4cGlyZXNBdFxuICAgICAgICA/IG5ldyBEYXRlKHAuY3VycmVudFN1YnNjcmlwdGlvbi5leHBpcmVzQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG4gICAgaW52b2ljZXM6IHAuaW52b2ljZXMubWFwKGkgPT4gKHtcbiAgICAgIC4uLmksXG4gICAgICBkYXRlOiBuZXcgRGF0ZShpLmRhdGUpLFxuICAgICAgZHVlOiBuZXcgRGF0ZShpLmR1ZSksXG4gICAgICBzdGF0dXM6IGkuc3RhdHVzIGFzIFJlY3VybHlJbnZvaWNlU3RhdHVzXG4gICAgfSkpXG4gIH07XG59XG5cbmNvbnN0IHBsYW5zQ29kZXMgPSBbXG4gIFwiYmFzaWNfbW9udGhcIixcbiAgXCJhZHZhbmNlZF9tb250aFwiLFxuICBcInByb19tb250aFwiLFxuICBcImJhc2ljX3llYXJcIixcbiAgXCJhZHZhbmNlZF95ZWFyXCIsXG4gIFwicHJvX3llYXJcIlxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgU2VjcmVjeVBsYW5zQ29kZXMgPSB0eXBlb2YgcGxhbnNDb2Rlc1tudW1iZXJdO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBsYW4ocGxhbkNvZGU6IHN0cmluZyk6IHBsYW5Db2RlIGlzIFNlY3JlY3lQbGFuc0NvZGVzIHtcbiAgcmV0dXJuIHBsYW5zQ29kZXMuaW5jbHVkZXMocGxhbkNvZGUgYXMgU2VjcmVjeVBsYW5zQ29kZXMpO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuZXhwb3J0IHR5cGUgRm9sZGVyU2l6ZSA9IHsgc2l6ZTogYmlnaW50OyBzaXplQmVmb3JlOiBiaWdpbnQgfTtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9yKFwiUXVlcnlcIikoe1xuICAgIHVzZXI6IFtcbiAgICAgIHsgdXNlcklkIH0sXG4gICAgICB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIGZpZWxkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgICAgcHVibGljS2V5OiB3aXRoUHVibGljS2V5ID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgcmV0dXJuIHVzZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZ0ZpZWxkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcIm9iamVjdFwiO1xuICBpc0FycmF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0tleT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWcgPSB7XG4gIGZpZWxkczogQXBwREJDb25maWdGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgRmFxSXRlbSA9IHtcbiAgb3JkZXI6IG51bWJlcjtcbiAgcXVlc3Rpb246IHN0cmluZztcbiAgYW5zd2VyOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBCbG9nSXRlbSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYmxvZ0lkOiBzdHJpbmc7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGRhdGU6IERhdGU7XG4gIGltYWdlOiBzdHJpbmc7XG4gIGltYWdlQWx0OiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJCYXNlID0ge1xuICBlbWFpbDogc3RyaW5nO1xuICBwaG9uZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICByb2xlOiBVc2VyUm9sZTtcbiAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGRlbGV0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGxhc3RMb2dpbjogRGF0ZTtcbiAgbGFuZzogTGFuZztcbn07XG5cbnR5cGUgV2l0aFB1YmxpY0tleSA9IHsgd2l0aFB1YmxpY0tleT86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVXNlcjxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+ID0gVCBleHRlbmRzIHtcbiAgd2l0aFB1YmxpY0tleTogdHJ1ZTtcbn1cbiAgPyBVc2VyQmFzZSAmIHsgcHVibGljS2V5OiBzdHJpbmcgfVxuICA6IFVzZXJCYXNlO1xuXG50eXBlIENsYXNzR2V0VXNlclBhcmFtcyA9IFdpdGhQdWJsaWNLZXkgJiB7XG4gIHVzZXJJZD86IHN0cmluZztcbiAgdXNlckVtYWlsPzogc3RyaW5nO1xufTtcbnR5cGUgR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcbn07XG5cbnR5cGUgU3RhdGljR2V0VXNlclBhcmFtcyA9IENsYXNzR2V0VXNlclBhcmFtcyAmIHtcbiAgZW52OiBTZWNyZWN5RW52O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0VXNlcjxVIGV4dGVuZHMgV2l0aFB1YmxpY0tleT4oXG4gIHBhcmFtczogR2V0VXNlclBhcmFtc1xuKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxVPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFVzZXJTZWxlY3RvcihcbiAgICBwYXJhbXMudXNlcklkID8/IHBhcmFtcy51c2VyRW1haWwsXG4gICAgcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgKTtcbiAgY29uc3QgeyB1c2VyOiB1c2VyUmVzcG9uc2UgfSA9IGF3YWl0IHBhcmFtcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgdXNlcjogc2VsZWN0b3JcbiAgfSk7XG5cbiAgaWYgKCF1c2VyUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VyUmVzcG9uc2UuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICByZXR1cm4gdXNlclJlc3BvbnNlO1xuICB9XG5cbiAgaWYgKCF1c2VyUmVzcG9uc2UudXNlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgIGRhdGE6IHtcbiAgICAgIC4uLnVzZXJSZXNwb25zZS51c2VyLFxuICAgICAgbGFzdExvZ2luOiBuZXcgRGF0ZSh1c2VyUmVzcG9uc2UudXNlci5sYXN0TG9naW4pLFxuICAgICAgZGVsZXRlZEF0OiB1c2VyUmVzcG9uc2UudXNlci5kZWxldGVkQXRcbiAgICAgICAgPyBuZXcgRGF0ZSh1c2VyUmVzcG9uc2UudXNlci5kZWxldGVkQXQpXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvdWRMaW1pdHMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50OiBiaWdpbnQgfCBudWxsO1xuICBzaXplOiBiaWdpbnQ7XG4gIG1heFNpemU6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzVmFsdWVzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudDogYmlnaW50IHwgbnVsbDtcbiAgZmlsZVNpemU6IGJpZ2ludDtcbiAgbWF4RmlsZVNpemU6IGJpZ2ludCB8IG51bGw7XG4gIGZpbGVDb3VudDogYmlnaW50O1xuICBtYXhGaWxlQ291bnQ6IGJpZ2ludCB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUxpbWl0cyA9IHtcbiAgY2xvdWQ6IENsb3VkTGltaXRzO1xuICBtYWlsOiB7XG4gICAgc2VudDogTWFpbExpbWl0c1ZhbHVlcztcbiAgICByZWNlaXZlZDogTWFpbExpbWl0c1ZhbHVlcztcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBnZXRCYXNlVXJsID0gKFxuICAgIGVudjogU2VjcmVjeUVudiA9IFwicHJvZFwiLFxuICAgIGdyYXBoY2RuID0gdHJ1ZVxuICApOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGFwaVVybCA9IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX1NFQ1JFQ1lfQVBJX1VSTDtcbiAgICBpZiAoYXBpVXJsKSB7XG4gICAgICByZXR1cm4gYXBpVXJsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZW52KSB7XG4gICAgICBjYXNlIFwicHJvZFwiOlxuICAgICAgICByZXR1cm4gZ3JhcGhjZG5cbiAgICAgICAgICA/IFwiaHR0cHM6Ly9zZWNyZWN5LmdyYXBoY2RuLmFwcFwiXG4gICAgICAgICAgOiBcImh0dHBzOi8vYXBpLnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgICAgY2FzZSBcImRldlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9hcGkuZGV2LnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZ2V0QmFzZUNsaWVudCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj4gPT5cbiAgICBjcmVhdGVUaHVuZGVyKEJhc2VDbGllbnQuZ2V0QmFzZVVybChlbnYpLCBzZXNzaW9uKTtcblxuICBwcm90ZWN0ZWQgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPjtcblxuICBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2Vzc2lvbjogc3RyaW5nLCBlbnY6IFNlY3JlY3lFbnYpIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb247XG4gICAgdGhpcy5jbGllbnQgPSBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbik7XG4gIH1cblxuICBhc3luYyBzZXNzaW9ucygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVc2VyU2Vzc2lvbltdPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgdXNlckFnZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGlwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgY291bnRyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhcHBTZXNzaW9uczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBsYXN0QWN0aXZpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBpcDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdXNlckFwcDoge1xuICAgICAgICAgICAgICAgICAgICBhcHA6IHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGF0YS51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgdXNlclJlc3BvbnNlID0gZGF0YS51c2VyO1xuICAgIGlmICh1c2VyUmVzcG9uc2UuX190eXBlbmFtZSA9PT0gXCJVc2VyUmVzcG9uc2VcIikge1xuICAgICAgaWYgKCF1c2VyUmVzcG9uc2UudXNlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlc3Npb25zOiBVc2VyU2Vzc2lvbltdID1cbiAgICAgICAgdXNlclJlc3BvbnNlLnVzZXIuc2Vzc2lvbnMubWFwKHMgPT4gKHtcbiAgICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgICBpcDogcy5pcCxcbiAgICAgICAgICBjaXR5OiBzLmNpdHksXG4gICAgICAgICAgY291bnRyeTogcy5jb3VudHJ5LFxuICAgICAgICAgIGxhc3RBY3Rpdml0eTogcy5sYXN0QWN0aXZpdHkgPyBuZXcgRGF0ZShzLmxhc3RBY3Rpdml0eSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdXNlckFnZW50OiBzLnVzZXJBZ2VudCxcbiAgICAgICAgICBhcHBTZXNzaW9uczogcy5hcHBTZXNzaW9ucy5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgaWQ6IGEuaWQsXG4gICAgICAgICAgICBpcDogYS5pcCxcbiAgICAgICAgICAgIGNpdHk6IGEuY2l0eSxcbiAgICAgICAgICAgIGNvdW50cnk6IGEuY291bnRyeSxcbiAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogYS5sYXN0QWN0aXZpdHkgPyBuZXcgRGF0ZShhLmxhc3RBY3Rpdml0eSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB1c2VyQWdlbnQ6IGEudXNlckFnZW50LFxuICAgICAgICAgICAgYXBwOiBhLnVzZXJBcHA/LmFwcC5uYW1lID8/IFwiXCJcbiAgICAgICAgICB9KSlcbiAgICAgICAgfSkpID8/IFtdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogc2Vzc2lvbnNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXJSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgIGNvbnN0IGxvY2FsID0gZ2V0U3RvcmFnZShmYWxzZSk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gZ2V0U3RvcmFnZSh0cnVlKTtcbiAgICAgIGxvY2FsLmp3dC5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcEtleXMuY2xlYXIoKTtcbiAgICAgIGxvY2FsLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLmp3dC5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgc2Vzc2lvbi51c2VyQXBwU2Vzc2lvbi5jbGVhcigpO1xuICAgICAgdXNlcnNDYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIGxvZ291dDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIExvZ291dFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbG9nb3V0OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWU8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PihcbiAgICBwYXJhbXM/OiBUXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyKHBhcmFtcyB8fCAoeyB3aXRoUHVibGljS2V5OiB0cnVlIH0gYXMgVCkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVzZXI8VCBleHRlbmRzIFN0YXRpY0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVCxcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuX2dldEJhc2VDbGllbnQocGFyYW1zLmVudiwgc2Vzc2lvbklkKSxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCA/PyBwYXJhbXMudXNlckVtYWlsLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmRhdGEuaWQsIHVzZXIuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1c2VyPFQgZXh0ZW5kcyBDbGFzc0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFQ+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IGdldFVzZXI8VD4oe1xuICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCA/PyBwYXJhbXMudXNlckVtYWlsLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmRhdGEuaWQsIHVzZXIuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1cGRhdGVQcm9maWxlKHtcbiAgICBmaXJzdG5hbWUsXG4gICAgbGFzdG5hbWUsXG4gICAgbGFuZ1xuICB9OiB7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhbmc6IExhbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlcj4gfCBFcnJvck5vdEZvdW5kIHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXBkYXRlUHJvZmlsZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVQcm9maWxlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaXJzdG5hbWUsXG4gICAgICAgICAgbGFzdG5hbWUsXG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwZGF0ZVByb2ZpbGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlUHJvZmlsZToge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFuZzogdHJ1ZSxcbiAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgIHBob25lOiB0cnVlLFxuICAgICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgICBkZWxldGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RMb2dpbjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlUHJvZmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVQcm9maWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVtYWlsOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUuZW1haWwsXG4gICAgICAgIGZpcnN0bmFtZTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmZpcnN0bmFtZSxcbiAgICAgICAgaWQ6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5pZCxcbiAgICAgICAgbGFuZzogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmxhbmcsXG4gICAgICAgIGxhc3RMb2dpbjogbmV3IERhdGUodXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlLmxhc3RMb2dpbiksXG4gICAgICAgIGxhc3RuYW1lOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUubGFzdG5hbWUsXG4gICAgICAgIHBob25lOiB1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUucGhvbmUsXG4gICAgICAgIHJvbGU6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5yb2xlLFxuICAgICAgICBkZWxldGVkQXQ6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5kZWxldGVkQXRcbiAgICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZS5kZWxldGVkQXQpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwbGFucyhcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxQbGFuW10+IHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcGxhbnMgfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uSWQpKFwicXVlcnlcIikoe1xuICAgICAgcGxhbnM6IHtcbiAgICAgICAgXCIuLi5vbiBQbGFuUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgcGxhbjoge1xuICAgICAgICAgICAga2luZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvZGVzOiB0cnVlLFxuICAgICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAgIGRvd25sb2FkQmFuZHdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICBkb3dubG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRCYW5kd2lkdGg6IHRydWUsXG4gICAgICAgICAgICAgIHVwbG9hZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICByZWNlaXZlZE1haWxzOiB7XG4gICAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzZW50TWFpbHM6IHtcbiAgICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBlckZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghcGxhbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcGxhbnMucGxhblxuICAgIH07XG4gIH1cblxuICBhc3luYyBwYXkoXG4gICAgcGxhbkNvZGU6IFNlY3JlY3lQbGFuc0NvZGVzLFxuICAgIGlucHV0OiBQYXlJbnB1dCxcbiAgICBhdXRvUmVuZXc/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcGF5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHBheTogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcGxhbkNvZGUsXG4gICAgICAgICAgYXV0b1JlbmV3XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFBheVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBwYXk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcGF5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGF5Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHBheTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHBheS5wYXkgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsUGF5bWVudCgpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGNhbmNlbFBheW1lbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgY2FuY2VsUGF5bWVudDoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBDYW5jZWxQYXltZW50UmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgY2FuY2VsUGF5bWVudDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWNhbmNlbFBheW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjYW5jZWxQYXltZW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGNhbmNlbFBheW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBjYW5jZWxQYXltZW50LmNhbmNlbFBheW1lbnQgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGF5bWVudEluZm9zKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFBheW1lbnRJbmZvcz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBwYXltZW50SW5mb3MgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgcGF5bWVudEluZm9zOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFBheW1lbnRJbmZvc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHBheW1lbnRJbmZvczoge1xuICAgICAgICAgICAgaG9zdGVkVXJsOiB0cnVlLFxuICAgICAgICAgICAgY3VycmVudFN1YnNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICBhdXRvcmVuZXc6IHRydWUsXG4gICAgICAgICAgICAgIGFjdGl2YXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW50UGVyaW9kRW5kc0F0OiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW50UGVyaW9kU3RhcnRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBjYW5jZWxlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBjcmVhdGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIGV4cGlyZXNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGF1c2VkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHRyaWFsRW5kc0F0OiB0cnVlLFxuICAgICAgICAgICAgICB0cmlhbFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBkYXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgY29sbGVjdGlvbk1ldGhvZDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGxhbjogdHJ1ZSxcbiAgICAgICAgICAgICAgcGxhbkNvZGU6IHRydWUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW52b2ljZXM6IHtcbiAgICAgICAgICAgICAgcGRmOiB0cnVlLFxuICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICBkdWU6IHRydWUsXG4gICAgICAgICAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgICAgICAgICAgdG90YWw6IHRydWUsXG4gICAgICAgICAgICAgIG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXBheW1lbnRJbmZvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBheW1lbnRJbmZvcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBwYXltZW50SW5mb3M7XG4gICAgfVxuXG4gICAgaWYgKCFwYXltZW50SW5mb3MucGF5bWVudEluZm9zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gaW50ZXJuYWxUb1BheW1lbnRJbmZvcyhwYXltZW50SW5mb3MucGF5bWVudEluZm9zKTtcbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyBsaW1pdHMoKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxRdWVyeUxpbWl0cz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgbGltaXRzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIGxpbWl0czoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBRdWVyeUxpbWl0c1wiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDoge1xuICAgICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heFNpemU6IHRydWUsXG4gICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvdW50OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYWlsOiB7XG4gICAgICAgICAgICByZWNlaXZlZDoge1xuICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZW50OiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFsaW1pdHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2xvdWQsIG1haWwgfSA9IGxpbWl0cztcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YToge1xuICAgICAgICBjbG91ZDoge1xuICAgICAgICAgIGNvdW50OiBCaWdJbnQoY2xvdWQuY291bnQpLFxuICAgICAgICAgIHNpemU6IEJpZ0ludChjbG91ZC5zaXplKSxcbiAgICAgICAgICBtYXhDb3VudDogY2xvdWQubWF4Q291bnQgPyBCaWdJbnQoY2xvdWQubWF4Q291bnQpIDogbnVsbCxcbiAgICAgICAgICBtYXhTaXplOiBjbG91ZC5tYXhTaXplID8gQmlnSW50KGNsb3VkLm1heFNpemUpIDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBtYWlsOiB7XG4gICAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICAgIGNvdW50OiBCaWdJbnQobWFpbC5yZWNlaXZlZC5jb3VudCksXG4gICAgICAgICAgICBtYXhDb3VudDogbWFpbC5yZWNlaXZlZC5tYXhDb3VudFxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnJlY2VpdmVkLm1heENvdW50KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBmaWxlQ291bnQ6IEJpZ0ludChtYWlsLnJlY2VpdmVkLmZpbGVDb3VudCksXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwucmVjZWl2ZWQubWF4RmlsZUNvdW50XG4gICAgICAgICAgICAgID8gQmlnSW50KG1haWwucmVjZWl2ZWQubWF4RmlsZUNvdW50KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBmaWxlU2l6ZTogQmlnSW50KG1haWwucmVjZWl2ZWQuZmlsZVNpemUpLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IG1haWwucmVjZWl2ZWQubWF4RmlsZVNpemVcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5yZWNlaXZlZC5tYXhGaWxlU2l6ZSlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZW50OiB7XG4gICAgICAgICAgICBjb3VudDogQmlnSW50KG1haWwuc2VudC5jb3VudCksXG4gICAgICAgICAgICBtYXhDb3VudDogbWFpbC5zZW50Lm1heENvdW50ID8gQmlnSW50KG1haWwuc2VudC5tYXhDb3VudCkgOiBudWxsLFxuICAgICAgICAgICAgZmlsZUNvdW50OiBCaWdJbnQobWFpbC5zZW50LmZpbGVDb3VudCksXG4gICAgICAgICAgICBtYXhGaWxlQ291bnQ6IG1haWwuc2VudC5tYXhGaWxlQ291bnRcbiAgICAgICAgICAgICAgPyBCaWdJbnQobWFpbC5zZW50Lm1heEZpbGVDb3VudClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgZmlsZVNpemU6IEJpZ0ludChtYWlsLnNlbnQuZmlsZVNpemUpLFxuICAgICAgICAgICAgbWF4RmlsZVNpemU6IG1haWwuc2VudC5tYXhGaWxlU2l6ZVxuICAgICAgICAgICAgICA/IEJpZ0ludChtYWlsLnNlbnQubWF4RmlsZVNpemUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnb2RGYXRoZXJBbmRDaGlsZHJlbigpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxHb2RGYXRoZXJBbmRDaGlsZHJlbj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGdvZENoaWxkcmVuOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnb2RGYXRoZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwaG9uZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGdvZENoaWxkcmVuOiB1c2VyLmdvZENoaWxkcmVuLFxuICAgICAgICBnb2RGYXRoZXI6IHVzZXIuZ29kRmF0aGVyXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGRhdGVBcHBEQkNvbmZpZyh7XG4gICAgYXBwQ29kZSxcbiAgICBjb25maWcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgYXBwQ29kZTogc3RyaW5nO1xuICAgIGNvbmZpZzogQXBwREJDb25maWc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxBcHBEQkNvbmZpZz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnTXV0YXRpb24gfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwibXV0YXRpb25cIikoe1xuICAgICAgZGJDb25maWdNdXRhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwQ29kZSxcbiAgICAgICAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KGNvbmZpZylcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdNdXRhdGlvblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYkNvbmZpZ011dGF0aW9uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiQ29uZmlnTXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZ011dGF0aW9uLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnTXV0YXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYkNvbmZpZ011dGF0aW9uLmRiQ29uZmlnTXV0YXRpb25cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEFwcERCQ29uZmlnKFxuICAgIGFwcENvZGU6IHN0cmluZyxcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPEFwcERCQ29uZmlnPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJxdWVyeVwiKSh7XG4gICAgICBkYkNvbmZpZzogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwQ29kZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWcuanNvblxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0RkFRKHtcbiAgICBsYW5nLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8RmFxSXRlbVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZmFxIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIGZhcTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGYXFSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmFxOiB7XG4gICAgICAgICAgICAgIGFuc3dlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIHF1ZXN0aW9uOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZhcSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZhcS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmYXE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBmYXEuZmFxXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRCbG9nKHtcbiAgICBlbnYsXG4gICAgbGFuZyxcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBsYW5nPzogTGFuZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEJsb2dJdGVtW10+IHwgRXJyb3JMYW5nTm90RXhpc3QgfCBudWxsPiB7XG4gICAgY29uc3QgeyBibG9nIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIGJsb2c6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JMYW5nTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQmxvZ1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBibG9nSXRlbXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGJsb2dJZDogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0aG9yOiB0cnVlLFxuICAgICAgICAgICAgICBib2R5OiB0cnVlLFxuICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICBpbWFnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaW1hZ2VBbHQ6IHRydWUsXG4gICAgICAgICAgICAgIHN1bW1hcnk6IHRydWUsXG4gICAgICAgICAgICAgIHRpdGxlOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFibG9nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYmxvZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTGFuZ05vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBibG9nO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogYmxvZy5ibG9nSXRlbXMubWFwKGIgPT4gKHsgLi4uYiwgZGF0ZTogbmV3IERhdGUoYi5kYXRlKSB9KSlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVwb3J0VXNlcihcbiAgICByZXBvcnRlZFVzZXJJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8U2VuZFJlcG9ydD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kUmVwb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2VuZFJlcG9ydFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzZW5kUmVwb3J0OiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBjdXN0b21NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlcG9ydGVkVXNlcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNlbmRSZXBvcnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzZW5kUmVwb3J0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNlbmRSZXBvcnQ7XG4gICAgfVxuXG4gICAgaWYgKHNlbmRSZXBvcnQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICAgIH1cblxuICAgIGlmICghc2VuZFJlcG9ydC5zZW5kUmVwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHNlbmRSZXBvcnQuc2VuZFJlcG9ydFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGVsZXRlVXNlcih7XG4gICAgc2Vzc2lvbklkLFxuICAgIHVzZXJJZCxcbiAgICBlbnZcbiAgfToge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVXNlciB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVVc2VyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVVc2VyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZVVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVVc2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZVVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCFkZWxldGVVc2VyLmRlbGV0ZVVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlVXNlci5kZWxldGVVc2VyXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRiR2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8VT5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJHZXQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkdldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJHZXQuanNvbi5yZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJTZXQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoIWRiU2V0LmRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiU2V0LmRiU2V0LnJlc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkYlNlYXJjaDxUPih7XG4gICAgc2VhcmNoLFxuICAgIGZpZWxkXG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VFtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJTZWFyY2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJTZWFyY2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICBmaWVsZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZWFyY2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNlYXJjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZWFyY2guanNvblxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVGb2xkZXIoe1xuICAgIGlkXG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvck5vdEV4aXN0IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRm9sZGVyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZvbGRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVGb2xkZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlRm9sZGVyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZUZvbGRlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRm9sZGVyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZUZvbGRlci5kZWxldGVGb2xkZXIgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZUZvbGRlcnMoe1xuICAgIGZvbGRlcnNJZCxcbiAgICBwYXJlbnRGb2xkZXJJZFxuICB9OiB7XG4gICAgZm9sZGVyc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbW92ZUZvbGRlcnMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZUZvbGRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZvbGRlcnNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlRm9sZGVyc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtb3ZlRm9sZGVyczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFtb3ZlRm9sZGVycykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVGb2xkZXJzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1vdmVGb2xkZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbW92ZUZvbGRlcnMubW92ZUZvbGRlcnMgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZUZpbGVzKHtcbiAgICBmaWxlc0lkLFxuICAgIHBhcmVudEZvbGRlcklkXG4gIH06IHtcbiAgICBmaWxlc0lkOiBzdHJpbmdbXTtcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbW92ZUZpbGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIG1vdmVGaWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZXNJZCxcbiAgICAgICAgICBwYXJlbnRGb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlRmlsZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbW92ZUZpbGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVGaWxlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVGaWxlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBtb3ZlRmlsZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlRmlsZXMubW92ZUZpbGVzID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlclNpemUoe1xuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxGb2xkZXJTaXplPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyU2l6ZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBmb2xkZXJTaXplOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGb2xkZXJTaXplUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBzaXplQmVmb3JlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXJTaXplLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZvbGRlclNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNpemU6IEJpZ0ludChmb2xkZXJTaXplLnNpemUpLFxuICAgICAgICBzaXplQmVmb3JlOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplQmVmb3JlKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRTcG9uc29yc2hpcExpbmsoe1xuICAgIGJhY2tVcmxcbiAgfToge1xuICAgIGJhY2tVcmw6IHN0cmluZztcbiAgfSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IG1lID0gYXdhaXQgdGhpcy5tZSh7IHdpdGhQdWJsaWNLZXk6IGZhbHNlIH0pO1xuXG4gICAgaWYgKCFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1lLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0TGluayh7XG4gICAgICBhcHA6IFwiYXV0aFwiLFxuICAgICAgcGF0aDogYC9zaWduLXVwP2dmPSR7YnRvYShtZS5kYXRhLmVtYWlsKX0mYXU9JHtidG9hKGJhY2tVcmwpfWBcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXkoe1xuICAgIGlkLFxuICAgIGRlbGF5XG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGRlbGF5OiBudW1iZXIgfCBudWxsO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPlxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXk6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZDogaWQsXG4gICAgICAgICAgZGVsYXk6IGRlbGF5ID8/IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXlSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5O1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXk7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5LnVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheS51cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5XG4gICAgfTtcbiAgfVxufVxuIl19
1123
+ BaseClient._getBaseClient = (env, session) => createThunder(BaseClient.getBaseUrl(env), session);
1124
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRMaW5rIiwidXNlcnNDYWNoZSIsImdldFN0b3JhZ2UiLCJTZWxlY3RvciIsImNyZWF0ZVRodW5kZXIiLCJpbnRlcm5hbFRvUGF5bWVudEluZm9zIiwicCIsImN1cnJlbnRTdWJzY3JpcHRpb24iLCJzdGF0ZSIsImNvbGxlY3Rpb25NZXRob2QiLCJpbnZvaWNlcyIsIm1hcCIsImkiLCJzdGF0dXMiLCJwbGFuc0NvZGVzIiwiaXNWYWxpZFBsYW4iLCJwbGFuQ29kZSIsImluY2x1ZGVzIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsInVzZXJFbWFpbCIsInVzZXJSZXNwb25zZSIsImNsaWVudCIsInNjYWxhcnMiLCJKc29uIiwiZW5jb2RlIiwiZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvZGUiLCJwYXJzZSIsIkRhdGVUaW1lIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiQmlnSW50IiwidG9TdHJpbmciLCJkYXRhIiwiQmFzZUNsaWVudCIsImNvbnN0cnVjdG9yIiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsIl9nZXRCYXNlQ2xpZW50Iiwic2Vzc2lvbnMiLCJsYXN0QWN0aXZpdHkiLCJ1c2VyQWdlbnQiLCJpcCIsImNpdHkiLCJjb3VudHJ5IiwiYXBwU2Vzc2lvbnMiLCJ1c2VyQXBwIiwiYXBwIiwibmFtZSIsInMiLCJhIiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJwbGFucyIsInBsYW4iLCJraW5kIiwiY29kZXMiLCJsaW1pdHMiLCJkb3dubG9hZEJhbmR3aWR0aCIsImRvd25sb2FkQ291bnQiLCJoYXJkRmlsZUNvdW50IiwiaGFyZEZpbGVTaXplIiwicGVyRmlsZVNpemUiLCJ1cGxvYWRCYW5kd2lkdGgiLCJ1cGxvYWRDb3VudCIsInJlY2VpdmVkTWFpbHMiLCJjb3VudCIsImZpbGVDb3VudCIsImZpbGVTaXplIiwiaGFyZENvdW50Iiwic2VudE1haWxzIiwicGF5IiwiaW5wdXQiLCJhdXRvUmVuZXciLCJjYW5jZWxQYXltZW50IiwicGF5bWVudEluZm9zIiwiaG9zdGVkVXJsIiwiYXV0b3JlbmV3IiwiYWN0aXZhdGVkQXQiLCJjdXJyZW50UGVyaW9kRW5kc0F0IiwiY3VycmVudFBlcmlvZFN0YXJ0ZWRBdCIsImNhbmNlbGVkQXQiLCJjcmVhdGVkQXQiLCJleHBpcmVzQXQiLCJwYXVzZWRBdCIsInRyaWFsRW5kc0F0IiwidHJpYWxTdGFydGVkQXQiLCJ1cGRhdGVkQXQiLCJ0b3RhbCIsInBkZiIsImRhdGUiLCJkdWUiLCJjdXJyZW5jeSIsInJlc3VsdCIsImNsb3VkIiwic2l6ZSIsIm1heFNpemUiLCJtYXhDb3VudCIsIm1haWwiLCJyZWNlaXZlZCIsIm1heEZpbGVDb3VudCIsIm1heEZpbGVTaXplIiwic2VudCIsImdvZEZhdGhlckFuZENoaWxkcmVuIiwiZ29kQ2hpbGRyZW4iLCJnb2RGYXRoZXIiLCJ1cGRhdGVBcHBEQkNvbmZpZyIsImFwcENvZGUiLCJjb25maWciLCJkYkNvbmZpZ011dGF0aW9uIiwiZ2V0QXBwREJDb25maWciLCJkYkNvbmZpZyIsImpzb24iLCJnZXRGQVEiLCJmYXEiLCJhbnN3ZXIiLCJvcmRlciIsInF1ZXN0aW9uIiwiZ2V0QmxvZyIsImJsb2ciLCJibG9nSXRlbXMiLCJibG9nSWQiLCJhdXRob3IiLCJib2R5IiwiaW1hZ2UiLCJpbWFnZUFsdCIsInN1bW1hcnkiLCJ0aXRsZSIsInJlcG9ydFVzZXIiLCJyZXBvcnRlZFVzZXJJZCIsImN1c3RvbU1lc3NhZ2UiLCJzZW5kUmVwb3J0IiwicmVwb3J0ZWRVc2VyIiwiZGVsZXRlVXNlciIsImdldFNwb25zb3JzaGlwTGluayIsImJhY2tVcmwiLCJwYXRoIiwiYnRvYSIsInVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXkiLCJkZWxheSIsImdldEJhc2VVcmwiLCJncmFwaGNkbiIsImFwaVVybCIsInByb2Nlc3MiLCJORVhUX1BVQkxJQ19TRUNSRUNZX0FQSV9VUkwiXSwic291cmNlcyI6WyIuLi9zcmMvQmFzZUNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgRG93bmxvYWRQcm9ncmVzcyBhcyBETFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQgeyBnZXRMaW5rIH0gZnJvbSBcIkBzZWNyZWN5L2xpYi11dGlsc1wiO1xuaW1wb3J0IHsgdXNlcnNDYWNoZSB9IGZyb20gXCIuL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFVzZXJTZXNzaW9uIH0gZnJvbSBcIi4vY2xpZW50L3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3JlY3lFbnYgfSBmcm9tIFwiLi9jbGllbnQvaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCIuL2NsaWVudC9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIExhbmcsXG4gIFBheUlucHV0VHlwZSxcbiAgUGxhbktpbmQsXG4gIFRodW5kZXIsXG4gIFVzZXJSb2xlXG59IGZyb20gXCIuL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IFNlbGVjdG9yIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlVGh1bmRlciB9IGZyb20gXCIuL1pldXNUaHVuZGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvckxpbWl0LFxuICBFcnJvck5vdEZvdW5kLFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvckxhbmdOb3RFeGlzdCxcbiAgRXJyb3JCYXNpY1xufSBmcm9tIFwiLi9lcnJvci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTdWNjZXNzUmVzcG9uc2U8VD4gPSB7XG4gIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCI7XG4gIGRhdGE6IFQ7XG59O1xuXG5leHBvcnQgdHlwZSBEb3dubG9hZFByb2dyZXNzID0gRExQcm9ncmVzcztcblxuZXhwb3J0IHR5cGUgUGF5SW5wdXQgPSB7XG4gIHR5cGU6IFBheUlucHV0VHlwZTtcbiAgdG9rZW46IHN0cmluZztcbiAgZmlyc3ROYW1lOiBzdHJpbmc7XG4gIGxhc3ROYW1lOiBzdHJpbmc7XG4gIHN0cmVldDogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBzdHJpbmc7XG4gIGN2djogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHMgPSB7XG4gIGNvdW50PzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBmaWxlQ291bnQ/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIGZpbGVTaXplPzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBoYXJkQ291bnQ/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlQ291bnQ/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIGhhcmRGaWxlU2l6ZT86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbiAgcGVyRmlsZVNpemU/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBMaW1pdHMgPSB7XG4gIGRvd25sb2FkQmFuZHdpZHRoPzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBkb3dubG9hZENvdW50PzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZUNvdW50PzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBoYXJkRmlsZVNpemU/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIHBlckZpbGVTaXplPzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICByZWNlaXZlZE1haWxzOiBNYWlsTGltaXRzO1xuICBzZW50TWFpbHM6IE1haWxMaW1pdHM7XG4gIHVwbG9hZEJhbmR3aWR0aD86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbiAgdXBsb2FkQ291bnQ/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBHb2RVc2VyID0ge1xuICBpZDogc3RyaW5nO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEdvZEZhdGhlckFuZENoaWxkcmVuID0ge1xuICBnb2RGYXRoZXI6IEdvZFVzZXIgfCBudWxsO1xuICBnb2RDaGlsZHJlbjogR29kVXNlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgUGxhbiA9IHtcbiAgY29kZXM6IHN0cmluZ1tdO1xuICBraW5kOiBQbGFuS2luZDtcbiAgbGltaXRzOiBMaW1pdHM7XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0ZSA9XG4gIHwgXCJhY3RpdmVcIlxuICB8IFwiY2FuY2VsZWRcIlxuICB8IFwicGF1c2VkXCJcbiAgfCBcImV4cGlyZWRcIlxuICB8IFwiZnV0dXJlXCJcbiAgfCBcImluX3RyaWFsXCJcbiAgfCBcImxpdmVcIlxuICB8IFwicGFzdF9kdWVcIjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uQ29sbGVjdGlvbk1ldGhvZCA9IFwiYXV0b21hdGljXCIgfCBcIm1hbnVhbFwiO1xuXG50eXBlIEludGVybmFsU3Vic2NyaXB0aW9uID0ge1xuICBhdXRvcmVuZXc6IGJvb2xlYW47XG4gIGFjdGl2YXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGN1cnJlbnRQZXJpb2RFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBjYW5jZWxlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBleHBpcmVzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGF1c2VkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxFbmRzQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdHJpYWxTdGFydGVkQXQ/OiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXBkYXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IHN0cmluZztcbiAgc3RhdGU6IHN0cmluZztcbiAgcGxhbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBsYW5Db2RlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdG90YWw/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcblxudHlwZSBSZWN1cmx5SW52b2ljZVN0YXR1cyA9XG4gIHwgXCJwZW5kaW5nXCJcbiAgfCBcInBhaWRcIlxuICB8IFwiZmFpbGVkXCJcbiAgfCBcInBhc3RfZHVlXCJcbiAgfCBcIm9wZW5cIlxuICB8IFwiY2xvc2VkXCJcbiAgfCBcInZvaWRlZFwiXG4gIHwgXCJwcm9jZXNzaW5nXCI7XG5cbnR5cGUgSW50ZXJuYWxSZWN1cmx5SW52b2ljZXMgPSB7XG4gIHBkZjogc3RyaW5nO1xuICBkYXRlOiBEYXRlO1xuICBkdWU6IERhdGU7XG4gIHN0YXR1czogc3RyaW5nO1xuICB0b3RhbDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG59O1xuXG50eXBlIEludGVybmFsUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogSW50ZXJuYWxTdWJzY3JpcHRpb247XG4gIGludm9pY2VzOiBJbnRlcm5hbFJlY3VybHlJbnZvaWNlc1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uID0gSW50ZXJuYWxTdWJzY3JpcHRpb24gJiB7XG4gIGNvbGxlY3Rpb25NZXRob2Q6IFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2Q7XG4gIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlY3VybHlJbnZvaWNlcyA9IEludGVybmFsUmVjdXJseUludm9pY2VzICYge1xuICBzdGF0dXM6IFJlY3VybHlJbnZvaWNlU3RhdHVzO1xufTtcblxuZXhwb3J0IHR5cGUgUGF5bWVudEluZm9zID0ge1xuICBob3N0ZWRVcmw6IHN0cmluZztcbiAgY3VycmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBpbnZvaWNlczogUmVjdXJseUludm9pY2VzW107XG59O1xuXG5leHBvcnQgdHlwZSBTZW5kUmVwb3J0ID0ge1xuICBpZDogc3RyaW5nO1xuICB1c2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIHJlcG9ydGVkVXNlcjoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmc7XG4gICAgbGFzdG5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICB9O1xuICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gaW50ZXJuYWxUb1BheW1lbnRJbmZvcyhwOiBJbnRlcm5hbFBheW1lbnRJbmZvcyk6IFBheW1lbnRJbmZvcyB7XG4gIHJldHVybiB7XG4gICAgLi4ucCxcbiAgICBjdXJyZW50U3Vic2NyaXB0aW9uOiB7XG4gICAgICAuLi5wLmN1cnJlbnRTdWJzY3JpcHRpb24sXG4gICAgICBzdGF0ZTogcC5jdXJyZW50U3Vic2NyaXB0aW9uLnN0YXRlIGFzIFN1YnNjcmlwdGlvblN0YXRlLFxuICAgICAgY29sbGVjdGlvbk1ldGhvZDogcC5jdXJyZW50U3Vic2NyaXB0aW9uXG4gICAgICAgIC5jb2xsZWN0aW9uTWV0aG9kIGFzIFN1YnNjcmlwdGlvbkNvbGxlY3Rpb25NZXRob2RcbiAgICB9LFxuICAgIGludm9pY2VzOiBwLmludm9pY2VzLm1hcChpID0+ICh7XG4gICAgICAuLi5pLFxuICAgICAgc3RhdHVzOiBpLnN0YXR1cyBhcyBSZWN1cmx5SW52b2ljZVN0YXR1c1xuICAgIH0pKVxuICB9O1xufVxuXG5jb25zdCBwbGFuc0NvZGVzID0gW1xuICBcImJhc2ljX21vbnRoXCIsXG4gIFwiYWR2YW5jZWRfbW9udGhcIixcbiAgXCJwcm9fbW9udGhcIixcbiAgXCJiYXNpY195ZWFyXCIsXG4gIFwiYWR2YW5jZWRfeWVhclwiLFxuICBcInByb195ZWFyXCJcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFNlY3JlY3lQbGFuc0NvZGVzID0gdHlwZW9mIHBsYW5zQ29kZXNbbnVtYmVyXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQbGFuKHBsYW5Db2RlOiBzdHJpbmcpOiBwbGFuQ29kZSBpcyBTZWNyZWN5UGxhbnNDb2RlcyB7XG4gIHJldHVybiBwbGFuc0NvZGVzLmluY2x1ZGVzKHBsYW5Db2RlIGFzIFNlY3JlY3lQbGFuc0NvZGVzKTtcbn1cblxuZXhwb3J0IHR5cGUgVXNlckRhdGE8XG4gIFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4+ID0ge1xuICBpc1N1cGVydXNlcjogYm9vbGVhbjtcbiAgaXNTZWFyY2hhYmxlOiBib29sZWFuO1xufSAmIFQ7XG5cbmV4cG9ydCB0eXBlIEZvbGRlclNpemUgPSB7IHNpemU6IGJpZ2ludDsgc2l6ZUJlZm9yZTogYmlnaW50IH07XG5cbmNvbnN0IGdldFVzZXJTZWxlY3RvciA9IChcbiAgdXNlcklkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICB3aXRoUHVibGljS2V5OiBib29sZWFuIHwgdW5kZWZpbmVkXG4pID0+IHtcbiAgY29uc3QgeyB1c2VyIH0gPSBTZWxlY3RvcihcIlF1ZXJ5XCIpKHtcbiAgICB1c2VyOiBbXG4gICAgICB7IHVzZXJJZCB9LFxuICAgICAge1xuICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICBmaWVsZDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFuZzogdHJ1ZSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogd2l0aFB1YmxpY0tleSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgIHBob25lOiB0cnVlLFxuICAgICAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgIGxhc3RMb2dpbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfSk7XG4gIHJldHVybiB1c2VyO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWdGaWVsZCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJvYmplY3RcIjtcbiAgaXNBcnJheT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzTnVsbGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0VkaXRhYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNLZXk/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0PzogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERCQ29uZmlnID0ge1xuICBmaWVsZHM6IEFwcERCQ29uZmlnRmllbGRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZhcUl0ZW0gPSB7XG4gIG9yZGVyOiBudW1iZXI7XG4gIHF1ZXN0aW9uOiBzdHJpbmc7XG4gIGFuc3dlcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQmxvZ0l0ZW0gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJsb2dJZDogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyO1xuICBhdXRob3I6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBkYXRlOiBEYXRlO1xuICBpbWFnZTogc3RyaW5nO1xuICBpbWFnZUFsdDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQmFzZSA9IHtcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgcm9sZTogVXNlclJvbGU7XG4gIGZpcnN0bmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBkZWxldGVkQXQ/OiBEYXRlO1xuICBsYXN0TG9naW46IERhdGU7XG4gIGxhbmc6IExhbmc7XG59O1xuXG50eXBlIFdpdGhQdWJsaWNLZXkgPSB7IHdpdGhQdWJsaWNLZXk/OiBib29sZWFuIH07XG5cbmV4cG9ydCB0eXBlIFVzZXI8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PiA9IFQgZXh0ZW5kcyB7XG4gIHdpdGhQdWJsaWNLZXk6IHRydWU7XG59XG4gID8gVXNlckJhc2UgJiB7IHB1YmxpY0tleTogc3RyaW5nIH1cbiAgOiBVc2VyQmFzZTtcblxudHlwZSBDbGFzc0dldFVzZXJQYXJhbXMgPSBXaXRoUHVibGljS2V5ICYge1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIHVzZXJFbWFpbD86IHN0cmluZztcbn07XG50eXBlIEdldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG59O1xuXG50eXBlIFN0YXRpY0dldFVzZXJQYXJhbXMgPSBDbGFzc0dldFVzZXJQYXJhbXMgJiB7XG4gIGVudjogU2VjcmVjeUVudjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFVzZXI8VSBleHRlbmRzIFdpdGhQdWJsaWNLZXk+KFxuICBwYXJhbXM6IEdldFVzZXJQYXJhbXNcbik6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VT4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRVc2VyU2VsZWN0b3IoXG4gICAgcGFyYW1zLnVzZXJJZCA/PyBwYXJhbXMudXNlckVtYWlsLFxuICAgIHBhcmFtcy53aXRoUHVibGljS2V5XG4gICk7XG4gIGNvbnN0IHsgdXNlcjogdXNlclJlc3BvbnNlIH0gPSBhd2FpdCBwYXJhbXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgIHNjYWxhcnM6IHtcbiAgICAgIEpzb246IHtcbiAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICB9LFxuICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgQmlnSW50OiB7XG4gICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEJpZ0ludChlIGFzIHN0cmluZyksXG4gICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH1cbiAgfSkoe1xuICAgIHVzZXI6IHNlbGVjdG9yXG4gIH0pO1xuXG4gIGlmICghdXNlclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlclJlc3BvbnNlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgcmV0dXJuIHVzZXJSZXNwb25zZTtcbiAgfVxuXG4gIGlmICghdXNlclJlc3BvbnNlLnVzZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICBkYXRhOiB1c2VyUmVzcG9uc2UudXNlclxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBDbG91ZExpbWl0cyA9IHtcbiAgY291bnQ6IGJpZ2ludDtcbiAgbWF4Q291bnQ/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIHNpemU6IGJpZ2ludDtcbiAgbWF4U2l6ZT86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIE1haWxMaW1pdHNWYWx1ZXMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50PzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBmaWxlU2l6ZTogYmlnaW50O1xuICBtYXhGaWxlU2l6ZT86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbiAgZmlsZUNvdW50OiBiaWdpbnQ7XG4gIG1heEZpbGVDb3VudD86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5TGltaXRzID0ge1xuICBjbG91ZDogQ2xvdWRMaW1pdHM7XG4gIG1haWw6IHtcbiAgICBzZW50OiBNYWlsTGltaXRzVmFsdWVzO1xuICAgIHJlY2VpdmVkOiBNYWlsTGltaXRzVmFsdWVzO1xuICB9O1xufTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGllbnQge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGdldEJhc2VVcmwgPSAoXG4gICAgZW52OiBTZWNyZWN5RW52ID0gXCJwcm9kXCIsXG4gICAgZ3JhcGhjZG4gPSB0cnVlXG4gICk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgYXBpVXJsID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfU0VDUkVDWV9BUElfVVJMO1xuICAgIGlmIChhcGlVcmwpIHtcbiAgICAgIHJldHVybiBhcGlVcmw7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnYpIHtcbiAgICAgIGNhc2UgXCJwcm9kXCI6XG4gICAgICAgIHJldHVybiBncmFwaGNkblxuICAgICAgICAgID8gXCJodHRwczovL3NlY3JlY3kuZ3JhcGhjZG4uYXBwXCJcbiAgICAgICAgICA6IFwiaHR0cHM6Ly9hcGkuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgICBjYXNlIFwiZGV2XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJodHRwczovL2FwaS5kZXYuc2VjcmVjeS5tZS9ncmFwaHFsXCI7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9nZXRCYXNlQ2xpZW50ID0gKFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPiA9PlxuICAgIGNyZWF0ZVRodW5kZXIoQmFzZUNsaWVudC5nZXRCYXNlVXJsKGVudiksIHNlc3Npb24pO1xuXG4gIHByb3RlY3RlZCBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xuXG4gIHB1YmxpYyBzZXNzaW9uSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZXNzaW9uOiBzdHJpbmcsIGVudjogU2VjcmVjeUVudikge1xuICAgIHRoaXMuc2Vzc2lvbklkID0gc2Vzc2lvbjtcbiAgICB0aGlzLmNsaWVudCA9IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoZW52LCBzZXNzaW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNlc3Npb25zKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVzZXJTZXNzaW9uW10+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiB7XG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZylcbiAgICAgICAgfSxcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmllbGQ6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBzZXNzaW9uczoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1c2VyQWdlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaXA6IHRydWUsXG4gICAgICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGFwcFNlc3Npb25zOiB7XG4gICAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RBY3Rpdml0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGlwOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY2l0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvdW50cnk6IHRydWUsXG4gICAgICAgICAgICAgICAgICB1c2VyQXBwOiB7XG4gICAgICAgICAgICAgICAgICAgIGFwcDoge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYXRhLnVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB1c2VyUmVzcG9uc2UgPSBkYXRhLnVzZXI7XG4gICAgaWYgKHVzZXJSZXNwb25zZS5fX3R5cGVuYW1lID09PSBcIlVzZXJSZXNwb25zZVwiKSB7XG4gICAgICBpZiAoIXVzZXJSZXNwb25zZS51c2VyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2Vzc2lvbnM6IFVzZXJTZXNzaW9uW10gPVxuICAgICAgICB1c2VyUmVzcG9uc2UudXNlci5zZXNzaW9ucy5tYXAocyA9PiAoe1xuICAgICAgICAgIGlkOiBzLmlkLFxuICAgICAgICAgIGlwOiBzLmlwLFxuICAgICAgICAgIGNpdHk6IHMuY2l0eSxcbiAgICAgICAgICBjb3VudHJ5OiBzLmNvdW50cnksXG4gICAgICAgICAgbGFzdEFjdGl2aXR5OiBzLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKHMubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB1c2VyQWdlbnQ6IHMudXNlckFnZW50LFxuICAgICAgICAgIGFwcFNlc3Npb25zOiBzLmFwcFNlc3Npb25zLm1hcChhID0+ICh7XG4gICAgICAgICAgICBpZDogYS5pZCxcbiAgICAgICAgICAgIGlwOiBhLmlwLFxuICAgICAgICAgICAgY2l0eTogYS5jaXR5LFxuICAgICAgICAgICAgY291bnRyeTogYS5jb3VudHJ5LFxuICAgICAgICAgICAgbGFzdEFjdGl2aXR5OiBhLmxhc3RBY3Rpdml0eSA/IG5ldyBEYXRlKGEubGFzdEFjdGl2aXR5KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogYS51c2VyQWdlbnQsXG4gICAgICAgICAgICBhcHA6IGEudXNlckFwcD8uYXBwLm5hbWUgPz8gXCJcIlxuICAgICAgICAgIH0pKVxuICAgICAgICB9KSkgPz8gW107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBzZXNzaW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlclJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgY29uc3QgbG9jYWwgPSBnZXRTdG9yYWdlKGZhbHNlKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBnZXRTdG9yYWdlKHRydWUpO1xuICAgICAgbG9jYWwuand0LmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHNlc3Npb24uand0LmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICB1c2Vyc0NhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgbG9nb3V0OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gTG9nb3V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsb2dvdXQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy9cbiAgICB9XG4gIH1cblxuICBhc3luYyBtZTxUIGV4dGVuZHMgV2l0aFB1YmxpY0tleSA9IFdpdGhQdWJsaWNLZXk+KFxuICAgIHBhcmFtcz86IFRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnVzZXIocGFyYW1zIHx8ICh7IHdpdGhQdWJsaWNLZXk6IHRydWUgfSBhcyBUKSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdXNlcjxUIGV4dGVuZHMgU3RhdGljR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBULFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlcjxUPj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBnZXRVc2VyPFQ+KHtcbiAgICAgIGNsaWVudDogdGhpcy5fZ2V0QmFzZUNsaWVudChwYXJhbXMuZW52LCBzZXNzaW9uSWQpLFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkID8/IHBhcmFtcy51c2VyRW1haWwsXG4gICAgICB3aXRoUHVibGljS2V5OiBwYXJhbXMud2l0aFB1YmxpY0tleVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuZGF0YS5pZCwgdXNlci5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVzZXI8VCBleHRlbmRzIENsYXNzR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBUXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkID8/IHBhcmFtcy51c2VyRW1haWwsXG4gICAgICB3aXRoUHVibGljS2V5OiBwYXJhbXMud2l0aFB1YmxpY0tleVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuZGF0YS5pZCwgdXNlci5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVByb2ZpbGUoe1xuICAgIGZpcnN0bmFtZSxcbiAgICBsYXN0bmFtZSxcbiAgICBsYW5nXG4gIH06IHtcbiAgICBmaXJzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFzdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZzogTGFuZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVc2VyPiB8IEVycm9yTm90Rm91bmQgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1cGRhdGVQcm9maWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwZGF0ZVByb2ZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpcnN0bmFtZSxcbiAgICAgICAgICBsYXN0bmFtZSxcbiAgICAgICAgICBsYW5nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBkYXRlUHJvZmlsZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGRhdGVQcm9maWxlOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgICAgIHJvbGU6IHRydWUsXG4gICAgICAgICAgICAgIGRlbGV0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVQcm9maWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVByb2ZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHVwZGF0ZVByb2ZpbGUudXBkYXRlUHJvZmlsZVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGxhbnMoXG4gICAgZW52OiBTZWNyZWN5RW52LFxuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8UGxhbltdPiB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBsYW5zIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHBsYW5zOiB7XG4gICAgICAgIFwiLi4ub24gUGxhblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHBsYW46IHtcbiAgICAgICAgICAgIGtpbmQ6IHRydWUsXG4gICAgICAgICAgICBjb2RlczogdHJ1ZSxcbiAgICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgICBkb3dubG9hZEJhbmR3aWR0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgZG93bmxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFyZEZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkQmFuZHdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVjZWl2ZWRNYWlsczoge1xuICAgICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaGFyZEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgcGVyRmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VudE1haWxzOiB7XG4gICAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoYXJkRmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGhhcmRGaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwZXJGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXBsYW5zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHBsYW5zLnBsYW5cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGF5KFxuICAgIHBsYW5Db2RlOiBTZWNyZWN5UGxhbnNDb2RlcyxcbiAgICBpbnB1dDogUGF5SW5wdXQsXG4gICAgYXV0b1JlbmV3PzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IHBheSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBwYXk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHBsYW5Db2RlLFxuICAgICAgICAgIGF1dG9SZW5ld1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBQYXlSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcGF5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXBheSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBheS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBwYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBwYXkucGF5ID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbFBheW1lbnQoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBjYW5jZWxQYXltZW50IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGNhbmNlbFBheW1lbnQ6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gQ2FuY2VsUGF5bWVudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbFBheW1lbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFjYW5jZWxQYXltZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsUGF5bWVudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBjYW5jZWxQYXltZW50O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogY2FuY2VsUGF5bWVudC5jYW5jZWxQYXltZW50ID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBheW1lbnRJbmZvcygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxQYXltZW50SW5mb3M+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcGF5bWVudEluZm9zIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHBheW1lbnRJbmZvczoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBQYXltZW50SW5mb3NSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBwYXltZW50SW5mb3M6IHtcbiAgICAgICAgICAgIGhvc3RlZFVybDogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRTdWJzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgYXV0b3JlbmV3OiB0cnVlLFxuICAgICAgICAgICAgICBhY3RpdmF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFBlcmlvZFN0YXJ0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY2FuY2VsZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3JlYXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBleHBpcmVzQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHBhdXNlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICB0cmlhbEVuZHNBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgdHJpYWxTdGFydGVkQXQ6IHRydWUsXG4gICAgICAgICAgICAgIHVwZGF0ZWRBdDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25NZXRob2Q6IHRydWUsXG4gICAgICAgICAgICAgIHBsYW46IHRydWUsXG4gICAgICAgICAgICAgIHBsYW5Db2RlOiB0cnVlLFxuICAgICAgICAgICAgICB0b3RhbDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGludm9pY2VzOiB7XG4gICAgICAgICAgICAgIHBkZjogdHJ1ZSxcbiAgICAgICAgICAgICAgZGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZHVlOiB0cnVlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRydWUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0cnVlLFxuICAgICAgICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBjdXJyZW5jeTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFwYXltZW50SW5mb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwYXltZW50SW5mb3MuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcGF5bWVudEluZm9zO1xuICAgIH1cblxuICAgIGlmICghcGF5bWVudEluZm9zLnBheW1lbnRJbmZvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGludGVybmFsVG9QYXltZW50SW5mb3MocGF5bWVudEluZm9zLnBheW1lbnRJbmZvcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbGltaXRzKCk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8UXVlcnlMaW1pdHM+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGxpbWl0cyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IHtcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnBhcnNlKGUgYXMgc3RyaW5nKVxuICAgICAgICB9LFxuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH0sXG4gICAgICAgIEJpZ0ludDoge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEJpZ0ludChlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgYmlnaW50KS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBsaW1pdHM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JMaW1pdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gUXVlcnlMaW1pdHNcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHtcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBtYXhTaXplOiB0cnVlLFxuICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICBtYXhDb3VudDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFpbDoge1xuICAgICAgICAgICAgcmVjZWl2ZWQ6IHtcbiAgICAgICAgICAgICAgY291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heENvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVNpemU6IHRydWUsXG4gICAgICAgICAgICAgIG1heEZpbGVTaXplOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VudDoge1xuICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghbGltaXRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG4gICAgaWYgKGxpbWl0cy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGxpbWl0c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBnb2RGYXRoZXJBbmRDaGlsZHJlbigpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxHb2RGYXRoZXJBbmRDaGlsZHJlbj4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGdvZENoaWxkcmVuOiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGhvbmU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnb2RGYXRoZXI6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwaG9uZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGdvZENoaWxkcmVuOiB1c2VyLmdvZENoaWxkcmVuLFxuICAgICAgICBnb2RGYXRoZXI6IHVzZXIuZ29kRmF0aGVyXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGRhdGVBcHBEQkNvbmZpZyh7XG4gICAgYXBwQ29kZSxcbiAgICBjb25maWcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgYXBwQ29kZTogc3RyaW5nO1xuICAgIGNvbmZpZzogQXBwREJDb25maWc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxBcHBEQkNvbmZpZz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnTXV0YXRpb24gfSA9IGF3YWl0IEJhc2VDbGllbnQuX2dldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwibXV0YXRpb25cIikoe1xuICAgICAgZGJDb25maWdNdXRhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwQ29kZSxcbiAgICAgICAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KGNvbmZpZylcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdNdXRhdGlvblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYkNvbmZpZ011dGF0aW9uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiQ29uZmlnTXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZ011dGF0aW9uLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnTXV0YXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYkNvbmZpZ011dGF0aW9uLmRiQ29uZmlnTXV0YXRpb24gYXMgQXBwREJDb25maWdcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEFwcERCQ29uZmlnKFxuICAgIGFwcENvZGU6IHN0cmluZyxcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPEFwcERCQ29uZmlnPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZyB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJxdWVyeVwiKSh7XG4gICAgICBkYkNvbmZpZzogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwQ29kZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWcuanNvbiBhcyBBcHBEQkNvbmZpZ1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0RkFRKHtcbiAgICBsYW5nLFxuICAgIGVudixcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8RmFxSXRlbVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZmFxIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIpKHtcbiAgICAgIGZhcTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFuZ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGYXFSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmFxOiB7XG4gICAgICAgICAgICAgIGFuc3dlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgIHF1ZXN0aW9uOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZhcSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZhcS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBmYXE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBmYXEuZmFxXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRCbG9nKHtcbiAgICBlbnYsXG4gICAgbGFuZyxcbiAgICBzZXNzaW9uSWRcbiAgfToge1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBsYW5nPzogTGFuZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPEJsb2dJdGVtW10+IHwgRXJyb3JMYW5nTm90RXhpc3QgfCBudWxsPiB7XG4gICAgY29uc3QgeyBibG9nIH0gPSBhd2FpdCBCYXNlQ2xpZW50Ll9nZXRCYXNlQ2xpZW50KGVudiwgc2Vzc2lvbklkKShcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGJsb2c6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JMYW5nTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQmxvZ1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBibG9nSXRlbXM6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGJsb2dJZDogdHJ1ZSxcbiAgICAgICAgICAgICAgYXV0aG9yOiB0cnVlLFxuICAgICAgICAgICAgICBib2R5OiB0cnVlLFxuICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICBpbWFnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaW1hZ2VBbHQ6IHRydWUsXG4gICAgICAgICAgICAgIHN1bW1hcnk6IHRydWUsXG4gICAgICAgICAgICAgIHRpdGxlOiB0cnVlLFxuICAgICAgICAgICAgICBvcmRlcjogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFibG9nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYmxvZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTGFuZ05vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBibG9nO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogYmxvZy5ibG9nSXRlbXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVwb3J0VXNlcihcbiAgICByZXBvcnRlZFVzZXJJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8U2VuZFJlcG9ydD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kUmVwb3J0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZXBvcnRlZFVzZXJJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2VuZFJlcG9ydFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzZW5kUmVwb3J0OiB7XG4gICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICBjdXN0b21NZXNzYWdlOiB0cnVlLFxuICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVtYWlsOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlcG9ydGVkVXNlcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNlbmRSZXBvcnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzZW5kUmVwb3J0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNlbmRSZXBvcnQ7XG4gICAgfVxuXG4gICAgaWYgKHNlbmRSZXBvcnQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICAgIH1cblxuICAgIGlmICghc2VuZFJlcG9ydC5zZW5kUmVwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHNlbmRSZXBvcnQuc2VuZFJlcG9ydFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGVsZXRlVXNlcih7XG4gICAgc2Vzc2lvbklkLFxuICAgIHVzZXJJZCxcbiAgICBlbnZcbiAgfToge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBlbnY6IFNlY3JlY3lFbnY7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlVXNlciB9ID0gYXdhaXQgQmFzZUNsaWVudC5fZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVVc2VyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VySWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVVc2VyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZVVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVVc2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZVVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCFkZWxldGVVc2VyLmRlbGV0ZVVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlVXNlci5kZWxldGVVc2VyXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFNwb25zb3JzaGlwTGluayh7XG4gICAgYmFja1VybFxuICB9OiB7XG4gICAgYmFja1VybDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgbWUgPSBhd2FpdCB0aGlzLm1lKHsgd2l0aFB1YmxpY0tleTogZmFsc2UgfSk7XG5cbiAgICBpZiAoIW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobWUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRMaW5rKHtcbiAgICAgIGFwcDogXCJhdXRoXCIsXG4gICAgICBwYXRoOiBgL3NpZ24tdXA/Z2Y9JHtidG9hKG1lLmRhdGEuZW1haWwpfSZhdT0ke2J0b2EoYmFja1VybCl9YFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheSh7XG4gICAgaWQsXG4gICAgZGVsYXlcbiAgfToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGVsYXk6IG51bWJlciB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXkgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheTogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkOiBpZCxcbiAgICAgICAgICBkZWxheTogZGVsYXkgPz8gbnVsbFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXk7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXkuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiB1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5O1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheTtcbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXkudXBkYXRlQXV0b0Rpc2Nvbm5lY3REZWxheSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1cGRhdGVBdXRvRGlzY29ubmVjdERlbGF5LnVwZGF0ZUF1dG9EaXNjb25uZWN0RGVsYXlcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBRUEsU0FBU0EsT0FBVCxRQUF3QixvQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLFlBQTNCO0FBR0EsU0FBU0MsVUFBVCxRQUEyQixxQkFBM0I7QUFRQSxTQUFTQyxRQUFULFFBQXlCLGlCQUF6QjtBQUNBLFNBQVNDLGFBQVQsUUFBOEIsa0JBQTlCOztBQWtLQSxTQUFTQyxzQkFBVCxDQUFnQ0MsQ0FBaEMsRUFBdUU7RUFDckUsdUNBQ0tBLENBREw7SUFFRUMsbUJBQW1CLGtDQUNkRCxDQUFDLENBQUNDLG1CQURZO01BRWpCQyxLQUFLLEVBQUVGLENBQUMsQ0FBQ0MsbUJBQUYsQ0FBc0JDLEtBRlo7TUFHakJDLGdCQUFnQixFQUFFSCxDQUFDLENBQUNDLG1CQUFGLENBQ2ZFO0lBSmMsRUFGckI7SUFRRUMsUUFBUSxFQUFFSixDQUFDLENBQUNJLFFBQUYsQ0FBV0MsR0FBWCxDQUFlQyxDQUFDLG9DQUNyQkEsQ0FEcUI7TUFFeEJDLE1BQU0sRUFBRUQsQ0FBQyxDQUFDQztJQUZjLEVBQWhCO0VBUlo7QUFhRDs7QUFFRCxNQUFNQyxVQUFVLEdBQUcsQ0FDakIsYUFEaUIsRUFFakIsZ0JBRmlCLEVBR2pCLFdBSGlCLEVBSWpCLFlBSmlCLEVBS2pCLGVBTGlCLEVBTWpCLFVBTmlCLENBQW5CO0FBV0EsT0FBTyxTQUFTQyxXQUFULENBQXFCQyxRQUFyQixFQUFzRTtFQUMzRSxPQUFPRixVQUFVLENBQUNHLFFBQVgsQ0FBb0JELFFBQXBCLENBQVA7QUFDRDs7QUFXRCxNQUFNRSxlQUFlLEdBQUcsQ0FDdEJDLE1BRHNCLEVBRXRCQyxhQUZzQixLQUduQjtFQUNILE1BQU07SUFBRUM7RUFBRixJQUFXbEIsUUFBUSxDQUFDLE9BQUQsQ0FBUixDQUFrQjtJQUNqQ2tCLElBQUksRUFBRSxDQUNKO01BQUVGO0lBQUYsQ0FESSxFQUVKO01BQ0UsdUJBQXVCO1FBQ3JCRyxVQUFVLEVBQUUsSUFEUztRQUVyQkMsT0FBTyxFQUFFLElBRlk7UUFHckJDLEtBQUssRUFBRTtNQUhjLENBRHpCO01BTUUsc0JBQXNCO1FBQ3BCRixVQUFVLEVBQUUsSUFEUTtRQUVwQkQsSUFBSSxFQUFFO1VBQ0pJLEVBQUUsRUFBRSxJQURBO1VBRUpDLFNBQVMsRUFBRSxJQUZQO1VBR0pDLFFBQVEsRUFBRSxJQUhOO1VBSUpDLElBQUksRUFBRSxJQUpGO1VBS0pDLFNBQVMsRUFBRVQsYUFBYSxHQUFHLElBQUgsR0FBVVUsU0FMOUI7VUFNSkMsS0FBSyxFQUFFLElBTkg7VUFPSkMsS0FBSyxFQUFFLElBUEg7VUFRSkMsSUFBSSxFQUFFLElBUkY7VUFTSkMsU0FBUyxFQUFFLElBVFA7VUFVSkMsU0FBUyxFQUFFO1FBVlA7TUFGYztJQU54QixDQUZJO0VBRDJCLENBQWxCLENBQWpCO0VBMkJBLE9BQU9kLElBQVA7QUFDRCxDQWhDRDs7QUFtR0EsZUFBZWUsT0FBZixDQUNFQyxNQURGLEVBRTREO0VBQUE7O0VBQzFELE1BQU1DLFFBQVEsR0FBR3BCLGVBQWUsbUJBQzlCbUIsTUFBTSxDQUFDbEIsTUFEdUIsNkJBQ2JrQixNQUFNLENBQUNFLFNBRE0sRUFFOUJGLE1BQU0sQ0FBQ2pCLGFBRnVCLENBQWhDO0VBSUEsTUFBTTtJQUFFQyxJQUFJLEVBQUVtQjtFQUFSLElBQXlCLE1BQU1ILE1BQU0sQ0FBQ0ksTUFBUCxDQUFjLE9BQWQsRUFBdUI7SUFDMURDLE9BQU8sRUFBRTtNQUNQQyxJQUFJLEVBQUU7UUFDSkMsTUFBTSxFQUFHQyxDQUFELElBQWdCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsQ0FBZixDQURwQjtRQUVKRyxNQUFNLEVBQUdILENBQUQsSUFBZ0JDLElBQUksQ0FBQ0csS0FBTCxDQUFXSixDQUFYO01BRnBCLENBREM7TUFLUEssUUFBUSxFQUFFO1FBQ1JGLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQixJQUFJTSxJQUFKLENBQVNOLENBQVQsQ0FEaEI7UUFFUkQsTUFBTSxFQUFHQyxDQUFELElBQWlCQSxDQUFELENBQVlPLFdBQVo7TUFGaEIsQ0FMSDtNQVNQQyxNQUFNLEVBQUU7UUFDTkwsTUFBTSxFQUFHSCxDQUFELElBQWdCUSxNQUFNLENBQUNSLENBQUQsQ0FEeEI7UUFFTkQsTUFBTSxFQUFHQyxDQUFELElBQWlCQSxDQUFELENBQWNTLFFBQWQ7TUFGbEI7SUFURDtFQURpRCxDQUF2QixFQWVsQztJQUNEakMsSUFBSSxFQUFFaUI7RUFETCxDQWZrQyxDQUFyQzs7RUFtQkEsSUFBSSxDQUFDRSxZQUFMLEVBQW1CO0lBQ2pCLE9BQU8sSUFBUDtFQUNEOztFQUVELElBQUlBLFlBQVksQ0FBQ2xCLFVBQWIsS0FBNEIsZUFBaEMsRUFBaUQ7SUFDL0MsT0FBT2tCLFlBQVA7RUFDRDs7RUFFRCxJQUFJLENBQUNBLFlBQVksQ0FBQ25CLElBQWxCLEVBQXdCO0lBQ3RCLE9BQU8sSUFBUDtFQUNEOztFQUVELE9BQU87SUFDTEMsVUFBVSxFQUFFLGlCQURQO0lBRUxpQyxJQUFJLEVBQUVmLFlBQVksQ0FBQ25CO0VBRmQsQ0FBUDtBQUlEOztBQTBCRCxPQUFPLE1BQU1tQyxVQUFOLENBQWlCO0VBK0J0QkMsV0FBVyxDQUFDQyxPQUFELEVBQWtCQyxHQUFsQixFQUFtQztJQUM1QyxLQUFLQyxTQUFMLEdBQWlCRixPQUFqQjtJQUNBLEtBQUtqQixNQUFMLEdBQWNlLFVBQVUsQ0FBQ0ssY0FBWCxDQUEwQkYsR0FBMUIsRUFBK0JELE9BQS9CLENBQWQ7RUFDRDs7RUFFYSxNQUFSSSxRQUFRLEdBRVo7SUFDQSxNQUFNUCxJQUFJLEdBQUcsTUFBTSxLQUFLZCxNQUFMLENBQVksT0FBWixFQUFxQjtNQUN0Q0MsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRTtVQUNKQyxNQUFNLEVBQUdDLENBQUQsSUFBZ0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixDQUFmLENBRHBCO1VBRUpHLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQkMsSUFBSSxDQUFDRyxLQUFMLENBQVdKLENBQVg7UUFGcEIsQ0FEQztRQUtQSyxRQUFRLEVBQUU7VUFDUkYsTUFBTSxFQUFHSCxDQUFELElBQWdCLElBQUlNLElBQUosQ0FBU04sQ0FBVCxDQURoQjtVQUVSRCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBWU8sV0FBWjtRQUZoQixDQUxIO1FBU1BDLE1BQU0sRUFBRTtVQUNOTCxNQUFNLEVBQUdILENBQUQsSUFBZ0JRLE1BQU0sQ0FBQ1IsQ0FBRCxDQUR4QjtVQUVORCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBY1MsUUFBZDtRQUZsQjtNQVREO0lBRDZCLENBQXJCLEVBZWhCO01BQ0RqQyxJQUFJLEVBQUUsQ0FDSixFQURJLEVBRUo7UUFDRSx1QkFBdUI7VUFDckJDLFVBQVUsRUFBRSxJQURTO1VBRXJCRSxLQUFLLEVBQUUsSUFGYztVQUdyQkQsT0FBTyxFQUFFO1FBSFksQ0FEekI7UUFNRSxzQkFBc0I7VUFDcEJELFVBQVUsRUFBRSxJQURRO1VBRXBCRCxJQUFJLEVBQUU7WUFDSnlDLFFBQVEsRUFBRTtjQUNSckMsRUFBRSxFQUFFLElBREk7Y0FFUnNDLFlBQVksRUFBRSxJQUZOO2NBR1JDLFNBQVMsRUFBRSxJQUhIO2NBSVJDLEVBQUUsRUFBRSxJQUpJO2NBS1JDLElBQUksRUFBRSxJQUxFO2NBTVJDLE9BQU8sRUFBRSxJQU5EO2NBT1JDLFdBQVcsRUFBRTtnQkFDWDNDLEVBQUUsRUFBRSxJQURPO2dCQUVYc0MsWUFBWSxFQUFFLElBRkg7Z0JBR1hDLFNBQVMsRUFBRSxJQUhBO2dCQUlYQyxFQUFFLEVBQUUsSUFKTztnQkFLWEMsSUFBSSxFQUFFLElBTEs7Z0JBTVhDLE9BQU8sRUFBRSxJQU5FO2dCQU9YRSxPQUFPLEVBQUU7a0JBQ1BDLEdBQUcsRUFBRTtvQkFDSEMsSUFBSSxFQUFFO2tCQURIO2dCQURFO2NBUEU7WUFQTDtVQUROO1FBRmM7TUFOeEIsQ0FGSTtJQURMLENBZmdCLENBQW5COztJQXNEQSxJQUFJLENBQUNoQixJQUFJLENBQUNsQyxJQUFWLEVBQWdCO01BQ2QsT0FBTyxJQUFQO0lBQ0Q7O0lBQ0QsTUFBTW1CLFlBQVksR0FBR2UsSUFBSSxDQUFDbEMsSUFBMUI7O0lBQ0EsSUFBSW1CLFlBQVksQ0FBQ2xCLFVBQWIsS0FBNEIsY0FBaEMsRUFBZ0Q7TUFBQTs7TUFDOUMsSUFBSSxDQUFDa0IsWUFBWSxDQUFDbkIsSUFBbEIsRUFBd0I7UUFDdEIsT0FBTyxJQUFQO01BQ0Q7O01BQ0QsTUFBTXlDLFFBQXVCLDRCQUMzQnRCLFlBQVksQ0FBQ25CLElBQWIsQ0FBa0J5QyxRQUFsQixDQUEyQm5ELEdBQTNCLENBQStCNkQsQ0FBQyxLQUFLO1FBQ25DL0MsRUFBRSxFQUFFK0MsQ0FBQyxDQUFDL0MsRUFENkI7UUFFbkN3QyxFQUFFLEVBQUVPLENBQUMsQ0FBQ1AsRUFGNkI7UUFHbkNDLElBQUksRUFBRU0sQ0FBQyxDQUFDTixJQUgyQjtRQUluQ0MsT0FBTyxFQUFFSyxDQUFDLENBQUNMLE9BSndCO1FBS25DSixZQUFZLEVBQUVTLENBQUMsQ0FBQ1QsWUFBRixHQUFpQixJQUFJWixJQUFKLENBQVNxQixDQUFDLENBQUNULFlBQVgsQ0FBakIsR0FBNENqQyxTQUx2QjtRQU1uQ2tDLFNBQVMsRUFBRVEsQ0FBQyxDQUFDUixTQU5zQjtRQU9uQ0ksV0FBVyxFQUFFSSxDQUFDLENBQUNKLFdBQUYsQ0FBY3pELEdBQWQsQ0FBa0I4RCxDQUFDO1VBQUE7O1VBQUEsT0FBSztZQUNuQ2hELEVBQUUsRUFBRWdELENBQUMsQ0FBQ2hELEVBRDZCO1lBRW5Dd0MsRUFBRSxFQUFFUSxDQUFDLENBQUNSLEVBRjZCO1lBR25DQyxJQUFJLEVBQUVPLENBQUMsQ0FBQ1AsSUFIMkI7WUFJbkNDLE9BQU8sRUFBRU0sQ0FBQyxDQUFDTixPQUp3QjtZQUtuQ0osWUFBWSxFQUFFVSxDQUFDLENBQUNWLFlBQUYsR0FBaUIsSUFBSVosSUFBSixDQUFTc0IsQ0FBQyxDQUFDVixZQUFYLENBQWpCLEdBQTRDakMsU0FMdkI7WUFNbkNrQyxTQUFTLEVBQUVTLENBQUMsQ0FBQ1QsU0FOc0I7WUFPbkNNLEdBQUcsdUNBQUVHLENBQUMsQ0FBQ0osT0FBSixxQkFBRSxXQUFXQyxHQUFYLENBQWVDLElBQWpCLGtDQUF5QjtVQVBPLENBQUw7UUFBQSxDQUFuQjtNQVBzQixDQUFMLENBQWhDLENBRDJCLG9DQWlCcEIsRUFqQlQ7TUFrQkEsT0FBTztRQUNMakQsVUFBVSxFQUFFLGlCQURQO1FBRUxpQyxJQUFJLEVBQUVPO01BRkQsQ0FBUDtJQUlEOztJQUVELE9BQU90QixZQUFQO0VBQ0Q7O0VBRVcsTUFBTmtDLE1BQU0sQ0FBQ2QsU0FBRCxFQUF1RDtJQUNqRSxJQUFJLENBQUNBLFNBQUwsRUFBZ0I7TUFDZCxNQUFNZSxLQUFLLEdBQUd6RSxVQUFVLENBQUMsS0FBRCxDQUF4QjtNQUNBLE1BQU13RCxPQUFPLEdBQUd4RCxVQUFVLENBQUMsSUFBRCxDQUExQjtNQUNBeUUsS0FBSyxDQUFDQyxHQUFOLENBQVVDLEtBQVY7TUFDQUYsS0FBSyxDQUFDRyxXQUFOLENBQWtCRCxLQUFsQjtNQUNBRixLQUFLLENBQUNJLGNBQU4sQ0FBcUJGLEtBQXJCO01BQ0FuQixPQUFPLENBQUNrQixHQUFSLENBQVlDLEtBQVo7TUFDQW5CLE9BQU8sQ0FBQ29CLFdBQVIsQ0FBb0JELEtBQXBCO01BQ0FuQixPQUFPLENBQUNxQixjQUFSLENBQXVCRixLQUF2QjtNQUNBNUUsVUFBVSxDQUFDNEUsS0FBWDtJQUNEOztJQUNELElBQUk7TUFDRixNQUFNLEtBQUtwQyxNQUFMLENBQVksVUFBWixFQUF3QjtRQUM1QmlDLE1BQU0sRUFBRSxDQUNOO1VBQ0VkLFNBQVMsRUFBRUE7UUFEYixDQURNLEVBSU47VUFDRSwyQkFBMkI7WUFDekJ0QyxVQUFVLEVBQUUsSUFEYTtZQUV6QkMsT0FBTyxFQUFFO1VBRmdCLENBRDdCO1VBS0Usb0JBQW9CO1lBQ2xCRCxVQUFVLEVBQUUsSUFETTtZQUVsQkMsT0FBTyxFQUFFO1VBRlMsQ0FMdEI7VUFTRSx3QkFBd0I7WUFDdEJELFVBQVUsRUFBRSxJQURVO1lBRXRCb0QsTUFBTSxFQUFFO1VBRmM7UUFUMUIsQ0FKTTtNQURvQixDQUF4QixDQUFOO0lBcUJELENBdEJELENBc0JFLE1BQU0sQ0FDTjtJQUNEO0VBQ0Y7O0VBRU8sTUFBRk0sRUFBRSxDQUNOM0MsTUFETSxFQUVvRDtJQUMxRCxPQUFPLEtBQUtoQixJQUFMLENBQVVnQixNQUFNLElBQUs7TUFBRWpCLGFBQWEsRUFBRTtJQUFqQixDQUFyQixDQUFQO0VBQ0Q7O0VBRWdCLGFBQUpDLElBQUksQ0FDZmdCLE1BRGUsRUFFZnVCLFNBRmUsRUFHMkM7SUFBQTs7SUFDMUQsTUFBTXZDLElBQUksR0FBRyxNQUFNZSxPQUFPLENBQUk7TUFDNUJLLE1BQU0sRUFBRSxLQUFLb0IsY0FBTCxDQUFvQnhCLE1BQU0sQ0FBQ3NCLEdBQTNCLEVBQWdDQyxTQUFoQyxDQURvQjtNQUU1QnpDLE1BQU0scUJBQUVrQixNQUFNLENBQUNsQixNQUFULDhCQUFtQmtCLE1BQU0sQ0FBQ0UsU0FGSjtNQUc1Qm5CLGFBQWEsRUFBRWlCLE1BQU0sQ0FBQ2pCO0lBSE0sQ0FBSixDQUExQjs7SUFNQSxJQUFJLENBQUNDLElBQUwsRUFBVztNQUNULE9BQU8sSUFBUDtJQUNEOztJQUVELElBQUlBLElBQUksQ0FBQ0MsVUFBTCxLQUFvQixlQUF4QixFQUF5QztNQUN2QyxPQUFPRCxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsSUFBSixFQUFVO01BQ1JwQixVQUFVLENBQUNnRixHQUFYLENBQWU1RCxJQUFJLENBQUNrQyxJQUFMLENBQVU5QixFQUF6QixFQUE2QkosSUFBSSxDQUFDa0MsSUFBbEM7SUFDRDs7SUFFRCxPQUFPbEMsSUFBUDtFQUNEOztFQUVTLE1BQUpBLElBQUksQ0FDUmdCLE1BRFEsRUFFa0Q7SUFBQTs7SUFDMUQsTUFBTWhCLElBQUksR0FBRyxNQUFNZSxPQUFPLENBQUk7TUFDNUJLLE1BQU0sRUFBRSxLQUFLQSxNQURlO01BRTVCdEIsTUFBTSxxQkFBRWtCLE1BQU0sQ0FBQ2xCLE1BQVQsOEJBQW1Ca0IsTUFBTSxDQUFDRSxTQUZKO01BRzVCbkIsYUFBYSxFQUFFaUIsTUFBTSxDQUFDakI7SUFITSxDQUFKLENBQTFCOztJQU1BLElBQUksQ0FBQ0MsSUFBTCxFQUFXO01BQ1QsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsSUFBSSxDQUFDQyxVQUFMLEtBQW9CLGVBQXhCLEVBQXlDO01BQ3ZDLE9BQU9ELElBQVA7SUFDRDs7SUFFRCxJQUFJQSxJQUFKLEVBQVU7TUFDUnBCLFVBQVUsQ0FBQ2dGLEdBQVgsQ0FBZTVELElBQUksQ0FBQ2tDLElBQUwsQ0FBVTlCLEVBQXpCLEVBQTZCSixJQUFJLENBQUNrQyxJQUFsQztJQUNEOztJQUVELE9BQU9sQyxJQUFQO0VBQ0Q7O0VBRWtCLE1BQWI2RCxhQUFhLE9BVWpCO0lBQUEsSUFWa0I7TUFDbEJ4RCxTQURrQjtNQUVsQkMsUUFGa0I7TUFHbEJDO0lBSGtCLENBVWxCO0lBQ0EsTUFBTTtNQUFFc0Q7SUFBRixJQUFvQixNQUFNLEtBQUt6QyxNQUFMLENBQVksVUFBWixFQUF3QjtNQUN0REMsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRTtVQUNKQyxNQUFNLEVBQUdDLENBQUQsSUFBZ0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixDQUFmLENBRHBCO1VBRUpHLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQkMsSUFBSSxDQUFDRyxLQUFMLENBQVdKLENBQVg7UUFGcEIsQ0FEQztRQUtQSyxRQUFRLEVBQUU7VUFDUkYsTUFBTSxFQUFHSCxDQUFELElBQWdCLElBQUlNLElBQUosQ0FBU04sQ0FBVCxDQURoQjtVQUVSRCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBWU8sV0FBWjtRQUZoQixDQUxIO1FBU1BDLE1BQU0sRUFBRTtVQUNOTCxNQUFNLEVBQUdILENBQUQsSUFBZ0JRLE1BQU0sQ0FBQ1IsQ0FBRCxDQUR4QjtVQUVORCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBY1MsUUFBZDtRQUZsQjtNQVREO0lBRDZDLENBQXhCLEVBZTdCO01BQ0Q0QixhQUFhLEVBQUUsQ0FDYjtRQUNFeEQsU0FERjtRQUVFQyxRQUZGO1FBR0VDO01BSEYsQ0FEYSxFQU1iO1FBQ0UsMkJBQTJCO1VBQ3pCTixVQUFVLEVBQUUsSUFEYTtVQUV6QkMsT0FBTyxFQUFFO1FBRmdCLENBRDdCO1FBS0UsdUJBQXVCO1VBQ3JCRCxVQUFVLEVBQUUsSUFEUztVQUVyQkMsT0FBTyxFQUFFO1FBRlksQ0FMekI7UUFTRSwrQkFBK0I7VUFDN0JELFVBQVUsRUFBRSxJQURpQjtVQUU3QjRELGFBQWEsRUFBRTtZQUNiekQsRUFBRSxFQUFFLElBRFM7WUFFYkMsU0FBUyxFQUFFLElBRkU7WUFHYkMsUUFBUSxFQUFFLElBSEc7WUFJYkMsSUFBSSxFQUFFLElBSk87WUFLYkcsS0FBSyxFQUFFLElBTE07WUFNYkMsS0FBSyxFQUFFLElBTk07WUFPYkMsSUFBSSxFQUFFLElBUE87WUFRYkMsU0FBUyxFQUFFLElBUkU7WUFTYkMsU0FBUyxFQUFFO1VBVEU7UUFGYztNQVRqQyxDQU5hO0lBRGQsQ0FmNkIsQ0FBaEM7O0lBaURBLElBQUksQ0FBQytDLGFBQUwsRUFBb0I7TUFDbEIsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsYUFBYSxDQUFDNUQsVUFBZCxLQUE2QixtQkFBakMsRUFBc0Q7TUFDcEQsT0FBTzRELGFBQVA7SUFDRDs7SUFFRCxJQUFJQSxhQUFhLENBQUM1RCxVQUFkLEtBQTZCLGVBQWpDLEVBQWtEO01BQ2hELE9BQU80RCxhQUFQO0lBQ0Q7O0lBRUQsSUFBSSxDQUFDQSxhQUFhLENBQUNBLGFBQW5CLEVBQWtDO01BQ2hDLE9BQU8sSUFBUDtJQUNEOztJQUVELE9BQU87TUFDTDVELFVBQVUsRUFBRSxpQkFEUDtNQUVMaUMsSUFBSSxFQUFFMkIsYUFBYSxDQUFDQTtJQUZmLENBQVA7RUFJRDs7RUFFaUIsYUFBTEMsS0FBSyxDQUNoQnhCLEdBRGdCLEVBRWhCQyxTQUZnQixFQUd5QjtJQUN6QyxNQUFNO01BQUV1QjtJQUFGLElBQVksTUFBTTNCLFVBQVUsQ0FBQ0ssY0FBWCxDQUEwQkYsR0FBMUIsRUFBK0JDLFNBQS9CLEVBQTBDLE9BQTFDLEVBQW1EO01BQ3pFbEIsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRTtVQUNKQyxNQUFNLEVBQUdDLENBQUQsSUFBZ0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixDQUFmLENBRHBCO1VBRUpHLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQkMsSUFBSSxDQUFDRyxLQUFMLENBQVdKLENBQVg7UUFGcEIsQ0FEQztRQUtQSyxRQUFRLEVBQUU7VUFDUkYsTUFBTSxFQUFHSCxDQUFELElBQWdCLElBQUlNLElBQUosQ0FBU04sQ0FBVCxDQURoQjtVQUVSRCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBWU8sV0FBWjtRQUZoQixDQUxIO1FBU1BDLE1BQU0sRUFBRTtVQUNOTCxNQUFNLEVBQUdILENBQUQsSUFBZ0JRLE1BQU0sQ0FBQ1IsQ0FBRCxDQUR4QjtVQUVORCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBY1MsUUFBZDtRQUZsQjtNQVREO0lBRGdFLENBQW5ELEVBZXJCO01BQ0Q2QixLQUFLLEVBQUU7UUFDTCxzQkFBc0I7VUFDcEI3RCxVQUFVLEVBQUUsSUFEUTtVQUVwQjhELElBQUksRUFBRTtZQUNKQyxJQUFJLEVBQUUsSUFERjtZQUVKQyxLQUFLLEVBQUUsSUFGSDtZQUdKQyxNQUFNLEVBQUU7Y0FDTkMsaUJBQWlCLEVBQUUsSUFEYjtjQUVOQyxhQUFhLEVBQUUsSUFGVDtjQUdOQyxhQUFhLEVBQUUsSUFIVDtjQUlOQyxZQUFZLEVBQUUsSUFKUjtjQUtOQyxXQUFXLEVBQUUsSUFMUDtjQU1OQyxlQUFlLEVBQUUsSUFOWDtjQU9OQyxXQUFXLEVBQUUsSUFQUDtjQVFOQyxhQUFhLEVBQUU7Z0JBQ2JDLEtBQUssRUFBRSxJQURNO2dCQUViQyxTQUFTLEVBQUUsSUFGRTtnQkFHYkMsUUFBUSxFQUFFLElBSEc7Z0JBSWJDLFNBQVMsRUFBRSxJQUpFO2dCQUtiVCxhQUFhLEVBQUUsSUFMRjtnQkFNYkMsWUFBWSxFQUFFLElBTkQ7Z0JBT2JDLFdBQVcsRUFBRTtjQVBBLENBUlQ7Y0FpQk5RLFNBQVMsRUFBRTtnQkFDVEosS0FBSyxFQUFFLElBREU7Z0JBRVRDLFNBQVMsRUFBRSxJQUZGO2dCQUdUQyxRQUFRLEVBQUUsSUFIRDtnQkFJVEMsU0FBUyxFQUFFLElBSkY7Z0JBS1RULGFBQWEsRUFBRSxJQUxOO2dCQU1UQyxZQUFZLEVBQUUsSUFOTDtnQkFPVEMsV0FBVyxFQUFFO2NBUEo7WUFqQkw7VUFISjtRQUZjO01BRGpCO0lBRE4sQ0FmcUIsQ0FBeEI7O0lBc0RBLElBQUksQ0FBQ1QsS0FBTCxFQUFZO01BQ1YsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMN0QsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUU0QixLQUFLLENBQUNDO0lBRlAsQ0FBUDtFQUlEOztFQUVRLE1BQUhpQixHQUFHLENBQ1ByRixRQURPLEVBRVBzRixLQUZPLEVBR1BDLFNBSE8sRUFJdUQ7SUFBQTs7SUFDOUQsTUFBTTtNQUFFRjtJQUFGLElBQVUsTUFBTSxLQUFLNUQsTUFBTCxDQUFZLFVBQVosRUFBd0I7TUFDNUM0RCxHQUFHLEVBQUUsQ0FDSDtRQUNFQyxLQURGO1FBRUV0RixRQUZGO1FBR0V1RjtNQUhGLENBREcsRUFNSDtRQUNFLDJCQUEyQjtVQUN6QmpGLFVBQVUsRUFBRSxJQURhO1VBRXpCQyxPQUFPLEVBQUU7UUFGZ0IsQ0FEN0I7UUFLRSxxQkFBcUI7VUFDbkJELFVBQVUsRUFBRSxJQURPO1VBRW5CK0UsR0FBRyxFQUFFO1FBRmM7TUFMdkIsQ0FORztJQUR1QyxDQUF4QixDQUF0Qjs7SUFvQkEsSUFBSSxDQUFDQSxHQUFMLEVBQVU7TUFDUixPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxHQUFHLENBQUMvRSxVQUFKLEtBQW1CLG1CQUF2QixFQUE0QztNQUMxQyxPQUFPK0UsR0FBUDtJQUNEOztJQUVELE9BQU87TUFDTC9FLFVBQVUsRUFBRSxpQkFEUDtNQUVMaUMsSUFBSSxjQUFFOEMsR0FBRyxDQUFDQSxHQUFOLHVCQUFhO0lBRlosQ0FBUDtFQUlEOztFQUVrQixNQUFiRyxhQUFhLEdBRWpCO0lBQUE7O0lBQ0EsTUFBTTtNQUFFQTtJQUFGLElBQW9CLE1BQU0sS0FBSy9ELE1BQUwsQ0FBWSxVQUFaLEVBQXdCO01BQ3REK0QsYUFBYSxFQUFFO1FBQ2IsMkJBQTJCO1VBQ3pCbEYsVUFBVSxFQUFFLElBRGE7VUFFekJDLE9BQU8sRUFBRTtRQUZnQixDQURkO1FBS2IsK0JBQStCO1VBQzdCRCxVQUFVLEVBQUUsSUFEaUI7VUFFN0JrRixhQUFhLEVBQUU7UUFGYztNQUxsQjtJQUR1QyxDQUF4QixDQUFoQzs7SUFhQSxJQUFJLENBQUNBLGFBQUwsRUFBb0I7TUFDbEIsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsYUFBYSxDQUFDbEYsVUFBZCxLQUE2QixtQkFBakMsRUFBc0Q7TUFDcEQsT0FBT2tGLGFBQVA7SUFDRDs7SUFFRCxPQUFPO01BQ0xsRixVQUFVLEVBQUUsaUJBRFA7TUFFTGlDLElBQUksMkJBQUVpRCxhQUFhLENBQUNBLGFBQWhCLG9DQUFpQztJQUZoQyxDQUFQO0VBSUQ7O0VBRWlCLE1BQVpDLFlBQVksR0FFaEI7SUFDQSxNQUFNO01BQUVBO0lBQUYsSUFBbUIsTUFBTSxLQUFLaEUsTUFBTCxDQUFZLE9BQVosRUFBcUI7TUFDbERDLE9BQU8sRUFBRTtRQUNQQyxJQUFJLEVBQUU7VUFDSkMsTUFBTSxFQUFHQyxDQUFELElBQWdCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsQ0FBZixDQURwQjtVQUVKRyxNQUFNLEVBQUdILENBQUQsSUFBZ0JDLElBQUksQ0FBQ0csS0FBTCxDQUFXSixDQUFYO1FBRnBCLENBREM7UUFLUEssUUFBUSxFQUFFO1VBQ1JGLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQixJQUFJTSxJQUFKLENBQVNOLENBQVQsQ0FEaEI7VUFFUkQsTUFBTSxFQUFHQyxDQUFELElBQWlCQSxDQUFELENBQVlPLFdBQVo7UUFGaEIsQ0FMSDtRQVNQQyxNQUFNLEVBQUU7VUFDTkwsTUFBTSxFQUFHSCxDQUFELElBQWdCUSxNQUFNLENBQUNSLENBQUQsQ0FEeEI7VUFFTkQsTUFBTSxFQUFHQyxDQUFELElBQWlCQSxDQUFELENBQWNTLFFBQWQ7UUFGbEI7TUFURDtJQUR5QyxDQUFyQixFQWU1QjtNQUNEbUQsWUFBWSxFQUFFO1FBQ1osMkJBQTJCO1VBQ3pCbkYsVUFBVSxFQUFFLElBRGE7VUFFekJDLE9BQU8sRUFBRTtRQUZnQixDQURmO1FBS1osOEJBQThCO1VBQzVCRCxVQUFVLEVBQUUsSUFEZ0I7VUFFNUJtRixZQUFZLEVBQUU7WUFDWkMsU0FBUyxFQUFFLElBREM7WUFFWm5HLG1CQUFtQixFQUFFO2NBQ25Cb0csU0FBUyxFQUFFLElBRFE7Y0FFbkJDLFdBQVcsRUFBRSxJQUZNO2NBR25CQyxtQkFBbUIsRUFBRSxJQUhGO2NBSW5CQyxzQkFBc0IsRUFBRSxJQUpMO2NBS25CQyxVQUFVLEVBQUUsSUFMTztjQU1uQkMsU0FBUyxFQUFFLElBTlE7Y0FPbkJDLFNBQVMsRUFBRSxJQVBRO2NBUW5CQyxRQUFRLEVBQUUsSUFSUztjQVNuQkMsV0FBVyxFQUFFLElBVE07Y0FVbkJDLGNBQWMsRUFBRSxJQVZHO2NBV25CQyxTQUFTLEVBQUUsSUFYUTtjQVluQjdHLEtBQUssRUFBRSxJQVpZO2NBYW5CQyxnQkFBZ0IsRUFBRSxJQWJDO2NBY25CMkUsSUFBSSxFQUFFLElBZGE7Y0FlbkJwRSxRQUFRLEVBQUUsSUFmUztjQWdCbkJzRyxLQUFLLEVBQUU7WUFoQlksQ0FGVDtZQW9CWjVHLFFBQVEsRUFBRTtjQUNSNkcsR0FBRyxFQUFFLElBREc7Y0FFUkMsSUFBSSxFQUFFLElBRkU7Y0FHUkMsR0FBRyxFQUFFLElBSEc7Y0FJUjVHLE1BQU0sRUFBRSxJQUpBO2NBS1J5RyxLQUFLLEVBQUUsSUFMQztjQU1SL0MsSUFBSSxFQUFFLElBTkU7Y0FPUm1ELFFBQVEsRUFBRTtZQVBGO1VBcEJFO1FBRmM7TUFMbEI7SUFEYixDQWY0QixDQUEvQjs7SUF5REEsSUFBSSxDQUFDakIsWUFBTCxFQUFtQjtNQUNqQixPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxZQUFZLENBQUNuRixVQUFiLEtBQTRCLG1CQUFoQyxFQUFxRDtNQUNuRCxPQUFPbUYsWUFBUDtJQUNEOztJQUVELElBQUksQ0FBQ0EsWUFBWSxDQUFDQSxZQUFsQixFQUFnQztNQUM5QixPQUFPLElBQVA7SUFDRDs7SUFDRCxNQUFNa0IsTUFBTSxHQUFHdEgsc0JBQXNCLENBQUNvRyxZQUFZLENBQUNBLFlBQWQsQ0FBckM7SUFDQSxPQUFPO01BQ0xuRixVQUFVLEVBQUUsaUJBRFA7TUFFTGlDLElBQUksRUFBRW9FO0lBRkQsQ0FBUDtFQUlEOztFQUVXLE1BQU5wQyxNQUFNLEdBT1Y7SUFDQSxNQUFNO01BQUVBO0lBQUYsSUFBYSxNQUFNLEtBQUs5QyxNQUFMLENBQVksT0FBWixFQUFxQjtNQUM1Q0MsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRTtVQUNKQyxNQUFNLEVBQUdDLENBQUQsSUFBZ0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixDQUFmLENBRHBCO1VBRUpHLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQkMsSUFBSSxDQUFDRyxLQUFMLENBQVdKLENBQVg7UUFGcEIsQ0FEQztRQUtQSyxRQUFRLEVBQUU7VUFDUkYsTUFBTSxFQUFHSCxDQUFELElBQWdCLElBQUlNLElBQUosQ0FBU04sQ0FBVCxDQURoQjtVQUVSRCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBWU8sV0FBWjtRQUZoQixDQUxIO1FBU1BDLE1BQU0sRUFBRTtVQUNOTCxNQUFNLEVBQUdILENBQUQsSUFBZ0JRLE1BQU0sQ0FBQ1IsQ0FBRCxDQUR4QjtVQUVORCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBY1MsUUFBZDtRQUZsQjtNQVREO0lBRG1DLENBQXJCLEVBZXRCO01BQ0RpQyxNQUFNLEVBQUU7UUFDTiwyQkFBMkI7VUFDekJqRSxVQUFVLEVBQUUsSUFEYTtVQUV6QkMsT0FBTyxFQUFFO1FBRmdCLENBRHJCO1FBS04sb0JBQW9CO1VBQ2xCRCxVQUFVLEVBQUUsSUFETTtVQUVsQkMsT0FBTyxFQUFFO1FBRlMsQ0FMZDtRQVNOLHVCQUF1QjtVQUNyQkQsVUFBVSxFQUFFLElBRFM7VUFFckJDLE9BQU8sRUFBRTtRQUZZLENBVGpCO1FBYU4sdUJBQXVCO1VBQ3JCRCxVQUFVLEVBQUUsSUFEUztVQUVyQkMsT0FBTyxFQUFFO1FBRlksQ0FiakI7UUFpQk4scUJBQXFCO1VBQ25CRCxVQUFVLEVBQUUsSUFETztVQUVuQnNHLEtBQUssRUFBRTtZQUNMQyxJQUFJLEVBQUUsSUFERDtZQUVMQyxPQUFPLEVBQUUsSUFGSjtZQUdMOUIsS0FBSyxFQUFFLElBSEY7WUFJTCtCLFFBQVEsRUFBRTtVQUpMLENBRlk7VUFRbkJDLElBQUksRUFBRTtZQUNKQyxRQUFRLEVBQUU7Y0FDUmpDLEtBQUssRUFBRSxJQURDO2NBRVIrQixRQUFRLEVBQUUsSUFGRjtjQUdSOUIsU0FBUyxFQUFFLElBSEg7Y0FJUmlDLFlBQVksRUFBRSxJQUpOO2NBS1JoQyxRQUFRLEVBQUUsSUFMRjtjQU1SaUMsV0FBVyxFQUFFO1lBTkwsQ0FETjtZQVNKQyxJQUFJLEVBQUU7Y0FDSnBDLEtBQUssRUFBRSxJQURIO2NBRUorQixRQUFRLEVBQUUsSUFGTjtjQUdKOUIsU0FBUyxFQUFFLElBSFA7Y0FJSmlDLFlBQVksRUFBRSxJQUpWO2NBS0poQyxRQUFRLEVBQUUsSUFMTjtjQU1KaUMsV0FBVyxFQUFFO1lBTlQ7VUFURjtRQVJhO01BakJmO0lBRFAsQ0Fmc0IsQ0FBekI7O0lBK0RBLElBQUksQ0FBQzVDLE1BQUwsRUFBYTtNQUNYLE9BQU8sSUFBUDtJQUNEOztJQUVELElBQUlBLE1BQU0sQ0FBQ2pFLFVBQVAsS0FBc0IsbUJBQTFCLEVBQStDO01BQzdDLE9BQU9pRSxNQUFQO0lBQ0Q7O0lBQ0QsSUFBSUEsTUFBTSxDQUFDakUsVUFBUCxLQUFzQixlQUExQixFQUEyQztNQUN6QyxPQUFPaUUsTUFBUDtJQUNEOztJQUNELElBQUlBLE1BQU0sQ0FBQ2pFLFVBQVAsS0FBc0IsWUFBMUIsRUFBd0M7TUFDdEMsT0FBT2lFLE1BQVA7SUFDRDs7SUFDRCxJQUFJQSxNQUFNLENBQUNqRSxVQUFQLEtBQXNCLGVBQTFCLEVBQTJDO01BQ3pDLE9BQU9pRSxNQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMakUsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUVnQztJQUZELENBQVA7RUFJRDs7RUFFeUIsTUFBcEI4QyxvQkFBb0IsR0FFeEI7SUFDQSxNQUFNO01BQUVoSDtJQUFGLElBQVcsTUFBTSxLQUFLb0IsTUFBTCxDQUFZLE9BQVosRUFBcUI7TUFDMUNwQixJQUFJLEVBQUUsQ0FDSixFQURJLEVBRUo7UUFDRSx1QkFBdUI7VUFDckJDLFVBQVUsRUFBRSxJQURTO1VBRXJCQyxPQUFPLEVBQUU7UUFGWSxDQUR6QjtRQUtFLHNCQUFzQjtVQUNwQkQsVUFBVSxFQUFFLElBRFE7VUFFcEJnSCxXQUFXLEVBQUU7WUFDWDdHLEVBQUUsRUFBRSxJQURPO1lBRVhDLFNBQVMsRUFBRSxJQUZBO1lBR1hDLFFBQVEsRUFBRSxJQUhDO1lBSVhJLEtBQUssRUFBRSxJQUpJO1lBS1hDLEtBQUssRUFBRTtVQUxJLENBRk87VUFTcEJ1RyxTQUFTLEVBQUU7WUFDVDlHLEVBQUUsRUFBRSxJQURLO1lBRVRDLFNBQVMsRUFBRSxJQUZGO1lBR1RDLFFBQVEsRUFBRSxJQUhEO1lBSVRJLEtBQUssRUFBRSxJQUpFO1lBS1RDLEtBQUssRUFBRTtVQUxFO1FBVFM7TUFMeEIsQ0FGSTtJQURvQyxDQUFyQixDQUF2Qjs7SUE2QkEsSUFBSSxDQUFDWCxJQUFMLEVBQVc7TUFDVCxPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxJQUFJLENBQUNDLFVBQUwsS0FBb0IsZUFBeEIsRUFBeUM7TUFDdkMsT0FBT0QsSUFBUDtJQUNEOztJQUVELE9BQU87TUFDTEMsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUU7UUFDSitFLFdBQVcsRUFBRWpILElBQUksQ0FBQ2lILFdBRGQ7UUFFSkMsU0FBUyxFQUFFbEgsSUFBSSxDQUFDa0g7TUFGWjtJQUZELENBQVA7RUFPRDs7RUFFNkIsYUFBakJDLGlCQUFpQixRQVV1QztJQUFBLElBVnRDO01BQzdCQyxPQUQ2QjtNQUU3QkMsTUFGNkI7TUFHN0IvRSxHQUg2QjtNQUk3QkM7SUFKNkIsQ0FVc0M7SUFDbkUsTUFBTTtNQUFFK0U7SUFBRixJQUF1QixNQUFNbkYsVUFBVSxDQUFDSyxjQUFYLENBQ2pDRixHQURpQyxFQUVqQ0MsU0FGaUMsRUFHakMsVUFIaUMsRUFHckI7TUFDWitFLGdCQUFnQixFQUFFLENBQ2hCO1FBQ0VGLE9BREY7UUFFRUMsTUFBTSxFQUFFNUYsSUFBSSxDQUFDQyxTQUFMLENBQWUyRixNQUFmO01BRlYsQ0FEZ0IsRUFLaEI7UUFDRSwyQkFBMkI7VUFDekJwSCxVQUFVLEVBQUUsSUFEYTtVQUV6QkMsT0FBTyxFQUFFO1FBRmdCLENBRDdCO1FBS0Usa0NBQWtDO1VBQ2hDRCxVQUFVLEVBQUUsSUFEb0I7VUFFaENxSCxnQkFBZ0IsRUFBRTtRQUZjO01BTHBDLENBTGdCO0lBRE4sQ0FIcUIsQ0FBbkM7O0lBc0JBLElBQUksQ0FBQ0EsZ0JBQUwsRUFBdUI7TUFDckIsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsZ0JBQWdCLENBQUNySCxVQUFqQixLQUFnQyxtQkFBcEMsRUFBeUQ7TUFDdkQsT0FBT3FILGdCQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMckgsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUVvRixnQkFBZ0IsQ0FBQ0E7SUFGbEIsQ0FBUDtFQUlEOztFQUUwQixhQUFkQyxjQUFjLENBQ3pCSCxPQUR5QixFQUV6QjlFLEdBRnlCLEVBR3pCQyxTQUh5QixFQVV6QjtJQUNBLE1BQU07TUFBRWlGO0lBQUYsSUFBZSxNQUFNckYsVUFBVSxDQUFDSyxjQUFYLENBQ3pCRixHQUR5QixFQUV6QkMsU0FGeUIsRUFHekIsT0FIeUIsRUFHaEI7TUFDVGlGLFFBQVEsRUFBRSxDQUNSO1FBQ0VKO01BREYsQ0FEUSxFQUlSO1FBQ0UsMkJBQTJCO1VBQ3pCbkgsVUFBVSxFQUFFLElBRGE7VUFFekJDLE9BQU8sRUFBRTtRQUZnQixDQUQ3QjtRQUtFLHVCQUF1QjtVQUNyQkQsVUFBVSxFQUFFLElBRFM7VUFFckJDLE9BQU8sRUFBRTtRQUZZLENBTHpCO1FBU0UsdUJBQXVCO1VBQ3JCRCxVQUFVLEVBQUUsSUFEUztVQUVyQkMsT0FBTyxFQUFFO1FBRlksQ0FUekI7UUFhRSwwQkFBMEI7VUFDeEJELFVBQVUsRUFBRSxJQURZO1VBRXhCd0gsSUFBSSxFQUFFO1FBRmtCO01BYjVCLENBSlE7SUFERCxDQUhnQixDQUEzQjs7SUE2QkEsSUFBSSxDQUFDRCxRQUFMLEVBQWU7TUFDYixPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxRQUFRLENBQUN2SCxVQUFULEtBQXdCLG1CQUE1QixFQUFpRDtNQUMvQyxPQUFPdUgsUUFBUDtJQUNEOztJQUVELElBQUlBLFFBQVEsQ0FBQ3ZILFVBQVQsS0FBd0IsZUFBNUIsRUFBNkM7TUFDM0MsT0FBT3VILFFBQVA7SUFDRDs7SUFFRCxJQUFJQSxRQUFRLENBQUN2SCxVQUFULEtBQXdCLGVBQTVCLEVBQTZDO01BQzNDLE9BQU91SCxRQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMdkgsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUVzRixRQUFRLENBQUNDO0lBRlYsQ0FBUDtFQUlEOztFQUVrQixhQUFOQyxNQUFNLFFBUWdEO0lBQUEsSUFSL0M7TUFDbEJuSCxJQURrQjtNQUVsQitCLEdBRmtCO01BR2xCQztJQUhrQixDQVErQztJQUNqRSxNQUFNO01BQUVvRjtJQUFGLElBQVUsTUFBTXhGLFVBQVUsQ0FBQ0ssY0FBWCxDQUEwQkYsR0FBMUIsRUFBK0JDLFNBQS9CLEVBQTBDLE9BQTFDLEVBQW1EO01BQ3ZFb0YsR0FBRyxFQUFFLENBQ0g7UUFDRXBIO01BREYsQ0FERyxFQUlIO1FBQ0UsMkJBQTJCO1VBQ3pCTixVQUFVLEVBQUUsSUFEYTtVQUV6QkMsT0FBTyxFQUFFO1FBRmdCLENBRDdCO1FBS0UscUJBQXFCO1VBQ25CRCxVQUFVLEVBQUUsSUFETztVQUVuQjBILEdBQUcsRUFBRTtZQUNIQyxNQUFNLEVBQUUsSUFETDtZQUVIQyxLQUFLLEVBQUUsSUFGSjtZQUdIQyxRQUFRLEVBQUU7VUFIUDtRQUZjO01BTHZCLENBSkc7SUFEa0UsQ0FBbkQsQ0FBdEI7O0lBc0JBLElBQUksQ0FBQ0gsR0FBTCxFQUFVO01BQ1IsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsR0FBRyxDQUFDMUgsVUFBSixLQUFtQixtQkFBdkIsRUFBNEM7TUFDMUMsT0FBTzBILEdBQVA7SUFDRDs7SUFFRCxPQUFPO01BQ0wxSCxVQUFVLEVBQUUsaUJBRFA7TUFFTGlDLElBQUksRUFBRXlGLEdBQUcsQ0FBQ0E7SUFGTCxDQUFQO0VBSUQ7O0VBRW1CLGFBQVBJLE9BQU8sUUFRZ0Q7SUFBQSxJQVIvQztNQUNuQnpGLEdBRG1CO01BRW5CL0IsSUFGbUI7TUFHbkJnQztJQUhtQixDQVErQztJQUNsRSxNQUFNO01BQUV5RjtJQUFGLElBQVcsTUFBTTdGLFVBQVUsQ0FBQ0ssY0FBWCxDQUEwQkYsR0FBMUIsRUFBK0JDLFNBQS9CLEVBQTBDLE9BQTFDLEVBQW1EO01BQ3hFbEIsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRTtVQUNKQyxNQUFNLEVBQUdDLENBQUQsSUFBZ0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixDQUFmLENBRHBCO1VBRUpHLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQkMsSUFBSSxDQUFDRyxLQUFMLENBQVdKLENBQVg7UUFGcEIsQ0FEQztRQUtQSyxRQUFRLEVBQUU7VUFDUkYsTUFBTSxFQUFHSCxDQUFELElBQWdCLElBQUlNLElBQUosQ0FBU04sQ0FBVCxDQURoQjtVQUVSRCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBWU8sV0FBWjtRQUZoQixDQUxIO1FBU1BDLE1BQU0sRUFBRTtVQUNOTCxNQUFNLEVBQUdILENBQUQsSUFBZ0JRLE1BQU0sQ0FBQ1IsQ0FBRCxDQUR4QjtVQUVORCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBY1MsUUFBZDtRQUZsQjtNQVREO0lBRCtELENBQW5ELEVBZXBCO01BQ0QrRixJQUFJLEVBQUUsQ0FDSjtRQUNFekg7TUFERixDQURJLEVBSUo7UUFDRSwyQkFBMkI7VUFDekJOLFVBQVUsRUFBRSxJQURhO1VBRXpCQyxPQUFPLEVBQUU7UUFGZ0IsQ0FEN0I7UUFLRSxzQkFBc0I7VUFDcEJELFVBQVUsRUFBRSxJQURRO1VBRXBCZ0ksU0FBUyxFQUFFO1lBQ1Q3SCxFQUFFLEVBQUUsSUFESztZQUVUOEgsTUFBTSxFQUFFLElBRkM7WUFHVEMsTUFBTSxFQUFFLElBSEM7WUFJVEMsSUFBSSxFQUFFLElBSkc7WUFLVGpDLElBQUksRUFBRSxJQUxHO1lBTVRrQyxLQUFLLEVBQUUsSUFORTtZQU9UQyxRQUFRLEVBQUUsSUFQRDtZQVFUQyxPQUFPLEVBQUUsSUFSQTtZQVNUQyxLQUFLLEVBQUUsSUFURTtZQVVUWCxLQUFLLEVBQUU7VUFWRTtRQUZTO01BTHhCLENBSkk7SUFETCxDQWZvQixDQUF2Qjs7SUE0Q0EsSUFBSSxDQUFDRyxJQUFMLEVBQVc7TUFDVCxPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxJQUFJLENBQUMvSCxVQUFMLEtBQW9CLG1CQUF4QixFQUE2QztNQUMzQyxPQUFPK0gsSUFBUDtJQUNEOztJQUVELE9BQU87TUFDTC9ILFVBQVUsRUFBRSxpQkFEUDtNQUVMaUMsSUFBSSxFQUFFOEYsSUFBSSxDQUFDQztJQUZOLENBQVA7RUFJRDs7RUFFZSxNQUFWUSxVQUFVLENBQ2RDLGNBRGMsRUFFZEMsYUFGYyxFQUtkO0lBQ0EsTUFBTTtNQUFFQztJQUFGLElBQWlCLE1BQU0sS0FBS3hILE1BQUwsQ0FBWSxVQUFaLEVBQXdCO01BQ25Ed0gsVUFBVSxFQUFFLENBQ1Y7UUFDRUYsY0FERjtRQUVFQztNQUZGLENBRFUsRUFLVjtRQUNFLDJCQUEyQjtVQUN6QjFJLFVBQVUsRUFBRSxJQURhO1VBRXpCQyxPQUFPLEVBQUU7UUFGZ0IsQ0FEN0I7UUFLRSx1QkFBdUI7VUFDckJELFVBQVUsRUFBRSxJQURTO1VBRXJCQyxPQUFPLEVBQUU7UUFGWSxDQUx6QjtRQVNFLDRCQUE0QjtVQUMxQkQsVUFBVSxFQUFFLElBRGM7VUFFMUIySSxVQUFVLEVBQUU7WUFDVnhJLEVBQUUsRUFBRSxJQURNO1lBRVZ1SSxhQUFhLEVBQUUsSUFGTDtZQUdWM0ksSUFBSSxFQUFFO2NBQ0pJLEVBQUUsRUFBRSxJQURBO2NBRUpDLFNBQVMsRUFBRSxJQUZQO2NBR0pDLFFBQVEsRUFBRSxJQUhOO2NBSUpJLEtBQUssRUFBRTtZQUpILENBSEk7WUFTVm1JLFlBQVksRUFBRTtjQUNaekksRUFBRSxFQUFFLElBRFE7Y0FFWkMsU0FBUyxFQUFFLElBRkM7Y0FHWkMsUUFBUSxFQUFFLElBSEU7Y0FJWkksS0FBSyxFQUFFO1lBSks7VUFUSjtRQUZjO01BVDlCLENBTFU7SUFEdUMsQ0FBeEIsQ0FBN0I7O0lBc0NBLElBQUksQ0FBQ2tJLFVBQUwsRUFBaUI7TUFDZixPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxVQUFVLENBQUMzSSxVQUFYLEtBQTBCLG1CQUE5QixFQUFtRDtNQUNqRCxPQUFPMkksVUFBUDtJQUNEOztJQUVELElBQUlBLFVBQVUsQ0FBQzNJLFVBQVgsS0FBMEIsZUFBOUIsRUFBK0M7TUFDN0MsT0FBTzJJLFVBQVA7SUFDRDs7SUFFRCxJQUFJLENBQUNBLFVBQVUsQ0FBQ0EsVUFBaEIsRUFBNEI7TUFDMUIsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMM0ksVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUUwRyxVQUFVLENBQUNBO0lBRlosQ0FBUDtFQUlEOztFQUVzQixhQUFWRSxVQUFVLFFBUTBDO0lBQUEsSUFSekM7TUFDdEJ2RyxTQURzQjtNQUV0QnpDLE1BRnNCO01BR3RCd0M7SUFIc0IsQ0FReUM7SUFDL0QsTUFBTTtNQUFFd0c7SUFBRixJQUFpQixNQUFNM0csVUFBVSxDQUFDSyxjQUFYLENBQzNCRixHQUQyQixFQUUzQkMsU0FGMkIsRUFHM0IsVUFIMkIsRUFHZjtNQUNadUcsVUFBVSxFQUFFLENBQ1Y7UUFDRWhKO01BREYsQ0FEVSxFQUlWO1FBQ0UsMkJBQTJCO1VBQ3pCRyxVQUFVLEVBQUUsSUFEYTtVQUV6QkMsT0FBTyxFQUFFO1FBRmdCLENBRDdCO1FBS0UsNEJBQTRCO1VBQzFCRCxVQUFVLEVBQUUsSUFEYztVQUUxQjZJLFVBQVUsRUFBRTtRQUZjO01BTDlCLENBSlU7SUFEQSxDQUhlLENBQTdCOztJQXFCQSxJQUFJLENBQUNBLFVBQUwsRUFBaUI7TUFDZixPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxVQUFVLENBQUM3SSxVQUFYLEtBQTBCLG1CQUE5QixFQUFtRDtNQUNqRCxPQUFPNkksVUFBUDtJQUNEOztJQUVELElBQUksQ0FBQ0EsVUFBVSxDQUFDQSxVQUFoQixFQUE0QjtNQUMxQixPQUFPLElBQVA7SUFDRDs7SUFFRCxPQUFPO01BQ0w3SSxVQUFVLEVBQUUsaUJBRFA7TUFFTGlDLElBQUksRUFBRTRHLFVBQVUsQ0FBQ0E7SUFGWixDQUFQO0VBSUQ7O0VBRXVCLE1BQWxCQyxrQkFBa0IsUUFJRztJQUFBLElBSkY7TUFDdkJDO0lBRHVCLENBSUU7SUFDekIsTUFBTXJGLEVBQUUsR0FBRyxNQUFNLEtBQUtBLEVBQUwsQ0FBUTtNQUFFNUQsYUFBYSxFQUFFO0lBQWpCLENBQVIsQ0FBakI7O0lBRUEsSUFBSSxDQUFDNEQsRUFBTCxFQUFTO01BQ1AsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsRUFBRSxDQUFDMUQsVUFBSCxLQUFrQixlQUF0QixFQUF1QztNQUNyQyxPQUFPLElBQVA7SUFDRDs7SUFFRCxPQUFPdEIsT0FBTyxDQUFDO01BQ2JzRSxHQUFHLEVBQUUsTUFEUTtNQUViZ0csSUFBSSxtQkFBaUJDLElBQUksQ0FBQ3ZGLEVBQUUsQ0FBQ3pCLElBQUgsQ0FBUXhCLEtBQVQsQ0FBckIsWUFBMkN3SSxJQUFJLENBQUNGLE9BQUQ7SUFGdEMsQ0FBRCxDQUFkO0VBSUQ7O0VBRThCLE1BQXpCRyx5QkFBeUIsUUFZN0I7SUFBQSxJQVo4QjtNQUM5Qi9JLEVBRDhCO01BRTlCZ0o7SUFGOEIsQ0FZOUI7SUFDQSxNQUFNO01BQUVEO0lBQUYsSUFBZ0MsTUFBTSxLQUFLL0gsTUFBTCxDQUFZLFVBQVosRUFBd0I7TUFDbEUrSCx5QkFBeUIsRUFBRSxDQUN6QjtRQUNFckosTUFBTSxFQUFFTSxFQURWO1FBRUVnSixLQUFLLEVBQUVBLEtBQUYsV0FBRUEsS0FBRixHQUFXO01BRmxCLENBRHlCLEVBS3pCO1FBQ0UsMkJBQTJCO1VBQ3pCbkosVUFBVSxFQUFFLElBRGE7VUFFekJDLE9BQU8sRUFBRTtRQUZnQixDQUQ3QjtRQUtFLHVCQUF1QjtVQUNyQkQsVUFBVSxFQUFFLElBRFM7VUFFckJDLE9BQU8sRUFBRTtRQUZZLENBTHpCO1FBU0Usb0JBQW9CO1VBQ2xCRCxVQUFVLEVBQUUsSUFETTtVQUVsQkMsT0FBTyxFQUFFO1FBRlMsQ0FUdEI7UUFhRSwyQ0FBMkM7VUFDekNELFVBQVUsRUFBRSxJQUQ2QjtVQUV6Q2tKLHlCQUF5QixFQUFFO1FBRmM7TUFiN0MsQ0FMeUI7SUFEdUMsQ0FBeEIsQ0FBNUM7O0lBMkJBLElBQUksQ0FBQ0EseUJBQUwsRUFBZ0M7TUFDOUIsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEseUJBQXlCLENBQUNsSixVQUExQixLQUF5QyxtQkFBN0MsRUFBa0U7TUFDaEUsT0FBT2tKLHlCQUFQO0lBQ0Q7O0lBRUQsSUFBSUEseUJBQXlCLENBQUNsSixVQUExQixLQUF5QyxZQUE3QyxFQUEyRDtNQUN6RCxPQUFPa0oseUJBQVA7SUFDRDs7SUFFRCxJQUFJQSx5QkFBeUIsQ0FBQ2xKLFVBQTFCLEtBQXlDLGVBQTdDLEVBQThEO01BQzVELE9BQU9rSix5QkFBUDtJQUNEOztJQUVELElBQUksQ0FBQ0EseUJBQXlCLENBQUNBLHlCQUEvQixFQUEwRDtNQUN4RCxPQUFPLElBQVA7SUFDRDs7SUFFRCxPQUFPO01BQ0xsSixVQUFVLEVBQUUsaUJBRFA7TUFFTGlDLElBQUksRUFBRWlILHlCQUF5QixDQUFDQTtJQUYzQixDQUFQO0VBSUQ7O0FBMWpDcUI7O0FBQVhoSCxVLENBQ1lrSCxVLEdBQWEsVUFDbEMvRyxHQURrQyxFQUVsQ2dILFFBRmtDLEVBR3ZCO0VBQUEsSUFGWGhILEdBRVc7SUFGWEEsR0FFVyxHQUZPLE1BRVA7RUFBQTs7RUFBQSxJQURYZ0gsUUFDVztJQURYQSxRQUNXLEdBREEsSUFDQTtFQUFBOztFQUNYLE1BQU1DLE1BQU0sR0FBR0MsT0FBTyxDQUFDbEgsR0FBUixDQUFZbUgsMkJBQTNCOztFQUNBLElBQUlGLE1BQUosRUFBWTtJQUNWLE9BQU9BLE1BQVA7RUFDRDs7RUFFRCxRQUFRakgsR0FBUjtJQUNFLEtBQUssTUFBTDtNQUNFLE9BQU9nSCxRQUFRLEdBQ1gsOEJBRFcsR0FFWCxnQ0FGSjs7SUFHRixLQUFLLEtBQUw7SUFDQTtNQUNFLE9BQU8sb0NBQVA7RUFQSjtBQVNELEM7O0FBbkJVbkgsVSxDQXFCYUssYyxHQUFpQixDQUN2Q0YsR0FEdUMsRUFFdkNELE9BRnVDLEtBSXZDdEQsYUFBYSxDQUFDb0QsVUFBVSxDQUFDa0gsVUFBWCxDQUFzQi9HLEdBQXRCLENBQUQsRUFBNkJELE9BQTdCLEMifQ==