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