@infrab4a/connect-angular 5.0.0-alpha.14 → 5.0.0-alpha.15

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 (104) hide show
  1. package/esm2022/angular-connect.module.mjs +289 -0
  2. package/esm2022/angular-elastic-search.module.mjs +34 -0
  3. package/esm2022/angular-firebase-auth.module.mjs +141 -0
  4. package/esm2022/angular-firestore.module.mjs +541 -0
  5. package/esm2022/angular-hasura-graphql.module.mjs +333 -0
  6. package/esm2022/angular-vertex-search.module.mjs +34 -0
  7. package/{esm2020 → esm2022}/persistence/cookie-data-persistence.mjs +4 -4
  8. package/{esm2020 → esm2022}/services/auth.service.mjs +6 -6
  9. package/{esm2020 → esm2022}/services/cart/cart-services.facade.mjs +5 -5
  10. package/{esm2020 → esm2022}/services/cart.service.mjs +5 -5
  11. package/{esm2020 → esm2022}/services/catalog/adapters/new-category-structure.adapter.mjs +6 -6
  12. package/{esm2020 → esm2022}/services/catalog/adapters/old-category-structure.adapter.mjs +6 -6
  13. package/{esm2020 → esm2022}/services/catalog/catalog.service.mjs +6 -6
  14. package/{esm2020 → esm2022}/services/catalog/category.service.mjs +6 -6
  15. package/{esm2020 → esm2022}/services/catalog/facades/catalog-service.facade.mjs +6 -6
  16. package/{esm2020 → esm2022}/services/catalog/facades/catalog-strategies.facade.mjs +5 -5
  17. package/{esm2020 → esm2022}/services/catalog/facades/category-repository.facade.mjs +6 -6
  18. package/{esm2020 → esm2022}/services/catalog/facades/category-service.facade.mjs +6 -6
  19. package/{esm2020 → esm2022}/services/catalog/facades/product-catalog.facade.mjs +6 -6
  20. package/{esm2020 → esm2022}/services/catalog/helpers/brand-manager.helper.mjs +5 -5
  21. package/{esm2020 → esm2022}/services/catalog/helpers/catalog-filter.helper.mjs +4 -4
  22. package/{esm2020 → esm2022}/services/catalog/helpers/catalog-sort.helper.mjs +4 -4
  23. package/{esm2020 → esm2022}/services/catalog/helpers/product-fields.helper.mjs +4 -4
  24. package/{esm2020 → esm2022}/services/catalog/models/category-with-tree.model.mjs +1 -1
  25. package/{esm2020 → esm2022}/services/catalog/services/catalog-helpers.service.mjs +5 -5
  26. package/{esm2020 → esm2022}/services/catalog/services/catalog-operations.facade.mjs +5 -5
  27. package/{esm2020 → esm2022}/services/catalog/services/catalog-repository.service.mjs +6 -6
  28. package/{esm2020 → esm2022}/services/catalog/services/product-management.facade.mjs +6 -6
  29. package/{esm2020 → esm2022}/services/catalog/strategies/category-search.strategy.mjs +5 -5
  30. package/{esm2020 → esm2022}/services/catalog/strategies/profile-search.strategy.mjs +5 -5
  31. package/{esm2020 → esm2022}/services/catalog/strategies/term-search.strategy.mjs +5 -5
  32. package/{esm2020 → esm2022}/services/catalog/wishlist.service.mjs +6 -6
  33. package/{esm2020 → esm2022}/services/checkout/checkout-dependencies.facade.mjs +6 -6
  34. package/{esm2020 → esm2022}/services/checkout/checkout-repositories.facade.mjs +6 -6
  35. package/{esm2020 → esm2022}/services/checkout-subscription.service.mjs +6 -6
  36. package/{esm2020 → esm2022}/services/checkout.service.mjs +5 -5
  37. package/{esm2020 → esm2022}/services/coupon/coupon-repositories.facade.mjs +6 -6
  38. package/{esm2020 → esm2022}/services/coupon.service.mjs +5 -5
  39. package/{esm2020 → esm2022}/services/home-shop/home-shop-repositories.facade.mjs +6 -6
  40. package/{esm2020 → esm2022}/services/home-shop.service.mjs +5 -5
  41. package/{esm2020 → esm2022}/services/order.service.mjs +6 -6
  42. package/{esm2020 → esm2022}/services/shared/configuration.facade.mjs +6 -6
  43. package/{fesm2020 → fesm2022}/infrab4a-connect-angular.mjs +751 -751
  44. package/{fesm2020 → fesm2022}/infrab4a-connect-angular.mjs.map +1 -1
  45. package/package.json +10 -17
  46. package/esm2020/angular-connect.module.mjs +0 -289
  47. package/esm2020/angular-elastic-search.module.mjs +0 -34
  48. package/esm2020/angular-firebase-auth.module.mjs +0 -141
  49. package/esm2020/angular-firestore.module.mjs +0 -541
  50. package/esm2020/angular-hasura-graphql.module.mjs +0 -333
  51. package/esm2020/angular-vertex-search.module.mjs +0 -34
  52. package/fesm2015/infrab4a-connect-angular.mjs +0 -3372
  53. package/fesm2015/infrab4a-connect-angular.mjs.map +0 -1
  54. /package/{esm2020 → esm2022}/consts/backend-url.const.mjs +0 -0
  55. /package/{esm2020 → esm2022}/consts/category-structure.mjs +0 -0
  56. /package/{esm2020 → esm2022}/consts/default-shop.const.mjs +0 -0
  57. /package/{esm2020 → esm2022}/consts/es-config.const.mjs +0 -0
  58. /package/{esm2020 → esm2022}/consts/firebase-const.mjs +0 -0
  59. /package/{esm2020 → esm2022}/consts/hasura-options.const.mjs +0 -0
  60. /package/{esm2020 → esm2022}/consts/index.mjs +0 -0
  61. /package/{esm2020 → esm2022}/consts/persistence.const.mjs +0 -0
  62. /package/{esm2020 → esm2022}/consts/storage-base-url.const.mjs +0 -0
  63. /package/{esm2020 → esm2022}/consts/vertex-config.const.mjs +0 -0
  64. /package/{esm2020 → esm2022}/helpers/index.mjs +0 -0
  65. /package/{esm2020 → esm2022}/helpers/mobile-operation-system-checker.helper.mjs +0 -0
  66. /package/{esm2020 → esm2022}/index.mjs +0 -0
  67. /package/{esm2020 → esm2022}/infrab4a-connect-angular.mjs +0 -0
  68. /package/{esm2020 → esm2022}/interfaces/catalog-strategies.interface.mjs +0 -0
  69. /package/{esm2020 → esm2022}/interfaces/category-facades.interface.mjs +0 -0
  70. /package/{esm2020 → esm2022}/interfaces/index.mjs +0 -0
  71. /package/{esm2020 → esm2022}/persistence/data-persistence.mjs +0 -0
  72. /package/{esm2020 → esm2022}/persistence/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/services/cart/index.mjs +0 -0
  74. /package/{esm2020 → esm2022}/services/catalog/adapters/category-structure.adapter.mjs +0 -0
  75. /package/{esm2020 → esm2022}/services/catalog/adapters/index.mjs +0 -0
  76. /package/{esm2020 → esm2022}/services/catalog/context/catalog-search.context.mjs +0 -0
  77. /package/{esm2020 → esm2022}/services/catalog/enums/index.mjs +0 -0
  78. /package/{esm2020 → esm2022}/services/catalog/enums/product-sorts.enum.mjs +0 -0
  79. /package/{esm2020 → esm2022}/services/catalog/facades/index.mjs +0 -0
  80. /package/{esm2020 → esm2022}/services/catalog/helpers/index.mjs +0 -0
  81. /package/{esm2020 → esm2022}/services/catalog/index.mjs +0 -0
  82. /package/{esm2020 → esm2022}/services/catalog/models/index.mjs +0 -0
  83. /package/{esm2020 → esm2022}/services/catalog/services/index.mjs +0 -0
  84. /package/{esm2020 → esm2022}/services/catalog/strategies/index.mjs +0 -0
  85. /package/{esm2020 → esm2022}/services/catalog/strategies/types/strategy-params.type.mjs +0 -0
  86. /package/{esm2020 → esm2022}/services/catalog/types/fetch-products-options.type.mjs +0 -0
  87. /package/{esm2020 → esm2022}/services/catalog/types/fetch-products-params.type.mjs +0 -0
  88. /package/{esm2020 → esm2022}/services/catalog/types/fetch-products-response.type.mjs +0 -0
  89. /package/{esm2020 → esm2022}/services/catalog/types/index.mjs +0 -0
  90. /package/{esm2020 → esm2022}/services/catalog/types/method-params.type.mjs +0 -0
  91. /package/{esm2020 → esm2022}/services/catalog/types/product-sort.type.mjs +0 -0
  92. /package/{esm2020 → esm2022}/services/checkout/index.mjs +0 -0
  93. /package/{esm2020 → esm2022}/services/coupon/index.mjs +0 -0
  94. /package/{esm2020 → esm2022}/services/coupon/types/coupon-params.type.mjs +0 -0
  95. /package/{esm2020 → esm2022}/services/helpers/index.mjs +0 -0
  96. /package/{esm2020 → esm2022}/services/helpers/util.helper.mjs +0 -0
  97. /package/{esm2020 → esm2022}/services/home-shop/index.mjs +0 -0
  98. /package/{esm2020 → esm2022}/services/index.mjs +0 -0
  99. /package/{esm2020 → esm2022}/services/shared/index.mjs +0 -0
  100. /package/{esm2020 → esm2022}/services/types/index.mjs +0 -0
  101. /package/{esm2020 → esm2022}/services/types/required-checkout-data.type.mjs +0 -0
  102. /package/{esm2020 → esm2022}/services/types/required-checkout-subscription-data.type.mjs +0 -0
  103. /package/{esm2020 → esm2022}/types/firebase-app-config.type.mjs +0 -0
  104. /package/{esm2020 → esm2022}/types/index.mjs +0 -0
