@snabcentr/client-core 2.64.1 → 2.64.3

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 (56) hide show
  1. package/esm2022/auth/services/sc-auth.service.mjs +3 -3
  2. package/esm2022/auth/services/sc-token.service.mjs +3 -3
  3. package/esm2022/banners/services/sc-banner.service.mjs +3 -3
  4. package/esm2022/cart/services/sc-cart.service.mjs +3 -3
  5. package/esm2022/catalog/services/sc-catalog-filter.service.mjs +3 -3
  6. package/esm2022/catalog/services/sc-catalog.service.mjs +3 -3
  7. package/esm2022/catalog/services/sc-favorite.service.mjs +3 -3
  8. package/esm2022/catalog/services/sc-recommendation.service.mjs +7 -5
  9. package/esm2022/configurator/services/sc-configurator.service.mjs +3 -3
  10. package/esm2022/contacts/services/sc-contacts.service.mjs +3 -3
  11. package/esm2022/contacts/services/sc-feedback.service.mjs +3 -3
  12. package/esm2022/contacts/services/sc-requisites.service.mjs +3 -3
  13. package/esm2022/contragent/services/sc-contragent.service.mjs +3 -3
  14. package/esm2022/converters/services/sc-converters.service.mjs +4 -5
  15. package/esm2022/delivery-address/services/sc-delivery-address.service.mjs +3 -3
  16. package/esm2022/files/services/sc-files.service.mjs +3 -3
  17. package/esm2022/frequently-asked-questions/services/sc-frequently-asked-questions.service.mjs +3 -3
  18. package/esm2022/guards/catalog-seo.guard.mjs +12 -22
  19. package/esm2022/guards/sc-auth-as-client.guard.mjs +3 -3
  20. package/esm2022/helpers/sc-image-helper.mjs +3 -3
  21. package/esm2022/helpers/sc-units-helper.mjs +3 -3
  22. package/esm2022/httpInterceptors/sc-auth.interceptor.mjs +3 -3
  23. package/esm2022/httpInterceptors/sc-cache.interceptor.mjs +3 -3
  24. package/esm2022/httpInterceptors/sc-convert.interceptor.mjs +3 -3
  25. package/esm2022/httpInterceptors/sc-date-format.interceptor.mjs +3 -3
  26. package/esm2022/httpInterceptors/sc-errors.interceptor.mjs +3 -3
  27. package/esm2022/httpInterceptors/sc-guest.interceptor.mjs +3 -3
  28. package/esm2022/httpInterceptors/sc-options.interceptor.mjs +3 -3
  29. package/esm2022/locations/services/sc-location.service.mjs +3 -3
  30. package/esm2022/news/services/sc-news.service.mjs +3 -3
  31. package/esm2022/notifications/services/sc-notifications.service.mjs +3 -3
  32. package/esm2022/order/services/sc-orders.service.mjs +3 -3
  33. package/esm2022/pagination/services/sc-pagination.service.mjs +3 -3
  34. package/esm2022/pipes/sc-id-or-slug.pipe.mjs +4 -4
  35. package/esm2022/pipes/sc-media-image-transformer.pipe.mjs +3 -3
  36. package/esm2022/questionnaire/services/sc-questionnaire.service.mjs +3 -3
  37. package/esm2022/reclamation/services/sc-reclamation.service.mjs +3 -3
  38. package/esm2022/references/services/sc-references.service.mjs +3 -3
  39. package/esm2022/sc-json-ld/sc-json-ld.component.mjs +3 -3
  40. package/esm2022/sc-json-ld/sc-json-ld.module.mjs +4 -4
  41. package/esm2022/search/services/sc-search.service.mjs +3 -3
  42. package/esm2022/services/sc-seo.service.mjs +5 -5
  43. package/esm2022/suggestion/services/sc-suggestion.service.mjs +3 -3
  44. package/esm2022/ui/services/sc-ui.service.mjs +3 -3
  45. package/esm2022/user/services/sc-user.service.mjs +3 -3
  46. package/esm2022/user-metrika/services/sc-user-metrika.service.mjs +3 -3
  47. package/esm2022/utils/phone-fotmatter/sc-phone.service.mjs +3 -3
  48. package/esm2022/utm/services/sc-utm.service.mjs +3 -3
  49. package/esm2022/vCard/sc-v-card.service.mjs +3 -3
  50. package/esm2022/vacancies/services/sc-vacancies.service.mjs +3 -3
  51. package/esm2022/verification/services/sc-verification.service.mjs +3 -3
  52. package/esm2022/warehouse/services/sc-warehouse.service.mjs +5 -5
  53. package/fesm2022/snabcentr-client-core.mjs +171 -180
  54. package/fesm2022/snabcentr-client-core.mjs.map +1 -1
  55. package/package.json +8 -8
  56. package/services/sc-seo.service.d.ts +1 -1
@@ -183,10 +183,10 @@ export class ScUIService {
183
183
  setSelectedWarehouseId(selectedWarehouseId) {
184
184
  this.setMetadataByKey('selectedWarehouseId', selectedWarehouseId);
185
185
  }
186
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUIService, deps: [{ token: i1.ScUserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
187
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUIService, providedIn: 'root' }); }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUIService, deps: [{ token: i1.ScUserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
187
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUIService, providedIn: 'root' }); }
188
188
  }
189
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUIService, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUIService, decorators: [{
190
190
  type: Injectable,
191
191
  args: [{
192
192
  providedIn: 'root',
@@ -172,10 +172,10 @@ export class ScUserService {
172
172
  getGuestInfo$() {
173
173
  return this.http.get(`${this.urls.apiUrl}/guest`).pipe(map((user) => new ScUser(user)));
174
174
  }
175
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
176
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUserService, providedIn: 'root' }); }
175
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
176
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUserService, providedIn: 'root' }); }
177
177
  }
178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUserService, decorators: [{
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUserService, decorators: [{
179
179
  type: Injectable,
180
180
  args: [{
181
181
  providedIn: 'root',
@@ -60,10 +60,10 @@ export class ScUserMetrikaService {
60
60
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,security/detect-object-injection
61
61
  this.additionalParams[name] = value;
62
62
  }
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUserMetrikaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
64
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUserMetrikaService, providedIn: 'root' }); }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUserMetrikaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
64
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUserMetrikaService, providedIn: 'root' }); }
65
65
  }
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUserMetrikaService, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUserMetrikaService, decorators: [{
67
67
  type: Injectable,
68
68
  args: [{
69
69
  providedIn: 'root',
@@ -51,10 +51,10 @@ export class ScPhoneService {
51
51
  }
52
52
  return value;
53
53
  }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScPhoneService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
55
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScPhoneService, providedIn: 'root' }); }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPhoneService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
55
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPhoneService, providedIn: 'root' }); }
56
56
  }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScPhoneService, decorators: [{
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPhoneService, decorators: [{
58
58
  type: Injectable,
59
59
  args: [{
60
60
  providedIn: 'root',
@@ -145,10 +145,10 @@ export class ScUTMService {
145
145
  this.storageService.setItem('utmTimestamp', JSON.stringify(Date.now()));
146
146
  }
147
147
  }
148
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUTMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
149
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUTMService, providedIn: 'root' }); }
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUTMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
149
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUTMService, providedIn: 'root' }); }
150
150
  }
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScUTMService, decorators: [{
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUTMService, decorators: [{
152
152
  type: Injectable,
153
153
  args: [{
154
154
  providedIn: 'root',
@@ -85,10 +85,10 @@ export class ScVCardService {
85
85
  downloadVCard(data) {
86
86
  this.windowReference.open(this.windowReference.URL.createObjectURL(this.getVCardBlob(data)));
87
87
  }
88
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVCardService, deps: [{ token: SC_URLS }, { token: WA_WINDOW }], target: i0.ɵɵFactoryTarget.Injectable }); }
89
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVCardService, providedIn: 'root' }); }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVCardService, deps: [{ token: SC_URLS }, { token: WA_WINDOW }], target: i0.ɵɵFactoryTarget.Injectable }); }
89
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVCardService, providedIn: 'root' }); }
90
90
  }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVCardService, decorators: [{
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVCardService, decorators: [{
92
92
  type: Injectable,
93
93
  args: [{
94
94
  providedIn: 'root',
@@ -37,10 +37,10 @@ export class ScVacanciesService {
37
37
  })
38
38
  .pipe(map((result) => new ScVacanciesList(result)));
39
39
  }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVacanciesService, deps: [{ token: i1.HttpClient }, { token: SC_VACANCIES_DATA_SOURCE }, { token: SC_CACHE_LIFETIME }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVacanciesService, providedIn: 'root' }); }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVacanciesService, deps: [{ token: i1.HttpClient }, { token: SC_VACANCIES_DATA_SOURCE }, { token: SC_CACHE_LIFETIME }], target: i0.ɵɵFactoryTarget.Injectable }); }
