@vendasta/social-posts 5.47.0 → 5.49.0

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 (67) hide show
  1. package/esm2020/lib/_internal/blog-website.api.service.mjs +40 -0
  2. package/esm2020/lib/_internal/drafts.api.service.mjs +82 -0
  3. package/esm2020/lib/_internal/enums/drafts-api.enum.mjs +20 -0
  4. package/esm2020/lib/_internal/enums/drafts.enum.mjs +27 -0
  5. package/esm2020/lib/_internal/enums/image-generation.enum.mjs +42 -0
  6. package/esm2020/lib/_internal/enums/index.mjs +8 -3
  7. package/esm2020/lib/_internal/enums/provisioning.enum.mjs +14 -0
  8. package/esm2020/lib/_internal/enums/social-content.enum.mjs +51 -0
  9. package/esm2020/lib/_internal/enums/stock-image.enum.mjs +10 -3
  10. package/esm2020/lib/_internal/image-generation.api.service.mjs +40 -0
  11. package/esm2020/lib/_internal/index.mjs +6 -1
  12. package/esm2020/lib/_internal/interfaces/blog-website-info.interface.mjs +8 -0
  13. package/esm2020/lib/_internal/interfaces/drafts-api.interface.mjs +2 -0
  14. package/esm2020/lib/_internal/interfaces/drafts.interface.mjs +8 -0
  15. package/esm2020/lib/_internal/interfaces/image-generation.interface.mjs +2 -0
  16. package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
  17. package/esm2020/lib/_internal/interfaces/provisioning.interface.mjs +8 -0
  18. package/esm2020/lib/_internal/interfaces/social-content.interface.mjs +2 -0
  19. package/esm2020/lib/_internal/interfaces/stock-image.interface.mjs +1 -1
  20. package/esm2020/lib/_internal/objects/blog-website-info.mjs +149 -0
  21. package/esm2020/lib/_internal/objects/drafts-api.mjs +628 -0
  22. package/esm2020/lib/_internal/objects/drafts.mjs +446 -0
  23. package/esm2020/lib/_internal/objects/image-generation.mjs +155 -0
  24. package/esm2020/lib/_internal/objects/index.mjs +8 -2
  25. package/esm2020/lib/_internal/objects/provisioning.mjs +43 -0
  26. package/esm2020/lib/_internal/objects/social-content.mjs +384 -0
  27. package/esm2020/lib/_internal/objects/stock-image.mjs +63 -5
  28. package/esm2020/lib/_internal/provisioning.api.service.mjs +38 -0
  29. package/esm2020/lib/_internal/social-content.api.service.mjs +40 -0
  30. package/esm2020/lib/drafts.service.mjs +46 -0
  31. package/esm2020/lib/index.mjs +2 -1
  32. package/fesm2015/vendasta-social-posts.mjs +2474 -211
  33. package/fesm2015/vendasta-social-posts.mjs.map +1 -1
  34. package/fesm2020/vendasta-social-posts.mjs +2474 -211
  35. package/fesm2020/vendasta-social-posts.mjs.map +1 -1
  36. package/lib/_internal/blog-website.api.service.d.ts +13 -0
  37. package/lib/_internal/drafts.api.service.d.ts +23 -0
  38. package/lib/_internal/enums/drafts-api.enum.d.ts +11 -0
  39. package/lib/_internal/enums/drafts.enum.d.ts +18 -0
  40. package/lib/_internal/enums/image-generation.enum.d.ts +30 -0
  41. package/lib/_internal/enums/index.d.ts +7 -2
  42. package/lib/_internal/enums/provisioning.enum.d.ts +6 -0
  43. package/lib/_internal/enums/social-content.enum.d.ts +39 -0
  44. package/lib/_internal/enums/stock-image.enum.d.ts +8 -2
  45. package/lib/_internal/image-generation.api.service.d.ts +13 -0
  46. package/lib/_internal/index.d.ts +5 -0
  47. package/lib/_internal/interfaces/blog-website-info.interface.d.ts +24 -0
  48. package/lib/_internal/interfaces/drafts-api.interface.d.ts +110 -0
  49. package/lib/_internal/interfaces/drafts.interface.d.ts +82 -0
  50. package/lib/_internal/interfaces/image-generation.interface.d.ts +28 -0
  51. package/lib/_internal/interfaces/index.d.ts +7 -1
  52. package/lib/_internal/interfaces/provisioning.interface.d.ts +8 -0
  53. package/lib/_internal/interfaces/social-content.interface.d.ts +71 -0
  54. package/lib/_internal/interfaces/stock-image.interface.d.ts +11 -2
  55. package/lib/_internal/objects/blog-website-info.d.ts +41 -0
  56. package/lib/_internal/objects/drafts-api.d.ts +163 -0
  57. package/lib/_internal/objects/drafts.d.ts +120 -0
  58. package/lib/_internal/objects/image-generation.d.ts +42 -0
  59. package/lib/_internal/objects/index.d.ts +7 -1
  60. package/lib/_internal/objects/provisioning.d.ts +13 -0
  61. package/lib/_internal/objects/social-content.d.ts +103 -0
  62. package/lib/_internal/objects/stock-image.d.ts +17 -2
  63. package/lib/_internal/provisioning.api.service.d.ts +14 -0
  64. package/lib/_internal/social-content.api.service.d.ts +13 -0
  65. package/lib/drafts.service.d.ts +20 -0
  66. package/lib/index.d.ts +1 -0
  67. package/package.json +1 -1
