@secrecy/lib 1.0.0-dev.6 → 1.0.0-dev.61

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 (126) hide show
  1. package/README.md +1 -1
  2. package/dist/BaseClient.d.ts +123 -0
  3. package/dist/BaseClient.js +569 -0
  4. package/{lib → dist}/PopupTools.d.ts +1 -1
  5. package/dist/PopupTools.js +221 -0
  6. package/{lib → dist}/ZeusThunder.d.ts +0 -0
  7. package/dist/ZeusThunder.js +79 -0
  8. package/dist/cache.d.ts +6 -0
  9. package/dist/cache.js +4 -0
  10. package/dist/client/SecrecyAppClient.d.ts +17 -0
  11. package/dist/client/SecrecyAppClient.js +256 -0
  12. package/dist/client/SecrecyCloudClient.d.ts +89 -0
  13. package/dist/client/SecrecyCloudClient.js +1627 -0
  14. package/dist/client/SecrecyDbClient.d.ts +21 -0
  15. package/dist/client/SecrecyDbClient.js +198 -0
  16. package/dist/client/SecrecyMailClient.d.ts +42 -0
  17. package/dist/client/SecrecyMailClient.js +1187 -0
  18. package/dist/client/SecrecyPayClient.d.ts +7 -0
  19. package/dist/client/SecrecyPayClient.js +37 -0
  20. package/dist/client/SecrecyWalletClient.d.ts +30 -0
  21. package/dist/client/SecrecyWalletClient.js +76 -0
  22. package/{lib → dist}/client/convert/file.d.ts +3 -3
  23. package/dist/client/convert/file.js +34 -0
  24. package/dist/client/convert/mail.d.ts +3 -0
  25. package/dist/client/convert/mail.js +48 -0
  26. package/dist/client/convert/node.d.ts +9 -0
  27. package/dist/client/convert/node.js +100 -0
  28. package/{lib → dist}/client/helpers.d.ts +6 -1
  29. package/dist/client/helpers.js +126 -0
  30. package/dist/client/index.d.ts +34 -0
  31. package/dist/client/index.js +52 -0
  32. package/{lib → dist}/client/storage.d.ts +0 -0
  33. package/dist/client/storage.js +12 -0
  34. package/dist/client/types/File.d.ts +14 -0
  35. package/dist/client/types/File.js +3 -0
  36. package/{lib → dist}/client/types/Inputs.d.ts +2 -7
  37. package/dist/client/types/Inputs.js +3 -0
  38. package/dist/client/types/Node.d.ts +56 -0
  39. package/dist/client/types/Node.js +3 -0
  40. package/dist/client/types/UserAppNotifications.d.ts +6 -0
  41. package/dist/client/types/UserAppNotifications.js +3 -0
  42. package/{lib → dist}/client/types/UserAppSettings.d.ts +1 -3
  43. package/dist/client/types/UserAppSettings.js +3 -0
  44. package/{lib → dist}/client/types/index.d.ts +10 -43
  45. package/dist/client/types/index.js +8 -0
  46. package/dist/client/types/selectors.d.ts +400 -0
  47. package/dist/client/types/selectors.js +138 -0
  48. package/{lib → dist}/crypto/file.d.ts +0 -0
  49. package/dist/crypto/file.js +210 -0
  50. package/{lib → dist}/crypto/index.d.ts +0 -0
  51. package/dist/crypto/index.js +47 -0
  52. package/dist/error.d.ts +30 -0
  53. package/dist/error.js +3 -0
  54. package/dist/index.d.ts +11 -0
  55. package/dist/index.js +9 -0
  56. package/{lib → dist}/minify/index.d.ts +0 -0
  57. package/dist/minify/index.js +28 -0
  58. package/{lib → dist}/minify/lz4.d.ts +0 -0
  59. package/dist/minify/lz4.js +627 -0
  60. package/{lib → dist}/sodium.d.ts +0 -0
  61. package/dist/sodium.js +6 -0
  62. package/{lib → dist}/utils/store-buddy.d.ts +0 -0
  63. package/dist/utils/store-buddy.js +65 -0
  64. package/{lib → dist}/utils/time.d.ts +0 -0
  65. package/dist/utils/time.js +14 -0
  66. package/{lib → dist/utils}/utils.d.ts +0 -0
  67. package/dist/utils/utils.js +57 -0
  68. package/{lib → dist}/worker/md5.d.ts +0 -0
  69. package/dist/worker/md5.js +25 -0
  70. package/{lib → dist}/worker/sodium.d.ts +0 -0
  71. package/dist/worker/sodium.js +120 -0
  72. package/{lib → dist}/worker/workerCodes.d.ts +0 -0
  73. package/dist/worker/workerCodes.js +255 -0
  74. package/{lib → dist}/zeus/const.d.ts +5 -0
  75. package/dist/zeus/const.js +1286 -0
  76. package/dist/zeus/index.d.ts +6119 -0
  77. package/dist/zeus/index.js +687 -0
  78. package/package.json +60 -52
  79. package/lib/BaseClient.d.ts +0 -266
  80. package/lib/BaseClient.js +0 -1332
  81. package/lib/PopupTools.js +0 -213
  82. package/lib/ZeusThunder.js +0 -112
  83. package/lib/cache.d.ts +0 -7
  84. package/lib/cache.js +0 -5
  85. package/lib/client/convert/file.js +0 -39
  86. package/lib/client/convert/folder.d.ts +0 -8
  87. package/lib/client/convert/folder.js +0 -264
  88. package/lib/client/convert/mail.d.ts +0 -3
  89. package/lib/client/convert/mail.js +0 -46
  90. package/lib/client/convert/vFile.d.ts +0 -5
  91. package/lib/client/convert/vFile.js +0 -164
  92. package/lib/client/helpers.js +0 -116
  93. package/lib/client/index.d.ts +0 -166
  94. package/lib/client/index.js +0 -3697
  95. package/lib/client/storage.js +0 -12
  96. package/lib/client/types/File.d.ts +0 -21
  97. package/lib/client/types/File.js +0 -2
  98. package/lib/client/types/FilesOnUsersOnApplications.d.ts +0 -9
  99. package/lib/client/types/FilesOnUsersOnApplications.js +0 -2
  100. package/lib/client/types/Folder.d.ts +0 -68
  101. package/lib/client/types/Folder.js +0 -7
  102. package/lib/client/types/Inputs.js +0 -2
  103. package/lib/client/types/UserAppSettings.js +0 -2
  104. package/lib/client/types/VFile.d.ts +0 -62
  105. package/lib/client/types/VFile.js +0 -4
  106. package/lib/client/types/index.js +0 -8
  107. package/lib/client/types/queries.d.ts +0 -535
  108. package/lib/client/types/queries.js +0 -192
  109. package/lib/crypto/file.js +0 -291
  110. package/lib/crypto/index.js +0 -37
  111. package/lib/index.d.ts +0 -11
  112. package/lib/index.js +0 -40
  113. package/lib/minify/index.js +0 -28
  114. package/lib/minify/lz4.js +0 -633
  115. package/lib/sodium.js +0 -28
  116. package/lib/utils/store-buddy.js +0 -69
  117. package/lib/utils/time.js +0 -22
  118. package/lib/utils.js +0 -188
  119. package/lib/worker/__mock__/sodium.worker.d.ts +0 -19
  120. package/lib/worker/__mock__/sodium.worker.js +0 -57
  121. package/lib/worker/md5.js +0 -43
  122. package/lib/worker/sodium.js +0 -155
  123. package/lib/worker/workerCodes.js +0 -3
  124. package/lib/zeus/const.js +0 -1609
  125. package/lib/zeus/index.d.ts +0 -26113
  126. package/lib/zeus/index.js +0 -552