41
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVacanciesService, providedIn: 'root' }); }
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVacanciesService, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVacanciesService, decorators: [{
44
44
  type: Injectable,
45
45
  args: [{
46
46
  providedIn: 'root',
@@ -53,10 +53,10 @@ export class ScVerificationService {
53
53
  params: { phone: phone },
54
54
  });
55
55
  }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVerificationService, deps: [{ token: i1.HttpClient }, { token: SC_URLS }], target: i0.ɵɵFactoryTarget.Injectable }); }
57
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVerificationService, providedIn: 'root' }); }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVerificationService, deps: [{ token: i1.HttpClient }, { token: SC_URLS }], target: i0.ɵɵFactoryTarget.Injectable }); }
57
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVerificationService, providedIn: 'root' }); }
58
58
  }
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScVerificationService, decorators: [{
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScVerificationService, decorators: [{
60
60
  type: Injectable,
61
61
  args: [{
62
62
  providedIn: 'root',
@@ -57,7 +57,7 @@ export class ScWarehouseService {
57
57
  .pipe(
58
58
  // eslint-disable-next-line unicorn/no-negation-in-equality-check
59
59
  distinctUntilChanged((previous, current) => !previous.id !== !current.id || previous.city === current.city), skip(1), // distinctUntilChanged() всегда выдаёт первое значение, поэтому пропускаем его и реагируем только на изменение.
60
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing,sonarjs/prefer-nullish-coalescing
60
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
61
61
  map((data) => data.warehouses.find((warehouse) => data.region && warehouse.regions?.includes(data.region))?.id || data.warehouses.find((item) => item.isMain)?.id), filter((selectedId) => selectedId !== undefined && this.warehouseIdSelectSubject.value !== selectedId),
62
62
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
63
63
  map((selectedId) => selectedId), tap((selectedId) => {
@@ -107,13 +107,13 @@ export class ScWarehouseService {
107
107
  getCurrentWarehouseIdSelect() {
108
108
  return this.warehouseIdSelectSubject.getValue();
109
109
  }
110
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScWarehouseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
111
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScWarehouseService, providedIn: 'root' }); }
110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScWarehouseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
111
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScWarehouseService, providedIn: 'root' }); }
112
112
  }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScWarehouseService, decorators: [{
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScWarehouseService, decorators: [{
114
114
  type: Injectable,
115
115
  args: [{
116
116
  providedIn: 'root',
117
117
  }]
118
118
  }], ctorParameters: () => [] });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtd2FyZWhvdXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3dhcmVob3VzZS9zZXJ2aWNlcy9zYy13YXJlaG91c2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHekgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxZQUFZLENBQUM7O0FBR2xEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQXFCM0I7O09BRUc7SUFDSDtRQXZCQTs7V0FFRztRQUNjLFVBQUssR0FBdUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxFOztXQUVHO1FBQ2MsYUFBUSxHQUF3QixNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVoRjs7V0FFRztRQUNLLGdCQUFXLEdBQStCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLGFBQWEsQ0FBaUIsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1Sjs7V0FFRztRQUNLLDZCQUF3QixHQUFtQyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENB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QUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUNuSCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQ3ZCLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSwyQkFBMkI7UUFDOUIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEQsQ0FBQzsrR0EzSVEsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGZixNQUFNOzs0RkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSwgc2tpcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NJVGVybWluYWxQcm92aWRlciB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9pbnRlcmZhY2VzL3NjLWktdGVybWluYWwtcHJvdmlkZXInO1xuaW1wb3J0IHsgSVNfUlVOTklOR19PTl9URVJNSU5BTCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy90ZXJtaW5hbC5wcm92aWRlcnMnO1xuaW1wb3J0IHsgU2NSZWZlcmVuY2VOYW1lIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcy9lbnVtcy9zYy1yZWZlcmVuY2UtbmFtZSc7XG5pbXBvcnQgeyBTY1JlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcy9zZXJ2aWNlcy9zYy1yZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU0NfVVNFUl9JTkZPLCBTY1VzZXIgfSBmcm9tICcuLi8uLi91c2VyJztcbmltcG9ydCB7IFNjSVdhcmVob3VzZSB9IGZyb20gJy4uL2R0byc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDRgdC60LvQsNC00LDQvNC4LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY1dhcmVob3VzZVNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQtNCw0L3QvdGL0YUg0L4g0YLQtdC60YPRidC10Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlciQ6IE9ic2VydmFibGU8U2NVc2VyPiA9IGluamVjdChTQ19VU0VSX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFNjSVRlcm1pbmFsUHJvdmlkZXJ9INC00LDQvdC90YvRhSDQviDRgtC10YDQvNC40L3QsNC70LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZXJtaW5hbDogU2NJVGVybWluYWxQcm92aWRlciA9IGluamVjdChJU19SVU5OSU5HX09OX1RFUk1JTkFMKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdC60LvQsNC00L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHdhcmVob3VzZXMkOiBPYnNlcnZhYmxlPFNjSVdhcmVob3VzZVtdPiA9IGluamVjdChTY1JlZmVyZW5jZXNTZXJ2aWNlKS5nZXRSZWZlcmVuY2UkPFNjSVdhcmVob3VzZVtdPihTY1JlZmVyZW5jZU5hbWUud2FyZWhvdXNlKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0YHQutC70LDQtNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgd2FyZWhvdXNlSWRTZWxlY3RTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1dhcmVob3VzZVNlcnZpY2V9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9uT25Vc2VyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDQv9C+0LTQv9C40YHQutC4INC90LAg0LjQt9C80LXQvdC10L3QuNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRTdWJzY3JpcHRpb25PblVzZXIoKTogdm9pZCB7XG4gICAgICAgIC8vIE9ic2VydmFibGUg0LTQsNC90L3Ri9GFINC00LvRjyDQvtCx0YDQsNCx0L7RgtC60Lgg0YHQuNCz0L3QsNC70L7QsiDQuNC30LzQtdC90LXQvdC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAgICBjb25zdCBkYXRhJCA9IHRoaXMud2FyZWhvdXNlcyQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgod2FyZWhvdXNlcykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgodXNlcikgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcmVob3VzZXM6IHdhcmVob3VzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkTWV0YWRhdGE6IHVzZXIubWV0YWRhdGEuc2VsZWN0ZWRXYXJlaG91c2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpdHk6IHVzZXIuY2l0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogdXNlci5yZWdpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdXNlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vINCf0YDQuCDQstGF0L7QtNC1INC4INCy0YvRhdC+0LTQtSDRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBJZCDRgdC60LvQsNC00LAsINC30LDQv9C40YHQsNC90L3Ri9C5INCyIG1ldGFkYXRhLCDQu9C40LHQviBJZCDRgdC60LvQsNC00LAg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC5INGA0LXQs9C40L7QvdGDINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjywg0LvQuNCx0L4gSWQg0YHQutC70LDQtNCwINGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgICAgZGF0YSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLW5lZ2F0aW9uLWluLWVxdWFsaXR5LWNoZWNrXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiAhcHJldmlvdXMuaWQgPT09ICFjdXJyZW50LmlkKSxcbiAgICAgICAgICAgICAgICBtYXAoKGRhdGEpID0+IC8qKiBkYXRhLnNlbGVjdGVkSWRNZXRhZGF0YSB8fCAqLyBkYXRhLndhcmVob3VzZXMuZmluZCgod2FyZWhvdXNlKSA9PiBkYXRhLnJlZ2lvbiAmJiB3YXJlaG91c2UucmVnaW9ucz8uaW5jbHVkZXMoZGF0YS5yZWdpb24pKT8uaWQgPz8gbnVsbCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChzZWxlY3RlZElkKSA9PiB0aGlzLndhcmVob3VzZUlkU2VsZWN0U3ViamVjdC52YWx1ZSAhPT0gc2VsZWN0ZWRJZCksXG4gICAgICAgICAgICAgICAgdGFwKChzZWxlY3RlZElkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FyZWhvdXNlSWRTZWxlY3RTdWJqZWN0Lm5leHQoc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgICAvLyDQn9GA0Lgg0YHQvNC10L3QtSDRgNC10LPQuNC+0L3QsCDRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQsiBtZXRhZGF0YSBpZCDRgdC60LvQsNC00LAg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0YDQtdCz0LjQvtC90LAsINC70LjQsdC+INGB0YLQsNCy0LjRgiBJZCDRgdC60LvQsNC00LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4sINC10YHQu9C4INGA0LXQs9C40L7QvSDQsdGL0Lsg0YPQtNCw0LvRkdC9LlxuICAgICAgICBkYXRhJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbmVnYXRpb24taW4tZXF1YWxpdHktY2hlY2tcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMsIGN1cnJlbnQpID0+ICFwcmV2aW91cy5pZCAhPT0gIWN1cnJlbnQuaWQgfHwgcHJldmlvdXMuY2l0eSA9PT0gY3VycmVudC5jaXR5KSxcbiAgICAgICAgICAgICAgICBza2lwKDEpLCAvLyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpINCy0YHQtdCz0LTQsCDQstGL0LTQsNGR0YIg0L/QtdGA0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINC/0L7RjdGC0L7QvNGDINC/0YDQvtC/0YPRgdC60LDQtdC8INC10LPQviDQuCDRgNC10LDQs9C40YDRg9C10Lwg0YLQvtC70YzQutC+INC90LAg0LjQt9C80LXQvdC10L3QuNC1LlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLW51bGxpc2gtY29hbGVzY2luZyxzb25hcmpzL3ByZWZlci1udWxsaXNoLWNvYWxlc2NpbmdcbiAgICAgICAgICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGEud2FyZWhvdXNlcy5maW5kKCh3YXJlaG91c2UpID0+IGRhdGEucmVnaW9uICYmIHdhcmVob3VzZS5yZWdpb25zPy5pbmNsdWRlcyhkYXRhLnJlZ2lvbikpPy5pZCB8fCBkYXRhLndhcmVob3VzZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pc01haW4pPy5pZCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChzZWxlY3RlZElkKSA9PiBzZWxlY3RlZElkICE9PSB1bmRlZmluZWQgJiYgdGhpcy53YXJlaG91c2VJZFNlbGVjdFN1YmplY3QudmFsdWUgIT09IHNlbGVjdGVkSWQpLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgbWFwKChzZWxlY3RlZElkKSA9PiBzZWxlY3RlZElkISksXG4gICAgICAgICAgICAgICAgdGFwKChzZWxlY3RlZElkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0V2FyZWhvdXNlSWRTZWxlY3RDaGFuZ2Uoc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQstGL0LHRgNCw0L3QvdC+0LPQviDRgdC60LvQsNC00LAg0LIge0BsaW5rIEJlaGF2aW9yU3ViamVjdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2FyZWhvdXNlSWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0YHQutC70LDQtNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRXYXJlaG91c2VJZFNlbGVjdENoYW5nZSh3YXJlaG91c2VJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMud2FyZWhvdXNlSWRTZWxlY3RTdWJqZWN0Lm5leHQod2FyZWhvdXNlSWQpO1xuXG4gICAgICAgIC8vIFRPRE86INCU0L7RgNCw0LHQvtGC0LDRgtGMIHRoaXMudWlTZXJ2aWNlLnNldFNlbGVjdGVkV2FyZWhvdXNlSWQod2FyZWhvdXNlSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQstGL0LHRgNCw0L3QvdC+0LPQviDRgdC60LvQsNC00LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFdhcmVob3VzZVNlbGVjdENoYW5nZSQoKTogT2JzZXJ2YWJsZTxTY0lXYXJlaG91c2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FyZWhvdXNlcyQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgod2FyZWhvdXNlcykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLndhcmVob3VzZUlkU2VsZWN0U3ViamVjdC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKGlkKSA9PiB3YXJlaG91c2VzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKSA/PyB3YXJlaG91c2VzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXNNYWluKSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigod2FyZWhvdXNlKSA9PiB3YXJlaG91c2UgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFwKCh3YXJlaG91c2UpID0+IHdhcmVob3VzZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQutC70LDQtNCwINC00LvRjyDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREZWxpdmVyeVdhcmVob3VzZSQoKTogT2JzZXJ2YWJsZTxTY0lXYXJlaG91c2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FyZWhvdXNlcyQucGlwZShcbiAgICAgICAgICAgIG1hcCgod2FyZWhvdXNlcykgPT4gd2FyZWhvdXNlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlzTWFpbikpLFxuICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQutC70LDQtNCwINCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDRgtC+0LPQviwg0LPQtNC1INC30LDQv9GD0YnQtdC90L4g0L/RgNC40LvQvtC20LXQvdC40LUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyDQldGB0LvQuCDQv9GA0LjQu9C+0LbQtdC90LjQtSDQt9Cw0L/Rg9GJ0LXQvdC+INC90LAg0YLQtdGA0LzQuNC90LDQu9C1INC4INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0LrQu9Cw0LTQsCDQv9GA0LjQstGP0LfQsNC90L3QvtCz0L4g0Log0YLQtdGA0LzQuNC90LDQu9GDINC90LUgbnVsbCwg0YLQviDQstC+0LfQstGA0LDRidCw0LXRgiDRgdC60LvQsNC0INGC0LXRgNC80LjQvdCw0LvQsCxcbiAgICAgKiDQstC+INCy0YHQtdGFINC+0YHRgtCw0LvRjNC90YvRhSDRgdC70YPRh9Cw0Y/RhSDQstC+0LfQstGA0LDRidCw0LXRgiDQvtGB0L3QvtCy0L3QvtC5INGB0LrQu9Cw0LQuXG4gICAgICovXG4gICAgcHVibGljIGdldENhdGFsb2dXYXJlaG91c2VDaGFuZ2UkKCk6IE9ic2VydmFibGU8U2NJV2FyZWhvdXNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLndhcmVob3VzZXMkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHdhcmVob3VzZXMpID0+IHdhcmVob3VzZXMuZmluZCgodykgPT4gdy5pZCA9PT0gdGhpcy50ZXJtaW5hbC53YXJlaG91c2VJZCkgPz8gd2FyZWhvdXNlcy5maW5kKCh3KSA9PiB3LmlzTWFpbikpLFxuICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQv9C40YHQutCwINGB0LrQu9Cw0LTQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXYXJlaG91c2VzJCgpOiBPYnNlcnZhYmxlPFNjSVdhcmVob3VzZVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLndhcmVob3VzZXMkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFdhcmVob3VzZUlkU2VsZWN0KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy53YXJlaG91c2VJZFNlbGVjdFN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICB9XG59XG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtd2FyZWhvdXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3dhcmVob3VzZS9zZXJ2aWNlcy9zYy13YXJlaG91c2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHekgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxZQUFZLENBQUM7O0FBR2xEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQXFCM0I7O09BRUc7SUFDSDtRQXZCQTs7V0FFRztRQUNjLFVBQUssR0FBdUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxFOztXQUVHO1FBQ2MsYUFBUSxHQUF3QixNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVoRjs7V0FFRztRQUNLLGdCQUFXLEdBQStCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLGFBQWEsQ0FBaUIsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1Sjs7V0FFRztRQUNLLDZCQUF3QixHQUFtQyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENB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QUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUNuSCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQ3ZCLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSwyQkFBMkI7UUFDOUIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEQsQ0FBQzsrR0EzSVEsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGZixNQUFNOzs0RkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSwgc2tpcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NJVGVybWluYWxQcm92aWRlciB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9pbnRlcmZhY2VzL3NjLWktdGVybWluYWwtcHJvdmlkZXInO1xuaW1wb3J0IHsgSVNfUlVOTklOR19PTl9URVJNSU5BTCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy90ZXJtaW5hbC5wcm92aWRlcnMnO1xuaW1wb3J0IHsgU2NSZWZlcmVuY2VOYW1lIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcy9lbnVtcy9zYy1yZWZlcmVuY2UtbmFtZSc7XG5pbXBvcnQgeyBTY1JlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcmVmZXJlbmNlcy9zZXJ2aWNlcy9zYy1yZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU0NfVVNFUl9JTkZPLCBTY1VzZXIgfSBmcm9tICcuLi8uLi91c2VyJztcbmltcG9ydCB7IFNjSVdhcmVob3VzZSB9IGZyb20gJy4uL2R0byc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDRgdC60LvQsNC00LDQvNC4LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY1dhcmVob3VzZVNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQtNCw0L3QvdGL0YUg0L4g0YLQtdC60YPRidC10Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlciQ6IE9ic2VydmFibGU8U2NVc2VyPiA9IGluamVjdChTQ19VU0VSX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFNjSVRlcm1pbmFsUHJvdmlkZXJ9INC00LDQvdC90YvRhSDQviDRgtC10YDQvNC40L3QsNC70LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZXJtaW5hbDogU2NJVGVybWluYWxQcm92aWRlciA9IGluamVjdChJU19SVU5OSU5HX09OX1RFUk1JTkFMKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdC60LvQsNC00L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHdhcmVob3VzZXMkOiBPYnNlcnZhYmxlPFNjSVdhcmVob3VzZVtdPiA9IGluamVjdChTY1JlZmVyZW5jZXNTZXJ2aWNlKS5nZXRSZWZlcmVuY2UkPFNjSVdhcmVob3VzZVtdPihTY1JlZmVyZW5jZU5hbWUud2FyZWhvdXNlKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0YHQutC70LDQtNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgd2FyZWhvdXNlSWRTZWxlY3RTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1dhcmVob3VzZVNlcnZpY2V9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9uT25Vc2VyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDQv9C+0LTQv9C40YHQutC4INC90LAg0LjQt9C80LXQvdC10L3QuNGPINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXRTdWJzY3JpcHRpb25PblVzZXIoKTogdm9pZCB7XG4gICAgICAgIC8vIE9ic2VydmFibGUg0LTQsNC90L3Ri9GFINC00LvRjyDQvtCx0YDQsNCx0L7RgtC60Lgg0YHQuNCz0L3QsNC70L7QsiDQuNC30LzQtdC90LXQvdC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAgICBjb25zdCBkYXRhJCA9IHRoaXMud2FyZWhvdXNlcyQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgod2FyZWhvdXNlcykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVzZXIkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgodXNlcikgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcmVob3VzZXM6IHdhcmVob3VzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkTWV0YWRhdGE6IHVzZXIubWV0YWRhdGEuc2VsZWN0ZWRXYXJlaG91c2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpdHk6IHVzZXIuY2l0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbjogdXNlci5yZWdpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdXNlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vINCf0YDQuCDQstGF0L7QtNC1INC4INCy0YvRhdC+0LTQtSDRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBJZCDRgdC60LvQsNC00LAsINC30LDQv9C40YHQsNC90L3Ri9C5INCyIG1ldGFkYXRhLCDQu9C40LHQviBJZCDRgdC60LvQsNC00LAg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC5INGA0LXQs9C40L7QvdGDINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjywg0LvQuNCx0L4gSWQg0YHQutC70LDQtNCwINGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgICAgZGF0YSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLW5lZ2F0aW9uLWluLWVxdWFsaXR5LWNoZWNrXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiAhcHJldmlvdXMuaWQgPT09ICFjdXJyZW50LmlkKSxcbiAgICAgICAgICAgICAgICBtYXAoKGRhdGEpID0+IC8qKiBkYXRhLnNlbGVjdGVkSWRNZXRhZGF0YSB8fCAqLyBkYXRhLndhcmVob3VzZXMuZmluZCgod2FyZWhvdXNlKSA9PiBkYXRhLnJlZ2lvbiAmJiB3YXJlaG91c2UucmVnaW9ucz8uaW5jbHVkZXMoZGF0YS5yZWdpb24pKT8uaWQgPz8gbnVsbCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChzZWxlY3RlZElkKSA9PiB0aGlzLndhcmVob3VzZUlkU2VsZWN0U3ViamVjdC52YWx1ZSAhPT0gc2VsZWN0ZWRJZCksXG4gICAgICAgICAgICAgICAgdGFwKChzZWxlY3RlZElkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2FyZWhvdXNlSWRTZWxlY3RTdWJqZWN0Lm5leHQoc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgICAvLyDQn9GA0Lgg0YHQvNC10L3QtSDRgNC10LPQuNC+0L3QsCDRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQsiBtZXRhZGF0YSBpZCDRgdC60LvQsNC00LAg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0YDQtdCz0LjQvtC90LAsINC70LjQsdC+INGB0YLQsNCy0LjRgiBJZCDRgdC60LvQsNC00LAg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4sINC10YHQu9C4INGA0LXQs9C40L7QvSDQsdGL0Lsg0YPQtNCw0LvRkdC9LlxuICAgICAgICBkYXRhJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tbmVnYXRpb24taW4tZXF1YWxpdHktY2hlY2tcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMsIGN1cnJlbnQpID0+ICFwcmV2aW91cy5pZCAhPT0gIWN1cnJlbnQuaWQgfHwgcHJldmlvdXMuY2l0eSA9PT0gY3VycmVudC5jaXR5KSxcbiAgICAgICAgICAgICAgICBza2lwKDEpLCAvLyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpINCy0YHQtdCz0LTQsCDQstGL0LTQsNGR0YIg0L/QtdGA0LLQvtC1INC30L3QsNGH0LXQvdC40LUsINC/0L7RjdGC0L7QvNGDINC/0YDQvtC/0YPRgdC60LDQtdC8INC10LPQviDQuCDRgNC10LDQs9C40YDRg9C10Lwg0YLQvtC70YzQutC+INC90LAg0LjQt9C80LXQvdC10L3QuNC1LlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLW51bGxpc2gtY29hbGVzY2luZ1xuICAgICAgICAgICAgICAgIG1hcCgoZGF0YSkgPT4gZGF0YS53YXJlaG91c2VzLmZpbmQoKHdhcmVob3VzZSkgPT4gZGF0YS5yZWdpb24gJiYgd2FyZWhvdXNlLnJlZ2lvbnM/LmluY2x1ZGVzKGRhdGEucmVnaW9uKSk/LmlkIHx8IGRhdGEud2FyZWhvdXNlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlzTWFpbik/LmlkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHNlbGVjdGVkSWQpID0+IHNlbGVjdGVkSWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLndhcmVob3VzZUlkU2VsZWN0U3ViamVjdC52YWx1ZSAhPT0gc2VsZWN0ZWRJZCksXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICBtYXAoKHNlbGVjdGVkSWQpID0+IHNlbGVjdGVkSWQhKSxcbiAgICAgICAgICAgICAgICB0YXAoKHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRXYXJlaG91c2VJZFNlbGVjdENoYW5nZShzZWxlY3RlZElkKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsCDQsiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3YXJlaG91c2VJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQstGL0LHRgNCw0L3QvdC+0LPQviDRgdC60LvQsNC00LAuXG4gICAgICovXG4gICAgcHVibGljIHNldFdhcmVob3VzZUlkU2VsZWN0Q2hhbmdlKHdhcmVob3VzZUlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53YXJlaG91c2VJZFNlbGVjdFN1YmplY3QubmV4dCh3YXJlaG91c2VJZCk7XG5cbiAgICAgICAgLy8gVE9ETzog0JTQvtGA0LDQsdC+0YLQsNGC0YwgdGhpcy51aVNlcnZpY2Uuc2V0U2VsZWN0ZWRXYXJlaG91c2VJZCh3YXJlaG91c2VJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INCy0YvQsdGA0LDQvdC90L7Qs9C+INGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0V2FyZWhvdXNlU2VsZWN0Q2hhbmdlJCgpOiBPYnNlcnZhYmxlPFNjSVdhcmVob3VzZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy53YXJlaG91c2VzJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh3YXJlaG91c2VzKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMud2FyZWhvdXNlSWRTZWxlY3RTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoaWQpID0+IHdhcmVob3VzZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpID8/IHdhcmVob3VzZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pc01haW4pKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCh3YXJlaG91c2UpID0+IHdhcmVob3VzZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKHdhcmVob3VzZSkgPT4gd2FyZWhvdXNlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDRgdC60LvQsNC00LAg0LTQu9GPINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHVibGljIGdldERlbGl2ZXJ5V2FyZWhvdXNlJCgpOiBPYnNlcnZhYmxlPFNjSVdhcmVob3VzZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy53YXJlaG91c2VzJC5waXBlKFxuICAgICAgICAgICAgbWFwKCh3YXJlaG91c2VzKSA9PiB3YXJlaG91c2VzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXNNYWluKSksXG4gICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDRgdC60LvQsNC00LAg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINGC0L7Qs9C+LCDQs9C00LUg0LfQsNC/0YPRidC10L3QviDQv9GA0LjQu9C+0LbQtdC90LjQtS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zINCV0YHQu9C4INC/0YDQuNC70L7QttC10L3QuNC1INC30LDQv9GD0YnQtdC90L4g0L3QsCDRgtC10YDQvNC40L3QsNC70LUg0Lgg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YHQutC70LDQtNCwINC/0YDQuNCy0Y/Qt9Cw0L3QvdC+0LPQviDQuiDRgtC10YDQvNC40L3QsNC70YMg0L3QtSBudWxsLCDRgtC+INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0LrQu9Cw0LQg0YLQtdGA0LzQuNC90LDQu9CwLFxuICAgICAqINCy0L4g0LLRgdC10YUg0L7RgdGC0LDQu9GM0L3Ri9GFINGB0LvRg9GH0LDRj9GFINCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC+0YHQvdC+0LLQvdC+0Lkg0YHQutC70LDQtC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2F0YWxvZ1dhcmVob3VzZUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxTY0lXYXJlaG91c2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FyZWhvdXNlcyQucGlwZShcbiAgICAgICAgICAgIG1hcCgod2FyZWhvdXNlcykgPT4gd2FyZWhvdXNlcy5maW5kKCh3KSA9PiB3LmlkID09PSB0aGlzLnRlcm1pbmFsLndhcmVob3VzZUlkKSA/PyB3YXJlaG91c2VzLmZpbmQoKHcpID0+IHcuaXNNYWluKSksXG4gICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDRgdC/0LjRgdC60LAg0YHQutC70LDQtNC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGdldFdhcmVob3VzZXMkKCk6IE9ic2VydmFibGU8U2NJV2FyZWhvdXNlW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FyZWhvdXNlcyQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LLRi9Cx0YDQsNC90L3QvtCz0L4g0YHQutC70LDQtNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDdXJyZW50V2FyZWhvdXNlSWRTZWxlY3QoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLndhcmVob3VzZUlkU2VsZWN0U3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgIH1cbn1cbiJdfQ==