@@ -0,0 +1,628 @@
1
+ import { GMBPostCustomization, DraftMedia, DraftMetaData, DraftYoutubeCustomization, SSIDDraftType, DraftTikTokCustomization, DraftBlogPostCustomization, CampaignCustomization, Draft, MlDraftPost } from './drafts';
2
+ import * as e from '../enums';
3
+ export function enumStringToValue(enumRef, value) {
4
+ if (typeof value === 'number') {
5
+ return value;
6
+ }
7
+ return enumRef[value];
8
+ }
9
+ export class CreateDraftRequest {
10
+ static fromProto(proto) {
11
+ let m = new CreateDraftRequest();
12
+ m = Object.assign(m, proto);
13
+ if (proto.postDateTime) {
14
+ m.postDateTime = new Date(proto.postDateTime);
15
+ }
16
+ if (proto.gmbPostCustomization) {
17
+ m.gmbPostCustomization = GMBPostCustomization.fromProto(proto.gmbPostCustomization);
18
+ }
19
+ if (proto.media) {
20
+ m.media = proto.media.map(DraftMedia.fromProto);
21
+ }
22
+ if (proto.draftType) {
23
+ m.draftType = enumStringToValue(e.DraftType, proto.draftType);
24
+ }
25
+ if (proto.metadata) {
26
+ m.metadata = proto.metadata.map(DraftMetaData.fromProto);
27
+ }
28
+ if (proto.youtubeCustomization) {
29
+ m.youtubeCustomization = DraftYoutubeCustomization.fromProto(proto.youtubeCustomization);
30
+ }
31
+ if (proto.ssidDraftTypes) {
32
+ m.ssidDraftTypes = proto.ssidDraftTypes.map(SSIDDraftType.fromProto);
33
+ }
34
+ if (proto.tiktokCustomization) {
35
+ m.tiktokCustomization = DraftTikTokCustomization.fromProto(proto.tiktokCustomization);
36
+ }
37
+ if (proto.blogPostCustomization) {
38
+ m.blogPostCustomization = DraftBlogPostCustomization.fromProto(proto.blogPostCustomization);
39
+ }
40
+ if (proto.campaignCustomization) {
41
+ m.campaignCustomization = CampaignCustomization.fromProto(proto.campaignCustomization);
42
+ }
43
+ return m;
44
+ }
45
+ constructor(kwargs) {
46
+ if (!kwargs) {
47
+ return;
48
+ }
49
+ Object.assign(this, kwargs);
50
+ }
51
+ toApiJson() {
52
+ const toReturn = {};
53
+ if (typeof this.accountGroupId !== 'undefined') {
54
+ toReturn['accountGroupId'] = this.accountGroupId;
55
+ }
56
+ if (typeof this.draftText !== 'undefined') {
57
+ toReturn['draftText'] = this.draftText;
58
+ }
59
+ if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
60
+ toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? this.postDateTime.toApiJson() : this.postDateTime;
61
+ }
62
+ if (typeof this.gmbPostCustomization !== 'undefined' && this.gmbPostCustomization !== null) {
63
+ toReturn['gmbPostCustomization'] = 'toApiJson' in this.gmbPostCustomization ? this.gmbPostCustomization.toApiJson() : this.gmbPostCustomization;
64
+ }
65
+ if (typeof this.previews !== 'undefined') {
66
+ toReturn['previews'] = this.previews;
67
+ }
68
+ if (typeof this.options !== 'undefined') {
69
+ toReturn['options'] = this.options;
70
+ }
71
+ if (typeof this.media !== 'undefined' && this.media !== null) {
72
+ toReturn['media'] = 'toApiJson' in this.media ? this.media.toApiJson() : this.media;
73
+ }
74
+ if (typeof this.ssids !== 'undefined') {
75
+ toReturn['ssids'] = this.ssids;
76
+ }
77
+ if (typeof this.draftType !== 'undefined') {
78
+ toReturn['draftType'] = this.draftType;
79
+ }
80
+ if (typeof this.metadata !== 'undefined' && this.metadata !== null) {
81
+ toReturn['metadata'] = 'toApiJson' in this.metadata ? this.metadata.toApiJson() : this.metadata;
82
+ }
83
+ if (typeof this.youtubeCustomization !== 'undefined' && this.youtubeCustomization !== null) {
84
+ toReturn['youtubeCustomization'] = 'toApiJson' in this.youtubeCustomization ? this.youtubeCustomization.toApiJson() : this.youtubeCustomization;
85
+ }
86
+ if (typeof this.ssidDraftTypes !== 'undefined' && this.ssidDraftTypes !== null) {
87
+ toReturn['ssidDraftTypes'] = 'toApiJson' in this.ssidDraftTypes ? this.ssidDraftTypes.toApiJson() : this.ssidDraftTypes;
88
+ }
89
+ if (typeof this.isHidden !== 'undefined') {
90
+ toReturn['isHidden'] = this.isHidden;
91
+ }
92
+ if (typeof this.tiktokCustomization !== 'undefined' && this.tiktokCustomization !== null) {
93
+ toReturn['tiktokCustomization'] = 'toApiJson' in this.tiktokCustomization ? this.tiktokCustomization.toApiJson() : this.tiktokCustomization;
94
+ }
95
+ if (typeof this.blogPostCustomization !== 'undefined' && this.blogPostCustomization !== null) {
96
+ toReturn['blogPostCustomization'] = 'toApiJson' in this.blogPostCustomization ? this.blogPostCustomization.toApiJson() : this.blogPostCustomization;
97
+ }
98
+ if (typeof this.campaignCustomization !== 'undefined' && this.campaignCustomization !== null) {
99
+ toReturn['campaignCustomization'] = 'toApiJson' in this.campaignCustomization ? this.campaignCustomization.toApiJson() : this.campaignCustomization;
100
+ }
101
+ if (typeof this.brandId !== 'undefined') {
102
+ toReturn['brandId'] = this.brandId;
103
+ }
104
+ if (typeof this.multilocationPostId !== 'undefined') {
105
+ toReturn['multilocationPostId'] = this.multilocationPostId;
106
+ }
107
+ if (typeof this.socialNetworkIdentifier !== 'undefined') {
108
+ toReturn['socialNetworkIdentifier'] = this.socialNetworkIdentifier;
109
+ }
110
+ return toReturn;
111
+ }
112
+ }
113
+ export class CreateDraftResponse {
114
+ static fromProto(proto) {
115
+ let m = new CreateDraftResponse();
116
+ m = Object.assign(m, proto);
117
+ if (proto.draft) {
118
+ m.draft = Draft.fromProto(proto.draft);
119
+ }
120
+ return m;
121
+ }
122
+ constructor(kwargs) {
123
+ if (!kwargs) {
124
+ return;
125
+ }
126
+ Object.assign(this, kwargs);
127
+ }
128
+ toApiJson() {
129
+ const toReturn = {};
130
+ if (typeof this.draft !== 'undefined' && this.draft !== null) {
131
+ toReturn['draft'] = 'toApiJson' in this.draft ? this.draft.toApiJson() : this.draft;
132
+ }
133
+ return toReturn;
134
+ }
135
+ }
136
+ export class CreateMultiDraftsRequest {
137
+ static fromProto(proto) {
138
+ let m = new CreateMultiDraftsRequest();
139
+ m = Object.assign(m, proto);
140
+ if (proto.drafts) {
141
+ m.drafts = proto.drafts.map(CreateDraftRequest.fromProto);
142
+ }
143
+ return m;
144
+ }
145
+ constructor(kwargs) {
146
+ if (!kwargs) {
147
+ return;
148
+ }
149
+ Object.assign(this, kwargs);
150
+ }
151
+ toApiJson() {
152
+ const toReturn = {};
153
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
154
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
155
+ }
156
+ return toReturn;
157
+ }
158
+ }
159
+ export class CreateMultiDraftsResponse {
160
+ static fromProto(proto) {
161
+ let m = new CreateMultiDraftsResponse();
162
+ m = Object.assign(m, proto);
163
+ if (proto.drafts) {
164
+ m.drafts = proto.drafts.map(Draft.fromProto);
165
+ }
166
+ return m;
167
+ }
168
+ constructor(kwargs) {
169
+ if (!kwargs) {
170
+ return;
171
+ }
172
+ Object.assign(this, kwargs);
173
+ }
174
+ toApiJson() {
175
+ const toReturn = {};
176
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
177
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
178
+ }
179
+ return toReturn;
180
+ }
181
+ }
182
+ export class DeleteDraftRequest {
183
+ static fromProto(proto) {
184
+ let m = new DeleteDraftRequest();
185
+ m = Object.assign(m, proto);
186
+ return m;
187
+ }
188
+ constructor(kwargs) {
189
+ if (!kwargs) {
190
+ return;
191
+ }
192
+ Object.assign(this, kwargs);
193
+ }
194
+ toApiJson() {
195
+ const toReturn = {};
196
+ if (typeof this.accountGroupId !== 'undefined') {
197
+ toReturn['accountGroupId'] = this.accountGroupId;
198
+ }
199
+ if (typeof this.draftId !== 'undefined') {
200
+ toReturn['draftId'] = this.draftId;
201
+ }
202
+ return toReturn;
203
+ }
204
+ }
205
+ export class GetDraftRequest {
206
+ static fromProto(proto) {
207
+ let m = new GetDraftRequest();
208
+ m = Object.assign(m, proto);
209
+ return m;
210
+ }
211
+ constructor(kwargs) {
212
+ if (!kwargs) {
213
+ return;
214
+ }
215
+ Object.assign(this, kwargs);
216
+ }
217
+ toApiJson() {
218
+ const toReturn = {};
219
+ if (typeof this.accountGroupId !== 'undefined') {
220
+ toReturn['accountGroupId'] = this.accountGroupId;
221
+ }
222
+ if (typeof this.draftId !== 'undefined') {
223
+ toReturn['draftId'] = this.draftId;
224
+ }
225
+ return toReturn;
226
+ }
227
+ }
228
+ export class GetDraftResponse {
229
+ static fromProto(proto) {
230
+ let m = new GetDraftResponse();
231
+ m = Object.assign(m, proto);
232
+ if (proto.draft) {
233
+ m.draft = Draft.fromProto(proto.draft);
234
+ }
235
+ return m;
236
+ }
237
+ constructor(kwargs) {
238
+ if (!kwargs) {
239
+ return;
240
+ }
241
+ Object.assign(this, kwargs);
242
+ }
243
+ toApiJson() {
244
+ const toReturn = {};
245
+ if (typeof this.draft !== 'undefined' && this.draft !== null) {
246
+ toReturn['draft'] = 'toApiJson' in this.draft ? this.draft.toApiJson() : this.draft;
247
+ }
248
+ return toReturn;
249
+ }
250
+ }
251
+ export class ListDraftsByNetworkIdentifierRequest {
252
+ static fromProto(proto) {
253
+ let m = new ListDraftsByNetworkIdentifierRequest();
254
+ m = Object.assign(m, proto);
255
+ if (proto.pageSize) {
256
+ m.pageSize = parseInt(proto.pageSize, 10);
257
+ }
258
+ return m;
259
+ }
260
+ constructor(kwargs) {
261
+ if (!kwargs) {
262
+ return;
263
+ }
264
+ Object.assign(this, kwargs);
265
+ }
266
+ toApiJson() {
267
+ const toReturn = {};
268
+ if (typeof this.accountGroupId !== 'undefined') {
269
+ toReturn['accountGroupId'] = this.accountGroupId;
270
+ }
271
+ if (typeof this.socialNetworkIdentifier !== 'undefined') {
272
+ toReturn['socialNetworkIdentifier'] = this.socialNetworkIdentifier;
273
+ }
274
+ if (typeof this.cursor !== 'undefined') {
275
+ toReturn['cursor'] = this.cursor;
276
+ }
277
+ if (typeof this.pageSize !== 'undefined') {
278
+ toReturn['pageSize'] = this.pageSize;
279
+ }
280
+ return toReturn;
281
+ }
282
+ }
283
+ export class ListDraftsByNetworkIdentifierResponse {
284
+ static fromProto(proto) {
285
+ let m = new ListDraftsByNetworkIdentifierResponse();
286
+ m = Object.assign(m, proto);
287
+ if (proto.drafts) {
288
+ m.drafts = proto.drafts.map(Draft.fromProto);
289
+ }
290
+ return m;
291
+ }
292
+ constructor(kwargs) {
293
+ if (!kwargs) {
294
+ return;
295
+ }
296
+ Object.assign(this, kwargs);
297
+ }
298
+ toApiJson() {
299
+ const toReturn = {};
300
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
301
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
302
+ }
303
+ if (typeof this.nextCursor !== 'undefined') {
304
+ toReturn['nextCursor'] = this.nextCursor;
305
+ }
306
+ if (typeof this.hasMore !== 'undefined') {
307
+ toReturn['hasMore'] = this.hasMore;
308
+ }
309
+ return toReturn;
310
+ }
311
+ }
312
+ export class ListDraftsRequest {
313
+ static fromProto(proto) {
314
+ let m = new ListDraftsRequest();
315
+ m = Object.assign(m, proto);
316
+ if (proto.pageSize) {
317
+ m.pageSize = parseInt(proto.pageSize, 10);
318
+ }
319
+ if (proto.start) {
320
+ m.start = new Date(proto.start);
321
+ }
322
+ if (proto.end) {
323
+ m.end = new Date(proto.end);
324
+ }
325
+ if (proto.visibilityType) {
326
+ m.visibilityType = enumStringToValue(e.VisibilityType, proto.visibilityType);
327
+ }
328
+ if (proto.filterBy) {
329
+ m.filterBy = enumStringToValue(e.FilterBy, proto.filterBy);
330
+ }
331
+ return m;
332
+ }
333
+ constructor(kwargs) {
334
+ if (!kwargs) {
335
+ return;
336
+ }
337
+ Object.assign(this, kwargs);
338
+ }
339
+ toApiJson() {
340
+ const toReturn = {};
341
+ if (typeof this.accountGroupId !== 'undefined') {
342
+ toReturn['accountGroupId'] = this.accountGroupId;
343
+ }
344
+ if (typeof this.cursor !== 'undefined') {
345
+ toReturn['cursor'] = this.cursor;
346
+ }
347
+ if (typeof this.pageSize !== 'undefined') {
348
+ toReturn['pageSize'] = this.pageSize;
349
+ }
350
+ if (typeof this.start !== 'undefined' && this.start !== null) {
351
+ toReturn['start'] = 'toApiJson' in this.start ? this.start.toApiJson() : this.start;
352
+ }
353
+ if (typeof this.end !== 'undefined' && this.end !== null) {
354
+ toReturn['end'] = 'toApiJson' in this.end ? this.end.toApiJson() : this.end;
355
+ }
356
+ if (typeof this.searchTerm !== 'undefined') {
357
+ toReturn['searchTerm'] = this.searchTerm;
358
+ }
359
+ if (typeof this.networks !== 'undefined') {
360
+ toReturn['networks'] = this.networks;
361
+ }
362
+ if (typeof this.visibilityType !== 'undefined') {
363
+ toReturn['visibilityType'] = this.visibilityType;
364
+ }
365
+ if (typeof this.filterBy !== 'undefined') {
366
+ toReturn['filterBy'] = this.filterBy;
367
+ }
368
+ return toReturn;
369
+ }
370
+ }
371
+ export class ListDraftsResponse {
372
+ static fromProto(proto) {
373
+ let m = new ListDraftsResponse();
374
+ m = Object.assign(m, proto);
375
+ if (proto.drafts) {
376
+ m.drafts = proto.drafts.map(Draft.fromProto);
377
+ }
378
+ return m;
379
+ }
380
+ constructor(kwargs) {
381
+ if (!kwargs) {
382
+ return;
383
+ }
384
+ Object.assign(this, kwargs);
385
+ }
386
+ toApiJson() {
387
+ const toReturn = {};
388
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
389
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
390
+ }
391
+ if (typeof this.nextCursor !== 'undefined') {
392
+ toReturn['nextCursor'] = this.nextCursor;
393
+ }
394
+ if (typeof this.hasMore !== 'undefined') {
395
+ toReturn['hasMore'] = this.hasMore;
396
+ }
397
+ return toReturn;
398
+ }
399
+ }
400
+ export class ListMultilocationDraftsRequest {
401
+ static fromProto(proto) {
402
+ let m = new ListMultilocationDraftsRequest();
403
+ m = Object.assign(m, proto);
404
+ return m;
405
+ }
406
+ constructor(kwargs) {
407
+ if (!kwargs) {
408
+ return;
409
+ }
410
+ Object.assign(this, kwargs);
411
+ }
412
+ toApiJson() {
413
+ const toReturn = {};
414
+ if (typeof this.brandId !== 'undefined') {
415
+ toReturn['brandId'] = this.brandId;
416
+ }
417
+ if (typeof this.multilocationPostId !== 'undefined') {
418
+ toReturn['multilocationPostId'] = this.multilocationPostId;
419
+ }
420
+ if (typeof this.accountGroupIds !== 'undefined') {
421
+ toReturn['accountGroupIds'] = this.accountGroupIds;
422
+ }
423
+ return toReturn;
424
+ }
425
+ }
426
+ export class ListMultilocationDraftsResponse {
427
+ static fromProto(proto) {
428
+ let m = new ListMultilocationDraftsResponse();
429
+ m = Object.assign(m, proto);
430
+ if (proto.drafts) {
431
+ m.drafts = proto.drafts.map(Draft.fromProto);
432
+ }
433
+ return m;
434
+ }
435
+ constructor(kwargs) {
436
+ if (!kwargs) {
437
+ return;
438
+ }
439
+ Object.assign(this, kwargs);
440
+ }
441
+ toApiJson() {
442
+ const toReturn = {};
443
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
444
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
445
+ }
446
+ return toReturn;
447
+ }
448
+ }
449
+ export class MultiDeleteMLDraftPostsRequest {
450
+ static fromProto(proto) {
451
+ let m = new MultiDeleteMLDraftPostsRequest();
452
+ m = Object.assign(m, proto);
453
+ if (proto.mlDraftPosts) {
454
+ m.mlDraftPosts = proto.mlDraftPosts.map(MlDraftPost.fromProto);
455
+ }
456
+ return m;
457
+ }
458
+ constructor(kwargs) {
459
+ if (!kwargs) {
460
+ return;
461
+ }
462
+ Object.assign(this, kwargs);
463
+ }
464
+ toApiJson() {
465
+ const toReturn = {};
466
+ if (typeof this.mlDraftPosts !== 'undefined' && this.mlDraftPosts !== null) {
467
+ toReturn['mlDraftPosts'] = 'toApiJson' in this.mlDraftPosts ? this.mlDraftPosts.toApiJson() : this.mlDraftPosts;
468
+ }
469
+ if (typeof this.brandId !== 'undefined') {
470
+ toReturn['brandId'] = this.brandId;
471
+ }
472
+ return toReturn;
473
+ }
474
+ }
475
+ export class UpdateDraftRequest {
476
+ static fromProto(proto) {
477
+ let m = new UpdateDraftRequest();
478
+ m = Object.assign(m, proto);
479
+ if (proto.postDateTime) {
480
+ m.postDateTime = new Date(proto.postDateTime);
481
+ }
482
+ if (proto.gmbPostCustomization) {
483
+ m.gmbPostCustomization = GMBPostCustomization.fromProto(proto.gmbPostCustomization);
484
+ }
485
+ if (proto.media) {
486
+ m.media = proto.media.map(DraftMedia.fromProto);
487
+ }
488
+ if (proto.draftType) {
489
+ m.draftType = enumStringToValue(e.DraftType, proto.draftType);
490
+ }
491
+ if (proto.metadata) {
492
+ m.metadata = proto.metadata.map(DraftMetaData.fromProto);
493
+ }
494
+ if (proto.youtubeCustomization) {
495
+ m.youtubeCustomization = DraftYoutubeCustomization.fromProto(proto.youtubeCustomization);
496
+ }
497
+ if (proto.ssidDraftTypes) {
498
+ m.ssidDraftTypes = proto.ssidDraftTypes.map(SSIDDraftType.fromProto);
499
+ }
500
+ if (proto.tiktokCustomization) {
501
+ m.tiktokCustomization = DraftTikTokCustomization.fromProto(proto.tiktokCustomization);
502
+ }
503
+ if (proto.blogPostCustomization) {
504
+ m.blogPostCustomization = DraftBlogPostCustomization.fromProto(proto.blogPostCustomization);
505
+ }
506
+ if (proto.campaignCustomization) {
507
+ m.campaignCustomization = CampaignCustomization.fromProto(proto.campaignCustomization);
508
+ }
509
+ return m;
510
+ }
511
+ constructor(kwargs) {
512
+ if (!kwargs) {
513
+ return;
514
+ }
515
+ Object.assign(this, kwargs);
516
+ }
517
+ toApiJson() {
518
+ const toReturn = {};
519
+ if (typeof this.accountGroupId !== 'undefined') {
520
+ toReturn['accountGroupId'] = this.accountGroupId;
521
+ }
522
+ if (typeof this.draftId !== 'undefined') {
523
+ toReturn['draftId'] = this.draftId;
524
+ }
525
+ if (typeof this.draftText !== 'undefined') {
526
+ toReturn['draftText'] = this.draftText;
527
+ }
528
+ if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
529
+ toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? this.postDateTime.toApiJson() : this.postDateTime;
530
+ }
531
+ if (typeof this.gmbPostCustomization !== 'undefined' && this.gmbPostCustomization !== null) {
532
+ toReturn['gmbPostCustomization'] = 'toApiJson' in this.gmbPostCustomization ? this.gmbPostCustomization.toApiJson() : this.gmbPostCustomization;
533
+ }
534
+ if (typeof this.previews !== 'undefined') {
535
+ toReturn['previews'] = this.previews;
536
+ }
537
+ if (typeof this.options !== 'undefined') {
538
+ toReturn['options'] = this.options;
539
+ }
540
+ if (typeof this.media !== 'undefined' && this.media !== null) {
541
+ toReturn['media'] = 'toApiJson' in this.media ? this.media.toApiJson() : this.media;
542
+ }
543
+ if (typeof this.ssids !== 'undefined') {
544
+ toReturn['ssids'] = this.ssids;
545
+ }
546
+ if (typeof this.draftType !== 'undefined') {
547
+ toReturn['draftType'] = this.draftType;
548
+ }
549
+ if (typeof this.metadata !== 'undefined' && this.metadata !== null) {
550
+ toReturn['metadata'] = 'toApiJson' in this.metadata ? this.metadata.toApiJson() : this.metadata;
551
+ }
552
+ if (typeof this.youtubeCustomization !== 'undefined' && this.youtubeCustomization !== null) {
553
+ toReturn['youtubeCustomization'] = 'toApiJson' in this.youtubeCustomization ? this.youtubeCustomization.toApiJson() : this.youtubeCustomization;
554
+ }
555
+ if (typeof this.ssidDraftTypes !== 'undefined' && this.ssidDraftTypes !== null) {
556
+ toReturn['ssidDraftTypes'] = 'toApiJson' in this.ssidDraftTypes ? this.ssidDraftTypes.toApiJson() : this.ssidDraftTypes;
557
+ }
558
+ if (typeof this.isHidden !== 'undefined') {
559
+ toReturn['isHidden'] = this.isHidden;
560
+ }
561
+ if (typeof this.tiktokCustomization !== 'undefined' && this.tiktokCustomization !== null) {
562
+ toReturn['tiktokCustomization'] = 'toApiJson' in this.tiktokCustomization ? this.tiktokCustomization.toApiJson() : this.tiktokCustomization;
563
+ }
564
+ if (typeof this.blogPostCustomization !== 'undefined' && this.blogPostCustomization !== null) {
565
+ toReturn['blogPostCustomization'] = 'toApiJson' in this.blogPostCustomization ? this.blogPostCustomization.toApiJson() : this.blogPostCustomization;
566
+ }
567
+ if (typeof this.campaignCustomization !== 'undefined' && this.campaignCustomization !== null) {
568
+ toReturn['campaignCustomization'] = 'toApiJson' in this.campaignCustomization ? this.campaignCustomization.toApiJson() : this.campaignCustomization;
569
+ }
570
+ if (typeof this.brandId !== 'undefined') {
571
+ toReturn['brandId'] = this.brandId;
572
+ }
573
+ if (typeof this.multilocationPostId !== 'undefined') {
574
+ toReturn['multilocationPostId'] = this.multilocationPostId;
575
+ }
576
+ if (typeof this.socialNetworkIdentifier !== 'undefined') {
577
+ toReturn['socialNetworkIdentifier'] = this.socialNetworkIdentifier;
578
+ }
579
+ return toReturn;
580
+ }
581
+ }
582
+ export class UpdateDraftResponse {
583
+ static fromProto(proto) {
584
+ let m = new UpdateDraftResponse();
585
+ m = Object.assign(m, proto);
586
+ if (proto.draft) {
587
+ m.draft = Draft.fromProto(proto.draft);
588
+ }
589
+ return m;
590
+ }
591
+ constructor(kwargs) {
592
+ if (!kwargs) {
593
+ return;
594
+ }
595
+ Object.assign(this, kwargs);
596
+ }
597
+ toApiJson() {
598
+ const toReturn = {};
599
+ if (typeof this.draft !== 'undefined' && this.draft !== null) {
600
+ toReturn['draft'] = 'toApiJson' in this.draft ? this.draft.toApiJson() : this.draft;
601
+ }
602
+ return toReturn;
603
+ }
604
+ }
605
+ export class UpdateMultiMLDraftsRequest {
606
+ static fromProto(proto) {
607
+ let m = new UpdateMultiMLDraftsRequest();
608
+ m = Object.assign(m, proto);
609
+ if (proto.drafts) {
610
+ m.drafts = proto.drafts.map(UpdateDraftRequest.fromProto);
611
+ }
612
+ return m;
613
+ }
614
+ constructor(kwargs) {
615
+ if (!kwargs) {
616
+ return;
617
+ }
618
+ Object.assign(this, kwargs);
619
+ }
620
+ toApiJson() {
621
+ const toReturn = {};
622
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
623
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
624
+ }
625
+ return toReturn;
626
+ }
627
+ }
628
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnRzLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NvY2lhbF9wb3N0c19zZGsvc3JjL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9kcmFmdHMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ROLE9BQU8sS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFxQjNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDakMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUU7WUFBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQUM7UUFDdEgsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQUMs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LEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQUM7UUFDOUUsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsWUFBWSxNQUE4QztRQUN0RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxNQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUNuSyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBHTUJQb3N0Q3VzdG9taXphdGlvbiwgRHJhZnRNZWRpYSwgRHJhZnRNZXRhRGF0YSwgRHJhZnRZb3V0dWJlQ3VzdG9taXphdGlvbiwgU1NJRERyYWZ0VHlwZSwgRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uLCBEcmFmdEJsb2dQb3N0Q3VzdG9taXphdGlvbiwgQ2FtcGFpZ25DdXN0b21pemF0aW9uLCBEcmFmdCwgTWxEcmFmdFBvc3QgfSBmcm9tICcuL2RyYWZ0cyc7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVEcmFmdFJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZURyYWZ0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBkcmFmdFRleHQ6IHN0cmluZztcbiAgICBwb3N0RGF0ZVRpbWU6IERhdGU7XG4gICAgZ21iUG9zdEN1c3RvbWl6YXRpb246IEdNQlBvc3RDdXN0b21pemF0aW9uO1xuICAgIHByZXZpZXdzOiBzdHJpbmc7XG4gICAgb3B0aW9uczogc3RyaW5nW107XG4gICAgbWVkaWE6IERyYWZ0TWVkaWFbXTtcbiAgICBzc2lkczogc3RyaW5nW107XG4gICAgZHJhZnRUeXBlOiBlLkRyYWZ0VHlwZTtcbiAgICBtZXRhZGF0YTogRHJhZnRNZXRhRGF0YVtdO1xuICAgIHlvdXR1YmVDdXN0b21pemF0aW9uOiBEcmFmdFlvdXR1YmVDdXN0b21pemF0aW9uO1xuICAgIHNzaWREcmFmdFR5cGVzOiBTU0lERHJhZnRUeXBlW107XG4gICAgaXNIaWRkZW46IGJvb2xlYW47XG4gICAgdGlrdG9rQ3VzdG9taXphdGlvbjogRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uO1xuICAgIGJsb2dQb3N0Q3VzdG9taXphdGlvbjogRHJhZnRCbG9nUG9zdEN1c3RvbWl6YXRpb247XG4gICAgY2FtcGFpZ25DdXN0b21pemF0aW9uOiBDYW1wYWlnbkN1c3RvbWl6YXRpb247XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25Qb3N0SWQ6IHN0cmluZztcbiAgICBzb2NpYWxOZXR3b3JrSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlRHJhZnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlRHJhZnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBvc3REYXRlVGltZSkge20ucG9zdERhdGVUaW1lID0gbmV3IERhdGUocHJvdG8ucG9zdERhdGVUaW1lKTt9XG4gICAgICAgIGlmIChwcm90by5nbWJQb3N0Q3VzdG9taXphdGlvbikge20uZ21iUG9zdEN1c3RvbWl6YXRpb24gPSBHTUJQb3N0Q3VzdG9taXphdGlvbi5mcm9tUHJvdG8ocHJvdG8uZ21iUG9zdEN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLm1lZGlhKSB7bS5tZWRpYSA9IHByb3RvLm1lZGlhLm1hcChEcmFmdE1lZGlhLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZHJhZnRUeXBlKSB7bS5kcmFmdFR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkRyYWZ0VHlwZT4oZS5EcmFmdFR5cGUsIHByb3RvLmRyYWZ0VHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gcHJvdG8ubWV0YWRhdGEubWFwKERyYWZ0TWV0YURhdGEuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by55b3V0dWJlQ3VzdG9taXphdGlvbikge20ueW91dHViZUN1c3RvbWl6YXRpb24gPSBEcmFmdFlvdXR1YmVDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by55b3V0dWJlQ3VzdG9taXphdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uc3NpZERyYWZ0VHlwZXMpIHttLnNzaWREcmFmdFR5cGVzID0gcHJvdG8uc3NpZERyYWZ0VHlwZXMubWFwKFNTSUREcmFmdFR5cGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by50aWt0b2tDdXN0b21pemF0aW9uKSB7bS50aWt0b2tDdXN0b21pemF0aW9uID0gRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by50aWt0b2tDdXN0b21pemF0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5ibG9nUG9zdEN1c3RvbWl6YXRpb24pIHttLmJsb2dQb3N0Q3VzdG9taXphdGlvbiA9IERyYWZ0QmxvZ1Bvc3RDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by5ibG9nUG9zdEN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmNhbXBhaWduQ3VzdG9taXphdGlvbikge20uY2FtcGFpZ25DdXN0b21pemF0aW9uID0gQ2FtcGFpZ25DdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by5jYW1wYWlnbkN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVEcmFmdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRUZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkcmFmdFRleHQnXSA9IHRoaXMuZHJhZnRUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3REYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0RGF0ZVRpbWUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdERhdGVUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3REYXRlVGltZSA/ICh0aGlzLnBvc3REYXRlVGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0RGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gPyAodGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2aWV3cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJldmlld3MnXSA9IHRoaXMucHJldmlld3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3B0aW9ucyddID0gdGhpcy5vcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZGlhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZGlhICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZGlhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lZGlhID8gKHRoaXMubWVkaWEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3NpZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NzaWRzJ10gPSB0aGlzLnNzaWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0VHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHJhZnRUeXBlJ10gPSB0aGlzLmRyYWZ0VHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ3lvdXR1YmVDdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uID8gKHRoaXMueW91dHViZUN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMueW91dHViZUN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3NpZERyYWZ0VHlwZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3NpZERyYWZ0VHlwZXMgIT09IG51bGwpIHt0b1JldHVyblsnc3NpZERyYWZ0VHlwZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3NpZERyYWZ0VHlwZXMgPyAodGhpcy5zc2lkRHJhZnRUeXBlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zc2lkRHJhZnRUeXBlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNIaWRkZW4nXSA9IHRoaXMuaXNIaWRkZW47fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aWt0b2tDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rpa3Rva0N1c3RvbWl6YXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbiA/ICh0aGlzLnRpa3Rva0N1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Jsb2dQb3N0Q3VzdG9taXphdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gPyAodGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY2FtcGFpZ25DdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiA/ICh0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0SWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvblBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxOZXR3b3JrSWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsTmV0d29ya0lkZW50aWZpZXInXSA9IHRoaXMuc29jaWFsTmV0d29ya0lkZW50aWZpZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlRHJhZnRSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlRHJhZnRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZHJhZnQ6IERyYWZ0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlRHJhZnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZURyYWZ0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnQpIHttLmRyYWZ0ID0gRHJhZnQuZnJvbVByb3RvKHByb3RvLmRyYWZ0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlRHJhZnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RyYWZ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRyYWZ0ID8gKHRoaXMuZHJhZnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHJhZnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTXVsdGlEcmFmdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGRyYWZ0czogQ3JlYXRlRHJhZnRSZXF1ZXN0W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnRzKSB7bS5kcmFmdHMgPSBwcm90by5kcmFmdHMubWFwKENyZWF0ZURyYWZ0UmVxdWVzdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZHJhZnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RyYWZ0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kcmFmdHMgPyAodGhpcy5kcmFmdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHJhZnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU11bHRpRHJhZnRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZU11bHRpRHJhZnRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRyYWZ0czogRHJhZnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU11bHRpRHJhZnRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNdWx0aURyYWZ0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRyYWZ0cykge20uZHJhZnRzID0gcHJvdG8uZHJhZnRzLm1hcChEcmFmdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNdWx0aURyYWZ0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHJhZnRzID8gKHRoaXMuZHJhZnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVEcmFmdFJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZURyYWZ0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBkcmFmdElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVEcmFmdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVEcmFmdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZURyYWZ0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkcmFmdElkJ10gPSB0aGlzLmRyYWZ0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0RHJhZnRSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXREcmFmdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0RHJhZnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0RHJhZnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXREcmFmdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHJhZnRJZCddID0gdGhpcy5kcmFmdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldERyYWZ0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldERyYWZ0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRyYWZ0OiBEcmFmdDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldERyYWZ0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXREcmFmdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRyYWZ0KSB7bS5kcmFmdCA9IERyYWZ0LmZyb21Qcm90byhwcm90by5kcmFmdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldERyYWZ0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kcmFmdCAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kcmFmdCA/ICh0aGlzLmRyYWZ0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHNvY2lhbE5ldHdvcmtJZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0RHJhZnRzQnlOZXR3b3JrSWRlbnRpZmllclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsTmV0d29ya0lkZW50aWZpZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbE5ldHdvcmtJZGVudGlmaWVyJ10gPSB0aGlzLnNvY2lhbE5ldHdvcmtJZGVudGlmaWVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZHJhZnRzOiBEcmFmdFtdO1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnRzKSB7bS5kcmFmdHMgPSBwcm90by5kcmFmdHMubWFwKERyYWZ0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZHJhZnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RyYWZ0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kcmFmdHMgPyAodGhpcy5kcmFmdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHJhZnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdERyYWZ0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3REcmFmdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIHNlYXJjaFRlcm06IHN0cmluZztcbiAgICBuZXR3b3Jrczogc3RyaW5nW107XG4gICAgdmlzaWJpbGl0eVR5cGU6IGUuVmlzaWJpbGl0eVR5cGU7XG4gICAgZmlsdGVyQnk6IGUuRmlsdGVyQnk7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0RHJhZnRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3REcmFmdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RhcnQpIHttLnN0YXJ0ID0gbmV3IERhdGUocHJvdG8uc3RhcnQpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZCkge20uZW5kID0gbmV3IERhdGUocHJvdG8uZW5kKTt9XG4gICAgICAgIGlmIChwcm90by52aXNpYmlsaXR5VHlwZSkge20udmlzaWJpbGl0eVR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlZpc2liaWxpdHlUeXBlPihlLlZpc2liaWxpdHlUeXBlLCBwcm90by52aXNpYmlsaXR5VHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8uZmlsdGVyQnkpIHttLmZpbHRlckJ5ID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5GaWx0ZXJCeT4oZS5GaWx0ZXJCeSwgcHJvdG8uZmlsdGVyQnkpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0RHJhZnRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnNvciddID0gdGhpcy5jdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFnZVNpemUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhZ2VTaXplJ10gPSB0aGlzLnBhZ2VTaXplO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXJ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnN0YXJ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ3N0YXJ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXJ0ID8gKHRoaXMuc3RhcnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3RhcnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW5kICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVuZCAhPT0gbnVsbCkge3RvUmV0dXJuWydlbmQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZW5kID8gKHRoaXMuZW5kIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVuZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2hUZXJtICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzZWFyY2hUZXJtJ10gPSB0aGlzLnNlYXJjaFRlcm07fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV0d29ya3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25ldHdvcmtzJ10gPSB0aGlzLm5ldHdvcmtzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZpc2liaWxpdHlUeXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aXNpYmlsaXR5VHlwZSddID0gdGhpcy52aXNpYmlsaXR5VHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWx0ZXJCeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZmlsdGVyQnknXSA9IHRoaXMuZmlsdGVyQnk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdERyYWZ0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0RHJhZnRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRyYWZ0czogRHJhZnRbXTtcbiAgICBuZXh0Q3Vyc29yOiBzdHJpbmc7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3REcmFmdHNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3REcmFmdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kcmFmdHMpIHttLmRyYWZ0cyA9IHByb3RvLmRyYWZ0cy5tYXAoRHJhZnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdERyYWZ0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHJhZnRzID8gKHRoaXMuZHJhZnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uZXh0Q3Vyc29yICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduZXh0Q3Vyc29yJ10gPSB0aGlzLm5leHRDdXJzb3I7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFzTW9yZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzTW9yZSddID0gdGhpcy5oYXNNb3JlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RNdWx0aWxvY2F0aW9uRHJhZnRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdE11bHRpbG9jYXRpb25EcmFmdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvblBvc3RJZDogc3RyaW5nO1xuICAgIGFjY291bnRHcm91cElkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RNdWx0aWxvY2F0aW9uRHJhZnRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uUG9zdElkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZHMnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RNdWx0aWxvY2F0aW9uRHJhZnRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RNdWx0aWxvY2F0aW9uRHJhZnRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRyYWZ0czogRHJhZnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RNdWx0aWxvY2F0aW9uRHJhZnRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRyYWZ0cykge20uZHJhZnRzID0gcHJvdG8uZHJhZnRzLm1hcChEcmFmdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHJhZnRzID8gKHRoaXMuZHJhZnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aURlbGV0ZU1MRHJhZnRQb3N0c1JlcXVlc3QgaW1wbGVtZW50cyBpLk11bHRpRGVsZXRlTUxEcmFmdFBvc3RzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWxEcmFmdFBvc3RzOiBNbERyYWZ0UG9zdFtdO1xuICAgIGJyYW5kSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE11bHRpRGVsZXRlTUxEcmFmdFBvc3RzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IE11bHRpRGVsZXRlTUxEcmFmdFBvc3RzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tbERyYWZ0UG9zdHMpIHttLm1sRHJhZnRQb3N0cyA9IHByb3RvLm1sRHJhZnRQb3N0cy5tYXAoTWxEcmFmdFBvc3QuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTXVsdGlEZWxldGVNTERyYWZ0UG9zdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWxEcmFmdFBvc3RzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1sRHJhZnRQb3N0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydtbERyYWZ0UG9zdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWxEcmFmdFBvc3RzID8gKHRoaXMubWxEcmFmdFBvc3RzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1sRHJhZnRQb3N0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRHJhZnRSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVEcmFmdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGRyYWZ0VGV4dDogc3RyaW5nO1xuICAgIHBvc3REYXRlVGltZTogRGF0ZTtcbiAgICBnbWJQb3N0Q3VzdG9taXphdGlvbjogR01CUG9zdEN1c3RvbWl6YXRpb247XG4gICAgcHJldmlld3M6IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICBtZWRpYTogRHJhZnRNZWRpYVtdO1xuICAgIHNzaWRzOiBzdHJpbmdbXTtcbiAgICBkcmFmdFR5cGU6IGUuRHJhZnRUeXBlO1xuICAgIG1ldGFkYXRhOiBEcmFmdE1ldGFEYXRhW107XG4gICAgeW91dHViZUN1c3RvbWl6YXRpb246IERyYWZ0WW91dHViZUN1c3RvbWl6YXRpb247XG4gICAgc3NpZERyYWZ0VHlwZXM6IFNTSUREcmFmdFR5cGVbXTtcbiAgICBpc0hpZGRlbjogYm9vbGVhbjtcbiAgICB0aWt0b2tDdXN0b21pemF0aW9uOiBEcmFmdFRpa1Rva0N1c3RvbWl6YXRpb247XG4gICAgYmxvZ1Bvc3RDdXN0b21pemF0aW9uOiBEcmFmdEJsb2dQb3N0Q3VzdG9taXphdGlvbjtcbiAgICBjYW1wYWlnbkN1c3RvbWl6YXRpb246IENhbXBhaWduQ3VzdG9taXphdGlvbjtcbiAgICBicmFuZElkOiBzdHJpbmc7XG4gICAgbXVsdGlsb2NhdGlvblBvc3RJZDogc3RyaW5nO1xuICAgIHNvY2lhbE5ldHdvcmtJZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVEcmFmdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVEcmFmdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucG9zdERhdGVUaW1lKSB7bS5wb3N0RGF0ZVRpbWUgPSBuZXcgRGF0ZShwcm90by5wb3N0RGF0ZVRpbWUpO31cbiAgICAgICAgaWYgKHByb3RvLmdtYlBvc3RDdXN0b21pemF0aW9uKSB7bS5nbWJQb3N0Q3VzdG9taXphdGlvbiA9IEdNQlBvc3RDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by5nbWJQb3N0Q3VzdG9taXphdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8ubWVkaWEpIHttLm1lZGlhID0gcHJvdG8ubWVkaWEubWFwKERyYWZ0TWVkaWEuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5kcmFmdFR5cGUpIHttLmRyYWZ0VHlwZSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuRHJhZnRUeXBlPihlLkRyYWZ0VHlwZSwgcHJvdG8uZHJhZnRUeXBlKTt9XG4gICAgICAgIGlmIChwcm90by5tZXRhZGF0YSkge20ubWV0YWRhdGEgPSBwcm90by5tZXRhZGF0YS5tYXAoRHJhZnRNZXRhRGF0YS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnlvdXR1YmVDdXN0b21pemF0aW9uKSB7bS55b3V0dWJlQ3VzdG9taXphdGlvbiA9IERyYWZ0WW91dHViZUN1c3RvbWl6YXRpb24uZnJvbVByb3RvKHByb3RvLnlvdXR1YmVDdXN0b21pemF0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5zc2lkRHJhZnRUeXBlcykge20uc3NpZERyYWZ0VHlwZXMgPSBwcm90by5zc2lkRHJhZnRUeXBlcy5tYXAoU1NJRERyYWZ0VHlwZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLnRpa3Rva0N1c3RvbWl6YXRpb24pIHttLnRpa3Rva0N1c3RvbWl6YXRpb24gPSBEcmFmdFRpa1Rva0N1c3RvbWl6YXRpb24uZnJvbVByb3RvKHByb3RvLnRpa3Rva0N1c3RvbWl6YXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmJsb2dQb3N0Q3VzdG9taXphdGlvbikge20uYmxvZ1Bvc3RDdXN0b21pemF0aW9uID0gRHJhZnRCbG9nUG9zdEN1c3RvbWl6YXRpb24uZnJvbVByb3RvKHByb3RvLmJsb2dQb3N0Q3VzdG9taXphdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uY2FtcGFpZ25DdXN0b21pemF0aW9uKSB7bS5jYW1wYWlnbkN1c3RvbWl6YXRpb24gPSBDYW1wYWlnbkN1c3RvbWl6YXRpb24uZnJvbVByb3RvKHByb3RvLmNhbXBhaWduQ3VzdG9taXphdGlvbik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZURyYWZ0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkcmFmdElkJ10gPSB0aGlzLmRyYWZ0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRUZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkcmFmdFRleHQnXSA9IHRoaXMuZHJhZnRUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3REYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0RGF0ZVRpbWUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdERhdGVUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3REYXRlVGltZSA/ICh0aGlzLnBvc3REYXRlVGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0RGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gPyAodGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2aWV3cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJldmlld3MnXSA9IHRoaXMucHJldmlld3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3B0aW9ucyddID0gdGhpcy5vcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZGlhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZGlhICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZGlhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lZGlhID8gKHRoaXMubWVkaWEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3NpZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NzaWRzJ10gPSB0aGlzLnNzaWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0VHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHJhZnRUeXBlJ10gPSB0aGlzLmRyYWZ0VHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ3lvdXR1YmVDdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uID8gKHRoaXMueW91dHViZUN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMueW91dHViZUN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3NpZERyYWZ0VHlwZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3NpZERyYWZ0VHlwZXMgIT09IG51bGwpIHt0b1JldHVyblsnc3NpZERyYWZ0VHlwZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3NpZERyYWZ0VHlwZXMgPyAodGhpcy5zc2lkRHJhZnRUeXBlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zc2lkRHJhZnRUeXBlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNIaWRkZW4nXSA9IHRoaXMuaXNIaWRkZW47fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aWt0b2tDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rpa3Rva0N1c3RvbWl6YXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbiA/ICh0aGlzLnRpa3Rva0N1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Jsb2dQb3N0Q3VzdG9taXphdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gPyAodGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY2FtcGFpZ25DdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiA/ICh0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0SWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvblBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxOZXR3b3JrSWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsTmV0d29ya0lkZW50aWZpZXInXSA9IHRoaXMuc29jaWFsTmV0d29ya0lkZW50aWZpZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRHJhZnRSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlRHJhZnRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZHJhZnQ6IERyYWZ0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlRHJhZnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZURyYWZ0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnQpIHttLmRyYWZ0ID0gRHJhZnQuZnJvbVByb3RvKHByb3RvLmRyYWZ0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlRHJhZnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RyYWZ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRyYWZ0ID8gKHRoaXMuZHJhZnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHJhZnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTXVsdGlNTERyYWZ0c1JlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZU11bHRpTUxEcmFmdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBkcmFmdHM6IFVwZGF0ZURyYWZ0UmVxdWVzdFtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlTXVsdGlNTERyYWZ0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVNdWx0aU1MRHJhZnRzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kcmFmdHMpIHttLmRyYWZ0cyA9IHByb3RvLmRyYWZ0cy5tYXAoVXBkYXRlRHJhZnRSZXF1ZXN0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU11bHRpTUxEcmFmdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHJhZnRzID8gKHRoaXMuZHJhZnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiJdfQ==