@vendasta/business-center 0.6.2 → 0.7.2

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 (77) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_internal/account.api.service.mjs +41 -0
  3. package/esm2020/lib/_internal/get-started.api.service.mjs +46 -0
  4. package/esm2020/lib/_internal/index.mjs +12 -0
  5. package/esm2020/lib/_internal/interfaces/annotations.interface.mjs +8 -0
  6. package/esm2020/lib/_internal/interfaces/api.interface.mjs +8 -0
  7. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  8. package/esm2020/lib/_internal/objects/annotations.mjs +24 -0
  9. package/esm2020/lib/_internal/objects/api.mjs +357 -0
  10. package/esm2020/lib/_internal/objects/index.mjs +9 -0
  11. package/esm2020/lib/_internal/user.api.service.mjs +45 -0
  12. package/esm2020/lib/account.service.mjs +38 -0
  13. package/esm2020/lib/getStarted.service.mjs +44 -0
  14. package/esm2020/lib/index.mjs +5 -0
  15. package/esm2020/lib/user.service.mjs +35 -0
  16. package/esm2020/public_api.mjs +2 -0
  17. package/esm2020/vendasta-business-center.mjs +5 -0
  18. package/fesm2015/vendasta-business-center.mjs +603 -0
  19. package/fesm2015/vendasta-business-center.mjs.map +1 -0
  20. package/fesm2020/vendasta-business-center.mjs +602 -0
  21. package/fesm2020/vendasta-business-center.mjs.map +1 -0
  22. package/lib/_generated/host.service.d.ts +5 -9
  23. package/lib/_internal/account.api.service.d.ts +4 -0
  24. package/lib/_internal/get-started.api.service.d.ts +4 -0
  25. package/lib/_internal/interfaces/api.interface.d.ts +2 -0
  26. package/lib/_internal/objects/api.d.ts +2 -0
  27. package/lib/_internal/user.api.service.d.ts +4 -0
  28. package/lib/account.service.d.ts +3 -0
  29. package/lib/getStarted.service.d.ts +3 -0
  30. package/lib/user.service.d.ts +4 -1
  31. package/package.json +27 -19
  32. package/public_api.d.ts +1 -1
  33. package/src/README.md +1 -0
  34. package/vendasta-business-center.d.ts +1 -0
  35. package/bundles/vendasta-business-center.umd.js +0 -1131
  36. package/bundles/vendasta-business-center.umd.js.map +0 -1
  37. package/bundles/vendasta-business-center.umd.min.js +0 -2
  38. package/bundles/vendasta-business-center.umd.min.js.map +0 -1
  39. package/esm2015/lib/_generated/host.service.js +0 -104
  40. package/esm2015/lib/_internal/account.api.service.js +0 -76
  41. package/esm2015/lib/_internal/get-started.api.service.js +0 -90
  42. package/esm2015/lib/_internal/index.js +0 -16
  43. package/esm2015/lib/_internal/interfaces/annotations.interface.js +0 -21
  44. package/esm2015/lib/_internal/interfaces/api.interface.js +0 -167
  45. package/esm2015/lib/_internal/interfaces/index.js +0 -5
  46. package/esm2015/lib/_internal/objects/annotations.js +0 -46
  47. package/esm2015/lib/_internal/objects/api.js +0 -615
  48. package/esm2015/lib/_internal/objects/index.js +0 -13
  49. package/esm2015/lib/_internal/user.api.service.js +0 -85
  50. package/esm2015/lib/account.service.js +0 -90
  51. package/esm2015/lib/getStarted.service.js +0 -93
  52. package/esm2015/lib/index.js +0 -9
  53. package/esm2015/lib/user.service.js +0 -75
  54. package/esm2015/public_api.js +0 -6
  55. package/esm2015/vendasta-business-center.js +0 -9
  56. package/esm5/lib/_generated/host.service.js +0 -115
  57. package/esm5/lib/_internal/account.api.service.js +0 -82
  58. package/esm5/lib/_internal/get-started.api.service.js +0 -100
  59. package/esm5/lib/_internal/index.js +0 -16
  60. package/esm5/lib/_internal/interfaces/annotations.interface.js +0 -21
  61. package/esm5/lib/_internal/interfaces/api.interface.js +0 -167
  62. package/esm5/lib/_internal/interfaces/index.js +0 -5
  63. package/esm5/lib/_internal/objects/annotations.js +0 -52
  64. package/esm5/lib/_internal/objects/api.js +0 -693
  65. package/esm5/lib/_internal/objects/index.js +0 -13
  66. package/esm5/lib/_internal/user.api.service.js +0 -96
  67. package/esm5/lib/account.service.js +0 -97
  68. package/esm5/lib/getStarted.service.js +0 -101
  69. package/esm5/lib/index.js +0 -9
  70. package/esm5/lib/user.service.js +0 -78
  71. package/esm5/public_api.js +0 -6
  72. package/esm5/vendasta-business-center.js +0 -9
  73. package/fesm2015/vendasta-business-center.js +0 -979
  74. package/fesm2015/vendasta-business-center.js.map +0 -1
  75. package/fesm5/vendasta-business-center.js +0 -1093
  76. package/fesm5/vendasta-business-center.js.map +0 -1
  77. package/vendasta-business-center.metadata.json +0 -1