@@ -0,0 +1,569 @@
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import { getLink } from "@secrecy/lib-utils";
3
+ import { usersCache } from "./cache.js";
4
+ import { getStorage } from "./client/storage.js";
5
+ import { InfuraNetwork } from "./zeus/index.js";
6
+ import { Selector } from "./zeus/index.js";
7
+ import { createThunder } from "./ZeusThunder.js";
8
+
9
+ const getUserSelector = (userId, withPublicKey) => {
10
+ const {
11
+ user
12
+ } = Selector("Query")({
13
+ user: [{
14
+ userId
15
+ }, {
16
+ "...on ErrorNotFound": {
17
+ __typename: true,
18
+ message: true,
19
+ field: true
20
+ },
21
+ "...on UserResponse": {
22
+ __typename: true,
23
+ user: {
24
+ id: true,
25
+ firstname: true,
26
+ lastname: true,
27
+ lang: true,
28
+ publicKey: withPublicKey ? true : undefined,
29
+ email: true,
30
+ phone: true,
31
+ role: true,
32
+ deletedAt: true,
33
+ lastLogin: true
34
+ }
35
+ }
36
+ }]
37
+ });
38
+ return user;
39
+ };
40
+
41
+ async function getUser(params) {
42
+ const selector = getUserSelector(params.userId ?? params.userEmail, params.withPublicKey);
43
+ const {
44
+ user: userResponse
45
+ } = await params.client("query", {
46
+ scalars: {
47
+ Json: {
48
+ encode: e => JSON.stringify(e),
49
+ decode: e => JSON.parse(e)
50
+ },
51
+ DateTime: {
52
+ decode: e => new Date(e),
53
+ encode: e => e.toISOString()
54
+ },
55
+ BigInt: {
56
+ decode: e => BigInt(e),
57
+ encode: e => e.toString()
58
+ }
59
+ }
60
+ })({
61
+ user: selector
62
+ });
63
+
64
+ if (!userResponse) {
65
+ return null;
66
+ }
67
+
68
+ if (userResponse.__typename === "ErrorNotFound") {
69
+ return userResponse;
70
+ }
71
+
72
+ if (!userResponse.user) {
73
+ return null;
74
+ }
75
+
76
+ return {
77
+ __typename: "SuccessResponse",
78
+ data: userResponse.user
79
+ };
80
+ }
81
+
82
+ export class BaseClient {
83
+ constructor(session, env) {
84
+ this.sessionId = session;
85
+ this.thunder = BaseClient.getBaseClient(env, session);
86
+ }
87
+
88
+ async logout(sessionId) {
89
+ if (!sessionId) {
90
+ const local = getStorage(false);
91
+ const session = getStorage(true);
92
+ local.jwt.clear();
93
+ local.userAppKeys.clear();
94
+ local.userAppSession.clear();
95
+ session.jwt.clear();
96
+ session.userAppKeys.clear();
97
+ session.userAppSession.clear();
98
+ usersCache.clear();
99
+ }
100
+
101
+ try {
102
+ await this.thunder("mutation")({
103
+ logout: [{
104
+ sessionId: sessionId
105
+ }, {
106
+ "...on ErrorAccessDenied": {
107
+ __typename: true,
108
+ message: true
109
+ },
110
+ "...on ErrorBasic": {
111
+ __typename: true,
112
+ message: true
113
+ },
114
+ "...on LogoutResponse": {
115
+ __typename: true,
116
+ logout: true
117
+ }
118
+ }]
119
+ });
120
+ } catch {//
121
+ }
122
+ }
123
+
124
+ async me(params) {
125
+ return this.user(params || {
126
+ withPublicKey: true
127
+ });
128
+ }
129
+
130
+ static async user(params, sessionId) {
131
+ const user = await getUser({
132
+ client: this.getBaseClient(params.env, sessionId),
133
+ userId: params.userId ?? params.userEmail,
134
+ withPublicKey: params.withPublicKey
135
+ });
136
+
137
+ if (!user) {
138
+ return null;
139
+ }
140
+
141
+ if (user.__typename === "ErrorNotFound") {
142
+ return user;
143
+ }
144
+
145
+ if (user) {
146
+ usersCache.set(user.data.id, user.data);
147
+ }
148
+
149
+ return user;
150
+ }
151
+
152
+ async user(params) {
153
+ const user = await getUser({
154
+ client: this.thunder,
155
+ userId: params.userId ?? params.userEmail,
156
+ withPublicKey: params.withPublicKey
157
+ });
158
+
159
+ if (!user) {
160
+ return null;
161
+ }
162
+
163
+ if (user.__typename === "ErrorNotFound") {
164
+ return user;
165
+ }
166
+
167
+ if (user) {
168
+ usersCache.set(user.data.id, user.data);
169
+ }
170
+
171
+ return user;
172
+ }
173
+
174
+ async updateProfile(_ref) {
175
+ let {
176
+ firstname,
177
+ lastname,
178
+ lang
179
+ } = _ref;
180
+ const {
181
+ updateProfile
182
+ } = await this.thunder("mutation", {
183
+ scalars: {
184
+ Json: {
185
+ encode: e => JSON.stringify(e),
186
+ decode: e => JSON.parse(e)
187
+ },
188
+ DateTime: {
189
+ decode: e => new Date(e),
190
+ encode: e => e.toISOString()
191
+ },
192
+ BigInt: {
193
+ decode: e => BigInt(e),
194
+ encode: e => e.toString()
195
+ }
196
+ }
197
+ })({
198
+ updateProfile: [{
199
+ firstname,
200
+ lastname,
201
+ lang
202
+ }, {
203
+ "...on ErrorAccessDenied": {
204
+ __typename: true,
205
+ message: true
206
+ },
207
+ "...on ErrorNotFound": {
208
+ __typename: true,
209
+ message: true
210
+ },
211
+ "...on UpdateProfileResponse": {
212
+ __typename: true,
213
+ updateProfile: {
214
+ id: true,
215
+ firstname: true,
216
+ lastname: true,
217
+ lang: true,
218
+ email: true,
219
+ phone: true,
220
+ role: true,
221
+ deletedAt: true,
222
+ lastLogin: true
223
+ }
224
+ }
225
+ }]
226
+ });
227
+
228
+ if (!updateProfile) {
229
+ return null;
230
+ }
231
+
232
+ if (updateProfile.__typename === "ErrorAccessDenied") {
233
+ return updateProfile;
234
+ }
235
+
236
+ if (updateProfile.__typename === "ErrorNotFound") {
237
+ return updateProfile;
238
+ }
239
+
240
+ if (!updateProfile.updateProfile) {
241
+ return null;
242
+ }
243
+
244
+ return {
245
+ __typename: "SuccessResponse",
246
+ data: updateProfile.updateProfile
247
+ };
248
+ }
249
+
250
+ static async isCryptoTransactionDone(_ref2) {
251
+ let {
252
+ env,
253
+ idOrHash,
254
+ network = InfuraNetwork.mainnet
255
+ } = _ref2;
256
+ const {
257
+ isCryptoTransactionDone
258
+ } = await BaseClient.getBaseClient(env)("query")({
259
+ isCryptoTransactionDone: [{
260
+ idOrHash,
261
+ network
262
+ }, {
263
+ __typename: true,
264
+ "...on IsCryptoTransactionDoneResponse": {
265
+ done: true
266
+ },
267
+ "...on ErrorNotExist": {
268
+ message: true
269
+ }
270
+ }]
271
+ });
272
+
273
+ if (!isCryptoTransactionDone) {
274
+ return false;
275
+ }
276
+
277
+ return isCryptoTransactionDone.__typename === "IsCryptoTransactionDoneResponse" ? isCryptoTransactionDone.done : false;
278
+ }
279
+
280
+ async limits() {
281
+ const {
282
+ limits
283
+ } = await this.thunder("query", {
284
+ scalars: {
285
+ Json: {
286
+ encode: e => JSON.stringify(e),
287
+ decode: e => JSON.parse(e)
288
+ },
289
+ DateTime: {
290
+ decode: e => new Date(e),
291
+ encode: e => e.toISOString()
292
+ },
293
+ BigInt: {
294
+ decode: e => BigInt(e),
295
+ encode: e => e.toString()
296
+ }
297
+ }
298
+ })({
299
+ limits: {
300
+ "...on ErrorAccessDenied": {
301
+ __typename: true,
302
+ message: true
303
+ },
304
+ "...on ErrorLimit": {
305
+ __typename: true,
306
+ message: true
307
+ },
308
+ "...on ErrorNotExist": {
309
+ __typename: true,
310
+ message: true
311
+ },
312
+ "...on ErrorNotFound": {
313
+ __typename: true,
314
+ message: true
315
+ },
316
+ "...on QueryLimits": {
317
+ __typename: true,
318
+ cloud: {
319
+ size: true,
320
+ maxSize: true,
321
+ count: true,
322
+ maxCount: true
323
+ },
324
+ mail: {
325
+ received: {
326
+ count: true,
327
+ maxCount: true,
328
+ fileCount: true,
329
+ maxFileCount: true,
330
+ fileSize: true,
331
+ maxFileSize: true
332
+ },
333
+ sent: {
334
+ count: true,
335
+ maxCount: true,
336
+ fileCount: true,
337
+ maxFileCount: true,
338
+ fileSize: true,
339
+ maxFileSize: true
340
+ }
341
+ }
342
+ }
343
+ }
344
+ });
345
+
346
+ if (!limits) {
347
+ return null;
348
+ }
349
+
350
+ if (limits.__typename === "ErrorAccessDenied") {
351
+ return limits;
352
+ }
353
+
354
+ if (limits.__typename === "ErrorNotExist") {
355
+ return limits;
356
+ }
357
+
358
+ if (limits.__typename === "ErrorLimit") {
359
+ return limits;
360
+ }
361
+
362
+ if (limits.__typename === "ErrorNotFound") {
363
+ return limits;
364
+ }
365
+
366
+ return {
367
+ __typename: "SuccessResponse",
368
+ data: limits
369
+ };
370
+ }
371
+
372
+ static async updateAppDBConfig(_ref3) {
373
+ let {
374
+ appCode,
375
+ config,
376
+ env,
377
+ sessionId
378
+ } = _ref3;
379
+ const {
380
+ dbConfigMutation
381
+ } = await BaseClient.getBaseClient(env, sessionId)("mutation")({
382
+ dbConfigMutation: [{
383
+ appCode,
384
+ config: JSON.stringify(config)
385
+ }, {
386
+ "...on ErrorAccessDenied": {
387
+ __typename: true,
388
+ message: true
389
+ },
390
+ "...on DbConfigMutationResponse": {
391
+ __typename: true,
392
+ dbConfigMutation: true
393
+ }
394
+ }]
395
+ });
396
+
397
+ if (!dbConfigMutation) {
398
+ return null;
399
+ }
400
+
401
+ if (dbConfigMutation.__typename === "ErrorAccessDenied") {
402
+ return dbConfigMutation;
403
+ }
404
+
405
+ return {
406
+ __typename: "SuccessResponse",
407
+ data: dbConfigMutation.dbConfigMutation
408
+ };
409
+ }
410
+
411
+ static async getAppDBConfig(appCode, env, sessionId) {
412
+ const {
413
+ dbConfig
414
+ } = await BaseClient.getBaseClient(env, sessionId)("query")({
415
+ dbConfig: [{
416
+ appCode
417
+ }, {
418
+ "...on ErrorAccessDenied": {
419
+ __typename: true,
420
+ message: true
421
+ },
422
+ "...on ErrorNotFound": {
423
+ __typename: true,
424
+ message: true
425
+ },
426
+ "...on ErrorNotExist": {
427
+ __typename: true,
428
+ message: true
429
+ },
430
+ "...on DbConfigResponse": {
431
+ __typename: true,
432
+ json: true
433
+ }
434
+ }]
435
+ });
436
+
437
+ if (!dbConfig) {
438
+ return null;
439
+ }
440
+
441
+ if (dbConfig.__typename === "ErrorAccessDenied") {
442
+ return dbConfig;
443
+ }
444
+
445
+ if (dbConfig.__typename === "ErrorNotFound") {
446
+ return dbConfig;
447
+ }
448
+
449
+ if (dbConfig.__typename === "ErrorNotExist") {
450
+ return dbConfig;
451
+ }
452
+
453
+ return {
454
+ __typename: "SuccessResponse",
455
+ data: dbConfig.json
456
+ };
457
+ }
458
+
459
+ async reportUser(reportedUserId, customMessage) {
460
+ const {
461
+ sendReport
462
+ } = await this.thunder("mutation")({
463
+ sendReport: [{
464
+ reportedUserId,
465
+ customMessage
466
+ }, {
467
+ "...on ErrorAccessDenied": {
468
+ __typename: true,
469
+ message: true
470
+ },
471
+ "...on ErrorNotFound": {
472
+ __typename: true,
473
+ message: true
474
+ },
475
+ "...on SendReportResponse": {
476
+ __typename: true,
477
+ sendReport: {
478
+ id: true,
479
+ customMessage: true,
480
+ user: {
481
+ id: true,
482
+ firstname: true,
483
+ lastname: true,
484
+ email: true
485
+ },
486
+ reportedUser: {
487
+ id: true,
488
+ firstname: true,
489
+ lastname: true,
490
+ email: true
491
+ }
492
+ }
493
+ }
494
+ }]
495
+ });
496
+
497
+ if (!sendReport) {
498
+ return null;
499
+ }
500
+
501
+ if (sendReport.__typename === "ErrorAccessDenied") {
502
+ return sendReport;
503
+ }
504
+
505
+ if (sendReport.__typename === "ErrorNotFound") {
506
+ return sendReport;
507
+ }
508
+
509
+ if (!sendReport.sendReport) {
510
+ return null;
511
+ }
512
+
513
+ return {
514
+ __typename: "SuccessResponse",
515
+ data: sendReport.sendReport
516
+ };
517
+ }
518
+
519
+ async getSponsorshipLink(_ref4) {
520
+ let {
521
+ backUrl
522
+ } = _ref4;
523
+ const me = await this.me({
524
+ withPublicKey: false
525
+ });
526
+
527
+ if (!me) {
528
+ return null;
529
+ }
530
+
531
+ if (me.__typename === "ErrorNotFound") {
532
+ return null;
533
+ }
534
+
535
+ return getLink({
536
+ app: "auth",
537
+ path: `/sign-up?gf=${btoa(me.data.email)}&au=${btoa(backUrl)}`
538
+ });
539
+ }
540
+
541
+ }
542
+
543
+ BaseClient.getBaseUrl = function (env, graphcdn) {
544
+ if (env === void 0) {
545
+ env = "prod";
546
+ }
547
+
548
+ if (graphcdn === void 0) {
549
+ graphcdn = true;
550
+ }
551
+
552
+ const apiUrl = process.env.NEXT_PUBLIC_SECRECY_API_URL;
553
+
554
+ if (apiUrl) {
555
+ return apiUrl;
556
+ }
557
+
558
+ switch (env) {
559
+ case "prod":
560
+ return graphcdn ? "https://secrecy.graphcdn.app" : "https://api.secrecy.me/graphql";
561
+
562
+ case "dev":
563
+ default:
564
+ return "https://api.dev.secrecy.me/graphql";
565
+ }
566
+ };
567
+
568
+ BaseClient.getBaseClient = (env, session) => createThunder(BaseClient.getBaseUrl(env), session);
569
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRMaW5rIiwidXNlcnNDYWNoZSIsImdldFN0b3JhZ2UiLCJJbmZ1cmFOZXR3b3JrIiwiU2VsZWN0b3IiLCJjcmVhdGVUaHVuZGVyIiwiZ2V0VXNlclNlbGVjdG9yIiwidXNlcklkIiwid2l0aFB1YmxpY0tleSIsInVzZXIiLCJfX3R5cGVuYW1lIiwibWVzc2FnZSIsImZpZWxkIiwiaWQiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImxhbmciLCJwdWJsaWNLZXkiLCJ1bmRlZmluZWQiLCJlbWFpbCIsInBob25lIiwicm9sZSIsImRlbGV0ZWRBdCIsImxhc3RMb2dpbiIsImdldFVzZXIiLCJwYXJhbXMiLCJzZWxlY3RvciIsInVzZXJFbWFpbCIsInVzZXJSZXNwb25zZSIsImNsaWVudCIsInNjYWxhcnMiLCJKc29uIiwiZW5jb2RlIiwiZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvZGUiLCJwYXJzZSIsIkRhdGVUaW1lIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiQmlnSW50IiwidG9TdHJpbmciLCJkYXRhIiwiQmFzZUNsaWVudCIsImNvbnN0cnVjdG9yIiwic2Vzc2lvbiIsImVudiIsInNlc3Npb25JZCIsInRodW5kZXIiLCJnZXRCYXNlQ2xpZW50IiwibG9nb3V0IiwibG9jYWwiLCJqd3QiLCJjbGVhciIsInVzZXJBcHBLZXlzIiwidXNlckFwcFNlc3Npb24iLCJtZSIsInNldCIsInVwZGF0ZVByb2ZpbGUiLCJpc0NyeXB0b1RyYW5zYWN0aW9uRG9uZSIsImlkT3JIYXNoIiwibmV0d29yayIsIm1haW5uZXQiLCJkb25lIiwibGltaXRzIiwiY2xvdWQiLCJzaXplIiwibWF4U2l6ZSIsImNvdW50IiwibWF4Q291bnQiLCJtYWlsIiwicmVjZWl2ZWQiLCJmaWxlQ291bnQiLCJtYXhGaWxlQ291bnQiLCJmaWxlU2l6ZSIsIm1heEZpbGVTaXplIiwic2VudCIsInVwZGF0ZUFwcERCQ29uZmlnIiwiYXBwQ29kZSIsImNvbmZpZyIsImRiQ29uZmlnTXV0YXRpb24iLCJnZXRBcHBEQkNvbmZpZyIsImRiQ29uZmlnIiwianNvbiIsInJlcG9ydFVzZXIiLCJyZXBvcnRlZFVzZXJJZCIsImN1c3RvbU1lc3NhZ2UiLCJzZW5kUmVwb3J0IiwicmVwb3J0ZWRVc2VyIiwiZ2V0U3BvbnNvcnNoaXBMaW5rIiwiYmFja1VybCIsImFwcCIsInBhdGgiLCJidG9hIiwiZ2V0QmFzZVVybCIsImdyYXBoY2RuIiwiYXBpVXJsIiwicHJvY2VzcyIsIk5FWFRfUFVCTElDX1NFQ1JFQ1lfQVBJX1VSTCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNlQ2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIGFzIERMUHJvZ3Jlc3MgfSBmcm9tIFwia3lcIjtcbmltcG9ydCB7IGdldExpbmsgfSBmcm9tIFwiQHNlY3JlY3kvbGliLXV0aWxzXCI7XG5pbXBvcnQgeyB1c2Vyc0NhY2hlIH0gZnJvbSBcIi4vY2FjaGUuanNcIjtcbmltcG9ydCB0eXBlIHsgU2VjcmVjeUVudiB9IGZyb20gXCIuL2NsaWVudC9oZWxwZXJzLmpzXCI7XG5pbXBvcnQgeyBnZXRTdG9yYWdlIH0gZnJvbSBcIi4vY2xpZW50L3N0b3JhZ2UuanNcIjtcbmltcG9ydCB0eXBlIHsgTGFuZywgVGh1bmRlciwgVXNlclJvbGUgfSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBJbmZ1cmFOZXR3b3JrIH0gZnJvbSBcIi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi96ZXVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVUaHVuZGVyIH0gZnJvbSBcIi4vWmV1c1RodW5kZXIuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRXJyb3JBY2Nlc3NEZW5pZWQsXG4gIEVycm9yTGltaXQsXG4gIEVycm9yTm90Rm91bmQsXG4gIEVycm9yTm90RXhpc3Rcbn0gZnJvbSBcIi4vZXJyb3IuanNcIjtcblxuZXhwb3J0IHR5cGUgU3VjY2Vzc1Jlc3BvbnNlPFQ+ID0ge1xuICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiO1xuICBkYXRhOiBUO1xufTtcblxuZXhwb3J0IHR5cGUgRG93bmxvYWRQcm9ncmVzcyA9IERMUHJvZ3Jlc3M7XG5cbmV4cG9ydCB0eXBlIFNlbmRSZXBvcnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXI6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgfTtcbiAgcmVwb3J0ZWRVc2VyOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICBsYXN0bmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gIH07XG4gIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyRGF0YTxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbj4gPSB7XG4gIGlzU3VwZXJ1c2VyOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG59ICYgVDtcblxuY29uc3QgZ2V0VXNlclNlbGVjdG9yID0gKFxuICB1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHdpdGhQdWJsaWNLZXk6IGJvb2xlYW4gfCB1bmRlZmluZWRcbikgPT4ge1xuICBjb25zdCB7IHVzZXIgfSA9IFNlbGVjdG9yKFwiUXVlcnlcIikoe1xuICAgIHVzZXI6IFtcbiAgICAgIHsgdXNlcklkIH0sXG4gICAgICB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlLFxuICAgICAgICAgIGZpZWxkOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICBsYW5nOiB0cnVlLFxuICAgICAgICAgICAgcHVibGljS2V5OiB3aXRoUHVibGljS2V5ID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgcGhvbmU6IHRydWUsXG4gICAgICAgICAgICByb2xlOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgbGFzdExvZ2luOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcbiAgcmV0dXJuIHVzZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEQkNvbmZpZ0ZpZWxkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFwic3RyaW5nXCIgfCBcIm51bWJlclwiIHwgXCJib29sZWFuXCIgfCBcIm9iamVjdFwiO1xuICBpc0FycmF5PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaXNOdWxsYWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGlzRWRpdGFibGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBpc0tleT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHQ/OiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwREJDb25maWcgPSB7XG4gIGZpZWxkczogQXBwREJDb25maWdGaWVsZFtdO1xufTtcblxuZXhwb3J0IHR5cGUgVXNlckJhc2UgPSB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGxhc3RuYW1lOiBzdHJpbmc7XG4gIHJvbGU6IFVzZXJSb2xlO1xuICBmaXJzdG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgZGVsZXRlZEF0PzogRGF0ZTtcbiAgbGFzdExvZ2luOiBEYXRlO1xuICBsYW5nOiBMYW5nO1xufTtcblxudHlwZSBXaXRoUHVibGljS2V5ID0geyB3aXRoUHVibGljS2V5PzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBVc2VyPFQgZXh0ZW5kcyBXaXRoUHVibGljS2V5ID0gV2l0aFB1YmxpY0tleT4gPSBUIGV4dGVuZHMge1xuICB3aXRoUHVibGljS2V5OiB0cnVlO1xufVxuICA/IFVzZXJCYXNlICYgeyBwdWJsaWNLZXk6IHN0cmluZyB9XG4gIDogVXNlckJhc2U7XG5cbnR5cGUgQ2xhc3NHZXRVc2VyUGFyYW1zID0gV2l0aFB1YmxpY0tleSAmIHtcbiAgdXNlcklkPzogc3RyaW5nO1xuICB1c2VyRW1haWw/OiBzdHJpbmc7XG59O1xudHlwZSBHZXRVc2VyUGFyYW1zID0gQ2xhc3NHZXRVc2VyUGFyYW1zICYge1xuICBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xufTtcblxudHlwZSBTdGF0aWNHZXRVc2VyUGFyYW1zID0gQ2xhc3NHZXRVc2VyUGFyYW1zICYge1xuICBlbnY6IFNlY3JlY3lFbnY7XG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRVc2VyPFUgZXh0ZW5kcyBXaXRoUHVibGljS2V5PihcbiAgcGFyYW1zOiBHZXRVc2VyUGFyYW1zXG4pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxVc2VyPFU+PiB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0VXNlclNlbGVjdG9yKFxuICAgIHBhcmFtcy51c2VySWQgPz8gcGFyYW1zLnVzZXJFbWFpbCxcbiAgICBwYXJhbXMud2l0aFB1YmxpY0tleVxuICApO1xuICBjb25zdCB7IHVzZXI6IHVzZXJSZXNwb25zZSB9ID0gYXdhaXQgcGFyYW1zLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICBzY2FsYXJzOiB7XG4gICAgICBKc29uOiB7XG4gICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnBhcnNlKGUgYXMgc3RyaW5nKVxuICAgICAgfSxcbiAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIEJpZ0ludDoge1xuICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9XG4gIH0pKHtcbiAgICB1c2VyOiBzZWxlY3RvclxuICB9KTtcblxuICBpZiAoIXVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZXJSZXNwb25zZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgIHJldHVybiB1c2VyUmVzcG9uc2U7XG4gIH1cblxuICBpZiAoIXVzZXJSZXNwb25zZS51c2VyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgZGF0YTogdXNlclJlc3BvbnNlLnVzZXJcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2xvdWRMaW1pdHMgPSB7XG4gIGNvdW50OiBiaWdpbnQ7XG4gIG1heENvdW50PzogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBzaXplOiBiaWdpbnQ7XG4gIG1heFNpemU/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBNYWlsTGltaXRzVmFsdWVzID0ge1xuICBjb3VudDogYmlnaW50O1xuICBtYXhDb3VudD86IGJpZ2ludCB8IHVuZGVmaW5lZDtcbiAgZmlsZVNpemU6IGJpZ2ludDtcbiAgbWF4RmlsZVNpemU/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIGZpbGVDb3VudDogYmlnaW50O1xuICBtYXhGaWxlQ291bnQ/OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBRdWVyeUxpbWl0cyA9IHtcbiAgY2xvdWQ6IENsb3VkTGltaXRzO1xuICBtYWlsOiB7XG4gICAgc2VudDogTWFpbExpbWl0c1ZhbHVlcztcbiAgICByZWNlaXZlZDogTWFpbExpbWl0c1ZhbHVlcztcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ2xpZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBnZXRCYXNlVXJsID0gKFxuICAgIGVudjogU2VjcmVjeUVudiA9IFwicHJvZFwiLFxuICAgIGdyYXBoY2RuID0gdHJ1ZVxuICApOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGFwaVVybCA9IHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX1NFQ1JFQ1lfQVBJX1VSTDtcbiAgICBpZiAoYXBpVXJsKSB7XG4gICAgICByZXR1cm4gYXBpVXJsO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZW52KSB7XG4gICAgICBjYXNlIFwicHJvZFwiOlxuICAgICAgICByZXR1cm4gZ3JhcGhjZG5cbiAgICAgICAgICA/IFwiaHR0cHM6Ly9zZWNyZWN5LmdyYXBoY2RuLmFwcFwiXG4gICAgICAgICAgOiBcImh0dHBzOi8vYXBpLnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgICAgY2FzZSBcImRldlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9hcGkuZGV2LnNlY3JlY3kubWUvZ3JhcGhxbFwiO1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgcmVhZG9ubHkgZ2V0QmFzZUNsaWVudCA9IChcbiAgICBlbnY6IFNlY3JlY3lFbnYsXG4gICAgc2Vzc2lvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj4gPT5cbiAgICBjcmVhdGVUaHVuZGVyKEJhc2VDbGllbnQuZ2V0QmFzZVVybChlbnYpLCBzZXNzaW9uKTtcblxuICBwcm90ZWN0ZWQgdGh1bmRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG5cbiAgcHVibGljIHNlc3Npb25JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNlc3Npb246IHN0cmluZywgZW52OiBTZWNyZWN5RW52KSB7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uO1xuICAgIHRoaXMudGh1bmRlciA9IEJhc2VDbGllbnQuZ2V0QmFzZUNsaWVudChlbnYsIHNlc3Npb24pO1xuICB9XG5cbiAgYXN5bmMgbG9nb3V0KHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNlc3Npb25JZCkge1xuICAgICAgY29uc3QgbG9jYWwgPSBnZXRTdG9yYWdlKGZhbHNlKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBnZXRTdG9yYWdlKHRydWUpO1xuICAgICAgbG9jYWwuand0LmNsZWFyKCk7XG4gICAgICBsb2NhbC51c2VyQXBwS2V5cy5jbGVhcigpO1xuICAgICAgbG9jYWwudXNlckFwcFNlc3Npb24uY2xlYXIoKTtcbiAgICAgIHNlc3Npb24uand0LmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBLZXlzLmNsZWFyKCk7XG4gICAgICBzZXNzaW9uLnVzZXJBcHBTZXNzaW9uLmNsZWFyKCk7XG4gICAgICB1c2Vyc0NhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIGxvZ291dDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIExvZ291dFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbG9nb3V0OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWU8VCBleHRlbmRzIFdpdGhQdWJsaWNLZXkgPSBXaXRoUHVibGljS2V5PihcbiAgICBwYXJhbXM/OiBUXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyKHBhcmFtcyB8fCAoeyB3aXRoUHVibGljS2V5OiB0cnVlIH0gYXMgVCkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHVzZXI8VCBleHRlbmRzIFN0YXRpY0dldFVzZXJQYXJhbXM+KFxuICAgIHBhcmFtczogVCxcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMuZ2V0QmFzZUNsaWVudChwYXJhbXMuZW52LCBzZXNzaW9uSWQpLFxuICAgICAgdXNlcklkOiBwYXJhbXMudXNlcklkID8/IHBhcmFtcy51c2VyRW1haWwsXG4gICAgICB3aXRoUHVibGljS2V5OiBwYXJhbXMud2l0aFB1YmxpY0tleVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHVzZXJzQ2FjaGUuc2V0KHVzZXIuZGF0YS5pZCwgdXNlci5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVzZXI8VCBleHRlbmRzIENsYXNzR2V0VXNlclBhcmFtcz4oXG4gICAgcGFyYW1zOiBUXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFVzZXI8VD4+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlcjxUPih7XG4gICAgICBjbGllbnQ6IHRoaXMudGh1bmRlcixcbiAgICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCA/PyBwYXJhbXMudXNlckVtYWlsLFxuICAgICAgd2l0aFB1YmxpY0tleTogcGFyYW1zLndpdGhQdWJsaWNLZXlcbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICh1c2VyKSB7XG4gICAgICB1c2Vyc0NhY2hlLnNldCh1c2VyLmRhdGEuaWQsIHVzZXIuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICBhc3luYyB1cGRhdGVQcm9maWxlKHtcbiAgICBmaXJzdG5hbWUsXG4gICAgbGFzdG5hbWUsXG4gICAgbGFuZ1xuICB9OiB7XG4gICAgZmlyc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhbmc6IExhbmcgfCBudWxsO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlcj4gfCBFcnJvck5vdEZvdW5kIHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXBkYXRlUHJvZmlsZSB9ID0gYXdhaXQgdGhpcy50aHVuZGVyKFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiB7XG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZylcbiAgICAgICAgfSxcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBkYXRlUHJvZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlyc3RuYW1lLFxuICAgICAgICAgIGxhc3RuYW1lLFxuICAgICAgICAgIGxhbmdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVQcm9maWxlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZVByb2ZpbGU6IHtcbiAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIGxhbmc6IHRydWUsXG4gICAgICAgICAgICAgIGVtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBwaG9uZTogdHJ1ZSxcbiAgICAgICAgICAgICAgcm9sZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVsZXRlZEF0OiB0cnVlLFxuICAgICAgICAgICAgICBsYXN0TG9naW46IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlUHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVByb2ZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlUHJvZmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVQcm9maWxlLnVwZGF0ZVByb2ZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlUHJvZmlsZS51cGRhdGVQcm9maWxlXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBpc0NyeXB0b1RyYW5zYWN0aW9uRG9uZSh7XG4gICAgZW52LFxuICAgIGlkT3JIYXNoLFxuICAgIG5ldHdvcmsgPSBJbmZ1cmFOZXR3b3JrLm1haW5uZXRcbiAgfToge1xuICAgIGVudjogU2VjcmVjeUVudjtcbiAgICBpZE9ySGFzaDogc3RyaW5nO1xuICAgIG5ldHdvcms/OiBJbmZ1cmFOZXR3b3JrO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBpc0NyeXB0b1RyYW5zYWN0aW9uRG9uZSB9ID0gYXdhaXQgQmFzZUNsaWVudC5nZXRCYXNlQ2xpZW50KGVudikoXG4gICAgICBcInF1ZXJ5XCJcbiAgICApKHtcbiAgICAgIGlzQ3J5cHRvVHJhbnNhY3Rpb25Eb25lOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZE9ySGFzaCxcbiAgICAgICAgICBuZXR3b3JrXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIFwiLi4ub24gSXNDcnlwdG9UcmFuc2FjdGlvbkRvbmVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFpc0NyeXB0b1RyYW5zYWN0aW9uRG9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NyeXB0b1RyYW5zYWN0aW9uRG9uZS5fX3R5cGVuYW1lID09PVxuICAgICAgXCJJc0NyeXB0b1RyYW5zYWN0aW9uRG9uZVJlc3BvbnNlXCJcbiAgICAgID8gaXNDcnlwdG9UcmFuc2FjdGlvbkRvbmUuZG9uZVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0cygpOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPFF1ZXJ5TGltaXRzPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IEVycm9yTGltaXRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBsaW1pdHMgfSA9IGF3YWl0IHRoaXMudGh1bmRlcihcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGxpbWl0czoge1xuICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgXCIuLi5vbiBRdWVyeUxpbWl0c1wiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBjbG91ZDoge1xuICAgICAgICAgICAgc2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1heFNpemU6IHRydWUsXG4gICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgIG1heENvdW50OiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYWlsOiB7XG4gICAgICAgICAgICByZWNlaXZlZDoge1xuICAgICAgICAgICAgICBjb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4Q291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBmaWxlU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWF4RmlsZVNpemU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZW50OiB7XG4gICAgICAgICAgICAgIGNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZUNvdW50OiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGVTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBtYXhGaWxlU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFsaW1pdHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChsaW1pdHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cbiAgICBpZiAobGltaXRzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gbGltaXRzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbGltaXRzXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB1cGRhdGVBcHBEQkNvbmZpZyh7XG4gICAgYXBwQ29kZSxcbiAgICBjb25maWcsXG4gICAgZW52LFxuICAgIHNlc3Npb25JZFxuICB9OiB7XG4gICAgYXBwQ29kZTogc3RyaW5nO1xuICAgIGNvbmZpZzogQXBwREJDb25maWc7XG4gICAgZW52OiBTZWNyZWN5RW52O1xuICAgIHNlc3Npb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxBcHBEQkNvbmZpZz4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnTXV0YXRpb24gfSA9IGF3YWl0IEJhc2VDbGllbnQuZ2V0QmFzZUNsaWVudChcbiAgICAgIGVudixcbiAgICAgIHNlc3Npb25JZFxuICAgICkoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYkNvbmZpZ011dGF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBDb2RlLFxuICAgICAgICAgIGNvbmZpZzogSlNPTi5zdHJpbmdpZnkoY29uZmlnKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkNvbmZpZ011dGF0aW9uUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiQ29uZmlnTXV0YXRpb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWdNdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnTXV0YXRpb24uX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJDb25maWdNdXRhdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiQ29uZmlnTXV0YXRpb24uZGJDb25maWdNdXRhdGlvbiBhcyBBcHBEQkNvbmZpZ1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0QXBwREJDb25maWcoXG4gICAgYXBwQ29kZTogc3RyaW5nLFxuICAgIGVudjogU2VjcmVjeUVudixcbiAgICBzZXNzaW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8QXBwREJDb25maWc+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnIH0gPSBhd2FpdCBCYXNlQ2xpZW50LmdldEJhc2VDbGllbnQoXG4gICAgICBlbnYsXG4gICAgICBzZXNzaW9uSWRcbiAgICApKFwicXVlcnlcIikoe1xuICAgICAgZGJDb25maWc6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFwcENvZGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiQ29uZmlnUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWcuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiQ29uZmlnLmpzb24gYXMgQXBwREJDb25maWdcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVwb3J0VXNlcihcbiAgICByZXBvcnRlZFVzZXJJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8U2VuZFJlcG9ydD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgc2VuZFJlcG9ydCB9ID0gYXdhaXQgdGhpcy50aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgc2VuZFJlcG9ydDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmVwb3J0ZWRVc2VySWQsXG4gICAgICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNlbmRSZXBvcnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgc2VuZFJlcG9ydDoge1xuICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY3VzdG9tTWVzc2FnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXBvcnRlZFVzZXI6IHtcbiAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaXJzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzZW5kUmVwb3J0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZFJlcG9ydC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzZW5kUmVwb3J0O1xuICAgIH1cblxuICAgIGlmIChzZW5kUmVwb3J0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2VuZFJlcG9ydDtcbiAgICB9XG5cbiAgICBpZiAoIXNlbmRSZXBvcnQuc2VuZFJlcG9ydCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzZW5kUmVwb3J0LnNlbmRSZXBvcnRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U3BvbnNvcnNoaXBMaW5rKHtcbiAgICBiYWNrVXJsXG4gIH06IHtcbiAgICBiYWNrVXJsOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBtZSA9IGF3YWl0IHRoaXMubWUoeyB3aXRoUHVibGljS2V5OiBmYWxzZSB9KTtcblxuICAgIGlmICghbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldExpbmsoe1xuICAgICAgYXBwOiBcImF1dGhcIixcbiAgICAgIHBhdGg6IGAvc2lnbi11cD9nZj0ke2J0b2EobWUuZGF0YS5lbWFpbCl9JmF1PSR7YnRvYShiYWNrVXJsKX1gXG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxTQUFTQSxPQUFULFFBQXdCLG9CQUF4QjtBQUNBLFNBQVNDLFVBQVQsUUFBMkIsWUFBM0I7QUFFQSxTQUFTQyxVQUFULFFBQTJCLHFCQUEzQjtBQUVBLFNBQVNDLGFBQVQsUUFBOEIsaUJBQTlCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QixpQkFBekI7QUFDQSxTQUFTQyxhQUFULFFBQThCLGtCQUE5Qjs7QUF1Q0EsTUFBTUMsZUFBZSxHQUFHLENBQ3RCQyxNQURzQixFQUV0QkMsYUFGc0IsS0FHbkI7RUFDSCxNQUFNO0lBQUVDO0VBQUYsSUFBV0wsUUFBUSxDQUFDLE9BQUQsQ0FBUixDQUFrQjtJQUNqQ0ssSUFBSSxFQUFFLENBQ0o7TUFBRUY7SUFBRixDQURJLEVBRUo7TUFDRSx1QkFBdUI7UUFDckJHLFVBQVUsRUFBRSxJQURTO1FBRXJCQyxPQUFPLEVBQUUsSUFGWTtRQUdyQkMsS0FBSyxFQUFFO01BSGMsQ0FEekI7TUFNRSxzQkFBc0I7UUFDcEJGLFVBQVUsRUFBRSxJQURRO1FBRXBCRCxJQUFJLEVBQUU7VUFDSkksRUFBRSxFQUFFLElBREE7VUFFSkMsU0FBUyxFQUFFLElBRlA7VUFHSkMsUUFBUSxFQUFFLElBSE47VUFJSkMsSUFBSSxFQUFFLElBSkY7VUFLSkMsU0FBUyxFQUFFVCxhQUFhLEdBQUcsSUFBSCxHQUFVVSxTQUw5QjtVQU1KQyxLQUFLLEVBQUUsSUFOSDtVQU9KQyxLQUFLLEVBQUUsSUFQSDtVQVFKQyxJQUFJLEVBQUUsSUFSRjtVQVNKQyxTQUFTLEVBQUUsSUFUUDtVQVVKQyxTQUFTLEVBQUU7UUFWUDtNQUZjO0lBTnhCLENBRkk7RUFEMkIsQ0FBbEIsQ0FBakI7RUEyQkEsT0FBT2QsSUFBUDtBQUNELENBaENEOztBQWdGQSxlQUFlZSxPQUFmLENBQ0VDLE1BREYsRUFFNEQ7RUFDMUQsTUFBTUMsUUFBUSxHQUFHcEIsZUFBZSxDQUM5Qm1CLE1BQU0sQ0FBQ2xCLE1BQVAsSUFBaUJrQixNQUFNLENBQUNFLFNBRE0sRUFFOUJGLE1BQU0sQ0FBQ2pCLGFBRnVCLENBQWhDO0VBSUEsTUFBTTtJQUFFQyxJQUFJLEVBQUVtQjtFQUFSLElBQXlCLE1BQU1ILE1BQU0sQ0FBQ0ksTUFBUCxDQUFjLE9BQWQsRUFBdUI7SUFDMURDLE9BQU8sRUFBRTtNQUNQQyxJQUFJLEVBQUU7UUFDSkMsTUFBTSxFQUFHQyxDQUFELElBQWdCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsQ0FBZixDQURwQjtRQUVKRyxNQUFNLEVBQUdILENBQUQsSUFBZ0JDLElBQUksQ0FBQ0csS0FBTCxDQUFXSixDQUFYO01BRnBCLENBREM7TUFLUEssUUFBUSxFQUFFO1FBQ1JGLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQixJQUFJTSxJQUFKLENBQVNOLENBQVQsQ0FEaEI7UUFFUkQsTUFBTSxFQUFHQyxDQUFELElBQWlCQSxDQUFELENBQVlPLFdBQVo7TUFGaEIsQ0FMSDtNQVNQQyxNQUFNLEVBQUU7UUFDTkwsTUFBTSxFQUFHSCxDQUFELElBQWdCUSxNQUFNLENBQUNSLENBQUQsQ0FEeEI7UUFFTkQsTUFBTSxFQUFHQyxDQUFELElBQWlCQSxDQUFELENBQWNTLFFBQWQ7TUFGbEI7SUFURDtFQURpRCxDQUF2QixFQWVsQztJQUNEakMsSUFBSSxFQUFFaUI7RUFETCxDQWZrQyxDQUFyQzs7RUFtQkEsSUFBSSxDQUFDRSxZQUFMLEVBQW1CO0lBQ2pCLE9BQU8sSUFBUDtFQUNEOztFQUVELElBQUlBLFlBQVksQ0FBQ2xCLFVBQWIsS0FBNEIsZUFBaEMsRUFBaUQ7SUFDL0MsT0FBT2tCLFlBQVA7RUFDRDs7RUFFRCxJQUFJLENBQUNBLFlBQVksQ0FBQ25CLElBQWxCLEVBQXdCO0lBQ3RCLE9BQU8sSUFBUDtFQUNEOztFQUVELE9BQU87SUFDTEMsVUFBVSxFQUFFLGlCQURQO0lBRUxpQyxJQUFJLEVBQUVmLFlBQVksQ0FBQ25CO0VBRmQsQ0FBUDtBQUlEOztBQTBCRCxPQUFPLE1BQU1tQyxVQUFOLENBQWlCO0VBK0J0QkMsV0FBVyxDQUFDQyxPQUFELEVBQWtCQyxHQUFsQixFQUFtQztJQUM1QyxLQUFLQyxTQUFMLEdBQWlCRixPQUFqQjtJQUNBLEtBQUtHLE9BQUwsR0FBZUwsVUFBVSxDQUFDTSxhQUFYLENBQXlCSCxHQUF6QixFQUE4QkQsT0FBOUIsQ0FBZjtFQUNEOztFQUVXLE1BQU5LLE1BQU0sQ0FBQ0gsU0FBRCxFQUF1RDtJQUNqRSxJQUFJLENBQUNBLFNBQUwsRUFBZ0I7TUFDZCxNQUFNSSxLQUFLLEdBQUdsRCxVQUFVLENBQUMsS0FBRCxDQUF4QjtNQUNBLE1BQU00QyxPQUFPLEdBQUc1QyxVQUFVLENBQUMsSUFBRCxDQUExQjtNQUNBa0QsS0FBSyxDQUFDQyxHQUFOLENBQVVDLEtBQVY7TUFDQUYsS0FBSyxDQUFDRyxXQUFOLENBQWtCRCxLQUFsQjtNQUNBRixLQUFLLENBQUNJLGNBQU4sQ0FBcUJGLEtBQXJCO01BQ0FSLE9BQU8sQ0FBQ08sR0FBUixDQUFZQyxLQUFaO01BQ0FSLE9BQU8sQ0FBQ1MsV0FBUixDQUFvQkQsS0FBcEI7TUFDQVIsT0FBTyxDQUFDVSxjQUFSLENBQXVCRixLQUF2QjtNQUNBckQsVUFBVSxDQUFDcUQsS0FBWDtJQUNEOztJQUNELElBQUk7TUFDRixNQUFNLEtBQUtMLE9BQUwsQ0FBYSxVQUFiLEVBQXlCO1FBQzdCRSxNQUFNLEVBQUUsQ0FDTjtVQUNFSCxTQUFTLEVBQUVBO1FBRGIsQ0FETSxFQUlOO1VBQ0UsMkJBQTJCO1lBQ3pCdEMsVUFBVSxFQUFFLElBRGE7WUFFekJDLE9BQU8sRUFBRTtVQUZnQixDQUQ3QjtVQUtFLG9CQUFvQjtZQUNsQkQsVUFBVSxFQUFFLElBRE07WUFFbEJDLE9BQU8sRUFBRTtVQUZTLENBTHRCO1VBU0Usd0JBQXdCO1lBQ3RCRCxVQUFVLEVBQUUsSUFEVTtZQUV0QnlDLE1BQU0sRUFBRTtVQUZjO1FBVDFCLENBSk07TUFEcUIsQ0FBekIsQ0FBTjtJQXFCRCxDQXRCRCxDQXNCRSxNQUFNLENBQ047SUFDRDtFQUNGOztFQUVPLE1BQUZNLEVBQUUsQ0FDTmhDLE1BRE0sRUFFb0Q7SUFDMUQsT0FBTyxLQUFLaEIsSUFBTCxDQUFVZ0IsTUFBTSxJQUFLO01BQUVqQixhQUFhLEVBQUU7SUFBakIsQ0FBckIsQ0FBUDtFQUNEOztFQUVnQixhQUFKQyxJQUFJLENBQ2ZnQixNQURlLEVBRWZ1QixTQUZlLEVBRzJDO0lBQzFELE1BQU12QyxJQUFJLEdBQUcsTUFBTWUsT0FBTyxDQUFJO01BQzVCSyxNQUFNLEVBQUUsS0FBS3FCLGFBQUwsQ0FBbUJ6QixNQUFNLENBQUNzQixHQUExQixFQUErQkMsU0FBL0IsQ0FEb0I7TUFFNUJ6QyxNQUFNLEVBQUVrQixNQUFNLENBQUNsQixNQUFQLElBQWlCa0IsTUFBTSxDQUFDRSxTQUZKO01BRzVCbkIsYUFBYSxFQUFFaUIsTUFBTSxDQUFDakI7SUFITSxDQUFKLENBQTFCOztJQU1BLElBQUksQ0FBQ0MsSUFBTCxFQUFXO01BQ1QsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsSUFBSSxDQUFDQyxVQUFMLEtBQW9CLGVBQXhCLEVBQXlDO01BQ3ZDLE9BQU9ELElBQVA7SUFDRDs7SUFFRCxJQUFJQSxJQUFKLEVBQVU7TUFDUlIsVUFBVSxDQUFDeUQsR0FBWCxDQUFlakQsSUFBSSxDQUFDa0MsSUFBTCxDQUFVOUIsRUFBekIsRUFBNkJKLElBQUksQ0FBQ2tDLElBQWxDO0lBQ0Q7O0lBRUQsT0FBT2xDLElBQVA7RUFDRDs7RUFFUyxNQUFKQSxJQUFJLENBQ1JnQixNQURRLEVBRWtEO0lBQzFELE1BQU1oQixJQUFJLEdBQUcsTUFBTWUsT0FBTyxDQUFJO01BQzVCSyxNQUFNLEVBQUUsS0FBS29CLE9BRGU7TUFFNUIxQyxNQUFNLEVBQUVrQixNQUFNLENBQUNsQixNQUFQLElBQWlCa0IsTUFBTSxDQUFDRSxTQUZKO01BRzVCbkIsYUFBYSxFQUFFaUIsTUFBTSxDQUFDakI7SUFITSxDQUFKLENBQTFCOztJQU1BLElBQUksQ0FBQ0MsSUFBTCxFQUFXO01BQ1QsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsSUFBSSxDQUFDQyxVQUFMLEtBQW9CLGVBQXhCLEVBQXlDO01BQ3ZDLE9BQU9ELElBQVA7SUFDRDs7SUFFRCxJQUFJQSxJQUFKLEVBQVU7TUFDUlIsVUFBVSxDQUFDeUQsR0FBWCxDQUFlakQsSUFBSSxDQUFDa0MsSUFBTCxDQUFVOUIsRUFBekIsRUFBNkJKLElBQUksQ0FBQ2tDLElBQWxDO0lBQ0Q7O0lBRUQsT0FBT2xDLElBQVA7RUFDRDs7RUFFa0IsTUFBYmtELGFBQWEsT0FVakI7SUFBQSxJQVZrQjtNQUNsQjdDLFNBRGtCO01BRWxCQyxRQUZrQjtNQUdsQkM7SUFIa0IsQ0FVbEI7SUFDQSxNQUFNO01BQUUyQztJQUFGLElBQW9CLE1BQU0sS0FBS1YsT0FBTCxDQUFhLFVBQWIsRUFBeUI7TUFDdkRuQixPQUFPLEVBQUU7UUFDUEMsSUFBSSxFQUFFO1VBQ0pDLE1BQU0sRUFBR0MsQ0FBRCxJQUFnQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVGLENBQWYsQ0FEcEI7VUFFSkcsTUFBTSxFQUFHSCxDQUFELElBQWdCQyxJQUFJLENBQUNHLEtBQUwsQ0FBV0osQ0FBWDtRQUZwQixDQURDO1FBS1BLLFFBQVEsRUFBRTtVQUNSRixNQUFNLEVBQUdILENBQUQsSUFBZ0IsSUFBSU0sSUFBSixDQUFTTixDQUFULENBRGhCO1VBRVJELE1BQU0sRUFBR0MsQ0FBRCxJQUFpQkEsQ0FBRCxDQUFZTyxXQUFaO1FBRmhCLENBTEg7UUFTUEMsTUFBTSxFQUFFO1VBQ05MLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQlEsTUFBTSxDQUFDUixDQUFELENBRHhCO1VBRU5ELE1BQU0sRUFBR0MsQ0FBRCxJQUFpQkEsQ0FBRCxDQUFjUyxRQUFkO1FBRmxCO01BVEQ7SUFEOEMsQ0FBekIsRUFlN0I7TUFDRGlCLGFBQWEsRUFBRSxDQUNiO1FBQ0U3QyxTQURGO1FBRUVDLFFBRkY7UUFHRUM7TUFIRixDQURhLEVBTWI7UUFDRSwyQkFBMkI7VUFDekJOLFVBQVUsRUFBRSxJQURhO1VBRXpCQyxPQUFPLEVBQUU7UUFGZ0IsQ0FEN0I7UUFLRSx1QkFBdUI7VUFDckJELFVBQVUsRUFBRSxJQURTO1VBRXJCQyxPQUFPLEVBQUU7UUFGWSxDQUx6QjtRQVNFLCtCQUErQjtVQUM3QkQsVUFBVSxFQUFFLElBRGlCO1VBRTdCaUQsYUFBYSxFQUFFO1lBQ2I5QyxFQUFFLEVBQUUsSUFEUztZQUViQyxTQUFTLEVBQUUsSUFGRTtZQUdiQyxRQUFRLEVBQUUsSUFIRztZQUliQyxJQUFJLEVBQUUsSUFKTztZQUtiRyxLQUFLLEVBQUUsSUFMTTtZQU1iQyxLQUFLLEVBQUUsSUFOTTtZQU9iQyxJQUFJLEVBQUUsSUFQTztZQVFiQyxTQUFTLEVBQUUsSUFSRTtZQVNiQyxTQUFTLEVBQUU7VUFURTtRQUZjO01BVGpDLENBTmE7SUFEZCxDQWY2QixDQUFoQzs7SUFpREEsSUFBSSxDQUFDb0MsYUFBTCxFQUFvQjtNQUNsQixPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxhQUFhLENBQUNqRCxVQUFkLEtBQTZCLG1CQUFqQyxFQUFzRDtNQUNwRCxPQUFPaUQsYUFBUDtJQUNEOztJQUVELElBQUlBLGFBQWEsQ0FBQ2pELFVBQWQsS0FBNkIsZUFBakMsRUFBa0Q7TUFDaEQsT0FBT2lELGFBQVA7SUFDRDs7SUFFRCxJQUFJLENBQUNBLGFBQWEsQ0FBQ0EsYUFBbkIsRUFBa0M7TUFDaEMsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMakQsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUVnQixhQUFhLENBQUNBO0lBRmYsQ0FBUDtFQUlEOztFQUVtQyxhQUF2QkMsdUJBQXVCLFFBUWY7SUFBQSxJQVJnQjtNQUNuQ2IsR0FEbUM7TUFFbkNjLFFBRm1DO01BR25DQyxPQUFPLEdBQUczRCxhQUFhLENBQUM0RDtJQUhXLENBUWhCO0lBQ25CLE1BQU07TUFBRUg7SUFBRixJQUE4QixNQUFNaEIsVUFBVSxDQUFDTSxhQUFYLENBQXlCSCxHQUF6QixFQUN4QyxPQUR3QyxFQUV4QztNQUNBYSx1QkFBdUIsRUFBRSxDQUN2QjtRQUNFQyxRQURGO1FBRUVDO01BRkYsQ0FEdUIsRUFLdkI7UUFDRXBELFVBQVUsRUFBRSxJQURkO1FBRUUseUNBQXlDO1VBQ3ZDc0QsSUFBSSxFQUFFO1FBRGlDLENBRjNDO1FBS0UsdUJBQXVCO1VBQ3JCckQsT0FBTyxFQUFFO1FBRFk7TUFMekIsQ0FMdUI7SUFEekIsQ0FGd0MsQ0FBMUM7O0lBb0JBLElBQUksQ0FBQ2lELHVCQUFMLEVBQThCO01BQzVCLE9BQU8sS0FBUDtJQUNEOztJQUVELE9BQU9BLHVCQUF1QixDQUFDbEQsVUFBeEIsS0FDTCxpQ0FESyxHQUVIa0QsdUJBQXVCLENBQUNJLElBRnJCLEdBR0gsS0FISjtFQUlEOztFQUVXLE1BQU5DLE1BQU0sR0FPVjtJQUNBLE1BQU07TUFBRUE7SUFBRixJQUFhLE1BQU0sS0FBS2hCLE9BQUwsQ0FBYSxPQUFiLEVBQXNCO01BQzdDbkIsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRTtVQUNKQyxNQUFNLEVBQUdDLENBQUQsSUFBZ0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixDQUFmLENBRHBCO1VBRUpHLE1BQU0sRUFBR0gsQ0FBRCxJQUFnQkMsSUFBSSxDQUFDRyxLQUFMLENBQVdKLENBQVg7UUFGcEIsQ0FEQztRQUtQSyxRQUFRLEVBQUU7VUFDUkYsTUFBTSxFQUFHSCxDQUFELElBQWdCLElBQUlNLElBQUosQ0FBU04sQ0FBVCxDQURoQjtVQUVSRCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBWU8sV0FBWjtRQUZoQixDQUxIO1FBU1BDLE1BQU0sRUFBRTtVQUNOTCxNQUFNLEVBQUdILENBQUQsSUFBZ0JRLE1BQU0sQ0FBQ1IsQ0FBRCxDQUR4QjtVQUVORCxNQUFNLEVBQUdDLENBQUQsSUFBaUJBLENBQUQsQ0FBY1MsUUFBZDtRQUZsQjtNQVREO0lBRG9DLENBQXRCLEVBZXRCO01BQ0R1QixNQUFNLEVBQUU7UUFDTiwyQkFBMkI7VUFDekJ2RCxVQUFVLEVBQUUsSUFEYTtVQUV6QkMsT0FBTyxFQUFFO1FBRmdCLENBRHJCO1FBS04sb0JBQW9CO1VBQ2xCRCxVQUFVLEVBQUUsSUFETTtVQUVsQkMsT0FBTyxFQUFFO1FBRlMsQ0FMZDtRQVNOLHVCQUF1QjtVQUNyQkQsVUFBVSxFQUFFLElBRFM7VUFFckJDLE9BQU8sRUFBRTtRQUZZLENBVGpCO1FBYU4sdUJBQXVCO1VBQ3JCRCxVQUFVLEVBQUUsSUFEUztVQUVyQkMsT0FBTyxFQUFFO1FBRlksQ0FiakI7UUFpQk4scUJBQXFCO1VBQ25CRCxVQUFVLEVBQUUsSUFETztVQUVuQndELEtBQUssRUFBRTtZQUNMQyxJQUFJLEVBQUUsSUFERDtZQUVMQyxPQUFPLEVBQUUsSUFGSjtZQUdMQyxLQUFLLEVBQUUsSUFIRjtZQUlMQyxRQUFRLEVBQUU7VUFKTCxDQUZZO1VBUW5CQyxJQUFJLEVBQUU7WUFDSkMsUUFBUSxFQUFFO2NBQ1JILEtBQUssRUFBRSxJQURDO2NBRVJDLFFBQVEsRUFBRSxJQUZGO2NBR1JHLFNBQVMsRUFBRSxJQUhIO2NBSVJDLFlBQVksRUFBRSxJQUpOO2NBS1JDLFFBQVEsRUFBRSxJQUxGO2NBTVJDLFdBQVcsRUFBRTtZQU5MLENBRE47WUFTSkMsSUFBSSxFQUFFO2NBQ0pSLEtBQUssRUFBRSxJQURIO2NBRUpDLFFBQVEsRUFBRSxJQUZOO2NBR0pHLFNBQVMsRUFBRSxJQUhQO2NBSUpDLFlBQVksRUFBRSxJQUpWO2NBS0pDLFFBQVEsRUFBRSxJQUxOO2NBTUpDLFdBQVcsRUFBRTtZQU5UO1VBVEY7UUFSYTtNQWpCZjtJQURQLENBZnNCLENBQXpCOztJQStEQSxJQUFJLENBQUNYLE1BQUwsRUFBYTtNQUNYLE9BQU8sSUFBUDtJQUNEOztJQUVELElBQUlBLE1BQU0sQ0FBQ3ZELFVBQVAsS0FBc0IsbUJBQTFCLEVBQStDO01BQzdDLE9BQU91RCxNQUFQO0lBQ0Q7O0lBQ0QsSUFBSUEsTUFBTSxDQUFDdkQsVUFBUCxLQUFzQixlQUExQixFQUEyQztNQUN6QyxPQUFPdUQsTUFBUDtJQUNEOztJQUNELElBQUlBLE1BQU0sQ0FBQ3ZELFVBQVAsS0FBc0IsWUFBMUIsRUFBd0M7TUFDdEMsT0FBT3VELE1BQVA7SUFDRDs7SUFDRCxJQUFJQSxNQUFNLENBQUN2RCxVQUFQLEtBQXNCLGVBQTFCLEVBQTJDO01BQ3pDLE9BQU91RCxNQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMdkQsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUVzQjtJQUZELENBQVA7RUFJRDs7RUFFNkIsYUFBakJhLGlCQUFpQixRQVV1QztJQUFBLElBVnRDO01BQzdCQyxPQUQ2QjtNQUU3QkMsTUFGNkI7TUFHN0JqQyxHQUg2QjtNQUk3QkM7SUFKNkIsQ0FVc0M7SUFDbkUsTUFBTTtNQUFFaUM7SUFBRixJQUF1QixNQUFNckMsVUFBVSxDQUFDTSxhQUFYLENBQ2pDSCxHQURpQyxFQUVqQ0MsU0FGaUMsRUFHakMsVUFIaUMsRUFHckI7TUFDWmlDLGdCQUFnQixFQUFFLENBQ2hCO1FBQ0VGLE9BREY7UUFFRUMsTUFBTSxFQUFFOUMsSUFBSSxDQUFDQyxTQUFMLENBQWU2QyxNQUFmO01BRlYsQ0FEZ0IsRUFLaEI7UUFDRSwyQkFBMkI7VUFDekJ0RSxVQUFVLEVBQUUsSUFEYTtVQUV6QkMsT0FBTyxFQUFFO1FBRmdCLENBRDdCO1FBS0Usa0NBQWtDO1VBQ2hDRCxVQUFVLEVBQUUsSUFEb0I7VUFFaEN1RSxnQkFBZ0IsRUFBRTtRQUZjO01BTHBDLENBTGdCO0lBRE4sQ0FIcUIsQ0FBbkM7O0lBc0JBLElBQUksQ0FBQ0EsZ0JBQUwsRUFBdUI7TUFDckIsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsZ0JBQWdCLENBQUN2RSxVQUFqQixLQUFnQyxtQkFBcEMsRUFBeUQ7TUFDdkQsT0FBT3VFLGdCQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMdkUsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUVzQyxnQkFBZ0IsQ0FBQ0E7SUFGbEIsQ0FBUDtFQUlEOztFQUUwQixhQUFkQyxjQUFjLENBQ3pCSCxPQUR5QixFQUV6QmhDLEdBRnlCLEVBR3pCQyxTQUh5QixFQVV6QjtJQUNBLE1BQU07TUFBRW1DO0lBQUYsSUFBZSxNQUFNdkMsVUFBVSxDQUFDTSxhQUFYLENBQ3pCSCxHQUR5QixFQUV6QkMsU0FGeUIsRUFHekIsT0FIeUIsRUFHaEI7TUFDVG1DLFFBQVEsRUFBRSxDQUNSO1FBQ0VKO01BREYsQ0FEUSxFQUlSO1FBQ0UsMkJBQTJCO1VBQ3pCckUsVUFBVSxFQUFFLElBRGE7VUFFekJDLE9BQU8sRUFBRTtRQUZnQixDQUQ3QjtRQUtFLHVCQUF1QjtVQUNyQkQsVUFBVSxFQUFFLElBRFM7VUFFckJDLE9BQU8sRUFBRTtRQUZZLENBTHpCO1FBU0UsdUJBQXVCO1VBQ3JCRCxVQUFVLEVBQUUsSUFEUztVQUVyQkMsT0FBTyxFQUFFO1FBRlksQ0FUekI7UUFhRSwwQkFBMEI7VUFDeEJELFVBQVUsRUFBRSxJQURZO1VBRXhCMEUsSUFBSSxFQUFFO1FBRmtCO01BYjVCLENBSlE7SUFERCxDQUhnQixDQUEzQjs7SUE2QkEsSUFBSSxDQUFDRCxRQUFMLEVBQWU7TUFDYixPQUFPLElBQVA7SUFDRDs7SUFFRCxJQUFJQSxRQUFRLENBQUN6RSxVQUFULEtBQXdCLG1CQUE1QixFQUFpRDtNQUMvQyxPQUFPeUUsUUFBUDtJQUNEOztJQUVELElBQUlBLFFBQVEsQ0FBQ3pFLFVBQVQsS0FBd0IsZUFBNUIsRUFBNkM7TUFDM0MsT0FBT3lFLFFBQVA7SUFDRDs7SUFFRCxJQUFJQSxRQUFRLENBQUN6RSxVQUFULEtBQXdCLGVBQTVCLEVBQTZDO01BQzNDLE9BQU95RSxRQUFQO0lBQ0Q7O0lBRUQsT0FBTztNQUNMekUsVUFBVSxFQUFFLGlCQURQO01BRUxpQyxJQUFJLEVBQUV3QyxRQUFRLENBQUNDO0lBRlYsQ0FBUDtFQUlEOztFQUVlLE1BQVZDLFVBQVUsQ0FDZEMsY0FEYyxFQUVkQyxhQUZjLEVBS2Q7SUFDQSxNQUFNO01BQUVDO0lBQUYsSUFBaUIsTUFBTSxLQUFLdkMsT0FBTCxDQUFhLFVBQWIsRUFBeUI7TUFDcER1QyxVQUFVLEVBQUUsQ0FDVjtRQUNFRixjQURGO1FBRUVDO01BRkYsQ0FEVSxFQUtWO1FBQ0UsMkJBQTJCO1VBQ3pCN0UsVUFBVSxFQUFFLElBRGE7VUFFekJDLE9BQU8sRUFBRTtRQUZnQixDQUQ3QjtRQUtFLHVCQUF1QjtVQUNyQkQsVUFBVSxFQUFFLElBRFM7VUFFckJDLE9BQU8sRUFBRTtRQUZZLENBTHpCO1FBU0UsNEJBQTRCO1VBQzFCRCxVQUFVLEVBQUUsSUFEYztVQUUxQjhFLFVBQVUsRUFBRTtZQUNWM0UsRUFBRSxFQUFFLElBRE07WUFFVjBFLGFBQWEsRUFBRSxJQUZMO1lBR1Y5RSxJQUFJLEVBQUU7Y0FDSkksRUFBRSxFQUFFLElBREE7Y0FFSkMsU0FBUyxFQUFFLElBRlA7Y0FHSkMsUUFBUSxFQUFFLElBSE47Y0FJSkksS0FBSyxFQUFFO1lBSkgsQ0FISTtZQVNWc0UsWUFBWSxFQUFFO2NBQ1o1RSxFQUFFLEVBQUUsSUFEUTtjQUVaQyxTQUFTLEVBQUUsSUFGQztjQUdaQyxRQUFRLEVBQUUsSUFIRTtjQUlaSSxLQUFLLEVBQUU7WUFKSztVQVRKO1FBRmM7TUFUOUIsQ0FMVTtJQUR3QyxDQUF6QixDQUE3Qjs7SUFzQ0EsSUFBSSxDQUFDcUUsVUFBTCxFQUFpQjtNQUNmLE9BQU8sSUFBUDtJQUNEOztJQUVELElBQUlBLFVBQVUsQ0FBQzlFLFVBQVgsS0FBMEIsbUJBQTlCLEVBQW1EO01BQ2pELE9BQU84RSxVQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsVUFBVSxDQUFDOUUsVUFBWCxLQUEwQixlQUE5QixFQUErQztNQUM3QyxPQUFPOEUsVUFBUDtJQUNEOztJQUVELElBQUksQ0FBQ0EsVUFBVSxDQUFDQSxVQUFoQixFQUE0QjtNQUMxQixPQUFPLElBQVA7SUFDRDs7SUFFRCxPQUFPO01BQ0w5RSxVQUFVLEVBQUUsaUJBRFA7TUFFTGlDLElBQUksRUFBRTZDLFVBQVUsQ0FBQ0E7SUFGWixDQUFQO0VBSUQ7O0VBRXVCLE1BQWxCRSxrQkFBa0IsUUFJRztJQUFBLElBSkY7TUFDdkJDO0lBRHVCLENBSUU7SUFDekIsTUFBTWxDLEVBQUUsR0FBRyxNQUFNLEtBQUtBLEVBQUwsQ0FBUTtNQUFFakQsYUFBYSxFQUFFO0lBQWpCLENBQVIsQ0FBakI7O0lBRUEsSUFBSSxDQUFDaUQsRUFBTCxFQUFTO01BQ1AsT0FBTyxJQUFQO0lBQ0Q7O0lBRUQsSUFBSUEsRUFBRSxDQUFDL0MsVUFBSCxLQUFrQixlQUF0QixFQUF1QztNQUNyQyxPQUFPLElBQVA7SUFDRDs7SUFFRCxPQUFPVixPQUFPLENBQUM7TUFDYjRGLEdBQUcsRUFBRSxNQURRO01BRWJDLElBQUksRUFBRyxlQUFjQyxJQUFJLENBQUNyQyxFQUFFLENBQUNkLElBQUgsQ0FBUXhCLEtBQVQsQ0FBZ0IsT0FBTTJFLElBQUksQ0FBQ0gsT0FBRCxDQUFVO0lBRmhELENBQUQsQ0FBZDtFQUlEOztBQTNoQnFCOztBQUFYL0MsVSxDQUNZbUQsVSxHQUFhLFVBQ2xDaEQsR0FEa0MsRUFFbENpRCxRQUZrQyxFQUd2QjtFQUFBLElBRlhqRCxHQUVXO0lBRlhBLEdBRVcsR0FGTyxNQUVQO0VBQUE7O0VBQUEsSUFEWGlELFFBQ1c7SUFEWEEsUUFDVyxHQURBLElBQ0E7RUFBQTs7RUFDWCxNQUFNQyxNQUFNLEdBQUdDLE9BQU8sQ0FBQ25ELEdBQVIsQ0FBWW9ELDJCQUEzQjs7RUFDQSxJQUFJRixNQUFKLEVBQVk7SUFDVixPQUFPQSxNQUFQO0VBQ0Q7O0VBRUQsUUFBUWxELEdBQVI7SUFDRSxLQUFLLE1BQUw7TUFDRSxPQUFPaUQsUUFBUSxHQUNYLDhCQURXLEdBRVgsZ0NBRko7O0lBR0YsS0FBSyxLQUFMO0lBQ0E7TUFDRSxPQUFPLG9DQUFQO0VBUEo7QUFTRCxDOztBQW5CVXBELFUsQ0FxQktNLGEsR0FBZ0IsQ0FDOUJILEdBRDhCLEVBRTlCRCxPQUY4QixLQUk5QnpDLGFBQWEsQ0FBQ3VDLFVBQVUsQ0FBQ21ELFVBQVgsQ0FBc0JoRCxHQUF0QixDQUFELEVBQTZCRCxPQUE3QixDIn0=
@@ -13,5 +13,5 @@ declare type Options = {
13
13
  declare type Callback = (err?: Error, data?: unknown) => void;
14
14
  export declare function popup(url: string, name: string, options: Partial<Options>, callback: Callback): Window | null;
15
15
  export declare function popupWithPost(url: string, postData: Record<string, string>, name: string, options: Partial<Options>, callback: Callback): Window | null;
16
- export declare function popupResponse<T extends unknown>(data: T): string;
16
+ export declare function popupResponse<T>(id: string, data: T): string;
17
17
  export {};