@secrecy/lib 1.0.0-dev.24 → 1.0.0-dev.25

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