@@ -0,0 +1,289 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
3
+ import { initializeAppCheck, provideAppCheck } from '@angular/fire/app-check';
4
+ import { getStorage, provideStorage, Storage } from '@angular/fire/storage';
5
+ import { FirebaseFileUploaderService, isNil, ProductsVertexSearch, UpdateUserImage, } from '@infrab4a/connect';
6
+ import { AngularElasticSeachModule } from './angular-elastic-search.module';
7
+ import { AngularFirebaseAuthModule } from './angular-firebase-auth.module';
8
+ import { AngularFirestoreModule } from './angular-firestore.module';
9
+ import { AngularHasuraGraphQLModule } from './angular-hasura-graphql.module';
10
+ import { AngularVertexSeachModule } from './angular-vertex-search.module';
11
+ import { APP_CHECK_PROVIDER, BACKEND_URL, CATEGORY_STRUCTURE, DEFAULT_SHOP, ES_CONFIG, FIREBASE_APP_NAME, FIREBASE_OPTIONS, HASURA_OPTIONS, PERSISTENCE_PROVIDER, VERTEX_CONFIG, } from './consts';
12
+ import { STORAGE_BASE_URL } from './consts/storage-base-url.const';
13
+ import { CookieDataPersistence } from './persistence';
14
+ import { AuthService, CartService, CatalogService, CategoryService, CheckoutService, CheckoutSubscriptionService, CouponService, HomeShopService, OrderService, WishlistService, } from './services';
15
+ import { CartServicesFacade } from './services/cart';
16
+ import { NewCategoryStructureAdapter, OldCategoryStructureAdapter } from './services/catalog/adapters';
17
+ import { CatalogSearchContext } from './services/catalog/context/catalog-search.context';
18
+ import { CatalogServiceFacade, CatalogStrategiesFacade, CategoryRepositoryFacade, CategoryServiceFacade, ProductCatalogFacade, } from './services/catalog/facades';
19
+ import { BrandManagerHelper, CatalogFilterHelper, CatalogSortHelper, ProductFieldsHelper, } from './services/catalog/helpers';
20
+ import { CatalogHelpersService, CatalogOperationsFacade, CatalogRepositoryService, ProductManagementFacade, } from './services/catalog/services';
21
+ import { CategorySearchStrategy, ProfileSearchStrategy, TermSearchStrategy } from './services/catalog/strategies';
22
+ import { CheckoutDependenciesFacade, CheckoutRepositoriesFacade } from './services/checkout';
23
+ import { CouponRepositoriesFacade } from './services/coupon';
24
+ import { HomeShopRepositoriesFacade } from './services/home-shop';
25
+ import { ConfigurationFacade } from './services/shared';
26
+ import * as i0 from "@angular/core";
27
+ import * as i1 from "@angular/fire/app";
28
+ import * as i2 from "@angular/fire/app-check";
29
+ import * as i3 from "@angular/fire/storage";
30
+ export class AngularConnectModule {
31
+ static initializeApp(defaultShop, options, nameOrConfig) {
32
+ return {
33
+ ngModule: AngularConnectModule,
34
+ providers: [
35
+ ...this.buildCoreProviders(nameOrConfig, options),
36
+ ...this.buildConditionalProviders(defaultShop, options),
37
+ ],
38
+ };
39
+ }
40
+ static buildCoreProviders(nameOrConfig, options) {
41
+ return [
42
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
43
+ { provide: APP_CHECK_PROVIDER, useValue: options.appCheckProvider },
44
+ {
45
+ provide: CATEGORY_STRUCTURE,
46
+ useClass: this.selectCategoryStructureAdapter(options.oldCategoryStructure),
47
+ },
48
+ { provide: PERSISTENCE_PROVIDER, useClass: options?.persistenceProvider || CookieDataPersistence },
49
+ ];
50
+ }
51
+ static buildConditionalProviders(defaultShop, options) {
52
+ return [
53
+ ...this.createProviderIfExists(DEFAULT_SHOP, defaultShop),
54
+ ...this.createProviderIfExists(FIREBASE_OPTIONS, options.firebase),
55
+ ...this.createProviderIfExists(ES_CONFIG, options.elasticSearch),
56
+ ...this.createProviderIfExists(VERTEX_CONFIG, options.vertexConfig),
57
+ ...this.createProviderIfExists(HASURA_OPTIONS, options.hasura),
58
+ ...this.createProviderIfExists(BACKEND_URL, options.backendUrl),
59
+ ...this.createProviderIfExists(STORAGE_BASE_URL, options.storageBaseUrl),
60
+ ];
61
+ }
62
+ static selectCategoryStructureAdapter(oldCategoryStructure) {
63
+ return isNil(oldCategoryStructure) || oldCategoryStructure
64
+ ? OldCategoryStructureAdapter
65
+ : NewCategoryStructureAdapter;
66
+ }
67
+ static createProviderIfExists(token, value) {
68
+ return isNil(value) ? [] : [{ provide: token, useValue: value }];
69
+ }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
71
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, imports: [i1.FirebaseAppModule, i2.AppCheckModule, i3.StorageModule, AngularElasticSeachModule,
72
+ AngularVertexSeachModule,
73
+ AngularFirebaseAuthModule,
74
+ AngularFirestoreModule,
75
+ AngularHasuraGraphQLModule] }); }
76
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, providers: [
77
+ AuthService,
78
+ CartService,
79
+ CatalogService,
80
+ CategoryService,
81
+ CheckoutService,
82
+ CheckoutSubscriptionService,
83
+ CouponService,
84
+ HomeShopService,
85
+ OrderService,
86
+ WishlistService,
87
+ ConfigurationFacade,
88
+ CartServicesFacade,
89
+ CheckoutRepositoriesFacade,
90
+ CheckoutDependenciesFacade,
91
+ CategoryRepositoryFacade,
92
+ ProductCatalogFacade,
93
+ CatalogServiceFacade,
94
+ CategoryServiceFacade,
95
+ CatalogStrategiesFacade,
96
+ CatalogOperationsFacade,
97
+ ProductManagementFacade,
98
+ {
99
+ provide: 'ProductServicesFacade',
100
+ useFactory: (productStockNotificationRepository, categoryRepository, productSearch) => ({
101
+ productStockNotificationRepository,
102
+ categoryRepository,
103
+ productSearch,
104
+ }),
105
+ deps: ['ProductStockNotificationRepository', 'CategoryRepository', 'ProductSearch'],
106
+ },
107
+ CatalogFilterHelper,
108
+ CatalogSortHelper,
109
+ ProductFieldsHelper,
110
+ BrandManagerHelper,
111
+ CatalogRepositoryService,
112
+ CatalogHelpersService,
113
+ CategorySearchStrategy,
114
+ TermSearchStrategy,
115
+ ProfileSearchStrategy,
116
+ {
117
+ provide: CatalogSearchContext,
118
+ useFactory: (categoryStrategy, termStrategy, profileStrategy) => {
119
+ return new CatalogSearchContext(categoryStrategy, termStrategy, profileStrategy);
120
+ },
121
+ deps: [CategorySearchStrategy, TermSearchStrategy, ProfileSearchStrategy],
122
+ },
123
+ {
124
+ provide: UpdateUserImage,
125
+ useFactory: (userRepository, fileUploader) => {
126
+ return new UpdateUserImage(userRepository, fileUploader);
127
+ },
128
+ deps: ['UserRepository', 'FileUploaderService'],
129
+ },
130
+ {
131
+ provide: 'FileUploaderService',
132
+ useFactory: (storage, baseUrl) => {
133
+ return new FirebaseFileUploaderService(storage, baseUrl);
134
+ },
135
+ deps: [Storage, STORAGE_BASE_URL],
136
+ },
137
+ {
138
+ provide: 'ProductSearch',
139
+ useExisting: ProductsVertexSearch,
140
+ },
141
+ CouponRepositoriesFacade,
142
+ HomeShopRepositoriesFacade,
143
+ ], imports: [provideFirebaseApp((injector) => {
144
+ const appName = injector.get(FIREBASE_APP_NAME);
145
+ try {
146
+ const app = appName ? getApp(appName) : getApp();
147
+ return app;
148
+ }
149
+ catch (error) {
150
+ console.warn('Firebase app not found, initializing new app');
151
+ if (error instanceof Error)
152
+ console.error(error.message);
153
+ return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
154
+ }
155
+ }),
156
+ provideAppCheck((injector) => {
157
+ const app = injector.get(FirebaseApp);
158
+ try {
159
+ const provider = injector.get(APP_CHECK_PROVIDER);
160
+ if (provider)
161
+ return initializeAppCheck(app, {
162
+ provider,
163
+ isTokenAutoRefreshEnabled: true,
164
+ });
165
+ }
166
+ catch (error) {
167
+ if (error instanceof Error)
168
+ console.error(error.message);
169
+ return;
170
+ }
171
+ }),
172
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
173
+ AngularElasticSeachModule,
174
+ AngularVertexSeachModule,
175
+ AngularFirebaseAuthModule,
176
+ AngularFirestoreModule,
177
+ AngularHasuraGraphQLModule] }); }
178
+ }
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, decorators: [{
180
+ type: NgModule,
181
+ args: [{
182
+ imports: [
183
+ provideFirebaseApp((injector) => {
184
+ const appName = injector.get(FIREBASE_APP_NAME);
185
+ try {
186
+ const app = appName ? getApp(appName) : getApp();
187
+ return app;
188
+ }
189
+ catch (error) {
190
+ console.warn('Firebase app not found, initializing new app');
191
+ if (error instanceof Error)
192
+ console.error(error.message);
193
+ return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
194
+ }
195
+ }),
196
+ provideAppCheck((injector) => {
197
+ const app = injector.get(FirebaseApp);
198
+ try {
199
+ const provider = injector.get(APP_CHECK_PROVIDER);
200
+ if (provider)
201
+ return initializeAppCheck(app, {
202
+ provider,
203
+ isTokenAutoRefreshEnabled: true,
204
+ });
205
+ }
206
+ catch (error) {
207
+ if (error instanceof Error)
208
+ console.error(error.message);
209
+ return;
210
+ }
211
+ }),
212
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
213
+ AngularElasticSeachModule,
214
+ AngularVertexSeachModule,
215
+ AngularFirebaseAuthModule,
216
+ AngularFirestoreModule,
217
+ AngularHasuraGraphQLModule,
218
+ ],
219
+ providers: [
220
+ AuthService,
221
+ CartService,
222
+ CatalogService,
223
+ CategoryService,
224
+ CheckoutService,
225
+ CheckoutSubscriptionService,
226
+ CouponService,
227
+ HomeShopService,
228
+ OrderService,
229
+ WishlistService,
230
+ ConfigurationFacade,
231
+ CartServicesFacade,
232
+ CheckoutRepositoriesFacade,
233
+ CheckoutDependenciesFacade,
234
+ CategoryRepositoryFacade,
235
+ ProductCatalogFacade,
236
+ CatalogServiceFacade,
237
+ CategoryServiceFacade,
238
+ CatalogStrategiesFacade,
239
+ CatalogOperationsFacade,
240
+ ProductManagementFacade,
241
+ {
242
+ provide: 'ProductServicesFacade',
243
+ useFactory: (productStockNotificationRepository, categoryRepository, productSearch) => ({
244
+ productStockNotificationRepository,
245
+ categoryRepository,
246
+ productSearch,
247
+ }),
248
+ deps: ['ProductStockNotificationRepository', 'CategoryRepository', 'ProductSearch'],
249
+ },
250
+ CatalogFilterHelper,
251
+ CatalogSortHelper,
252
+ ProductFieldsHelper,
253
+ BrandManagerHelper,
254
+ CatalogRepositoryService,
255
+ CatalogHelpersService,
256
+ CategorySearchStrategy,
257
+ TermSearchStrategy,
258
+ ProfileSearchStrategy,
259
+ {
260
+ provide: CatalogSearchContext,
261
+ useFactory: (categoryStrategy, termStrategy, profileStrategy) => {
262
+ return new CatalogSearchContext(categoryStrategy, termStrategy, profileStrategy);
263
+ },
264
+ deps: [CategorySearchStrategy, TermSearchStrategy, ProfileSearchStrategy],
265
+ },
266
+ {
267
+ provide: UpdateUserImage,
268
+ useFactory: (userRepository, fileUploader) => {
269
+ return new UpdateUserImage(userRepository, fileUploader);
270
+ },
271
+ deps: ['UserRepository', 'FileUploaderService'],
272
+ },
273
+ {
274
+ provide: 'FileUploaderService',
275
+ useFactory: (storage, baseUrl) => {
276
+ return new FirebaseFileUploaderService(storage, baseUrl);
277
+ },
278
+ deps: [Storage, STORAGE_BASE_URL],
279
+ },
280
+ {
281
+ provide: 'ProductSearch',
282
+ useExisting: ProductsVertexSearch,
283
+ },
284
+ CouponRepositoriesFacade,
285
+ HomeShopRepositoriesFacade,
286
+ ],
287
+ }]
288
+ }] });
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1jb25uZWN0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvYW5ndWxhci1jb25uZWN0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFFBQVEsRUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDM0csT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RixPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRSxPQUFPLEVBR0wsMkJBQTJCLEVBQzNCLEtBQUssRUFDTCxvQkFBb0IsRUFFcEIsZUFBZSxHQUdoQixNQUFNLG1CQUFtQixDQUFBO0FBRTFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBd0IsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FB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ciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRmlyZWJhc2VBcHAsIEZpcmViYXNlT3B0aW9ucywgZ2V0QXBwLCBpbml0aWFsaXplQXBwLCBwcm92aWRlRmlyZWJhc2VBcHAgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCdcbmltcG9ydCB7IEFwcENoZWNrT3B0aW9ucywgaW5pdGlhbGl6ZUFwcENoZWNrLCBwcm92aWRlQXBwQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcC1jaGVjaydcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHByb3ZpZGVTdG9yYWdlLCBTdG9yYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9zdG9yYWdlJ1xuaW1wb3J0IHtcbiAgQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnLFxuICBGaWxlVXBsb2FkZXJTZXJ2aWNlLFxuICBGaXJlYmFzZUZpbGVVcGxvYWRlclNlcnZpY2UsXG4gIGlzTmlsLFxuICBQcm9kdWN0c1ZlcnRleFNlYXJjaCxcbiAgU2hvcHMsXG4gIFVwZGF0ZVVzZXJJbWFnZSxcbiAgVXNlclJlcG9zaXRvcnksXG4gIFZlcnRleFNlYXJjaENvbmZpZyxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5cbmltcG9ydCB7IEFuZ3VsYXJFbGFzdGljU2VhY2hNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItZWxhc3RpYy1zZWFyY2gubW9kdWxlJ1xuaW1wb3J0IHsgQW5ndWxhckZpcmViYXNlQXV0aE1vZHVsZSB9IGZyb20gJy4vYW5ndWxhci1maXJlYmFzZS1hdXRoLm1vZHVsZSdcbmltcG9ydCB7IEFuZ3VsYXJGaXJlc3RvcmVNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItZmlyZXN0b3JlLm1vZHVsZSdcbmltcG9ydCB7IEFuZ3VsYXJIYXN1cmFHcmFwaFFMTW9kdWxlLCBIYXN1cmFHcmFwaFFMT3B0aW9ucyB9IGZyb20gJy4vYW5ndWxhci1oYXN1cmEtZ3JhcGhxbC5tb2R1bGUnXG5pbXBvcnQgeyBBbmd1bGFyVmVydGV4U2VhY2hNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItdmVydGV4LXNlYXJjaC5tb2R1bGUnXG5pbXBvcnQge1xuICBBUFBfQ0hFQ0tfUFJPVklERVIsXG4gIEJBQ0tFTkRfVVJMLFxuICBDQVRFR09SWV9TVFJVQ1RVUkUsXG4gIERFRkFVTFRfU0hPUCxcbiAgRVNfQ09ORklHLFxuICBGSVJFQkFTRV9BUFBfTkFNRSxcbiAgRklSRUJBU0VfT1BUSU9OUyxcbiAgSEFTVVJBX09QVElPTlMsXG4gIFBFUlNJU1RFTkNFX1BST1ZJREVSLFxuICBWRVJURVhfQ09ORklHLFxufSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7IFNUT1JBR0VfQkFTRV9VUkwgfSBmcm9tICcuL2NvbnN0cy9zdG9yYWdlLWJhc2UtdXJsLmNvbnN0J1xuaW1wb3J0IHsgQ29va2llRGF0YVBlcnNpc3RlbmNlLCBEYXRhUGVyc2lzdGVuY2UgfSBmcm9tICcuL3BlcnNpc3RlbmNlJ1xuaW1wb3J0IHtcbiAgQXV0aFNlcnZpY2UsXG4gIENhcnRTZXJ2aWNlLFxuICBDYXRhbG9nU2VydmljZSxcbiAgQ2F0ZWdvcnlTZXJ2aWNlLFxuICBDaGVja291dFNlcnZpY2UsXG4gIENoZWNrb3V0U3Vic2NyaXB0aW9uU2VydmljZSxcbiAgQ291cG9uU2VydmljZSxcbiAgSG9tZVNob3BTZXJ2aWNlLFxuICBPcmRlclNlcnZpY2UsXG4gIFdpc2hsaXN0U2VydmljZSxcbn0gZnJvbSAnLi9zZXJ2aWNlcydcbmltcG9ydCB7IENhcnRTZXJ2aWNlc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvY2FydCdcbmltcG9ydCB7IE5ld0NhdGVnb3J5U3RydWN0dXJlQWRhcHRlciwgT2xkQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy9jYXRhbG9nL2FkYXB0ZXJzJ1xuaW1wb3J0IHsgQ2F0YWxvZ1NlYXJjaENvbnRleHQgfSBmcm9tICcuL3NlcnZpY2VzL2NhdGFsb2cvY29udGV4dC9jYXRhbG9nLXNlYXJjaC5jb250ZXh0J1xuaW1wb3J0IHtcbiAgQ2F0YWxvZ1NlcnZpY2VGYWNhZGUsXG4gIENhdGFsb2dTdHJhdGVnaWVzRmFjYWRlLFxuICBDYXRlZ29yeVJlcG9zaXRvcnlGYWNhZGUsXG4gIENhdGVnb3J5U2VydmljZUZhY2FkZSxcbiAgUHJvZHVjdENhdGFsb2dGYWNhZGUsXG59IGZyb20gJy4vc2VydmljZXMvY2F0YWxvZy9mYWNhZGVzJ1xuaW1wb3J0IHtcbiAgQnJhbmRNYW5hZ2VySGVscGVyLFxuICBDYXRhbG9nRmlsdGVySGVscGVyLFxuICBDYXRhbG9nU29ydEhlbHBlcixcbiAgUHJvZHVjdEZpZWxkc0hlbHBlcixcbn0gZnJvbSAnLi9zZXJ2aWNlcy9jYXRhbG9nL2hlbHBlcnMnXG5pbXBvcnQge1xuICBDYXRhbG9nSGVscGVyc1NlcnZpY2UsXG4gIENhdGFsb2dPcGVyYXRpb25zRmFjYWRlLFxuICBDYXRhbG9nUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFByb2R1Y3RNYW5hZ2VtZW50RmFjYWRlLFxufSBmcm9tICcuL3NlcnZpY2VzL2NhdGFsb2cvc2VydmljZXMnXG5pbXBvcnQgeyBDYXRlZ29yeVNlYXJjaFN0cmF0ZWd5LCBQcm9maWxlU2VhcmNoU3RyYXRlZ3ksIFRlcm1TZWFyY2hTdHJhdGVneSB9IGZyb20gJy4vc2VydmljZXMvY2F0YWxvZy9zdHJhdGVnaWVzJ1xuaW1wb3J0IHsgQ2hlY2tvdXREZXBlbmRlbmNpZXNGYWNhZGUsIENoZWNrb3V0UmVwb3NpdG9yaWVzRmFjYWRlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGVja291dCdcbmltcG9ydCB7IENvdXBvblJlcG9zaXRvcmllc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvY291cG9uJ1xuaW1wb3J0IHsgSG9tZVNob3BSZXBvc2l0b3JpZXNGYWNhZGUgfSBmcm9tICcuL3NlcnZpY2VzL2hvbWUtc2hvcCdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25GYWNhZGUgfSBmcm9tICcuL3NlcnZpY2VzL3NoYXJlZCdcbmltcG9ydCB7IEZpcmViYXNlQXBwQ29uZmlnIH0gZnJvbSAnLi90eXBlcydcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIHByb3ZpZGVGaXJlYmFzZUFwcCgoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBhcHBOYW1lID0gaW5qZWN0b3IuZ2V0PHN0cmluZz4oRklSRUJBU0VfQVBQX05BTUUpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IGFwcE5hbWUgPyBnZXRBcHAoYXBwTmFtZSkgOiBnZXRBcHAoKVxuXG4gICAgICAgIHJldHVybiBhcHBcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmlyZWJhc2UgYXBwIG5vdCBmb3VuZCwgaW5pdGlhbGl6aW5nIG5ldyBhcHAnKVxuXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpXG5cbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBcHAoaW5qZWN0b3IuZ2V0KEZJUkVCQVNFX09QVElPTlMpLCBhcHBOYW1lKVxuICAgICAgfVxuICAgIH0pLFxuICAgIHByb3ZpZGVBcHBDaGVjaygoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBpbmplY3Rvci5nZXQoRmlyZWJhc2VBcHApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gaW5qZWN0b3IuZ2V0PEFwcENoZWNrT3B0aW9uc1sncHJvdmlkZXInXT4oQVBQX0NIRUNLX1BST1ZJREVSKVxuXG4gICAgICAgIGlmIChwcm92aWRlcilcbiAgICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUFwcENoZWNrKGFwcCwge1xuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICBpc1Rva2VuQXV0b1JlZnJlc2hFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0pLFxuICAgIHByb3ZpZGVTdG9yYWdlKChpbmplY3RvcjogSW5qZWN0b3IpID0+IGdldFN0b3JhZ2UoaW5qZWN0b3IuZ2V0KEZpcmViYXNlQXBwKSkpLFxuICAgIEFuZ3VsYXJFbGFzdGljU2VhY2hNb2R1bGUsXG4gICAgQW5ndWxhclZlcnRleFNlYWNoTW9kdWxlLFxuICAgIEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGUsXG4gICAgQW5ndWxhckZpcmVzdG9yZU1vZHVsZSxcbiAgICBBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQXV0aFNlcnZpY2UsXG4gICAgQ2FydFNlcnZpY2UsXG4gICAgQ2F0YWxvZ1NlcnZpY2UsXG4gICAgQ2F0ZWdvcnlTZXJ2aWNlLFxuICAgIENoZWNrb3V0U2VydmljZSxcbiAgICBDaGVja291dFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgQ291cG9uU2VydmljZSxcbiAgICBIb21lU2hvcFNlcnZpY2UsXG4gICAgT3JkZXJTZXJ2aWNlLFxuICAgIFdpc2hsaXN0U2VydmljZSxcbiAgICBDb25maWd1cmF0aW9uRmFjYWRlLFxuICAgIENhcnRTZXJ2aWNlc0ZhY2FkZSxcbiAgICBDaGVja291dFJlcG9zaXRvcmllc0ZhY2FkZSxcbiAgICBDaGVja291dERlcGVuZGVuY2llc0ZhY2FkZSxcbiAgICBDYXRlZ29yeVJlcG9zaXRvcnlGYWNhZGUsXG4gICAgUHJvZHVjdENhdGFsb2dGYWNhZGUsXG4gICAgQ2F0YWxvZ1NlcnZpY2VGYWNhZGUsXG4gICAgQ2F0ZWdvcnlTZXJ2aWNlRmFjYWRlLFxuICAgIENhdGFsb2dTdHJhdGVnaWVzRmFjYWRlLFxuICAgIENhdGFsb2dPcGVyYXRpb25zRmFjYWRlLFxuICAgIFByb2R1Y3RNYW5hZ2VtZW50RmFjYWRlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdQcm9kdWN0U2VydmljZXNGYWNhZGUnLFxuICAgICAgdXNlRmFjdG9yeTogKHByb2R1Y3RTdG9ja05vdGlmaWNhdGlvblJlcG9zaXRvcnk6IGFueSwgY2F0ZWdvcnlSZXBvc2l0b3J5OiBhbnksIHByb2R1Y3RTZWFyY2g6IGFueSkgPT4gKHtcbiAgICAgICAgcHJvZHVjdFN0b2NrTm90aWZpY2F0aW9uUmVwb3NpdG9yeSxcbiAgICAgICAgY2F0ZWdvcnlSZXBvc2l0b3J5LFxuICAgICAgICBwcm9kdWN0U2VhcmNoLFxuICAgICAgfSksXG4gICAgICBkZXBzOiBbJ1Byb2R1Y3RTdG9ja05vdGlmaWNhdGlvblJlcG9zaXRvcnknLCAnQ2F0ZWdvcnlSZXBvc2l0b3J5JywgJ1Byb2R1Y3RTZWFyY2gnXSxcbiAgICB9LFxuICAgIENhdGFsb2dGaWx0ZXJIZWxwZXIsXG4gICAgQ2F0YWxvZ1NvcnRIZWxwZXIsXG4gICAgUHJvZHVjdEZpZWxkc0hlbHBlcixcbiAgICBCcmFuZE1hbmFnZXJIZWxwZXIsXG4gICAgQ2F0YWxvZ1JlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIENhdGFsb2dIZWxwZXJzU2VydmljZSxcbiAgICBDYXRlZ29yeVNlYXJjaFN0cmF0ZWd5LFxuICAgIFRlcm1TZWFyY2hTdHJhdGVneSxcbiAgICBQcm9maWxlU2VhcmNoU3RyYXRlZ3ksXG4gICAge1xuICAgICAgcHJvdmlkZTogQ2F0YWxvZ1NlYXJjaENvbnRleHQsXG4gICAgICB1c2VGYWN0b3J5OiAoXG4gICAgICAgIGNhdGVnb3J5U3RyYXRlZ3k6IENhdGVnb3J5U2VhcmNoU3RyYXRlZ3ksXG4gICAgICAgIHRlcm1TdHJhdGVneTogVGVybVNlYXJjaFN0cmF0ZWd5LFxuICAgICAgICBwcm9maWxlU3RyYXRlZ3k6IFByb2ZpbGVTZWFyY2hTdHJhdGVneSxcbiAgICAgICkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IENhdGFsb2dTZWFyY2hDb250ZXh0KGNhdGVnb3J5U3RyYXRlZ3ksIHRlcm1TdHJhdGVneSwgcHJvZmlsZVN0cmF0ZWd5KVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFtDYXRlZ29yeVNlYXJjaFN0cmF0ZWd5LCBUZXJtU2VhcmNoU3RyYXRlZ3ksIFByb2ZpbGVTZWFyY2hTdHJhdGVneV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBVcGRhdGVVc2VySW1hZ2UsXG4gICAgICB1c2VGYWN0b3J5OiAodXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5LCBmaWxlVXBsb2FkZXI6IEZpbGVVcGxvYWRlclNlcnZpY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVVc2VySW1hZ2UodXNlclJlcG9zaXRvcnksIGZpbGVVcGxvYWRlcilcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ1VzZXJSZXBvc2l0b3J5JywgJ0ZpbGVVcGxvYWRlclNlcnZpY2UnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdGaWxlVXBsb2FkZXJTZXJ2aWNlJyxcbiAgICAgIHVzZUZhY3Rvcnk6IChzdG9yYWdlOiBTdG9yYWdlLCBiYXNlVXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaXJlYmFzZUZpbGVVcGxvYWRlclNlcnZpY2Uoc3RvcmFnZSwgYmFzZVVybClcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbU3RvcmFnZSwgU1RPUkFHRV9CQVNFX1VSTF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnUHJvZHVjdFNlYXJjaCcsXG4gICAgICB1c2VFeGlzdGluZzogUHJvZHVjdHNWZXJ0ZXhTZWFyY2gsXG4gICAgfSxcbiAgICBDb3Vwb25SZXBvc2l0b3JpZXNGYWNhZGUsXG4gICAgSG9tZVNob3BSZXBvc2l0b3JpZXNGYWNhZGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJDb25uZWN0TW9kdWxlIHtcbiAgc3RhdGljIGluaXRpYWxpemVBcHAoXG4gICAgZGVmYXVsdFNob3A6IFNob3BzLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGZpcmViYXNlPzogRmlyZWJhc2VPcHRpb25zXG4gICAgICBlbGFzdGljU2VhcmNoPzogQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnXG4gICAgICB2ZXJ0ZXhDb25maWc/OiBWZXJ0ZXhTZWFyY2hDb25maWdcbiAgICAgIGhhc3VyYTogSGFzdXJhR3JhcGhRTE9wdGlvbnNcbiAgICAgIGJhY2tlbmRVcmw6IHN0cmluZ1xuICAgICAgb2xkQ2F0ZWdvcnlTdHJ1Y3R1cmU/OiBib29sZWFuXG4gICAgICBzdG9yYWdlQmFzZVVybD86IHN0cmluZ1xuICAgICAgcGVyc2lzdGVuY2VQcm92aWRlcj86IFR5cGU8RGF0YVBlcnNpc3RlbmNlPlxuICAgICAgYXBwQ2hlY2tQcm92aWRlcj86IEFwcENoZWNrT3B0aW9uc1sncHJvdmlkZXInXVxuICAgIH0sXG4gICAgbmFtZU9yQ29uZmlnPzogc3RyaW5nIHwgRmlyZWJhc2VBcHBDb25maWcsXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QW5ndWxhckNvbm5lY3RNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJDb25uZWN0TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC4uLnRoaXMuYnVpbGRDb3JlUHJvdmlkZXJzKG5hbWVPckNvbmZpZywgb3B0aW9ucyksXG4gICAgICAgIC4uLnRoaXMuYnVpbGRDb25kaXRpb25hbFByb3ZpZGVycyhkZWZhdWx0U2hvcCwgb3B0aW9ucyksXG4gICAgICBdLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkQ29yZVByb3ZpZGVycyhcbiAgICBuYW1lT3JDb25maWc6IHN0cmluZyB8IEZpcmViYXNlQXBwQ29uZmlnLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGFwcENoZWNrUHJvdmlkZXI/OiBBcHBDaGVja09wdGlvbnNbJ3Byb3ZpZGVyJ11cbiAgICAgIG9sZENhdGVnb3J5U3RydWN0dXJlPzogYm9vbGVhblxuICAgICAgcGVyc2lzdGVuY2VQcm92aWRlcj86IFR5cGU8RGF0YVBlcnNpc3RlbmNlPlxuICAgIH0sXG4gICkge1xuICAgIHJldHVybiBbXG4gICAgICB7IHByb3ZpZGU6IEZJUkVCQVNFX0FQUF9OQU1FLCB1c2VWYWx1ZTogbmFtZU9yQ29uZmlnIH0sXG4gICAgICB7IHByb3ZpZGU6IEFQUF9DSEVDS19QUk9WSURFUiwgdXNlVmFsdWU6IG9wdGlvbnMuYXBwQ2hlY2tQcm92aWRlciB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBDQVRFR09SWV9TVFJVQ1RVUkUsXG4gICAgICAgIHVzZUNsYXNzOiB0aGlzLnNlbGVjdENhdGVnb3J5U3RydWN0dXJlQWRhcHRlcihvcHRpb25zLm9sZENhdGVnb3J5U3RydWN0dXJlKSxcbiAgICAgIH0sXG4gICAgICB7IHByb3ZpZGU6IFBFUlNJU1RFTkNFX1BST1ZJREVSLCB1c2VDbGFzczogb3B0aW9ucz8ucGVyc2lzdGVuY2VQcm92aWRlciB8fCBDb29raWVEYXRhUGVyc2lzdGVuY2UgfSxcbiAgICBdXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWlsZENvbmRpdGlvbmFsUHJvdmlkZXJzKFxuICAgIGRlZmF1bHRTaG9wOiBTaG9wcyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBmaXJlYmFzZT86IEZpcmViYXNlT3B0aW9uc1xuICAgICAgZWxhc3RpY1NlYXJjaD86IEF4aW9zRWxhc3RpY1NlYXJjaENvbmZpZ1xuICAgICAgdmVydGV4Q29uZmlnPzogVmVydGV4U2VhcmNoQ29uZmlnXG4gICAgICBoYXN1cmE6IEhhc3VyYUdyYXBoUUxPcHRpb25zXG4gICAgICBiYWNrZW5kVXJsOiBzdHJpbmdcbiAgICAgIHN0b3JhZ2VCYXNlVXJsPzogc3RyaW5nXG4gICAgfSxcbiAgKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyhERUZBVUxUX1NIT1AsIGRlZmF1bHRTaG9wKSxcbiAgICAgIC4uLnRoaXMuY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyhGSVJFQkFTRV9PUFRJT05TLCBvcHRpb25zLmZpcmViYXNlKSxcbiAgICAgIC4uLnRoaXMuY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyhFU19DT05GSUcsIG9wdGlvbnMuZWxhc3RpY1NlYXJjaCksXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoVkVSVEVYX0NPTkZJRywgb3B0aW9ucy52ZXJ0ZXhDb25maWcpLFxuICAgICAgLi4udGhpcy5jcmVhdGVQcm92aWRlcklmRXhpc3RzKEhBU1VSQV9PUFRJT05TLCBvcHRpb25zLmhhc3VyYSksXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoQkFDS0VORF9VUkwsIG9wdGlvbnMuYmFja2VuZFVybCksXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoU1RPUkFHRV9CQVNFX1VSTCwgb3B0aW9ucy5zdG9yYWdlQmFzZVVybCksXG4gICAgXVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2VsZWN0Q2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyKG9sZENhdGVnb3J5U3RydWN0dXJlPzogYm9vbGVhbikge1xuICAgIHJldHVybiBpc05pbChvbGRDYXRlZ29yeVN0cnVjdHVyZSkgfHwgb2xkQ2F0ZWdvcnlTdHJ1Y3R1cmVcbiAgICAgID8gT2xkQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyXG4gICAgICA6IE5ld0NhdGVnb3J5U3RydWN0dXJlQWRhcHRlclxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyh0b2tlbjogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IFtdIDogW3sgcHJvdmlkZTogdG9rZW4sIHVzZVZhbHVlOiB2YWx1ZSB9XVxuICB9XG59XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { AxiosAdapter, ProductsIndex } from '@infrab4a/connect';
3
+ import { ES_CONFIG } from './consts/es-config.const';
4
+ import * as i0 from "@angular/core";
5
+ export class AngularElasticSeachModule {
6
+ static initializeApp(options) {
7
+ return {
8
+ ngModule: AngularElasticSeachModule,
9
+ providers: [{ provide: ES_CONFIG, useValue: options }],
10
+ };
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
13
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule, providers: [
15
+ {
16
+ provide: ProductsIndex,
17
+ useFactory: (configuration) => new ProductsIndex(new AxiosAdapter(configuration)),
18
+ deps: [ES_CONFIG],
19
+ },
20
+ ] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule, decorators: [{
23
+ type: NgModule,
24
+ args: [{
25
+ providers: [
26
+ {
27
+ provide: ProductsIndex,
28
+ useFactory: (configuration) => new ProductsIndex(new AxiosAdapter(configuration)),
29
+ deps: [ES_CONFIG],
30
+ },
31
+ ],
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1lbGFzdGljLXNlYXJjaC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2FuZ3VsYXItZWxhc3RpYy1zZWFyY2gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQTRCLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXpGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7QUFZcEQsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQWlDO1FBQ3BELE9BQU87WUFDTCxRQUFRLEVBQUUseUJBQXlCO1lBQ25DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDdkQsQ0FBQTtJQUNILENBQUM7OEdBTlUseUJBQXlCOytHQUF6Qix5QkFBeUI7K0dBQXpCLHlCQUF5QixhQVR6QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixVQUFVLEVBQUUsQ0FBQyxhQUF1QyxFQUFpQixFQUFFLENBQ3JFLElBQUksYUFBYSxDQUFDLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDbEI7U0FDRjs7MkZBRVUseUJBQXlCO2tCQVZyQyxRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsVUFBVSxFQUFFLENBQUMsYUFBdUMsRUFBaUIsRUFBRSxDQUNyRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQzs0QkFDcEQsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO3lCQUNsQjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEF4aW9zQWRhcHRlciwgQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnLCBQcm9kdWN0c0luZGV4IH0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5cbmltcG9ydCB7IEVTX0NPTkZJRyB9IGZyb20gJy4vY29uc3RzL2VzLWNvbmZpZy5jb25zdCdcblxuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUHJvZHVjdHNJbmRleCxcbiAgICAgIHVzZUZhY3Rvcnk6IChjb25maWd1cmF0aW9uOiBBeGlvc0VsYXN0aWNTZWFyY2hDb25maWcpOiBQcm9kdWN0c0luZGV4ID0+XG4gICAgICAgIG5ldyBQcm9kdWN0c0luZGV4KG5ldyBBeGlvc0FkYXB0ZXIoY29uZmlndXJhdGlvbikpLFxuICAgICAgZGVwczogW0VTX0NPTkZJR10sXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSB7XG4gIHN0YXRpYyBpbml0aWFsaXplQXBwKG9wdGlvbnM6IEF4aW9zRWxhc3RpY1NlYXJjaENvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogRVNfQ09ORklHLCB1c2VWYWx1ZTogb3B0aW9ucyB9XSxcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,141 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { FirebaseApp } from '@angular/fire/app';
3
+ import { Auth, browserLocalPersistence, browserSessionPersistence, getAuth, indexedDBLocalPersistence, initializeAuth, provideAuth, } from '@angular/fire/auth';
4
+ import { Authentication, AuthenticationFirebaseAuthService, RecoveryPassword, Register, RegisterFirebaseAuthService, SignOut, } from '@infrab4a/connect';
5
+ import { FIREBASE_APP_NAME, FIREBASE_OPTIONS } from './consts';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/fire/auth";
8
+ export class AngularFirebaseAuthModule {
9
+ static initializeApp(options, nameOrConfig) {
10
+ return {
11
+ ngModule: AngularFirebaseAuthModule,
12
+ providers: [
13
+ { provide: FIREBASE_OPTIONS, useValue: options },
14
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
15
+ ],
16
+ };
17
+ }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, imports: [i1.AuthModule] }); }
20
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, providers: [
21
+ {
22
+ provide: 'Authentication',
23
+ useFactory: (authenticationService, userRepository) => {
24
+ return new Authentication(authenticationService, userRepository);
25
+ },
26
+ deps: ['AuthenticationService', 'UserRepository'],
27
+ },
28
+ {
29
+ provide: 'AuthenticationService',
30
+ useFactory: (angularFireAuth) => {
31
+ return new AuthenticationFirebaseAuthService(angularFireAuth);
32
+ },
33
+ deps: [Auth],
34
+ },
35
+ {
36
+ provide: 'Register',
37
+ useFactory: (registerService, userRepository) => {
38
+ return new Register(registerService, userRepository);
39
+ },
40
+ deps: ['RegisterService', 'UserRepository'],
41
+ },
42
+ {
43
+ provide: 'RegisterService',
44
+ useFactory: (angularFireAuth) => {
45
+ return new RegisterFirebaseAuthService(angularFireAuth);
46
+ },
47
+ deps: [Auth],
48
+ },
49
+ {
50
+ provide: 'SignOut',
51
+ useFactory: (authenticationService) => {
52
+ return new SignOut(authenticationService);
53
+ },
54
+ deps: ['AuthenticationService'],
55
+ },
56
+ {
57
+ provide: 'RecoveryPassword',
58
+ useFactory: (authenticationService) => {
59
+ return new RecoveryPassword(authenticationService);
60
+ },
61
+ deps: ['AuthenticationService'],
62
+ },
63
+ ], imports: [provideAuth((injector) => {
64
+ const app = injector.get(FirebaseApp);
65
+ try {
66
+ return initializeAuth(app, {
67
+ persistence: [indexedDBLocalPersistence, browserLocalPersistence, browserSessionPersistence],
68
+ });
69
+ }
70
+ catch (error) {
71
+ if (error instanceof Error)
72
+ console.error('Error initializing auth', error.message);
73
+ return getAuth(app);
74
+ }
75
+ })] }); }
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, decorators: [{
78
+ type: NgModule,
79
+ args: [{
80
+ imports: [
81
+ provideAuth((injector) => {
82
+ const app = injector.get(FirebaseApp);
83
+ try {
84
+ return initializeAuth(app, {
85
+ persistence: [indexedDBLocalPersistence, browserLocalPersistence, browserSessionPersistence],
86
+ });
87
+ }
88
+ catch (error) {
89
+ if (error instanceof Error)
90
+ console.error('Error initializing auth', error.message);
91
+ return getAuth(app);
92
+ }
93
+ }),
94
+ ],
95
+ providers: [
96
+ {
97
+ provide: 'Authentication',
98
+ useFactory: (authenticationService, userRepository) => {
99
+ return new Authentication(authenticationService, userRepository);
100
+ },
101
+ deps: ['AuthenticationService', 'UserRepository'],
102
+ },
103
+ {
104
+ provide: 'AuthenticationService',
105
+ useFactory: (angularFireAuth) => {
106
+ return new AuthenticationFirebaseAuthService(angularFireAuth);
107
+ },
108
+ deps: [Auth],
109
+ },
110
+ {
111
+ provide: 'Register',
112
+ useFactory: (registerService, userRepository) => {
113
+ return new Register(registerService, userRepository);
114
+ },
115
+ deps: ['RegisterService', 'UserRepository'],
116
+ },
117
+ {
118
+ provide: 'RegisterService',
119
+ useFactory: (angularFireAuth) => {
120
+ return new RegisterFirebaseAuthService(angularFireAuth);
121
+ },
122
+ deps: [Auth],
123
+ },
124
+ {
125
+ provide: 'SignOut',
126
+ useFactory: (authenticationService) => {
127
+ return new SignOut(authenticationService);
128
+ },
129
+ deps: ['AuthenticationService'],
130
+ },
131
+ {
132
+ provide: 'RecoveryPassword',
133
+ useFactory: (authenticationService) => {
134
+ return new RecoveryPassword(authenticationService);
135
+ },
136
+ deps: ['AuthenticationService'],
137
+ },
138
+ ],
139
+ }]
140
+ }] });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1maXJlYmFzZS1hdXRoLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvYW5ndWxhci1maXJlYmFzZS1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLG1CQUFtQixDQUFBO0FBQ2hFLE9BQU8sRUFDTCxJQUFJLEVBQ0osdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixPQUFPLEVBQ1AseUJBQXlCLEVBQ3pCLGNBQWMsRUFDZCxXQUFXLEdBQ1osTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsY0FBYyxFQUNkLGlDQUFpQyxFQUVqQyxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLDJCQUEyQixFQUUzQixPQUFPLEdBRVIsTUFBTSxtQkFBbUIsQ0FBQTtBQUUxQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUE7OztBQWdFOUQsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxNQUFNLENBQUMsYUFBYSxDQUNsQixPQUF3QixFQUN4QixZQUF5QztRQUV6QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLHlCQUF5QjtZQUNuQyxTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtnQkFDaEQsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRTthQUN2RDtTQUNGLENBQUE7SUFDSCxDQUFDOzhHQVpVLHlCQUF5QjsrR0FBekIseUJBQXlCOytHQUF6Qix5QkFBeUIsYUE3Q3pCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsVUFBVSxFQUFFLENBQUMscUJBQTRDLEVBQUUsY0FBOEIs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QUFPLEVBQUUsa0JBQWtCOzRCQUMzQixVQUFVLEVBQUUsQ0FBQyxxQkFBNEMsRUFBb0IsRUFBRTtnQ0FDN0UsT0FBTyxJQUFJLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUE7NEJBQ3BELENBQUM7NEJBQ0QsSUFBSSxFQUFFLENBQUMsdUJBQXVCLENBQUM7eUJBQ2hDO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEZpcmViYXNlQXBwLCBGaXJlYmFzZU9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCdcbmltcG9ydCB7XG4gIEF1dGgsXG4gIGJyb3dzZXJMb2NhbFBlcnNpc3RlbmNlLFxuICBicm93c2VyU2Vzc2lvblBlcnNpc3RlbmNlLFxuICBnZXRBdXRoLFxuICBpbmRleGVkREJMb2NhbFBlcnNpc3RlbmNlLFxuICBpbml0aWFsaXplQXV0aCxcbiAgcHJvdmlkZUF1dGgsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCdcbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0aW9uLFxuICBBdXRoZW50aWNhdGlvbkZpcmViYXNlQXV0aFNlcnZpY2UsXG4gIEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgUmVjb3ZlcnlQYXNzd29yZCxcbiAgUmVnaXN0ZXIsXG4gIFJlZ2lzdGVyRmlyZWJhc2VBdXRoU2VydmljZSxcbiAgUmVnaXN0ZXJTZXJ2aWNlLFxuICBTaWduT3V0LFxuICBVc2VyUmVwb3NpdG9yeSxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5cbmltcG9ydCB7IEZJUkVCQVNFX0FQUF9OQU1FLCBGSVJFQkFTRV9PUFRJT05TIH0gZnJvbSAnLi9jb25zdHMnXG5pbXBvcnQgeyBGaXJlYmFzZUFwcENvbmZpZyB9IGZyb20gJy4vdHlwZXMnXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBwcm92aWRlQXV0aCgoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBpbmplY3Rvci5nZXQoRmlyZWJhc2VBcHApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBpbml0aWFsaXplQXV0aChhcHAsIHtcbiAgICAgICAgICBwZXJzaXN0ZW5jZTogW2luZGV4ZWREQkxvY2FsUGVyc2lzdGVuY2UsIGJyb3dzZXJMb2NhbFBlcnNpc3RlbmNlLCBicm93c2VyU2Vzc2lvblBlcnNpc3RlbmNlXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgYXV0aCcsIGVycm9yLm1lc3NhZ2UpXG5cbiAgICAgICAgcmV0dXJuIGdldEF1dGgoYXBwKVxuICAgICAgfVxuICAgIH0pLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiAnQXV0aGVudGljYXRpb24nLFxuICAgICAgdXNlRmFjdG9yeTogKGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLCB1c2VyUmVwb3NpdG9yeTogVXNlclJlcG9zaXRvcnkpOiBBdXRoZW50aWNhdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQXV0aGVudGljYXRpb24oYXV0aGVudGljYXRpb25TZXJ2aWNlLCB1c2VyUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0F1dGhlbnRpY2F0aW9uU2VydmljZScsICdVc2VyUmVwb3NpdG9yeSddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0F1dGhlbnRpY2F0aW9uU2VydmljZScsXG4gICAgICB1c2VGYWN0b3J5OiAoYW5ndWxhckZpcmVBdXRoOiBBdXRoKTogQXV0aGVudGljYXRpb25TZXJ2aWNlID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBdXRoZW50aWNhdGlvbkZpcmViYXNlQXV0aFNlcnZpY2UoYW5ndWxhckZpcmVBdXRoKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFtBdXRoXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdSZWdpc3RlcicsXG4gICAgICB1c2VGYWN0b3J5OiAocmVnaXN0ZXJTZXJ2aWNlOiBSZWdpc3RlclNlcnZpY2UsIHVzZXJSZXBvc2l0b3J5OiBVc2VyUmVwb3NpdG9yeSk6IFJlZ2lzdGVyID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdpc3RlcihyZWdpc3RlclNlcnZpY2UsIHVzZXJSZXBvc2l0b3J5KVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnUmVnaXN0ZXJTZXJ2aWNlJywgJ1VzZXJSZXBvc2l0b3J5J10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnUmVnaXN0ZXJTZXJ2aWNlJyxcbiAgICAgIHVzZUZhY3Rvcnk6IChhbmd1bGFyRmlyZUF1dGg6IEF1dGgpOiBSZWdpc3RlclNlcnZpY2UgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ2lzdGVyRmlyZWJhc2VBdXRoU2VydmljZShhbmd1bGFyRmlyZUF1dGgpXG4gICAgICB9LFxuICAgICAgZGVwczogW0F1dGhdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1NpZ25PdXQnLFxuICAgICAgdXNlRmFjdG9yeTogKGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlKTogU2lnbk91dCA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgU2lnbk91dChhdXRoZW50aWNhdGlvblNlcnZpY2UpXG4gICAgICB9LFxuICAgICAgZGVwczogWydBdXRoZW50aWNhdGlvblNlcnZpY2UnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdSZWNvdmVyeVBhc3N3b3JkJyxcbiAgICAgIHVzZUZhY3Rvcnk6IChhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSk6IFJlY292ZXJ5UGFzc3dvcmQgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFJlY292ZXJ5UGFzc3dvcmQoYXV0aGVudGljYXRpb25TZXJ2aWNlKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnQXV0aGVudGljYXRpb25TZXJ2aWNlJ10sXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckZpcmViYXNlQXV0aE1vZHVsZSB7XG4gIHN0YXRpYyBpbml0aWFsaXplQXBwKFxuICAgIG9wdGlvbnM6IEZpcmViYXNlT3B0aW9ucyxcbiAgICBuYW1lT3JDb25maWc/OiBzdHJpbmcgfCBGaXJlYmFzZUFwcENvbmZpZyxcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmd1bGFyRmlyZWJhc2VBdXRoTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBbmd1bGFyRmlyZWJhc2VBdXRoTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRklSRUJBU0VfT1BUSU9OUywgdXNlVmFsdWU6IG9wdGlvbnMgfSxcbiAgICAgICAgeyBwcm92aWRlOiBGSVJFQkFTRV9BUFBfTkFNRSwgdXNlVmFsdWU6IG5hbWVPckNvbmZpZyB9LFxuICAgICAgXSxcbiAgICB9XG4gIH1cbn1cbiJdfQ==