@infrab4a/connect-angular 4.2.0-beta.0 → 4.2.0-beta.1

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 (65) hide show
  1. package/angular-firestore.module.d.ts +1 -1
  2. package/angular-hasura-graphql.module.d.ts +1 -1
  3. package/{esm2022 → esm2020}/angular-connect.module.mjs +17 -17
  4. package/esm2020/angular-elastic-search.module.mjs +34 -0
  5. package/esm2020/angular-firebase-auth.module.mjs +130 -0
  6. package/esm2020/angular-firestore.module.mjs +459 -0
  7. package/esm2020/angular-hasura-graphql.module.mjs +243 -0
  8. package/{esm2022 → esm2020}/services/auth.service.mjs +4 -4
  9. package/{esm2022 → esm2020}/services/cart.service.mjs +4 -4
  10. package/{esm2022 → esm2020}/services/catalog/adapters/new-category-structure.adapter.mjs +4 -4
  11. package/{esm2022 → esm2020}/services/catalog/adapters/old-category-structure.adapter.mjs +4 -4
  12. package/{esm2022 → esm2020}/services/catalog/catalog.service.mjs +4 -4
  13. package/{esm2022 → esm2020}/services/catalog/category.service.mjs +4 -4
  14. package/{esm2022 → esm2020}/services/catalog/wishlist.service.mjs +4 -4
  15. package/{esm2022 → esm2020}/services/checkout-subscription.service.mjs +4 -4
  16. package/{esm2022 → esm2020}/services/checkout.service.mjs +4 -4
  17. package/{esm2022 → esm2020}/services/coupon.service.mjs +4 -4
  18. package/{esm2022 → esm2020}/services/home-shop.service.mjs +11 -11
  19. package/{esm2022 → esm2020}/services/order.service.mjs +4 -4
  20. package/{esm2022 → esm2020}/services/shipping.service.mjs +4 -4
  21. package/fesm2015/infrab4a-connect-angular.mjs +2196 -0
  22. package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
  23. package/{fesm2022 → fesm2020}/infrab4a-connect-angular.mjs +411 -411
  24. package/{fesm2022 → fesm2020}/infrab4a-connect-angular.mjs.map +1 -1
  25. package/package.json +12 -6
  26. package/services/cart.service.d.ts +1 -1
  27. package/services/catalog/catalog.service.d.ts +5 -5
  28. package/services/catalog/types/product-sort.type.d.ts +1 -1
  29. package/services/home-shop.service.d.ts +1 -1
  30. package/services/types/required-checkout-data.type.d.ts +1 -1
  31. package/services/types/required-checkout-subscription-data.type.d.ts +1 -1
  32. package/types/firebase-app-config.type.d.ts +1 -1
  33. package/esm2022/angular-elastic-search.module.mjs +0 -34
  34. package/esm2022/angular-firebase-auth.module.mjs +0 -130
  35. package/esm2022/angular-firestore.module.mjs +0 -459
  36. package/esm2022/angular-hasura-graphql.module.mjs +0 -243
  37. /package/{esm2022 → esm2020}/consts/backend-url.const.mjs +0 -0
  38. /package/{esm2022 → esm2020}/consts/category-structure.mjs +0 -0
  39. /package/{esm2022 → esm2020}/consts/default-shop.const.mjs +0 -0
  40. /package/{esm2022 → esm2020}/consts/es-config.const.mjs +0 -0
  41. /package/{esm2022 → esm2020}/consts/firebase-const.mjs +0 -0
  42. /package/{esm2022 → esm2020}/consts/hasura-options.const.mjs +0 -0
  43. /package/{esm2022 → esm2020}/consts/index.mjs +0 -0
  44. /package/{esm2022 → esm2020}/helpers/index.mjs +0 -0
  45. /package/{esm2022 → esm2020}/helpers/mobile-operation-system-checker.helper.mjs +0 -0
  46. /package/{esm2022 → esm2020}/index.mjs +0 -0
  47. /package/{esm2022 → esm2020}/infrab4a-connect-angular.mjs +0 -0
  48. /package/{esm2022 → esm2020}/services/catalog/adapters/category-structure.adapter.mjs +0 -0
  49. /package/{esm2022 → esm2020}/services/catalog/adapters/index.mjs +0 -0
  50. /package/{esm2022 → esm2020}/services/catalog/enums/index.mjs +0 -0
  51. /package/{esm2022 → esm2020}/services/catalog/enums/product-sorts.enum.mjs +0 -0
  52. /package/{esm2022 → esm2020}/services/catalog/index.mjs +0 -0
  53. /package/{esm2022 → esm2020}/services/catalog/models/category-with-tree.model.mjs +0 -0
  54. /package/{esm2022 → esm2020}/services/catalog/models/index.mjs +0 -0
  55. /package/{esm2022 → esm2020}/services/catalog/types/index.mjs +0 -0
  56. /package/{esm2022 → esm2020}/services/catalog/types/product-sort.type.mjs +0 -0
  57. /package/{esm2022 → esm2020}/services/helpers/index.mjs +0 -0
  58. /package/{esm2022 → esm2020}/services/helpers/util.helper.mjs +0 -0
  59. /package/{esm2022 → esm2020}/services/index.mjs +0 -0
  60. /package/{esm2022 → esm2020}/services/types/index.mjs +0 -0
  61. /package/{esm2022 → esm2020}/services/types/required-checkout-data.type.mjs +0 -0
  62. /package/{esm2022 → esm2020}/services/types/required-checkout-subscription-data.type.mjs +0 -0
  63. /package/{esm2022 → esm2020}/services/types/shipping-methods.type.mjs +0 -0
  64. /package/{esm2022 → esm2020}/types/firebase-app-config.type.mjs +0 -0
  65. /package/{esm2022 → esm2020}/types/index.mjs +0 -0