@@ -1,979 +0,0 @@
1
- import { Injectable, ɵɵdefineInjectable, ɵɵinject } from '@angular/core';
2
- import { EnvironmentService, Environment } from '@vendasta/core';
3
- import { HttpHeaders, HttpClient } from '@angular/common/http';
4
- import { map, share } from 'rxjs/operators';
5
-
6
- /**
7
- * @fileoverview added by tsickle
8
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
9
- */
10
- class HostService {
11
- /**
12
- * @param {?} environmentService
13
- */
14
- constructor(environmentService) {
15
- this.environmentService = environmentService;
16
- }
17
- /**
18
- * @return {?}
19
- */
20
- host() {
21
- if (this._host) {
22
- return this._host;
23
- }
24
- switch (this.environmentService.getEnvironment()) {
25
- case Environment.LOCAL:
26
- this._host = 'business-center-api.vendasta-local.com';
27
- break;
28
- case Environment.TEST:
29
- this._host = '';
30
- break;
31
- case Environment.DEMO:
32
- this._host = 'business-center-demo.apigateway.co';
33
- break;
34
- case Environment.PROD:
35
- this._host = 'business-center-prod.apigateway.co';
36
- break;
37
- }
38
- return this._host;
39
- }
40
- /**
41
- * @return {?}
42
- */
43
- httpsHost() {
44
- if (this._httpsHost) {
45
- return this._httpsHost;
46
- }
47
- switch (this.environmentService.getEnvironment()) {
48
- case Environment.LOCAL:
49
- this._httpsHost = 'business-center.vendasta-local.com';
50
- break;
51
- case Environment.TEST:
52
- this._httpsHost = '';
53
- break;
54
- case Environment.DEMO:
55
- this._httpsHost = 'business-center-demo.apigateway.co';
56
- break;
57
- case Environment.PROD:
58
- this._httpsHost = 'business-center-prod.apigateway.co';
59
- break;
60
- }
61
- return this._httpsHost;
62
- }
63
- /**
64
- * @return {?}
65
- */
66
- hostWithScheme() {
67
- /** @type {?} */
68
- const scheme = this.environmentService.getEnvironment() === Environment.LOCAL ? 'http://' : 'https://';
69
- return scheme + this.host();
70
- }
71
- /**
72
- * @return {?}
73
- */
74
- httpsHostWithScheme() {
75
- /** @type {?} */
76
- const scheme = this.environmentService.getEnvironment() === Environment.LOCAL ? 'http://' : 'https://';
77
- return scheme + this.httpsHost();
78
- }
79
- }
80
- HostService.decorators = [
81
- { type: Injectable, args: [{ providedIn: 'root' },] }
82
- ];
83
- /** @nocollapse */
84
- HostService.ctorParameters = () => [
85
- { type: EnvironmentService }
86
- ];
87
- /** @nocollapse */ HostService.ngInjectableDef = ɵɵdefineInjectable({ factory: function HostService_Factory() { return new HostService(ɵɵinject(EnvironmentService)); }, token: HostService, providedIn: "root" });
88
-
89
- /**
90
- * @fileoverview added by tsickle
91
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
92
- */
93
-
94
- /**
95
- * @fileoverview added by tsickle
96
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
97
- */
98
- class Address {
99
- /**
100
- * @param {?} proto
101
- * @return {?}
102
- */
103
- static fromProto(proto) {
104
- /** @type {?} */
105
- let m = new Address();
106
- m = Object.assign(m, proto);
107
- return m;
108
- }
109
- /**
110
- * @param {?=} kwargs
111
- */
112
- constructor(kwargs) {
113
- if (!kwargs) {
114
- return;
115
- }
116
- Object.assign(this, kwargs);
117
- }
118
- /**
119
- * @return {?}
120
- */
121
- toApiJson() {
122
- /** @type {?} */
123
- const toReturn = {};
124
- if (typeof this.address !== 'undefined') {
125
- toReturn['address'] = this.address;
126
- }
127
- if (typeof this.city !== 'undefined') {
128
- toReturn['city'] = this.city;
129
- }
130
- if (typeof this.state !== 'undefined') {
131
- toReturn['state'] = this.state;
132
- }
133
- if (typeof this.country !== 'undefined') {
134
- toReturn['country'] = this.country;
135
- }
136
- if (typeof this.postalCode !== 'undefined') {
137
- toReturn['postalCode'] = this.postalCode;
138
- }
139
- return toReturn;
140
- }
141
- }
142
- class BusinessData {
143
- /**
144
- * @param {?} proto
145
- * @return {?}
146
- */
147
- static fromProto(proto) {
148
- /** @type {?} */
149
- let m = new BusinessData();
150
- m = Object.assign(m, proto);
151
- if (proto.address) {
152
- m.address = Address.fromProto(proto.address);
153
- }
154
- return m;
155
- }
156
- /**
157
- * @param {?=} kwargs
158
- */
159
- constructor(kwargs) {
160
- if (!kwargs) {
161
- return;
162
- }
163
- Object.assign(this, kwargs);
164
- }
165
- /**
166
- * @return {?}
167
- */
168
- toApiJson() {
169
- /** @type {?} */
170
- const toReturn = {};
171
- if (typeof this.address !== 'undefined' && this.address !== null) {
172
- toReturn['address'] = 'toApiJson' in this.address ? ((/** @type {?} */ (this.address))).toApiJson() : this.address;
173
- }
174
- if (typeof this.businessCategory !== 'undefined') {
175
- toReturn['businessCategory'] = this.businessCategory;
176
- }
177
- if (typeof this.phoneNumber !== 'undefined') {
178
- toReturn['phoneNumber'] = this.phoneNumber;
179
- }
180
- if (typeof this.websiteUrl !== 'undefined') {
181
- toReturn['websiteUrl'] = this.websiteUrl;
182
- }
183
- if (typeof this.facebookUrl !== 'undefined') {
184
- toReturn['facebookUrl'] = this.facebookUrl;
185
- }
186
- if (typeof this.twitterUrl !== 'undefined') {
187
- toReturn['twitterUrl'] = this.twitterUrl;
188
- }
189
- return toReturn;
190
- }
191
- }
192
- class Contact {
193
- /**
194
- * @param {?} proto
195
- * @return {?}
196
- */
197
- static fromProto(proto) {
198
- /** @type {?} */
199
- let m = new Contact();
200
- m = Object.assign(m, proto);
201
- return m;
202
- }
203
- /**
204
- * @param {?=} kwargs
205
- */
206
- constructor(kwargs) {
207
- if (!kwargs) {
208
- return;
209
- }
210
- Object.assign(this, kwargs);
211
- }
212
- /**
213
- * @return {?}
214
- */
215
- toApiJson() {
216
- /** @type {?} */
217
- const toReturn = {};
218
- if (typeof this.firstName !== 'undefined') {
219
- toReturn['firstName'] = this.firstName;
220
- }
221
- if (typeof this.lastName !== 'undefined') {
222
- toReturn['lastName'] = this.lastName;
223
- }
224
- return toReturn;
225
- }
226
- }
227
- class GetCreatePasswordUrlRequest {
228
- /**
229
- * @param {?} proto
230
- * @return {?}
231
- */
232
- static fromProto(proto) {
233
- /** @type {?} */
234
- let m = new GetCreatePasswordUrlRequest();
235
- m = Object.assign(m, proto);
236
- return m;
237
- }
238
- /**
239
- * @param {?=} kwargs
240
- */
241
- constructor(kwargs) {
242
- if (!kwargs) {
243
- return;
244
- }
245
- Object.assign(this, kwargs);
246
- }
247
- /**
248
- * @return {?}
249
- */
250
- toApiJson() {
251
- /** @type {?} */
252
- const toReturn = {};
253
- if (typeof this.userId !== 'undefined') {
254
- toReturn['userId'] = this.userId;
255
- }
256
- if (typeof this.partnerId !== 'undefined') {
257
- toReturn['partnerId'] = this.partnerId;
258
- }
259
- return toReturn;
260
- }
261
- }
262
- class GetCreatePasswordUrlResponse {
263
- /**
264
- * @param {?} proto
265
- * @return {?}
266
- */
267
- static fromProto(proto) {
268
- /** @type {?} */
269
- let m = new GetCreatePasswordUrlResponse();
270
- m = Object.assign(m, proto);
271
- return m;
272
- }
273
- /**
274
- * @param {?=} kwargs
275
- */
276
- constructor(kwargs) {
277
- if (!kwargs) {
278
- return;
279
- }
280
- Object.assign(this, kwargs);
281
- }
282
- /**
283
- * @return {?}
284
- */
285
- toApiJson() {
286
- /** @type {?} */
287
- const toReturn = {};
288
- if (typeof this.url !== 'undefined') {
289
- toReturn['url'] = this.url;
290
- }
291
- return toReturn;
292
- }
293
- }
294
- class GetTrackerRequest {
295
- /**
296
- * @param {?} proto
297
- * @return {?}
298
- */
299
- static fromProto(proto) {
300
- /** @type {?} */
301
- let m = new GetTrackerRequest();
302
- m = Object.assign(m, proto);
303
- return m;
304
- }
305
- /**
306
- * @param {?=} kwargs
307
- */
308
- constructor(kwargs) {
309
- if (!kwargs) {
310
- return;
311
- }
312
- Object.assign(this, kwargs);
313
- }
314
- /**
315
- * @return {?}
316
- */
317
- toApiJson() {
318
- /** @type {?} */
319
- const toReturn = {};
320
- if (typeof this.partnerId !== 'undefined') {
321
- toReturn['partnerId'] = this.partnerId;
322
- }
323
- if (typeof this.userId !== 'undefined') {
324
- toReturn['userId'] = this.userId;
325
- }
326
- return toReturn;
327
- }
328
- }
329
- class GetTrackerResponse {
330
- /**
331
- * @param {?} proto
332
- * @return {?}
333
- */
334
- static fromProto(proto) {
335
- /** @type {?} */
336
- let m = new GetTrackerResponse();
337
- m = Object.assign(m, proto);
338
- if (proto.trackers) {
339
- m.trackers = Trackers.fromProto(proto.trackers);
340
- }
341
- return m;
342
- }
343
- /**
344
- * @param {?=} kwargs
345
- */
346
- constructor(kwargs) {
347
- if (!kwargs) {
348
- return;
349
- }
350
- Object.assign(this, kwargs);
351
- }
352
- /**
353
- * @return {?}
354
- */
355
- toApiJson() {
356
- /** @type {?} */
357
- const toReturn = {};
358
- if (typeof this.trackers !== 'undefined' && this.trackers !== null) {
359
- toReturn['trackers'] = 'toApiJson' in this.trackers ? ((/** @type {?} */ (this.trackers))).toApiJson() : this.trackers;
360
- }
361
- return toReturn;
362
- }
363
- }
364
- class RegisterRequest {
365
- /**
366
- * @param {?} proto
367
- * @return {?}
368
- */
369
- static fromProto(proto) {
370
- /** @type {?} */
371
- let m = new RegisterRequest();
372
- m = Object.assign(m, proto);
373
- if (proto.businessData) {
374
- m.businessData = BusinessData.fromProto(proto.businessData);
375
- }
376
- if (proto.contact) {
377
- m.contact = Contact.fromProto(proto.contact);
378
- }
379
- return m;
380
- }
381
- /**
382
- * @param {?=} kwargs
383
- */
384
- constructor(kwargs) {
385
- if (!kwargs) {
386
- return;
387
- }
388
- Object.assign(this, kwargs);
389
- }
390
- /**
391
- * @return {?}
392
- */
393
- toApiJson() {
394
- /** @type {?} */
395
- const toReturn = {};
396
- if (typeof this.businessData !== 'undefined' && this.businessData !== null) {
397
- toReturn['businessData'] = 'toApiJson' in this.businessData ? ((/** @type {?} */ (this.businessData))).toApiJson() : this.businessData;
398
- }
399
- if (typeof this.contact !== 'undefined' && this.contact !== null) {
400
- toReturn['contact'] = 'toApiJson' in this.contact ? ((/** @type {?} */ (this.contact))).toApiJson() : this.contact;
401
- }
402
- if (typeof this.businessName !== 'undefined') {
403
- toReturn['businessName'] = this.businessName;
404
- }
405
- if (typeof this.partnerId !== 'undefined') {
406
- toReturn['partnerId'] = this.partnerId;
407
- }
408
- if (typeof this.marketId !== 'undefined') {
409
- toReturn['marketId'] = this.marketId;
410
- }
411
- if (typeof this.email !== 'undefined') {
412
- toReturn['email'] = this.email;
413
- }
414
- if (typeof this.placeId !== 'undefined') {
415
- toReturn['placeId'] = this.placeId;
416
- }
417
- if (typeof this.salesPersonId !== 'undefined') {
418
- toReturn['salesPersonId'] = this.salesPersonId;
419
- }
420
- if (typeof this.recaptcha !== 'undefined') {
421
- toReturn['recaptcha'] = this.recaptcha;
422
- }
423
- return toReturn;
424
- }
425
- }
426
- class RegisterResponse {
427
- /**
428
- * @param {?} proto
429
- * @return {?}
430
- */
431
- static fromProto(proto) {
432
- /** @type {?} */
433
- let m = new RegisterResponse();
434
- m = Object.assign(m, proto);
435
- return m;
436
- }
437
- /**
438
- * @param {?=} kwargs
439
- */
440
- constructor(kwargs) {
441
- if (!kwargs) {
442
- return;
443
- }
444
- Object.assign(this, kwargs);
445
- }
446
- /**
447
- * @return {?}
448
- */
449
- toApiJson() {
450
- /** @type {?} */
451
- const toReturn = {};
452
- if (typeof this.businessId !== 'undefined') {
453
- toReturn['businessId'] = this.businessId;
454
- }
455
- if (typeof this.userId !== 'undefined') {
456
- toReturn['userId'] = this.userId;
457
- }
458
- return toReturn;
459
- }
460
- }
461
- class SendWelcomeEmailRequest {
462
- /**
463
- * @param {?} proto
464
- * @return {?}
465
- */
466
- static fromProto(proto) {
467
- /** @type {?} */
468
- let m = new SendWelcomeEmailRequest();
469
- m = Object.assign(m, proto);
470
- return m;
471
- }
472
- /**
473
- * @param {?=} kwargs
474
- */
475
- constructor(kwargs) {
476
- if (!kwargs) {
477
- return;
478
- }
479
- Object.assign(this, kwargs);
480
- }
481
- /**
482
- * @return {?}
483
- */
484
- toApiJson() {
485
- /** @type {?} */
486
- const toReturn = {};
487
- if (typeof this.partnerId !== 'undefined') {
488
- toReturn['partnerId'] = this.partnerId;
489
- }
490
- if (typeof this.userId !== 'undefined') {
491
- toReturn['userId'] = this.userId;
492
- }
493
- if (typeof this.loginUrl !== 'undefined') {
494
- toReturn['loginUrl'] = this.loginUrl;
495
- }
496
- return toReturn;
497
- }
498
- }
499
- class SetTrackerRequest {
500
- /**
501
- * @param {?} proto
502
- * @return {?}
503
- */
504
- static fromProto(proto) {
505
- /** @type {?} */
506
- let m = new SetTrackerRequest();
507
- m = Object.assign(m, proto);
508
- return m;
509
- }
510
- /**
511
- * @param {?=} kwargs
512
- */
513
- constructor(kwargs) {
514
- if (!kwargs) {
515
- return;
516
- }
517
- Object.assign(this, kwargs);
518
- }
519
- /**
520
- * @return {?}
521
- */
522
- toApiJson() {
523
- /** @type {?} */
524
- const toReturn = {};
525
- if (typeof this.partnerId !== 'undefined') {
526
- toReturn['partnerId'] = this.partnerId;
527
- }
528
- if (typeof this.userId !== 'undefined') {
529
- toReturn['userId'] = this.userId;
530
- }
531
- if (typeof this.tracker !== 'undefined') {
532
- toReturn['tracker'] = this.tracker;
533
- }
534
- return toReturn;
535
- }
536
- }
537
- class SetTrackerResponse {
538
- /**
539
- * @param {?} proto
540
- * @return {?}
541
- */
542
- static fromProto(proto) {
543
- /** @type {?} */
544
- let m = new SetTrackerResponse();
545
- m = Object.assign(m, proto);
546
- return m;
547
- }
548
- /**
549
- * @param {?=} kwargs
550
- */
551
- constructor(kwargs) {
552
- if (!kwargs) {
553
- return;
554
- }
555
- Object.assign(this, kwargs);
556
- }
557
- /**
558
- * @return {?}
559
- */
560
- toApiJson() {
561
- /** @type {?} */
562
- const toReturn = {};
563
- if (typeof this.success !== 'undefined') {
564
- toReturn['success'] = this.success;
565
- }
566
- return toReturn;
567
- }
568
- }
569
- class Trackers {
570
- /**
571
- * @param {?} proto
572
- * @return {?}
573
- */
574
- static fromProto(proto) {
575
- /** @type {?} */
576
- let m = new Trackers();
577
- m = Object.assign(m, proto);
578
- return m;
579
- }
580
- /**
581
- * @param {?=} kwargs
582
- */
583
- constructor(kwargs) {
584
- if (!kwargs) {
585
- return;
586
- }
587
- Object.assign(this, kwargs);
588
- }
589
- /**
590
- * @return {?}
591
- */
592
- toApiJson() {
593
- /** @type {?} */
594
- const toReturn = {};
595
- if (typeof this.welcomeVideo !== 'undefined') {
596
- toReturn['welcomeVideo'] = this.welcomeVideo;
597
- }
598
- if (typeof this.academy !== 'undefined') {
599
- toReturn['academy'] = this.academy;
600
- }
601
- return toReturn;
602
- }
603
- }
604
-
605
- /**
606
- * @fileoverview added by tsickle
607
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
608
- */
609
-
610
- /**
611
- * @fileoverview added by tsickle
612
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
613
- */
614
- class AccountApiService {
615
- /**
616
- * @param {?} http
617
- * @param {?} hostService
618
- */
619
- constructor(http, hostService) {
620
- this.http = http;
621
- this.hostService = hostService;
622
- }
623
- /**
624
- * @private
625
- * @return {?}
626
- */
627
- apiOptions() {
628
- return {
629
- headers: new HttpHeaders({
630
- 'Content-Type': 'application/json'
631
- }),
632
- withCredentials: true
633
- };
634
- }
635
- /**
636
- * @param {?} r
637
- * @return {?}
638
- */
639
- register(r) {
640
- /** @type {?} */
641
- const request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new RegisterRequest(r);
642
- return this.http.post(this.hostService.hostWithScheme() + "/business_center.v1.Account/Register", request.toApiJson(), this.apiOptions())
643
- .pipe(map((/**
644
- * @param {?} resp
645
- * @return {?}
646
- */
647
- resp => RegisterResponse.fromProto(resp))), share());
648
- }
649
- }
650
- AccountApiService.decorators = [
651
- { type: Injectable, args: [{ providedIn: 'root' },] }
652
- ];
653
- /** @nocollapse */
654
- AccountApiService.ctorParameters = () => [
655
- { type: HttpClient },
656
- { type: HostService }
657
- ];
658
- /** @nocollapse */ AccountApiService.ngInjectableDef = ɵɵdefineInjectable({ factory: function AccountApiService_Factory() { return new AccountApiService(ɵɵinject(HttpClient), ɵɵinject(HostService)); }, token: AccountApiService, providedIn: "root" });
659
-
660
- /**
661
- * @fileoverview added by tsickle
662
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
663
- */
664
- class AccountService {
665
- /**
666
- * @param {?} http
667
- * @param {?} hostService
668
- * @param {?} accountApiService
669
- */
670
- constructor(http, hostService, accountApiService) {
671
- this.http = http;
672
- this.hostService = hostService;
673
- this.accountApiService = accountApiService;
674
- }
675
- /**
676
- * @param {?} businessData
677
- * @param {?} contact
678
- * @param {?} businessName
679
- * @param {?} partnerId
680
- * @param {?} marketId
681
- * @param {?} email
682
- * @param {?} recaptcha
683
- * @return {?}
684
- */
685
- register(businessData, contact, businessName, partnerId, marketId, email, recaptcha) {
686
- // prepare request data
687
- /** @type {?} */
688
- const requestData = {
689
- businessData,
690
- contact,
691
- businessName,
692
- partnerId,
693
- marketId,
694
- email,
695
- recaptcha,
696
- };
697
- // http request call
698
- /** @type {?} */
699
- const request = new RegisterRequest(requestData);
700
- return this.accountApiService.register(request);
701
- }
702
- }
703
- AccountService.decorators = [
704
- { type: Injectable, args: [{ providedIn: 'root' },] }
705
- ];
706
- /** @nocollapse */
707
- AccountService.ctorParameters = () => [
708
- { type: HttpClient },
709
- { type: HostService },
710
- { type: AccountApiService }
711
- ];
712
- /** @nocollapse */ AccountService.ngInjectableDef = ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(ɵɵinject(HttpClient), ɵɵinject(HostService), ɵɵinject(AccountApiService)); }, token: AccountService, providedIn: "root" });
713
-
714
- /**
715
- * @fileoverview added by tsickle
716
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
717
- */
718
- class GetStartedApiService {
719
- /**
720
- * @param {?} http
721
- * @param {?} hostService
722
- */
723
- constructor(http, hostService) {
724
- this.http = http;
725
- this.hostService = hostService;
726
- }
727
- /**
728
- * @private
729
- * @return {?}
730
- */
731
- apiOptions() {
732
- return {
733
- headers: new HttpHeaders({
734
- 'Content-Type': 'application/json'
735
- }),
736
- withCredentials: true
737
- };
738
- }
739
- /**
740
- * @param {?} r
741
- * @return {?}
742
- */
743
- getTracker(r) {
744
- /** @type {?} */
745
- const request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new GetTrackerRequest(r);
746
- return this.http.post(this.hostService.hostWithScheme() + "/business_center.v1.GetStarted/GetTracker", request.toApiJson(), this.apiOptions())
747
- .pipe(map((/**
748
- * @param {?} resp
749
- * @return {?}
750
- */
751
- resp => GetTrackerResponse.fromProto(resp))), share());
752
- }
753
- /**
754
- * @param {?} r
755
- * @return {?}
756
- */
757
- setTracker(r) {
758
- /** @type {?} */
759
- const request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new SetTrackerRequest(r);
760
- return this.http.post(this.hostService.hostWithScheme() + "/business_center.v1.GetStarted/SetTracker", request.toApiJson(), this.apiOptions())
761
- .pipe(map((/**
762
- * @param {?} resp
763
- * @return {?}
764
- */
765
- resp => SetTrackerResponse.fromProto(resp))), share());
766
- }
767
- }
768
- GetStartedApiService.decorators = [
769
- { type: Injectable, args: [{ providedIn: 'root' },] }
770
- ];
771
- /** @nocollapse */
772
- GetStartedApiService.ctorParameters = () => [
773
- { type: HttpClient },
774
- { type: HostService }
775
- ];
776
- /** @nocollapse */ GetStartedApiService.ngInjectableDef = ɵɵdefineInjectable({ factory: function GetStartedApiService_Factory() { return new GetStartedApiService(ɵɵinject(HttpClient), ɵɵinject(HostService)); }, token: GetStartedApiService, providedIn: "root" });
777
-
778
- /**
779
- * @fileoverview added by tsickle
780
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
781
- */
782
- class GetStartedService {
783
- /**
784
- * @param {?} http
785
- * @param {?} hostService
786
- * @param {?} getStartedApiService
787
- */
788
- constructor(http, hostService, getStartedApiService) {
789
- this.http = http;
790
- this.hostService = hostService;
791
- this.getStartedApiService = getStartedApiService;
792
- }
793
- /**
794
- * @param {?} partnerId
795
- * @param {?} userId
796
- * @param {?} tracker
797
- * @return {?}
798
- */
799
- setTracker(partnerId, userId, tracker) {
800
- // prepare request data
801
- /** @type {?} */
802
- const requestData = {
803
- partnerId: partnerId,
804
- userId: userId,
805
- tracker: tracker
806
- }
807
- // http request call
808
- ;
809
- // http request call
810
- /** @type {?} */
811
- const request = new SetTrackerRequest(requestData);
812
- return this.getStartedApiService.setTracker(request);
813
- }
814
- /**
815
- * @param {?} partnerId
816
- * @param {?} userId
817
- * @return {?}
818
- */
819
- getTracker(partnerId, userId) {
820
- // prepare request data
821
- /** @type {?} */
822
- const requestData = {
823
- partnerId: partnerId,
824
- userId: userId
825
- }
826
- // http request call
827
- ;
828
- // http request call
829
- /** @type {?} */
830
- const request = new GetTrackerRequest(requestData);
831
- return this.getStartedApiService.getTracker(request);
832
- }
833
- }
834
- GetStartedService.decorators = [
835
- { type: Injectable, args: [{ providedIn: 'root' },] }
836
- ];
837
- /** @nocollapse */
838
- GetStartedService.ctorParameters = () => [
839
- { type: HttpClient },
840
- { type: HostService },
841
- { type: GetStartedApiService }
842
- ];
843
- /** @nocollapse */ GetStartedService.ngInjectableDef = ɵɵdefineInjectable({ factory: function GetStartedService_Factory() { return new GetStartedService(ɵɵinject(HttpClient), ɵɵinject(HostService), ɵɵinject(GetStartedApiService)); }, token: GetStartedService, providedIn: "root" });
844
-
845
- /**
846
- * @fileoverview added by tsickle
847
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
848
- */
849
-
850
- /**
851
- * @fileoverview added by tsickle
852
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
853
- */
854
- class UserApiService {
855
- /**
856
- * @param {?} http
857
- * @param {?} hostService
858
- */
859
- constructor(http, hostService) {
860
- this.http = http;
861
- this.hostService = hostService;
862
- }
863
- /**
864
- * @private
865
- * @return {?}
866
- */
867
- apiOptions() {
868
- return {
869
- headers: new HttpHeaders({
870
- 'Content-Type': 'application/json'
871
- }),
872
- withCredentials: true
873
- };
874
- }
875
- /**
876
- * @param {?} r
877
- * @return {?}
878
- */
879
- getCreatePasswordUrl(r) {
880
- /** @type {?} */
881
- const request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new GetCreatePasswordUrlRequest(r);
882
- return this.http.post(this.hostService.hostWithScheme() + "/business_center.v1.User/GetCreatePasswordUrl", request.toApiJson(), this.apiOptions())
883
- .pipe(map((/**
884
- * @param {?} resp
885
- * @return {?}
886
- */
887
- resp => GetCreatePasswordUrlResponse.fromProto(resp))), share());
888
- }
889
- /**
890
- * @param {?} r
891
- * @return {?}
892
- */
893
- sendWelcomeEmail(r) {
894
- /** @type {?} */
895
- const request = (((/** @type {?} */ (r))).toApiJson) ? ((/** @type {?} */ (r))) : new SendWelcomeEmailRequest(r);
896
- return this.http.post(this.hostService.hostWithScheme() + "/business_center.v1.User/SendWelcomeEmail", request.toApiJson(), Object.assign({}, this.apiOptions(), { observe: 'response' }));
897
- }
898
- }
899
- UserApiService.decorators = [
900
- { type: Injectable, args: [{ providedIn: 'root' },] }
901
- ];
902
- /** @nocollapse */
903
- UserApiService.ctorParameters = () => [
904
- { type: HttpClient },
905
- { type: HostService }
906
- ];
907
- /** @nocollapse */ UserApiService.ngInjectableDef = ɵɵdefineInjectable({ factory: function UserApiService_Factory() { return new UserApiService(ɵɵinject(HttpClient), ɵɵinject(HostService)); }, token: UserApiService, providedIn: "root" });
908
-
909
- /**
910
- * @fileoverview added by tsickle
911
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
912
- */
913
-
914
- /**
915
- * @fileoverview added by tsickle
916
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
917
- */
918
- class UserService {
919
- /**
920
- * @param {?} http
921
- * @param {?} hostService
922
- * @param {?} userApiService
923
- */
924
- constructor(http, hostService, userApiService) {
925
- this.http = http;
926
- this.hostService = hostService;
927
- this.userApiService = userApiService;
928
- }
929
- /**
930
- * @param {?} partnerId
931
- * @param {?} userId
932
- * @param {?} loginUrl
933
- * @return {?}
934
- */
935
- sendWelcomeEmail(partnerId, userId, loginUrl) {
936
- /** @type {?} */
937
- const requestData = {
938
- partnerId: partnerId,
939
- userId: userId,
940
- loginUrl: loginUrl
941
- };
942
- /** @type {?} */
943
- const request = new SendWelcomeEmailRequest(requestData);
944
- return this.userApiService.sendWelcomeEmail(request).pipe(map((/**
945
- * @param {?} res
946
- * @return {?}
947
- */
948
- res => res.status === 200)));
949
- }
950
- }
951
- UserService.decorators = [
952
- { type: Injectable, args: [{ providedIn: 'root' },] }
953
- ];
954
- /** @nocollapse */
955
- UserService.ctorParameters = () => [
956
- { type: HttpClient },
957
- { type: HostService },
958
- { type: UserApiService }
959
- ];
960
- /** @nocollapse */ UserService.ngInjectableDef = ɵɵdefineInjectable({ factory: function UserService_Factory() { return new UserService(ɵɵinject(HttpClient), ɵɵinject(HostService), ɵɵinject(UserApiService)); }, token: UserService, providedIn: "root" });
961
-
962
- /**
963
- * @fileoverview added by tsickle
964
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
965
- */
966
-
967
- /**
968
- * @fileoverview added by tsickle
969
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
970
- */
971
-
972
- /**
973
- * @fileoverview added by tsickle
974
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
975
- */
976
-
977
- export { AccountService, GetStartedService, UserService, BusinessData, Contact, Address, Trackers, SendWelcomeEmailRequest };
978
-
979
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZGFzdGEtYnVzaW5lc3MtY2VudGVyLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9AdmVuZGFzdGEvYnVzaW5lc3MtY2VudGVyL2xpYi9fZ2VuZXJhdGVkL2hvc3Quc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL2J1c2luZXNzLWNlbnRlci9saWIvX2ludGVybmFsL29iamVjdHMvYXBpLnRzIiwibmc6Ly9AdmVuZGFzdGEvYnVzaW5lc3MtY2VudGVyL2xpYi9faW50ZXJuYWwvYWNjb3VudC5hcGkuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL2J1c2luZXNzLWNlbnRlci9saWIvYWNjb3VudC5zZXJ2aWNlLnRzIiwibmc6Ly9AdmVuZGFzdGEvYnVzaW5lc3MtY2VudGVyL2xpYi9faW50ZXJuYWwvZ2V0LXN0YXJ0ZWQuYXBpLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9idXNpbmVzcy1jZW50ZXIvbGliL2dldFN0YXJ0ZWQuc2VydmljZS50cyIsIm5nOi8vQHZlbmRhc3RhL2J1c2luZXNzLWNlbnRlci9saWIvX2ludGVybmFsL3VzZXIuYXBpLnNlcnZpY2UudHMiLCJuZzovL0B2ZW5kYXN0YS9idXNpbmVzcy1jZW50ZXIvbGliL3VzZXIuc2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UsIEVudmlyb25tZW50IH0gZnJvbSAnQHZlbmRhc3RhL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBIb3N0U2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaG9zdDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2h0dHBzSG9zdDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSkge1xuICAgIH1cblxuICAgIGhvc3QoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2hvc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ob3N0O1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgICAgICBjYXNlIEVudmlyb25tZW50LkxPQ0FMOlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnYnVzaW5lc3MtY2VudGVyLWFwaS52ZW5kYXN0YS1sb2NhbC5jb20nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5URVNUOlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuREVNTzpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJ2J1c2luZXNzLWNlbnRlci1kZW1vLmFwaWdhdGV3YXkuY28nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5QUk9EOlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnYnVzaW5lc3MtY2VudGVyLXByb2QuYXBpZ2F0ZXdheS5jbyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvc3Q7XG4gICAgfVxuXG4gICAgaHR0cHNIb3N0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9odHRwc0hvc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9odHRwc0hvc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVudmlyb25tZW50KCkpIHtcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuTE9DQUw6XG4gICAgICAgICAgICAgICAgdGhpcy5faHR0cHNIb3N0ID0gJ2J1c2luZXNzLWNlbnRlci52ZW5kYXN0YS1sb2NhbC5jb20nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5URVNUOlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnZpcm9ubWVudC5ERU1POlxuICAgICAgICAgICAgICAgIHRoaXMuX2h0dHBzSG9zdCA9ICdidXNpbmVzcy1jZW50ZXItZGVtby5hcGlnYXRld2F5LmNvJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW52aXJvbm1lbnQuUFJPRDpcbiAgICAgICAgICAgICAgICB0aGlzLl9odHRwc0hvc3QgPSAnYnVzaW5lc3MtY2VudGVyLXByb2QuYXBpZ2F0ZXdheS5jbyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBzSG9zdDtcbiAgICB9XG5cbiAgICBob3N0V2l0aFNjaGVtZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRFbnZpcm9ubWVudCgpID09PSBFbnZpcm9ubWVudC5MT0NBTCA/ICdodHRwOi8vJyA6ICdodHRwczovLyc7XG4gICAgICAgIHJldHVybiBzY2hlbWUgKyB0aGlzLmhvc3QoKVxuICAgIH1cblxuICAgIGh0dHBzSG9zdFdpdGhTY2hlbWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2NoZW1lID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0RW52aXJvbm1lbnQoKSA9PT0gRW52aXJvbm1lbnQuTE9DQUwgPyAnaHR0cDovLycgOiAnaHR0cHM6Ly8nO1xuICAgICAgICByZXR1cm4gc2NoZW1lICsgdGhpcy5odHRwc0hvc3QoKVxuICAgIH1cbn1cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gT2JqZWN0cy5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuaW1wb3J0ICogYXMgaSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuXG5leHBvcnQgY2xhc3MgQWRkcmVzcyBpbXBsZW1lbnRzIGkuQWRkcmVzc0ludGVyZmFjZSB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGNpdHk6IHN0cmluZztcbiAgICBzdGF0ZTogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICBwb3N0YWxDb2RlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRyZXNzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQWRkcmVzcygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkcmVzc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZHJlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHJlc3MnXSA9IHRoaXMuYWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaXR5J10gPSB0aGlzLmNpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRlJ10gPSB0aGlzLnN0YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50cnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvdW50cnknXSA9IHRoaXMuY291bnRyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0YWxDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwb3N0YWxDb2RlJ10gPSB0aGlzLnBvc3RhbENvZGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnVzaW5lc3NEYXRhIGltcGxlbWVudHMgaS5CdXNpbmVzc0RhdGFJbnRlcmZhY2Uge1xuICAgIGFkZHJlc3M6IEFkZHJlc3M7XG4gICAgYnVzaW5lc3NDYXRlZ29yeTogc3RyaW5nO1xuICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gICAgd2Vic2l0ZVVybDogc3RyaW5nO1xuICAgIGZhY2Vib29rVXJsOiBzdHJpbmc7XG4gICAgdHdpdHRlclVybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQnVzaW5lc3NEYXRhIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQnVzaW5lc3NEYXRhKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFkZHJlc3MpIHttLmFkZHJlc3MgPSBBZGRyZXNzLmZyb21Qcm90byhwcm90by5hZGRyZXNzKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQnVzaW5lc3NEYXRhSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hZGRyZXNzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FkZHJlc3MnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYWRkcmVzcyA/ICh0aGlzLmFkZHJlc3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0NhdGVnb3J5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc0NhdGVnb3J5J10gPSB0aGlzLmJ1c2luZXNzQ2F0ZWdvcnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGhvbmVOdW1iZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bob25lTnVtYmVyJ10gPSB0aGlzLnBob25lTnVtYmVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndlYnNpdGVVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3dlYnNpdGVVcmwnXSA9IHRoaXMud2Vic2l0ZVVybDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYWNlYm9va1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZmFjZWJvb2tVcmwnXSA9IHRoaXMuZmFjZWJvb2tVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHdpdHRlclVybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHdpdHRlclVybCddID0gdGhpcy50d2l0dGVyVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbnRhY3QgaW1wbGVtZW50cyBpLkNvbnRhY3RJbnRlcmZhY2Uge1xuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICAgIGxhc3ROYW1lOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDb250YWN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ29udGFjdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ29udGFjdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpcnN0TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZmlyc3ROYW1lJ10gPSB0aGlzLmZpcnN0TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5sYXN0TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGFzdE5hbWUnXSA9IHRoaXMubGFzdE5hbWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q3JlYXRlUGFzc3dvcmRVcmxSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXRDcmVhdGVQYXNzd29yZFVybFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q3JlYXRlUGFzc3dvcmRVcmxSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0Q3JlYXRlUGFzc3dvcmRVcmxSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRDcmVhdGVQYXNzd29yZFVybFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXJJZCddID0gdGhpcy51c2VySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldENyZWF0ZVBhc3N3b3JkVXJsUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldENyZWF0ZVBhc3N3b3JkVXJsUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHVybDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0Q3JlYXRlUGFzc3dvcmRVcmxSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldENyZWF0ZVBhc3N3b3JkVXJsUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldENyZWF0ZVBhc3N3b3JkVXJsUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VybCddID0gdGhpcy51cmw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0VHJhY2tlclJlcXVlc3QgaW1wbGVtZW50cyBpLkdldFRyYWNrZXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBwYXJ0bmVySWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFRyYWNrZXJSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0VHJhY2tlclJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFRyYWNrZXJSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFydG5lcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXJ0bmVySWQnXSA9IHRoaXMucGFydG5lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlcklkJ10gPSB0aGlzLnVzZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRUcmFja2VyUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFRyYWNrZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgdHJhY2tlcnM6IFRyYWNrZXJzO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0VHJhY2tlclJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0VHJhY2tlclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnRyYWNrZXJzKSB7bS50cmFja2VycyA9IFRyYWNrZXJzLmZyb21Qcm90byhwcm90by50cmFja2Vycyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFRyYWNrZXJSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYWNrZXJzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRyYWNrZXJzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RyYWNrZXJzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRyYWNrZXJzID8gKHRoaXMudHJhY2tlcnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudHJhY2tlcnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJSZXF1ZXN0IGltcGxlbWVudHMgaS5SZWdpc3RlclJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGJ1c2luZXNzRGF0YTogQnVzaW5lc3NEYXRhO1xuICAgIGNvbnRhY3Q6IENvbnRhY3Q7XG4gICAgYnVzaW5lc3NOYW1lOiBzdHJpbmc7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgbWFya2V0SWQ6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIHBsYWNlSWQ6IHN0cmluZztcbiAgICBzYWxlc1BlcnNvbklkOiBzdHJpbmc7XG4gICAgcmVjYXB0Y2hhOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBSZWdpc3RlclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZWdpc3RlclJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYnVzaW5lc3NEYXRhKSB7bS5idXNpbmVzc0RhdGEgPSBCdXNpbmVzc0RhdGEuZnJvbVByb3RvKHByb3RvLmJ1c2luZXNzRGF0YSk7fVxuICAgICAgICBpZiAocHJvdG8uY29udGFjdCkge20uY29udGFjdCA9IENvbnRhY3QuZnJvbVByb3RvKHByb3RvLmNvbnRhY3QpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZWdpc3RlclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idXNpbmVzc0RhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYnVzaW5lc3NEYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ2J1c2luZXNzRGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5idXNpbmVzc0RhdGEgPyAodGhpcy5idXNpbmVzc0RhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYnVzaW5lc3NEYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhY3QgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY29udGFjdCAhPT0gbnVsbCkge3RvUmV0dXJuWydjb250YWN0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbnRhY3QgPyAodGhpcy5jb250YWN0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbnRhY3Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidXNpbmVzc05hbWUnXSA9IHRoaXMuYnVzaW5lc3NOYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tYXJrZXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWFya2V0SWQnXSA9IHRoaXMubWFya2V0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsJ10gPSB0aGlzLmVtYWlsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsYWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BsYWNlSWQnXSA9IHRoaXMucGxhY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zYWxlc1BlcnNvbklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzYWxlc1BlcnNvbklkJ10gPSB0aGlzLnNhbGVzUGVyc29uSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVjYXB0Y2hhICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZWNhcHRjaGEnXSA9IHRoaXMucmVjYXB0Y2hhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyUmVzcG9uc2UgaW1wbGVtZW50cyBpLlJlZ2lzdGVyUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGJ1c2luZXNzSWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlZ2lzdGVyUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZWdpc3RlclJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZWdpc3RlclJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVzaW5lc3NJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVzaW5lc3NJZCddID0gdGhpcy5idXNpbmVzc0lkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndXNlcklkJ10gPSB0aGlzLnVzZXJJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZW5kV2VsY29tZUVtYWlsUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2VuZFdlbGNvbWVFbWFpbFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHBhcnRuZXJJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGxvZ2luVXJsOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kV2VsY29tZUVtYWlsUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlbmRXZWxjb21lRW1haWxSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZW5kV2VsY29tZUVtYWlsUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhcnRuZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFydG5lcklkJ10gPSB0aGlzLnBhcnRuZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51c2VySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZXJJZCddID0gdGhpcy51c2VySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9naW5VcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvZ2luVXJsJ10gPSB0aGlzLmxvZ2luVXJsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldFRyYWNrZXJSZXF1ZXN0IGltcGxlbWVudHMgaS5TZXRUcmFja2VyUmVxdWVzdEludGVyZmFjZSB7XG4gICAgcGFydG5lcklkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgdHJhY2tlcjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2V0VHJhY2tlclJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRUcmFja2VyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0VHJhY2tlclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXJ0bmVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BhcnRuZXJJZCddID0gdGhpcy5wYXJ0bmVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXNlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1c2VySWQnXSA9IHRoaXMudXNlcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYWNrZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RyYWNrZXInXSA9IHRoaXMudHJhY2tlcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRUcmFja2VyUmVzcG9uc2UgaW1wbGVtZW50cyBpLlNldFRyYWNrZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgc3VjY2VzczogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldFRyYWNrZXJSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFNldFRyYWNrZXJSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0VHJhY2tlclJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VjY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VjY2VzcyddID0gdGhpcy5zdWNjZXNzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYWNrZXJzIGltcGxlbWVudHMgaS5UcmFja2Vyc0ludGVyZmFjZSB7XG4gICAgd2VsY29tZVZpZGVvOiBib29sZWFuO1xuICAgIGFjYWRlbXk6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBUcmFja2VycyB7XG4gICAgICAgIGxldCBtID0gbmV3IFRyYWNrZXJzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5UcmFja2Vyc0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLndlbGNvbWVWaWRlbyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnd2VsY29tZVZpZGVvJ10gPSB0aGlzLndlbGNvbWVWaWRlbzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2FkZW15ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2FkZW15J10gPSB0aGlzLmFjYWRlbXk7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iLCIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIEFQSSBTZXJ2aWNlLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICAgICAgUmVnaXN0ZXJSZXF1ZXN0LFxuICAgICAgICBSZWdpc3RlclJlc3BvbnNlLFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIFJlZ2lzdGVyUmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgUmVnaXN0ZXJSZXNwb25zZUludGVyZmFjZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzLyc7XG5pbXBvcnQge0h0dHBIZWFkZXJzLCBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SG9zdFNlcnZpY2V9IGZyb20gJy4uL19nZW5lcmF0ZWQvaG9zdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgc2hhcmV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgQWNjb3VudEFwaVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGhvc3RTZXJ2aWNlOiBIb3N0U2VydmljZSkge1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBpT3B0aW9ucygpOiB7aGVhZGVyczogSHR0cEhlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbn0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJlZ2lzdGVyKHI6IFJlZ2lzdGVyUmVxdWVzdCB8IFJlZ2lzdGVyUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8UmVnaXN0ZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8UmVnaXN0ZXJSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFJlZ2lzdGVyUmVxdWVzdD5yKSA6IG5ldyBSZWdpc3RlclJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxSZWdpc3RlclJlc3BvbnNlSW50ZXJmYWNlPih0aGlzLmhvc3RTZXJ2aWNlLmhvc3RXaXRoU2NoZW1lKCkgKyBcIi9idXNpbmVzc19jZW50ZXIudjEuQWNjb3VudC9SZWdpc3RlclwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB0aGlzLmFwaU9wdGlvbnMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXNwID0+IFJlZ2lzdGVyUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBcbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIb3N0U2VydmljZSB9IGZyb20gJy4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQnVzaW5lc3NEYXRhSW50ZXJmYWNlLFxuICBDb250YWN0SW50ZXJmYWNlLFxuICBSZWdpc3RlclJlcXVlc3RJbnRlcmZhY2UsXG59IGZyb20gJy4vX2ludGVybmFsL2ludGVyZmFjZXMvJztcbmltcG9ydCB7IFJlZ2lzdGVyUmVxdWVzdCB9IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvJztcbmltcG9ydCB7IEFjY291bnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi9faW50ZXJuYWwvYWNjb3VudC5hcGkuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV3QWNjb3VudERldGFpbHNJbnRlcmZhY2Uge1xuICBidXNpbmVzc0lkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2NvdW50QXBpU2VydmljZTogQWNjb3VudEFwaVNlcnZpY2VcbiAgKSB7fVxuXG4gIHJlZ2lzdGVyKFxuICAgIGJ1c2luZXNzRGF0YTogQnVzaW5lc3NEYXRhSW50ZXJmYWNlLFxuICAgIGNvbnRhY3Q6IENvbnRhY3RJbnRlcmZhY2UsXG4gICAgYnVzaW5lc3NOYW1lOiBzdHJpbmcsXG4gICAgcGFydG5lcklkOiBzdHJpbmcsXG4gICAgbWFya2V0SWQ6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIHJlY2FwdGNoYTogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8TmV3QWNjb3VudERldGFpbHNJbnRlcmZhY2U+IHtcbiAgICAvLyBwcmVwYXJlIHJlcXVlc3QgZGF0YVxuICAgIGNvbnN0IHJlcXVlc3REYXRhOiBSZWdpc3RlclJlcXVlc3RJbnRlcmZhY2UgPSB7XG4gICAgICBidXNpbmVzc0RhdGEsXG4gICAgICBjb250YWN0LFxuICAgICAgYnVzaW5lc3NOYW1lLFxuICAgICAgcGFydG5lcklkLFxuICAgICAgbWFya2V0SWQsXG4gICAgICBlbWFpbCxcbiAgICAgIHJlY2FwdGNoYSxcbiAgICB9O1xuXG4gICAgLy8gaHR0cCByZXF1ZXN0IGNhbGxcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlZ2lzdGVyUmVxdWVzdChyZXF1ZXN0RGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudEFwaVNlcnZpY2UucmVnaXN0ZXIocmVxdWVzdCk7XG4gIH1cbn1cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gQVBJIFNlcnZpY2UuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgICAgICBHZXRUcmFja2VyUmVxdWVzdCxcbiAgICAgICAgR2V0VHJhY2tlclJlc3BvbnNlLFxuICAgICAgICBTZXRUcmFja2VyUmVxdWVzdCxcbiAgICAgICAgU2V0VHJhY2tlclJlc3BvbnNlLFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIEdldFRyYWNrZXJSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBHZXRUcmFja2VyUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgICAgIFNldFRyYWNrZXJSZXF1ZXN0SW50ZXJmYWNlLFxuICAgICAgICBTZXRUcmFja2VyUmVzcG9uc2VJbnRlcmZhY2UsXG59IGZyb20gJy4vaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHtIdHRwSGVhZGVycywgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0hvc3RTZXJ2aWNlfSBmcm9tICcuLi9fZ2VuZXJhdGVkL2hvc3Quc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEdldFN0YXJ0ZWRBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwaU9wdGlvbnMoKToge2hlYWRlcnM6IEh0dHBIZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW59IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRUcmFja2VyKHI6IEdldFRyYWNrZXJSZXF1ZXN0IHwgR2V0VHJhY2tlclJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldFRyYWNrZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8R2V0VHJhY2tlclJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8R2V0VHJhY2tlclJlcXVlc3Q+cikgOiBuZXcgR2V0VHJhY2tlclJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxHZXRUcmFja2VyUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL2J1c2luZXNzX2NlbnRlci52MS5HZXRTdGFydGVkL0dldFRyYWNrZXJcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBHZXRUcmFja2VyUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBzZXRUcmFja2VyKHI6IFNldFRyYWNrZXJSZXF1ZXN0IHwgU2V0VHJhY2tlclJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPFNldFRyYWNrZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gKCg8U2V0VHJhY2tlclJlcXVlc3Q+cikudG9BcGlKc29uKSA/ICg8U2V0VHJhY2tlclJlcXVlc3Q+cikgOiBuZXcgU2V0VHJhY2tlclJlcXVlc3Qocik7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTZXRUcmFja2VyUmVzcG9uc2VJbnRlcmZhY2U+KHRoaXMuaG9zdFNlcnZpY2UuaG9zdFdpdGhTY2hlbWUoKSArIFwiL2J1c2luZXNzX2NlbnRlci52MS5HZXRTdGFydGVkL1NldFRyYWNrZXJcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBTZXRUcmFja2VyUmVzcG9uc2UuZnJvbVByb3RvKHJlc3ApKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBcbn1cbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0hvc3RTZXJ2aWNlfSBmcm9tICcuL19nZW5lcmF0ZWQvaG9zdC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgR2V0VHJhY2tlclJlcXVlc3RJbnRlcmZhY2UsXG4gICAgR2V0VHJhY2tlclJlc3BvbnNlSW50ZXJmYWNlLFxuICAgIFNldFRyYWNrZXJSZXF1ZXN0SW50ZXJmYWNlLFxuICAgIFNldFRyYWNrZXJSZXNwb25zZUludGVyZmFjZSxcbn0gZnJvbSAnLi9faW50ZXJuYWwvaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHtcbiAgICBHZXRUcmFja2VyUmVxdWVzdCxcbiAgICBTZXRUcmFja2VyUmVxdWVzdCxcbn0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cy8nO1xuaW1wb3J0IHtHZXRTdGFydGVkQXBpU2VydmljZX0gZnJvbSAnLi9faW50ZXJuYWwvZ2V0LXN0YXJ0ZWQuYXBpLnNlcnZpY2UnXG5cblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgR2V0U3RhcnRlZFNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ2V0U3RhcnRlZEFwaVNlcnZpY2U6IEdldFN0YXJ0ZWRBcGlTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgc2V0VHJhY2tlcihwYXJ0bmVySWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIHRyYWNrZXI6IHN0cmluZ1xuICAgICk6IE9ic2VydmFibGU8U2V0VHJhY2tlclJlc3BvbnNlSW50ZXJmYWNlPiB7XG5cbiAgICAgICAgLy8gcHJlcGFyZSByZXF1ZXN0IGRhdGFcbiAgICAgICAgY29uc3QgcmVxdWVzdERhdGE6IFNldFRyYWNrZXJSZXF1ZXN0SW50ZXJmYWNlID0ge1xuICAgICAgICAgICAgcGFydG5lcklkOiBwYXJ0bmVySWQsXG4gICAgICAgICAgICB1c2VySWQ6IHVzZXJJZCxcbiAgICAgICAgICAgIHRyYWNrZXI6IHRyYWNrZXJcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gaHR0cCByZXF1ZXN0IGNhbGxcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBTZXRUcmFja2VyUmVxdWVzdChyZXF1ZXN0RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0YXJ0ZWRBcGlTZXJ2aWNlLnNldFRyYWNrZXIocmVxdWVzdClcbiAgICB9XG5cbiAgICBnZXRUcmFja2VyKHBhcnRuZXJJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZ1xuICAgICk6IE9ic2VydmFibGU8R2V0VHJhY2tlclJlc3BvbnNlSW50ZXJmYWNlPiB7XG5cbiAgICAgICAgLy8gcHJlcGFyZSByZXF1ZXN0IGRhdGFcbiAgICAgICAgY29uc3QgcmVxdWVzdERhdGE6IEdldFRyYWNrZXJSZXF1ZXN0SW50ZXJmYWNlID0ge1xuICAgICAgICAgICAgcGFydG5lcklkOiBwYXJ0bmVySWQsXG4gICAgICAgICAgICB1c2VySWQ6IHVzZXJJZFxuICAgICAgICB9XG5cblxuICAgICAgICAvLyBodHRwIHJlcXVlc3QgY2FsbFxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IEdldFRyYWNrZXJSZXF1ZXN0KHJlcXVlc3REYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRlZEFwaVNlcnZpY2UuZ2V0VHJhY2tlcihyZXF1ZXN0KVxuICAgIH1cbn1cbiIsIi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gQ29kZSBnZW5lcmF0ZWQgYnkgc2RrZ2VuXG4vLyBETyBOT1QgRURJVCEuXG4vL1xuLy8gQVBJIFNlcnZpY2UuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgICAgICBHZXRDcmVhdGVQYXNzd29yZFVybFJlcXVlc3QsXG4gICAgICAgIEdldENyZWF0ZVBhc3N3b3JkVXJsUmVzcG9uc2UsXG4gICAgICAgIFNlbmRXZWxjb21lRW1haWxSZXF1ZXN0LFxufSBmcm9tICcuL29iamVjdHMvJztcbmltcG9ydCB7XG4gICAgICAgIEdldENyZWF0ZVBhc3N3b3JkVXJsUmVxdWVzdEludGVyZmFjZSxcbiAgICAgICAgR2V0Q3JlYXRlUGFzc3dvcmRVcmxSZXNwb25zZUludGVyZmFjZSxcbiAgICAgICAgU2VuZFdlbGNvbWVFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG59IGZyb20gJy4vaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHtIdHRwSGVhZGVycywgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0hvc3RTZXJ2aWNlfSBmcm9tICcuLi9fZ2VuZXJhdGVkL2hvc3Quc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFVzZXJBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBob3N0U2VydmljZTogSG9zdFNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwaU9wdGlvbnMoKToge2hlYWRlcnM6IEh0dHBIZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW59IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRDcmVhdGVQYXNzd29yZFVybChyOiBHZXRDcmVhdGVQYXNzd29yZFVybFJlcXVlc3QgfCBHZXRDcmVhdGVQYXNzd29yZFVybFJlcXVlc3RJbnRlcmZhY2UpOiBPYnNlcnZhYmxlPEdldENyZWF0ZVBhc3N3b3JkVXJsUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPEdldENyZWF0ZVBhc3N3b3JkVXJsUmVxdWVzdD5yKS50b0FwaUpzb24pID8gKDxHZXRDcmVhdGVQYXNzd29yZFVybFJlcXVlc3Q+cikgOiBuZXcgR2V0Q3JlYXRlUGFzc3dvcmRVcmxSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8R2V0Q3JlYXRlUGFzc3dvcmRVcmxSZXNwb25zZUludGVyZmFjZT4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvYnVzaW5lc3NfY2VudGVyLnYxLlVzZXIvR2V0Q3JlYXRlUGFzc3dvcmRVcmxcIiwgcmVxdWVzdC50b0FwaUpzb24oKSwgdGhpcy5hcGlPcHRpb25zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcCA9PiBHZXRDcmVhdGVQYXNzd29yZFVybFJlc3BvbnNlLmZyb21Qcm90byhyZXNwKSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgc2VuZFdlbGNvbWVFbWFpbChyOiBTZW5kV2VsY29tZUVtYWlsUmVxdWVzdCB8IFNlbmRXZWxjb21lRW1haWxSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8bnVsbD4+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9ICgoPFNlbmRXZWxjb21lRW1haWxSZXF1ZXN0PnIpLnRvQXBpSnNvbikgPyAoPFNlbmRXZWxjb21lRW1haWxSZXF1ZXN0PnIpIDogbmV3IFNlbmRXZWxjb21lRW1haWxSZXF1ZXN0KHIpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8bnVsbD4odGhpcy5ob3N0U2VydmljZS5ob3N0V2l0aFNjaGVtZSgpICsgXCIvYnVzaW5lc3NfY2VudGVyLnYxLlVzZXIvU2VuZFdlbGNvbWVFbWFpbFwiLCByZXF1ZXN0LnRvQXBpSnNvbigpLCB7Li4udGhpcy5hcGlPcHRpb25zKCksIG9ic2VydmU6ICdyZXNwb25zZSd9KTtcbiAgICB9XG4gICAgXG59XG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SG9zdFNlcnZpY2V9IGZyb20gJy4vX2dlbmVyYXRlZC9ob3N0LnNlcnZpY2UnO1xuaW1wb3J0IHtTZW5kV2VsY29tZUVtYWlsUmVxdWVzdEludGVyZmFjZX0gZnJvbSAnLi9faW50ZXJuYWwvaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHtTZW5kV2VsY29tZUVtYWlsUmVxdWVzdH0gZnJvbSAnLi9faW50ZXJuYWwvb2JqZWN0cyc7XG5pbXBvcnQge1VzZXJBcGlTZXJ2aWNlfSBmcm9tICcuL19pbnRlcm5hbCc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgIHByaXZhdGUgaG9zdFNlcnZpY2U6IEhvc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJBcGlTZXJ2aWNlOiBVc2VyQXBpU2VydmljZVxuICAgICkge31cblxuICAgIHNlbmRXZWxjb21lRW1haWwocGFydG5lcklkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCBsb2dpblVybDogc3RyaW5nICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3REYXRhOiBTZW5kV2VsY29tZUVtYWlsUmVxdWVzdEludGVyZmFjZSA9IHtcbiAgICAgICAgICAgIHBhcnRuZXJJZDogcGFydG5lcklkLFxuICAgICAgICAgICAgdXNlcklkOiB1c2VySWQsXG4gICAgICAgICAgICBsb2dpblVybDogbG9naW5VcmxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgU2VuZFdlbGNvbWVFbWFpbFJlcXVlc3QocmVxdWVzdERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyQXBpU2VydmljZS5zZW5kV2VsY29tZUVtYWlsKHJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IHJlcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsTUFJYSxXQUFXOzs7O0lBSXBCLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0tBQ3pEOzs7O0lBRUQsSUFBSTtRQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNyQjtRQUVELFFBQVEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRTtZQUM1QyxLQUFLLFdBQVcsQ0FBQyxLQUFLO2dCQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLHdDQUF3QyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxXQUFXLENBQUMsSUFBSTtnQkFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU07WUFDVixLQUFLLFdBQVcsQ0FBQyxJQUFJO2dCQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLG9DQUFvQyxDQUFDO2dCQUNsRCxNQUFNO1lBQ1YsS0FBSyxXQUFXLENBQUMsSUFBSTtnQkFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxvQ0FBb0MsQ0FBQztnQkFDbEQsTUFBTTtTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3JCOzs7O0lBRUQsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDMUI7UUFFRCxRQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUU7WUFDNUMsS0FBSyxXQUFXLENBQUMs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