@@ -0,0 +1,459 @@
1
+ import { isPlatformBrowser } from '@angular/common';
2
+ import { NgModule, PLATFORM_ID } from '@angular/core';
3
+ import { FirebaseApp, provideFirebaseApp } from '@angular/fire/app';
4
+ import { enableIndexedDbPersistence, Firestore, getFirestore, initializeFirestore, provideFirestore, } from '@angular/fire/firestore';
5
+ import { Buy2WinFirestoreRepository, CampaignDashboardFirestoreRepository, CampaignHashtagFirestoreRepository, CategoryFirestoreRepository, CheckoutFirestoreRepository, CheckoutSubscriptionFirestoreRepository, CouponFirestoreRepository, HomeFirestoreRepository, LeadFirestoreRepository, LegacyOrderFirestoreRepository, OrderFirestoreRepository, PaymentFirestoreRepository, ProductFirestoreRepository, ProductVariantFirestoreRepository, ShopMenuFirestoreRepository, ShopSettingsFirestoreRepository, SubscriptionEditionFirestoreRepository, SubscriptionFirestoreRepository, SubscriptionPaymentFirestoreRepository, SubscriptionPlanFirestoreRepository, SubscriptionProductFirestoreRepository, UserAddressFirestoreRepository, UserBeautyProfileFirestoreRepository, UserFirestoreRepository, UserPaymentMethodFirestoreRepository, } from '@infrab4a/connect';
6
+ import { initializeApp } from 'firebase/app';
7
+ import { AngularElasticSeachModule } from './angular-elastic-search.module';
8
+ import { ES_CONFIG, FIREBASE_APP_NAME, FIREBASE_OPTIONS } from './consts';
9
+ import { MobileOperationSystemCheckerHelper } from './helpers';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/fire/app";
12
+ import * as i2 from "@angular/fire/firestore";
13
+ export class AngularFirestoreModule {
14
+ static initializeApp(options, nameOrConfig) {
15
+ return {
16
+ ngModule: AngularFirestoreModule,
17
+ providers: [
18
+ { provide: FIREBASE_OPTIONS, useValue: options.firebase },
19
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
20
+ { provide: ES_CONFIG, useValue: options.elasticSearch },
21
+ ],
22
+ };
23
+ }
24
+ }
25
+ AngularFirestoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularFirestoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
+ AngularFirestoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.0", ngImport: i0, type: AngularFirestoreModule, imports: [AngularElasticSeachModule, i1.FirebaseAppModule, i2.FirestoreModule] });
27
+ AngularFirestoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularFirestoreModule, providers: [
28
+ {
29
+ provide: 'FirestoreOptions',
30
+ useFactory: (firestore, platformId) => ({
31
+ firestore,
32
+ interceptors: {
33
+ request: (request) => {
34
+ if (isPlatformBrowser(platformId))
35
+ return request;
36
+ const interval = setInterval(() => { }, 100);
37
+ request.interval = interval;
38
+ return request;
39
+ },
40
+ response: (response, request) => {
41
+ if (isPlatformBrowser(platformId))
42
+ return response;
43
+ clearInterval(request.interval);
44
+ return response;
45
+ },
46
+ },
47
+ }),
48
+ deps: [Firestore, PLATFORM_ID],
49
+ },
50
+ {
51
+ provide: 'BeautyProfileRepository',
52
+ useFactory: (config, userRepository) => {
53
+ return new UserBeautyProfileFirestoreRepository(config, userRepository);
54
+ },
55
+ deps: ['FirestoreOptions', 'UserRepository'],
56
+ },
57
+ {
58
+ provide: 'Buy2WinRepository',
59
+ useFactory: (options) => {
60
+ return new Buy2WinFirestoreRepository(options);
61
+ },
62
+ deps: ['FirestoreOptions'],
63
+ },
64
+ {
65
+ provide: CategoryFirestoreRepository,
66
+ useFactory: (options) => {
67
+ return new CategoryFirestoreRepository(options);
68
+ },
69
+ deps: ['FirestoreOptions'],
70
+ },
71
+ {
72
+ provide: 'CheckoutRepository',
73
+ useFactory: (options) => {
74
+ return new CheckoutFirestoreRepository(options);
75
+ },
76
+ deps: ['FirestoreOptions'],
77
+ },
78
+ {
79
+ provide: 'CheckoutSubscriptionRepository',
80
+ useFactory: (options) => {
81
+ return new CheckoutSubscriptionFirestoreRepository(options);
82
+ },
83
+ deps: ['FirestoreOptions'],
84
+ },
85
+ {
86
+ provide: 'CouponRepository',
87
+ useFactory: (options) => {
88
+ return new CouponFirestoreRepository(options);
89
+ },
90
+ deps: ['FirestoreOptions'],
91
+ },
92
+ {
93
+ provide: 'CampaignHashtagRepository',
94
+ useFactory: (options) => {
95
+ return new CampaignHashtagFirestoreRepository(options);
96
+ },
97
+ deps: ['FirestoreOptions'],
98
+ },
99
+ {
100
+ provide: 'CampaignDashboardRepository',
101
+ useFactory: (options) => {
102
+ return new CampaignDashboardFirestoreRepository(options);
103
+ },
104
+ deps: ['FirestoreOptions'],
105
+ },
106
+ {
107
+ provide: 'EditionRepository',
108
+ useFactory: (options, subscriptionRepository) => {
109
+ return new SubscriptionEditionFirestoreRepository(options, subscriptionRepository);
110
+ },
111
+ deps: ['FirestoreOptions', 'SubscriptionRepository'],
112
+ },
113
+ {
114
+ provide: 'HomeRepository',
115
+ useFactory: (options) => {
116
+ return new HomeFirestoreRepository(options);
117
+ },
118
+ deps: ['FirestoreOptions'],
119
+ },
120
+ {
121
+ provide: 'LeadRepository',
122
+ useFactory: (options) => {
123
+ return new LeadFirestoreRepository(options);
124
+ },
125
+ deps: ['FirestoreOptions'],
126
+ },
127
+ {
128
+ provide: 'LegacyOrderRepository',
129
+ useFactory: (options) => {
130
+ return new LegacyOrderFirestoreRepository(options);
131
+ },
132
+ deps: ['FirestoreOptions'],
133
+ },
134
+ {
135
+ provide: 'ShopMenuRepository',
136
+ useFactory: (options) => {
137
+ return new ShopMenuFirestoreRepository(options);
138
+ },
139
+ deps: ['FirestoreOptions'],
140
+ },
141
+ {
142
+ provide: 'OrderRepository',
143
+ useFactory: (options) => {
144
+ return new OrderFirestoreRepository(options);
145
+ },
146
+ deps: ['FirestoreOptions'],
147
+ },
148
+ {
149
+ provide: 'PaymentRepository',
150
+ useFactory: (options) => {
151
+ return new PaymentFirestoreRepository(options);
152
+ },
153
+ deps: ['FirestoreOptions'],
154
+ },
155
+ {
156
+ provide: ProductFirestoreRepository,
157
+ useFactory: (options) => {
158
+ return new ProductFirestoreRepository(options);
159
+ },
160
+ deps: ['FirestoreOptions'],
161
+ },
162
+ {
163
+ provide: 'ShopSettingsRepository',
164
+ useFactory: (options) => {
165
+ return new ShopSettingsFirestoreRepository(options);
166
+ },
167
+ deps: ['FirestoreOptions'],
168
+ },
169
+ {
170
+ provide: 'SubscriptionPaymentRepository',
171
+ useFactory: (options, subscriptionRepository) => {
172
+ return new SubscriptionPaymentFirestoreRepository(options, subscriptionRepository);
173
+ },
174
+ deps: ['FirestoreOptions', 'SubscriptionRepository'],
175
+ },
176
+ {
177
+ provide: 'SubscriptionPlanRepository',
178
+ useFactory: (options) => {
179
+ return new SubscriptionPlanFirestoreRepository(options);
180
+ },
181
+ deps: ['FirestoreOptions'],
182
+ },
183
+ {
184
+ provide: 'SubscriptionProductRepository',
185
+ useFactory: (options) => {
186
+ return new SubscriptionProductFirestoreRepository(options);
187
+ },
188
+ deps: ['FirestoreOptions'],
189
+ },
190
+ {
191
+ provide: 'SubscriptionRepository',
192
+ useFactory: (options) => {
193
+ return new SubscriptionFirestoreRepository(options);
194
+ },
195
+ deps: ['FirestoreOptions'],
196
+ },
197
+ {
198
+ provide: 'UserRepository',
199
+ useFactory: (options) => {
200
+ return new UserFirestoreRepository(options);
201
+ },
202
+ deps: ['FirestoreOptions'],
203
+ },
204
+ {
205
+ provide: 'UserAddressRepository',
206
+ useFactory: (options, userRepository) => {
207
+ return new UserAddressFirestoreRepository(options, userRepository);
208
+ },
209
+ deps: ['FirestoreOptions', 'UserRepository'],
210
+ },
211
+ {
212
+ provide: 'UserPaymentMethodRepository',
213
+ useFactory: (options, userRepository) => {
214
+ return new UserPaymentMethodFirestoreRepository(options, userRepository);
215
+ },
216
+ deps: ['FirestoreOptions', 'UserRepository'],
217
+ },
218
+ {
219
+ provide: ProductVariantFirestoreRepository,
220
+ useFactory: (options, productRepository) => {
221
+ return new ProductVariantFirestoreRepository(options, productRepository);
222
+ },
223
+ deps: ['FirestoreOptions', ProductFirestoreRepository],
224
+ },
225
+ ], imports: [AngularElasticSeachModule,
226
+ provideFirebaseApp((injector) => {
227
+ const appName = injector.get(FIREBASE_APP_NAME);
228
+ return appName
229
+ ? initializeApp(injector.get(FIREBASE_OPTIONS), appName)
230
+ : initializeApp(injector.get(FIREBASE_OPTIONS));
231
+ }),
232
+ provideFirestore((injector) => {
233
+ if (!MobileOperationSystemCheckerHelper.isAppleDevice())
234
+ return getFirestore();
235
+ const firestore = initializeFirestore(injector.get(FirebaseApp), { experimentalForceLongPolling: true });
236
+ enableIndexedDbPersistence(firestore).catch(console.error);
237
+ return firestore;
238
+ })] });
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularFirestoreModule, decorators: [{
240
+ type: NgModule,
241
+ args: [{
242
+ imports: [
243
+ AngularElasticSeachModule,
244
+ provideFirebaseApp((injector) => {
245
+ const appName = injector.get(FIREBASE_APP_NAME);
246
+ return appName
247
+ ? initializeApp(injector.get(FIREBASE_OPTIONS), appName)
248
+ : initializeApp(injector.get(FIREBASE_OPTIONS));
249
+ }),
250
+ provideFirestore((injector) => {
251
+ if (!MobileOperationSystemCheckerHelper.isAppleDevice())
252
+ return getFirestore();
253
+ const firestore = initializeFirestore(injector.get(FirebaseApp), { experimentalForceLongPolling: true });
254
+ enableIndexedDbPersistence(firestore).catch(console.error);
255
+ return firestore;
256
+ }),
257
+ ],
258
+ providers: [
259
+ {
260
+ provide: 'FirestoreOptions',
261
+ useFactory: (firestore, platformId) => ({
262
+ firestore,
263
+ interceptors: {
264
+ request: (request) => {
265
+ if (isPlatformBrowser(platformId))
266
+ return request;
267
+ const interval = setInterval(() => { }, 100);
268
+ request.interval = interval;
269
+ return request;
270
+ },
271
+ response: (response, request) => {
272
+ if (isPlatformBrowser(platformId))
273
+ return response;
274
+ clearInterval(request.interval);
275
+ return response;
276
+ },
277
+ },
278
+ }),
279
+ deps: [Firestore, PLATFORM_ID],
280
+ },
281
+ {
282
+ provide: 'BeautyProfileRepository',
283
+ useFactory: (config, userRepository) => {
284
+ return new UserBeautyProfileFirestoreRepository(config, userRepository);
285
+ },
286
+ deps: ['FirestoreOptions', 'UserRepository'],
287
+ },
288
+ {
289
+ provide: 'Buy2WinRepository',
290
+ useFactory: (options) => {
291
+ return new Buy2WinFirestoreRepository(options);
292
+ },
293
+ deps: ['FirestoreOptions'],
294
+ },
295
+ {
296
+ provide: CategoryFirestoreRepository,
297
+ useFactory: (options) => {
298
+ return new CategoryFirestoreRepository(options);
299
+ },
300
+ deps: ['FirestoreOptions'],
301
+ },
302
+ {
303
+ provide: 'CheckoutRepository',
304
+ useFactory: (options) => {
305
+ return new CheckoutFirestoreRepository(options);
306
+ },
307
+ deps: ['FirestoreOptions'],
308
+ },
309
+ {
310
+ provide: 'CheckoutSubscriptionRepository',
311
+ useFactory: (options) => {
312
+ return new CheckoutSubscriptionFirestoreRepository(options);
313
+ },
314
+ deps: ['FirestoreOptions'],
315
+ },
316
+ {
317
+ provide: 'CouponRepository',
318
+ useFactory: (options) => {
319
+ return new CouponFirestoreRepository(options);
320
+ },
321
+ deps: ['FirestoreOptions'],
322
+ },
323
+ {
324
+ provide: 'CampaignHashtagRepository',
325
+ useFactory: (options) => {
326
+ return new CampaignHashtagFirestoreRepository(options);
327
+ },
328
+ deps: ['FirestoreOptions'],
329
+ },
330
+ {
331
+ provide: 'CampaignDashboardRepository',
332
+ useFactory: (options) => {
333
+ return new CampaignDashboardFirestoreRepository(options);
334
+ },
335
+ deps: ['FirestoreOptions'],
336
+ },
337
+ {
338
+ provide: 'EditionRepository',
339
+ useFactory: (options, subscriptionRepository) => {
340
+ return new SubscriptionEditionFirestoreRepository(options, subscriptionRepository);
341
+ },
342
+ deps: ['FirestoreOptions', 'SubscriptionRepository'],
343
+ },
344
+ {
345
+ provide: 'HomeRepository',
346
+ useFactory: (options) => {
347
+ return new HomeFirestoreRepository(options);
348
+ },
349
+ deps: ['FirestoreOptions'],
350
+ },
351
+ {
352
+ provide: 'LeadRepository',
353
+ useFactory: (options) => {
354
+ return new LeadFirestoreRepository(options);
355
+ },
356
+ deps: ['FirestoreOptions'],
357
+ },
358
+ {
359
+ provide: 'LegacyOrderRepository',
360
+ useFactory: (options) => {
361
+ return new LegacyOrderFirestoreRepository(options);
362
+ },
363
+ deps: ['FirestoreOptions'],
364
+ },
365
+ {
366
+ provide: 'ShopMenuRepository',
367
+ useFactory: (options) => {
368
+ return new ShopMenuFirestoreRepository(options);
369
+ },
370
+ deps: ['FirestoreOptions'],
371
+ },
372
+ {
373
+ provide: 'OrderRepository',
374
+ useFactory: (options) => {
375
+ return new OrderFirestoreRepository(options);
376
+ },
377
+ deps: ['FirestoreOptions'],
378
+ },
379
+ {
380
+ provide: 'PaymentRepository',
381
+ useFactory: (options) => {
382
+ return new PaymentFirestoreRepository(options);
383
+ },
384
+ deps: ['FirestoreOptions'],
385
+ },
386
+ {
387
+ provide: ProductFirestoreRepository,
388
+ useFactory: (options) => {
389
+ return new ProductFirestoreRepository(options);
390
+ },
391
+ deps: ['FirestoreOptions'],
392
+ },
393
+ {
394
+ provide: 'ShopSettingsRepository',
395
+ useFactory: (options) => {
396
+ return new ShopSettingsFirestoreRepository(options);
397
+ },
398
+ deps: ['FirestoreOptions'],
399
+ },
400
+ {
401
+ provide: 'SubscriptionPaymentRepository',
402
+ useFactory: (options, subscriptionRepository) => {
403
+ return new SubscriptionPaymentFirestoreRepository(options, subscriptionRepository);
404
+ },
405
+ deps: ['FirestoreOptions', 'SubscriptionRepository'],
406
+ },
407
+ {
408
+ provide: 'SubscriptionPlanRepository',
409
+ useFactory: (options) => {
410
+ return new SubscriptionPlanFirestoreRepository(options);
411
+ },
412
+ deps: ['FirestoreOptions'],
413
+ },
414
+ {
415
+ provide: 'SubscriptionProductRepository',
416
+ useFactory: (options) => {
417
+ return new SubscriptionProductFirestoreRepository(options);
418
+ },
419
+ deps: ['FirestoreOptions'],
420
+ },
421
+ {
422
+ provide: 'SubscriptionRepository',
423
+ useFactory: (options) => {
424
+ return new SubscriptionFirestoreRepository(options);
425
+ },
426
+ deps: ['FirestoreOptions'],
427
+ },
428
+ {
429
+ provide: 'UserRepository',
430
+ useFactory: (options) => {
431
+ return new UserFirestoreRepository(options);
432
+ },
433
+ deps: ['FirestoreOptions'],
434
+ },
435
+ {
436
+ provide: 'UserAddressRepository',
437
+ useFactory: (options, userRepository) => {
438
+ return new UserAddressFirestoreRepository(options, userRepository);
439
+ },
440
+ deps: ['FirestoreOptions', 'UserRepository'],
441
+ },
442
+ {
443
+ provide: 'UserPaymentMethodRepository',
444
+ useFactory: (options, userRepository) => {
445
+ return new UserPaymentMethodFirestoreRepository(options, userRepository);
446
+ },
447
+ deps: ['FirestoreOptions', 'UserRepository'],
448
+ },
449
+ {
450
+ provide: ProductVariantFirestoreRepository,
451
+ useFactory: (options, productRepository) => {
452
+ return new ProductVariantFirestoreRepository(options, productRepository);
453
+ },
454
+ deps: ['FirestoreOptions', ProductFirestoreRepository],
455
+ },
456
+ ],
457
+ }]
458
+ }] });
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1maXJlc3RvcmUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9hbmd1bGFyLWZpcmVzdG9yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDbkQsT0FBTyxFQUFpQyxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQW1CLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEYsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixTQUFTLEVBQ1QsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixnQkFBZ0IsR0FDakIsTUFBTSx5QkFBeUIsQ0FBQTtBQUNoQyxPQUFPLEVBR0wsMEJBQTBCLEVBRTFCLG9DQUFvQyxFQUVwQyxrQ0FBa0MsRUFFbEMsMkJBQTJCLEVBRTNCLDJCQUEyQixFQUUzQix1Q0FBdUMsRUFFdkMseUJBQXlCLEVBS3pCLHVCQUF1QixFQUV2Qix1QkFBdUIsRUFFdkIsOEJBQThCLEVBRTlCLHdCQUF3QixFQUV4QiwwQkFBMEIsRUFFMUIsMEJBQTBCLEVBRTFCLGlDQUFpQyxFQUNqQywyQkFBMkIsRUFFM0IsK0JBQStCLEVBRS9CLHNDQUFzQyxFQUN0QywrQkFBK0IsRUFDL0Isc0NBQXNDLEVBRXRDLG1DQUFtQyxFQUVuQyxzQ0FBc0MsRUFHdEMsOEJBQThCLEVBRTlCLG9DQUFvQyxFQUNwQyx1QkFBdUIsRUFDdkIsb0NBQW9DLEdBSXJDLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUU1QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGdCQUFn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RSxPQUFPLEVBQUUsdUJBQXVCOzRCQUNoQyxVQUFVLEVBQUUsQ0FBQyxPQUF5QixFQUFFLGNBQXVDLEVBQXlCLEVBQUU7Z0NBQ3hHLE9BQU8sSUFBSSw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7NEJBQ3BFLENBQUM7NEJBQ0QsSUFBSSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUM7eUJBQzdDO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSw2QkFBNkI7NEJBQ3RDLFVBQVUsRUFBRSxDQUFDLE9BQXlCLEVBQUUsY0FBdUMsRUFBK0IsRUFBRTtnQ0FDOUcsT0FBTyxJQUFJLG9DQUFvQyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQTs0QkFDMUUsQ0FBQzs0QkFDRCxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsQ0FBQzt5QkFDN0M7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGlDQUFpQzs0QkFDMUMsVUFBVSxFQUFFLENBQUMsT0FBeUIsRUFBRSxpQkFBNkMsRUFBcUIsRUFBRTtnQ0FDMUcsT0FBTyxJQUFJLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFBOzRCQUMxRSxDQUFDOzRCQUNELElBQUksRUFBRSxDQUFDLGtCQUFrQixFQUFFLDBCQUEwQixDQUFDO3lCQUN2RDtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgSW5qZWN0b3IsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGaXJlYmFzZUFwcCwgRmlyZWJhc2VPcHRpb25zLCBwcm92aWRlRmlyZWJhc2VBcHAgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCdcbmltcG9ydCB7XG4gIGVuYWJsZUluZGV4ZWREYlBlcnNpc3RlbmNlLFxuICBGaXJlc3RvcmUsXG4gIGdldEZpcmVzdG9yZSxcbiAgaW5pdGlhbGl6ZUZpcmVzdG9yZSxcbiAgcHJvdmlkZUZpcmVzdG9yZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnXG5pbXBvcnQge1xuICBBeGlvc0VsYXN0aWNTZWFyY2hDb25maWcsXG4gIEJlYXV0eVByb2ZpbGVSZXBvc2l0b3J5LFxuICBCdXkyV2luRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgQnV5MldpblJlcG9zaXRvcnksXG4gIENhbXBhaWduRGFzaGJvYXJkRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgQ2FtcGFpZ25EYXNoYm9hcmRSZXBvc2l0b3J5LFxuICBDYW1wYWlnbkhhc2h0YWdGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBDYW1wYWlnbkhhc2h0YWdSZXBvc2l0b3J5LFxuICBDYXRlZ29yeUZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIENhdGVnb3J5UmVwb3NpdG9yeSxcbiAgQ2hlY2tvdXRGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBDaGVja291dFJlcG9zaXRvcnksXG4gIENoZWNrb3V0U3Vic2NyaXB0aW9uRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgQ2hlY2tvdXRTdWJzY3JpcHRpb25SZXBvc2l0b3J5LFxuICBDb3Vwb25GaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBDb3Vwb25SZXBvc2l0b3J5LFxuICBFZGl0aW9uUmVwb3NpdG9yeSxcbiAgRmlyZXN0b3JlQ29uc3RydWN0b3JQYXJhbXMsXG4gIEZpcmVzdG9yZUludGVydGNlcHRvclJlcXVlc3RQYXJhbXMsXG4gIEhvbWVGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBIb21lUmVwb3NpdG9yeSxcbiAgTGVhZEZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIExlYWRSZXBvc2l0b3J5LFxuICBMZWdhY3lPcmRlckZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIExlZ2FjeU9yZGVyUmVwb3NpdG9yeSxcbiAgT3JkZXJGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBPcmRlclJlcG9zaXRvcnksXG4gIFBheW1lbnRGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBQYXltZW50UmVwb3NpdG9yeSxcbiAgUHJvZHVjdEZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIFByb2R1Y3RSZXBvc2l0b3J5LFxuICBQcm9kdWN0VmFyaWFudEZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIFNob3BNZW51RmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgU2hvcE1lbnVSZXBvc2l0b3J5LFxuICBTaG9wU2V0dGluZ3NGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBTaG9wU2V0dGluZ3NSZXBvc2l0b3J5LFxuICBTdWJzY3JpcHRpb25FZGl0aW9uRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgU3Vic2NyaXB0aW9uRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgU3Vic2NyaXB0aW9uUGF5bWVudEZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIFN1YnNjcmlwdGlvblBheW1lbnRSZXBvc2l0b3J5LFxuICBTdWJzY3JpcHRpb25QbGFuRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgU3Vic2NyaXB0aW9uUGxhblJlcG9zaXRvcnksXG4gIFN1YnNjcmlwdGlvblByb2R1Y3RGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBTdWJzY3JpcHRpb25Qcm9kdWN0UmVwb3NpdG9yeSxcbiAgU3Vic2NyaXB0aW9uUmVwb3NpdG9yeSxcbiAgVXNlckFkZHJlc3NGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICBVc2VyQWRkcmVzc1JlcG9zaXRvcnksXG4gIFVzZXJCZWF1dHlQcm9maWxlRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgVXNlckZpcmVzdG9yZVJlcG9zaXRvcnksXG4gIFVzZXJQYXltZW50TWV0aG9kRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgVXNlclBheW1lbnRNZXRob2RSZXBvc2l0b3J5LFxuICBVc2VyUmVwb3NpdG9yeSxcbiAgVmFyaWFudFJlcG9zaXRvcnksXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgaW5pdGlhbGl6ZUFwcCB9IGZyb20gJ2ZpcmViYXNlL2FwcCdcblxuaW1wb3J0IHsgQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSB9IGZyb20gJy4vYW5ndWxhci1lbGFzdGljLXNlYXJjaC5tb2R1bGUnXG5pbXBvcnQgeyBFU19DT05GSUcsIEZJUkVCQVNFX0FQUF9OQU1FLCBGSVJFQkFTRV9PUFRJT05TIH0gZnJvbSAnLi9jb25zdHMnXG5pbXBvcnQgeyBNb2JpbGVPcGVyYXRpb25TeXN0ZW1DaGVja2VySGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzJ1xuaW1wb3J0IHsgRmlyZWJhc2VBcHBDb25maWcgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgdHlwZSBGaXJlc3RvcmVPcHRpb25zID0gUGljazxGaXJlc3RvcmVDb25zdHJ1Y3RvclBhcmFtczxhbnk+LCAnZmlyZXN0b3JlJyB8ICdpbnRlcmNlcHRvcnMnPlxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSxcbiAgICBwcm92aWRlRmlyZWJhc2VBcHAoKGluamVjdG9yOiBJbmplY3RvcikgPT4ge1xuICAgICAgY29uc3QgYXBwTmFtZSA9IGluamVjdG9yLmdldChGSVJFQkFTRV9BUFBfTkFNRSlcblxuICAgICAgcmV0dXJuIGFwcE5hbWVcbiAgICAgICAgPyBpbml0aWFsaXplQXBwKGluamVjdG9yLmdldChGSVJFQkFTRV9PUFRJT05TKSwgYXBwTmFtZSlcbiAgICAgICAgOiBpbml0aWFsaXplQXBwKGluamVjdG9yLmdldChGSVJFQkFTRV9PUFRJT05TKSlcbiAgICB9KSxcbiAgICBwcm92aWRlRmlyZXN0b3JlKChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICAgIGlmICghTW9iaWxlT3BlcmF0aW9uU3lzdGVtQ2hlY2tlckhlbHBlci5pc0FwcGxlRGV2aWNlKCkpIHJldHVybiBnZXRGaXJlc3RvcmUoKVxuXG4gICAgICBjb25zdCBmaXJlc3RvcmUgPSBpbml0aWFsaXplRmlyZXN0b3JlKGluamVjdG9yLmdldChGaXJlYmFzZUFwcCksIHsgZXhwZXJpbWVudGFsRm9yY2VMb25nUG9sbGluZzogdHJ1ZSB9KVxuXG4gICAgICBlbmFibGVJbmRleGVkRGJQZXJzaXN0ZW5jZShmaXJlc3RvcmUpLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG5cbiAgICAgIHJldHVybiBmaXJlc3RvcmVcbiAgICB9KSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0ZpcmVzdG9yZU9wdGlvbnMnLFxuICAgICAgdXNlRmFjdG9yeTogKGZpcmVzdG9yZTogRmlyZXN0b3JlLCBwbGF0Zm9ybUlkOiBzdHJpbmcpOiBGaXJlc3RvcmVPcHRpb25zID0+ICh7XG4gICAgICAgIGZpcmVzdG9yZSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiB7XG4gICAgICAgICAgcmVxdWVzdDogKHJlcXVlc3Q6IEZpcmVzdG9yZUludGVydGNlcHRvclJlcXVlc3RQYXJhbXM8YW55PiAmIHsgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSkgcmV0dXJuIHJlcXVlc3RcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7fSwgMTAwKVxuXG4gICAgICAgICAgICByZXF1ZXN0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlOiAoXG4gICAgICAgICAgICByZXNwb25zZTogYW55LFxuICAgICAgICAgICAgcmVxdWVzdDogRmlyZXN0b3JlSW50ZXJ0Y2VwdG9yUmVxdWVzdFBhcmFtczxhbnk+ICYgeyBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfSxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSkgcmV0dXJuIHJlc3BvbnNlXG5cbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocmVxdWVzdC5pbnRlcnZhbClcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgZGVwczogW0ZpcmVzdG9yZSwgUExBVEZPUk1fSURdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0JlYXV0eVByb2ZpbGVSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChjb25maWc6IEZpcmVzdG9yZU9wdGlvbnMsIHVzZXJSZXBvc2l0b3J5OiBVc2VyRmlyZXN0b3JlUmVwb3NpdG9yeSk6IEJlYXV0eVByb2ZpbGVSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyQmVhdXR5UHJvZmlsZUZpcmVzdG9yZVJlcG9zaXRvcnkoY29uZmlnLCB1c2VyUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnLCAnVXNlclJlcG9zaXRvcnknXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdCdXkyV2luUmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IEJ1eTJXaW5SZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCdXkyV2luRmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQ2F0ZWdvcnlGaXJlc3RvcmVSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IEZpcmVzdG9yZU9wdGlvbnMpOiBDYXRlZ29yeVJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IENhdGVnb3J5RmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0NoZWNrb3V0UmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IENoZWNrb3V0UmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hlY2tvdXRGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnQ2hlY2tvdXRTdWJzY3JpcHRpb25SZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zKTogQ2hlY2tvdXRTdWJzY3JpcHRpb25SZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDaGVja291dFN1YnNjcmlwdGlvbkZpcmVzdG9yZVJlcG9zaXRvcnkob3B0aW9ucylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdDb3Vwb25SZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zKTogQ291cG9uUmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ291cG9uRmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0NhbXBhaWduSGFzaHRhZ1JlcG9zaXRvcnknLFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IEZpcmVzdG9yZU9wdGlvbnMpOiBDYW1wYWlnbkhhc2h0YWdSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW1wYWlnbkhhc2h0YWdGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnQ2FtcGFpZ25EYXNoYm9hcmRSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zKTogQ2FtcGFpZ25EYXNoYm9hcmRSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW1wYWlnbkRhc2hib2FyZEZpcmVzdG9yZVJlcG9zaXRvcnkob3B0aW9ucylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdFZGl0aW9uUmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAoXG4gICAgICAgIG9wdGlvbnM6IEZpcmVzdG9yZU9wdGlvbnMsXG4gICAgICAgIHN1YnNjcmlwdGlvblJlcG9zaXRvcnk6IFN1YnNjcmlwdGlvbkZpcmVzdG9yZVJlcG9zaXRvcnksXG4gICAgICApOiBFZGl0aW9uUmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uRWRpdGlvbkZpcmVzdG9yZVJlcG9zaXRvcnkob3B0aW9ucywgc3Vic2NyaXB0aW9uUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnLCAnU3Vic2NyaXB0aW9uUmVwb3NpdG9yeSddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0hvbWVSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zKTogSG9tZVJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEhvbWVGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnTGVhZFJlcG9zaXRvcnknLFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IEZpcmVzdG9yZU9wdGlvbnMpOiBMZWFkUmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgTGVhZEZpcmVzdG9yZVJlcG9zaXRvcnkob3B0aW9ucylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdMZWdhY3lPcmRlclJlcG9zaXRvcnknLFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IEZpcmVzdG9yZU9wdGlvbnMpOiBMZWdhY3lPcmRlclJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IExlZ2FjeU9yZGVyRmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1Nob3BNZW51UmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IFNob3BNZW51UmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgU2hvcE1lbnVGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnT3JkZXJSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zKTogT3JkZXJSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcmRlckZpcmVzdG9yZVJlcG9zaXRvcnkob3B0aW9ucylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdQYXltZW50UmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IFBheW1lbnRSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXltZW50RmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogUHJvZHVjdEZpcmVzdG9yZVJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IFByb2R1Y3RSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9kdWN0RmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1Nob3BTZXR0aW5nc1JlcG9zaXRvcnknLFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IEZpcmVzdG9yZU9wdGlvbnMpOiBTaG9wU2V0dGluZ3NSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTaG9wU2V0dGluZ3NGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnU3Vic2NyaXB0aW9uUGF5bWVudFJlcG9zaXRvcnknLFxuICAgICAgdXNlRmFjdG9yeTogKFxuICAgICAgICBvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zLFxuICAgICAgICBzdWJzY3JpcHRpb25SZXBvc2l0b3J5OiBTdWJzY3JpcHRpb25GaXJlc3RvcmVSZXBvc2l0b3J5LFxuICAgICAgKTogU3Vic2NyaXB0aW9uUGF5bWVudFJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvblBheW1lbnRGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMsIHN1YnNjcmlwdGlvblJlcG9zaXRvcnkpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJywgJ1N1YnNjcmlwdGlvblJlcG9zaXRvcnknXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdTdWJzY3JpcHRpb25QbGFuUmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IFN1YnNjcmlwdGlvblBsYW5SZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25QbGFuRmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1N1YnNjcmlwdGlvblByb2R1Y3RSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zKTogU3Vic2NyaXB0aW9uUHJvZHVjdFJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvblByb2R1Y3RGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnU3Vic2NyaXB0aW9uUmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IFN1YnNjcmlwdGlvblJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbkZpcmVzdG9yZVJlcG9zaXRvcnkob3B0aW9ucylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdVc2VyUmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucyk6IFVzZXJSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyRmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1VzZXJBZGRyZXNzUmVwb3NpdG9yeScsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogRmlyZXN0b3JlT3B0aW9ucywgdXNlclJlcG9zaXRvcnk6IFVzZXJGaXJlc3RvcmVSZXBvc2l0b3J5KTogVXNlckFkZHJlc3NSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyQWRkcmVzc0ZpcmVzdG9yZVJlcG9zaXRvcnkob3B0aW9ucywgdXNlclJlcG9zaXRvcnkpXG4gICAgICB9LFxuICAgICAgZGVwczogWydGaXJlc3RvcmVPcHRpb25zJywgJ1VzZXJSZXBvc2l0b3J5J10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnVXNlclBheW1lbnRNZXRob2RSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zLCB1c2VyUmVwb3NpdG9yeTogVXNlckZpcmVzdG9yZVJlcG9zaXRvcnkpOiBVc2VyUGF5bWVudE1ldGhvZFJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVzZXJQYXltZW50TWV0aG9kRmlyZXN0b3JlUmVwb3NpdG9yeShvcHRpb25zLCB1c2VyUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0ZpcmVzdG9yZU9wdGlvbnMnLCAnVXNlclJlcG9zaXRvcnknXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFByb2R1Y3RWYXJpYW50RmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBGaXJlc3RvcmVPcHRpb25zLCBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdEZpcmVzdG9yZVJlcG9zaXRvcnkpOiBWYXJpYW50UmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvZHVjdFZhcmlhbnRGaXJlc3RvcmVSZXBvc2l0b3J5KG9wdGlvbnMsIHByb2R1Y3RSZXBvc2l0b3J5KVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnRmlyZXN0b3JlT3B0aW9ucycsIFByb2R1Y3RGaXJlc3RvcmVSZXBvc2l0b3J5XSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRmlyZXN0b3JlTW9kdWxlIHtcbiAgc3RhdGljIGluaXRpYWxpemVBcHAoXG4gICAgb3B0aW9uczoge1xuICAgICAgZmlyZWJhc2U6IEZpcmViYXNlT3B0aW9uc1xuICAgICAgZWxhc3RpY1NlYXJjaDogQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnXG4gICAgfSxcbiAgICBuYW1lT3JDb25maWc/OiBzdHJpbmcgfCBGaXJlYmFzZUFwcENvbmZpZyxcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmd1bGFyRmlyZXN0b3JlTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBbmd1bGFyRmlyZXN0b3JlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRklSRUJBU0VfT1BUSU9OUywgdXNlVmFsdWU6IG9wdGlvbnMuZmlyZWJhc2UgfSxcbiAgICAgICAgeyBwcm92aWRlOiBGSVJFQkFTRV9BUFBfTkFNRSwgdXNlVmFsdWU6IG5hbWVPckNvbmZpZyB9LFxuICAgICAgICB7IHByb3ZpZGU6IEVTX0NPTkZJRywgdXNlVmFsdWU6IG9wdGlvbnMuZWxhc3RpY1NlYXJjaCB9LFxuICAgICAgXSxcbiAgICB9XG4gIH1cbn1cbiJdfQ==