@snabcentr/client-core 3.11.0 → 3.12.0
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.
- package/catalog/services/sc-catalog-redirect.service.d.ts +27 -1
- package/common/interfaces/sc-i-request-state.d.ts +4 -1
- package/esm2022/catalog/services/sc-catalog-redirect.service.mjs +48 -2
- package/esm2022/common/interfaces/sc-i-request-state.mjs +5 -3
- package/esm2022/contacts/services/sc-requisites.service.mjs +7 -7
- package/esm2022/providers/sc-category.providers.mjs +33 -10
- package/esm2022/seo/services/sc-seo.service.mjs +4 -4
- package/fesm2022/snabcentr-client-core.mjs +87 -19
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +2 -2
- package/providers/sc-category.providers.d.ts +6 -1
- package/release_notes.tmp +2 -2
- package/seo/services/sc-seo.service.d.ts +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
1
|
+
import { MonoTypeOperatorFunction, Observable } from 'rxjs';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
/**
|
|
4
4
|
* Сервис редиректа на родительскую категорию при недоступности (HTTP 404) товара или категории.
|
|
@@ -56,6 +56,32 @@ export declare class ScCatalogRedirectService {
|
|
|
56
56
|
* @returns Поток, завершающийся после редиректа. Эмитит ошибку {@link HttpErrorResponse}, если родительская категория не найдена.
|
|
57
57
|
*/
|
|
58
58
|
redirectToProductParent$(productIdOrSlug: number | string): Observable<never>;
|
|
59
|
+
/**
|
|
60
|
+
* Оператор устойчивой обработки недоступной (HTTP-ошибка) категории в потоке данных: при 404 выполняет редирект
|
|
61
|
+
* на родительскую категорию, при недоступном родителе или иной ошибке сообщает код через {@link onErrorCode}.
|
|
62
|
+
* Ошибку не пробрасывает (завершает поток {@link EMPTY}), поэтому поток данных не завершается ошибкой.
|
|
63
|
+
*
|
|
64
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
65
|
+
* @param onErrorCode Колбэк установки кода ошибки (например, для отображения страницы ошибки).
|
|
66
|
+
*/
|
|
67
|
+
handleUnavailableCategory$<T>(categoryIdOrSlug: number | string, onErrorCode: (status: number) => void): MonoTypeOperatorFunction<T>;
|
|
68
|
+
/**
|
|
69
|
+
* Оператор устойчивой обработки недоступного (HTTP-ошибка) товара в потоке данных: при 404 выполняет редирект
|
|
70
|
+
* на родительскую категорию товара, при недоступном родителе или иной ошибке сообщает код через {@link onErrorCode}.
|
|
71
|
+
* Ошибку не пробрасывает (завершает поток {@link EMPTY}), поэтому поток данных не завершается ошибкой.
|
|
72
|
+
*
|
|
73
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
74
|
+
* @param onErrorCode Колбэк установки кода ошибки (например, для отображения страницы ошибки).
|
|
75
|
+
*/
|
|
76
|
+
handleUnavailableProduct$<T>(productIdOrSlug: number | string, onErrorCode: (status: number) => void): MonoTypeOperatorFunction<T>;
|
|
77
|
+
/**
|
|
78
|
+
* Базовый оператор устойчивой обработки недоступной сущности: при 404 — редирект на родителя (через {@link redirectToParent$}),
|
|
79
|
+
* при недоступном родителе или ином {@link HttpErrorResponse} — {@link onErrorCode} с кодом ответа; всегда {@link EMPTY}.
|
|
80
|
+
*
|
|
81
|
+
* @param redirectToParent$ Фабрика потока редиректа на родительскую категорию.
|
|
82
|
+
* @param onErrorCode Колбэк установки кода ошибки.
|
|
83
|
+
*/
|
|
84
|
+
private handleUnavailable$;
|
|
59
85
|
/**
|
|
60
86
|
* Выполняет редирект на полученную родительскую категорию.
|
|
61
87
|
*
|
|
@@ -10,6 +10,7 @@ export type ScIRequestState<T> = {
|
|
|
10
10
|
data: T;
|
|
11
11
|
} | {
|
|
12
12
|
status: ScRequestStateStatusEnum.Error;
|
|
13
|
+
error?: unknown;
|
|
13
14
|
};
|
|
14
15
|
/**
|
|
15
16
|
* Состояние загрузки.
|
|
@@ -23,8 +24,10 @@ export declare const ScLoadingRequestState: ScIRequestState<never>;
|
|
|
23
24
|
export declare const ScSuccessRequestState: <T>(requestData: T) => ScIRequestState<T>;
|
|
24
25
|
/**
|
|
25
26
|
* Состояние ошибки.
|
|
27
|
+
*
|
|
28
|
+
* @param error Причина ошибки (например, HttpErrorResponse).
|
|
26
29
|
*/
|
|
27
|
-
export declare const ScErrorRequestState: ScIRequestState<never>;
|
|
30
|
+
export declare const ScErrorRequestState: (error?: unknown) => ScIRequestState<never>;
|
|
28
31
|
/**
|
|
29
32
|
* Преобразует поток данных в поток с состояниями запроса.
|
|
30
33
|
*/
|
|
@@ -3,7 +3,7 @@ import { HttpErrorResponse } from '@angular/common/http';
|
|
|
3
3
|
import { inject, Injectable } from '@angular/core';
|
|
4
4
|
import { Router } from '@angular/router';
|
|
5
5
|
import { tuiIsPresent } from '@taiga-ui/cdk';
|
|
6
|
-
import { EMPTY, switchMap, throwError } from 'rxjs';
|
|
6
|
+
import { catchError, EMPTY, switchMap, throwError } from 'rxjs';
|
|
7
7
|
import { IS_SERVER, RESPONSE } from '../../providers/ssr.providers';
|
|
8
8
|
import { SC_ID_OR_SLUG_IN_ROUTE } from '../../tokens/sc-id-or-slug-in-route';
|
|
9
9
|
import { ScCatalogService } from './sc-catalog.service';
|
|
@@ -70,6 +70,52 @@ export class ScCatalogRedirectService {
|
|
|
70
70
|
redirectToProductParent$(productIdOrSlug) {
|
|
71
71
|
return this.redirectToParentCategory$(this.catalogService.getProductParentCategory$(productIdOrSlug));
|
|
72
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Оператор устойчивой обработки недоступной (HTTP-ошибка) категории в потоке данных: при 404 выполняет редирект
|
|
75
|
+
* на родительскую категорию, при недоступном родителе или иной ошибке сообщает код через {@link onErrorCode}.
|
|
76
|
+
* Ошибку не пробрасывает (завершает поток {@link EMPTY}), поэтому поток данных не завершается ошибкой.
|
|
77
|
+
*
|
|
78
|
+
* @param categoryIdOrSlug Идентификатор или slug недоступной категории.
|
|
79
|
+
* @param onErrorCode Колбэк установки кода ошибки (например, для отображения страницы ошибки).
|
|
80
|
+
*/
|
|
81
|
+
handleUnavailableCategory$(categoryIdOrSlug, onErrorCode) {
|
|
82
|
+
return this.handleUnavailable$(() => this.redirectToCategoryParent$(categoryIdOrSlug), onErrorCode);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Оператор устойчивой обработки недоступного (HTTP-ошибка) товара в потоке данных: при 404 выполняет редирект
|
|
86
|
+
* на родительскую категорию товара, при недоступном родителе или иной ошибке сообщает код через {@link onErrorCode}.
|
|
87
|
+
* Ошибку не пробрасывает (завершает поток {@link EMPTY}), поэтому поток данных не завершается ошибкой.
|
|
88
|
+
*
|
|
89
|
+
* @param productIdOrSlug Идентификатор или slug недоступного товара.
|
|
90
|
+
* @param onErrorCode Колбэк установки кода ошибки (например, для отображения страницы ошибки).
|
|
91
|
+
*/
|
|
92
|
+
handleUnavailableProduct$(productIdOrSlug, onErrorCode) {
|
|
93
|
+
return this.handleUnavailable$(() => this.redirectToProductParent$(productIdOrSlug), onErrorCode);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Базовый оператор устойчивой обработки недоступной сущности: при 404 — редирект на родителя (через {@link redirectToParent$}),
|
|
97
|
+
* при недоступном родителе или ином {@link HttpErrorResponse} — {@link onErrorCode} с кодом ответа; всегда {@link EMPTY}.
|
|
98
|
+
*
|
|
99
|
+
* @param redirectToParent$ Фабрика потока редиректа на родительскую категорию.
|
|
100
|
+
* @param onErrorCode Колбэк установки кода ошибки.
|
|
101
|
+
*/
|
|
102
|
+
// eslint-disable-next-line class-methods-use-this
|
|
103
|
+
handleUnavailable$(redirectToParent$, onErrorCode) {
|
|
104
|
+
return (source$) => source$.pipe(catchError((error) => {
|
|
105
|
+
if (error instanceof HttpErrorResponse && error.status === 404) {
|
|
106
|
+
return redirectToParent$().pipe(catchError((redirectError) => {
|
|
107
|
+
if (redirectError instanceof HttpErrorResponse) {
|
|
108
|
+
onErrorCode(redirectError.status);
|
|
109
|
+
}
|
|
110
|
+
return EMPTY;
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
if (error instanceof HttpErrorResponse) {
|
|
114
|
+
onErrorCode(error.status);
|
|
115
|
+
}
|
|
116
|
+
return EMPTY;
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
73
119
|
/**
|
|
74
120
|
* Выполняет редирект на полученную родительскую категорию.
|
|
75
121
|
*
|
|
@@ -125,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
125
171
|
providedIn: 'root',
|
|
126
172
|
}]
|
|
127
173
|
}] });
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1yZWRpcmVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2ctcmVkaXJlY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBYyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRXhEOzs7Ozs7Ozs7O0dBVUc7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBSHJDO1FBSUk7O1dBRUc7UUFDYyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTNEOztXQUVHO1FBQ2MsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6Qzs7V0FFRztRQUNjLGFBQVEsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUUzRDs7V0FFRztRQUNjLGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUM7Ozs7Ozs7O1dBUUc7UUFDYyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpFOztXQUVHO1FBQ2MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQThFaEQ7SUE1RUc7Ozs7O09BS0c7SUFDSSx5QkFBeUIsQ0FBQyxnQkFBaUM7UUFDOUQsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksd0JBQXdCLENBQUMsZUFBZ0M7UUFDNUQsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHlCQUF5QixDQUFDLGVBQXNEO1FBQ3BGLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FDdkIsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDekIsNERBQTREO1lBQzVELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFN0Msa0VBQWtFO1lBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFaEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFcEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLHlIQUF5SDtnQkFDekgsRUFBRTtnQkFDRix5R0FBeUc7Z0JBQ3pHLDBGQUEwRjtnQkFDMUYsOElBQThJO2dCQUM5SSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFMUIsT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7Z0JBRUQsbUZBQW1GO2dCQUNuRiwrRkFBK0Y7Z0JBQy9GLEVBQUU7Z0JBQ0YsMkdBQTJHO2dCQUMzRyx1SEFBdUg7Z0JBQ3ZILGdGQUFnRjtnQkFDaEYsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELHFHQUFxRztZQUNyRyx1R0FBdUc7WUFDdkcsOEdBQThHO1lBQzlHLEVBQUU7WUFDRiwwR0FBMEc7WUFDMUcsNkdBQTZHO1lBQzdHLDJIQUEySDtZQUMzSCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFMUMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7K0dBaEhRLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnJCLE1BQU07OzRGQUVULHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHR1aUlzUHJlc2VudCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJU19TRVJWRVIsIFJFU1BPTlNFIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3Nzci5wcm92aWRlcnMnO1xuaW1wb3J0IHsgU0NfSURfT1JfU0xVR19JTl9ST1VURSB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1pZC1vci1zbHVnLWluLXJvdXRlJztcbmltcG9ydCB7IFNjSVBhcmVudENhdGVnb3J5UmVkaXJlY3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktcGFyZW50LWNhdGVnb3J5LXJlZGlyZWN0JztcbmltcG9ydCB7IFNjQ2F0YWxvZ1NlcnZpY2UgfSBmcm9tICcuL3NjLWNhdGFsb2cuc2VydmljZSc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINGA0LXQtNC40YDQtdC60YLQsCDQvdCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0L/RgNC4INC90LXQtNC+0YHRgtGD0L/QvdC+0YHRgtC4IChIVFRQIDQwNCkg0YLQvtCy0LDRgNCwINC40LvQuCDQutCw0YLQtdCz0L7RgNC40LguXG4gKlxuICog0JfQsNC/0YDQsNGI0LjQstCw0LXRgiDRgyDQsdGN0LrQtdC90LTQsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOINC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0YHRg9GJ0L3QvtGB0YLQuCDQuCDQstGL0L/QvtC70L3Rj9C10YIg0YDQtdC00LjRgNC10LrRgjpcbiAqIC0g0L3QsCDRgdC10YDQstC10YDQtSAoU1NSKSDQv9GA0Lgg0LTQvtGB0YLRg9C/0L3QvtC8IHtAbGluayBSRVNQT05TRX0g4oCUINCy0YvRgdGC0LDQstC70Y/QtdGCIEhUVFAt0YHRgtCw0YLRg9GBIDMwMiDQuCDQt9Cw0LPQvtC70L7QstC+0LogYExvY2F0aW9uYCDQtNC70Y8g0LrQvtGA0YDQtdC60YLQvdC+0LPQviDRgNC10LTQuNGA0LXQutGC0LAg0L/QvtC40YHQutC+0LLRi9GFINCx0L7RgtC+0LI7XG4gKiAtINC90LAg0YHQtdGA0LLQtdGA0LUg0LHQtdC3IHtAbGluayBSRVNQT05TRX0gKNC90LDQv9GA0LjQvNC10YAsIGRldi3RgdC10YDQstC10YAgYG5nIHNlcnZlYCkg4oCUINC30LDQstC10YDRiNCw0LXRgiDQv9C+0YLQvtC6INC+0YjQuNCx0LrQvtC5IDQwNCwg0YfRgtC+0LHRiyDQvtGC0L7QsdGA0LDQt9C40LvQsNGB0Ywg0YHRgtGA0LDQvdC40YbQsCDQvtGI0LjQsdC60Lg7XG4gKiAtINCyINCx0YDQsNGD0LfQtdGA0LUg4oCUINCy0YvQv9C+0LvQvdGP0LXRgiDQv9C+0LvQvdGD0Y4g0L3QsNCy0LjQs9Cw0YbQuNGOINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRji5cbiAqXG4gKiDQldGB0LvQuCDRgNC+0LTQuNGC0LXQu9GM0YHQutCw0Y8g0LrQsNGC0LXQs9C+0YDQuNGPINC90LUg0L3QsNC50LTQtdC90LAsINC/0L7RgtC+0Log0YLQsNC60LbQtSDQt9Cw0LLQtdGA0YjQsNC10YLRgdGPINC+0YjQuNCx0LrQvtC5IHtAbGluayBIdHRwRXJyb3JSZXNwb25zZX0sXG4gKiDRh9GC0L7QsdGLINCy0YvQt9GL0LLQsNGO0YnQuNC5INC60L7QtCDQvtGC0L7QsdGA0LDQt9C40Lsg0YHRgtGA0LDQvdC40YbRgyDQvtGI0LjQsdC60LguXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2F0YWxvZ1JlZGlyZWN0U2VydmljZSB7XG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LrQsNGC0LDQu9C+0LPQvtC8LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ1NlcnZpY2UgPSBpbmplY3QoU2NDYXRhbG9nU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LzQsNGA0YjRgNGD0YLQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAg0LjQu9C4IHNsdWcg0LIg0LzQsNGA0YjRgNGD0YLQsNGFINGC0L7QstCw0YDQvtCyINC4INC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkT3JTbHVnID0gaW5qZWN0KFNDX0lEX09SX1NMVUdfSU5fUk9VVEUpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDRgtC10LrRg9GJ0LjQuSDRgdC60YDQuNC/0YIg0LjRgdC/0L7Qu9C90Y/QtdGC0YHRjyDQvdCwINGB0LXRgNCy0LXRgNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNTZXJ2ZXIgPSBpbmplY3QoSVNfU0VSVkVSKTtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQvtCxINC+0YLQstC10YLQtSDQvdCwINC30LDQv9GA0L7RgSAo0LTQvtGB0YLRg9C/0L3RiyDRgtC+0LvRjNC60L4g0L3QsCDRgdC10YDQstC10YDQtSDQv9GA0LggU1NSKS5cbiAgICAgKlxuICAgICAqIEFuZ3VsYXIgMjEgKNC80LjQs9GA0LDRhtC40Y8gU1NSKToge0BsaW5rIFJFU1BPTlNFfSDigJQg0LrQsNGB0YLQvtC80L3Ri9C5IEV4cHJlc3Mt0YLQvtC60LXQvSwg0LrQvtGC0L7RgNGL0Lkg0L/RgNC+0LLQsNC50LTQuNGC0YHRjyDQsiBgc2VydmVyLnRzYFxuICAgICAqINGH0LXRgNC10LcgQ29tbW9uRW5naW5lLiDQndCwIHVwZ3JhZGUt0LLQtdGC0LrQtSBgc2VydmVyLnRzYCDQvtGB0YLQsNC70YHRjyDQvdCwIENvbW1vbkVuZ2luZSwg0L/QvtGN0YLQvtC80YMg0L/RgNC4INGB0LvQuNGP0L3QuNC4INC30LTQtdGB0YxcbiAgICAgKiDQvdC40YfQtdCz0L4g0LzQtdC90Y/RgtGMINC90LUg0L3Rg9C20L3Qvi4g0JXRgdC70LggYHNlcnZlci50c2Ag0LzQuNCz0YDQuNGA0YPRjtGCINC90LAgYEFuZ3VsYXJOb2RlQXBwRW5naW5lYCArIGBjcmVhdGVOb2RlUmVxdWVzdEhhbmRsZXJgLFxuICAgICAqINC30LDQvNC10L3QuNGC0LUge0BsaW5rIFJFU1BPTlNFfSDQvdCwINC90LDRgtC40LLQvdGL0LkgYFJFU1BPTlNFX0lOSVRgIChgSW5qZWN0aW9uVG9rZW48UmVzcG9uc2VJbml0IHwgbnVsbD5gINC40LcgYEBhbmd1bGFyL2NvcmVgKTtcbiAgICAgKiDRgdC8LiDRgdC10YDQstC10YDQvdGD0Y4g0LLQtdGC0LrRgyDQsiB7QGxpbmsgcmVkaXJlY3RUb1BhcmVudENhdGVnb3J5JH0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZSA9IGluamVjdChSRVNQT05TRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8qKlxuICAgICAqINCU0L7QutGD0LzQtdC90YIg0YLQtdC60YPRidC10Lkg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRjiDQvdC10LTQvtGB0YLRg9C/0L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEByZXR1cm5zINCf0L7RgtC+0LosINC30LDQstC10YDRiNCw0Y7RidC40LnRgdGPINC/0L7RgdC70LUg0YDQtdC00LjRgNC10LrRgtCwLiDQrdC80LjRgtC40YIg0L7RiNC40LHQutGDIHtAbGluayBIdHRwRXJyb3JSZXNwb25zZX0sINC10YHQu9C4INGA0L7QtNC40YLQtdC70YzRgdC60LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0L3QtSDQvdCw0LnQtNC10L3QsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVkaXJlY3RUb0NhdGVnb3J5UGFyZW50JChjYXRlZ29yeUlkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9QYXJlbnRDYXRlZ29yeSQodGhpcy5jYXRhbG9nU2VydmljZS5nZXRDYXRlZ29yeVBhcmVudENhdGVnb3J5JChjYXRlZ29yeUlkT3JTbHVnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINGA0LXQtNC40YDQtdC60YIg0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOINC90LXQtNC+0YHRgtGD0L/QvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdElkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC90LXQtNC+0YHRgtGD0L/QvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICogQHJldHVybnMg0J/QvtGC0L7Quiwg0LfQsNCy0LXRgNGI0LDRjtGJ0LjQudGB0Y8g0L/QvtGB0LvQtSDRgNC10LTQuNGA0LXQutGC0LAuINCt0LzQuNGC0LjRgiDQvtGI0LjQsdC60YMge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSwg0LXRgdC70Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDQvdC1INC90LDQudC00LXQvdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWRpcmVjdFRvUHJvZHVjdFBhcmVudCQocHJvZHVjdElkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9QYXJlbnRDYXRlZ29yeSQodGhpcy5jYXRhbG9nU2VydmljZS5nZXRQcm9kdWN0UGFyZW50Q2F0ZWdvcnkkKHByb2R1Y3RJZE9yU2x1ZykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCINC90LAg0L/QvtC70YPRh9C10L3QvdGD0Y4g0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRji5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJlbnRDYXRlZ29yeSQg0J/QvtGC0L7QuiDRgSDQtNCw0L3QvdGL0LzQuCDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEByZXR1cm5zINCf0L7RgtC+0LosINC30LDQstC10YDRiNCw0Y7RidC40LnRgdGPINC/0L7RgdC70LUg0YDQtdC00LjRgNC10LrRgtCwLiDQrdC80LjRgtC40YIg0L7RiNC40LHQutGDIHtAbGluayBIdHRwRXJyb3JSZXNwb25zZX0g0YEg0LrQvtC00L7QvCA0MDQsINC10YHQu9C4INGA0L7QtNC40YLQtdC70YzRgdC60LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0L3QtSDQvdCw0LnQtNC10L3QsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZGlyZWN0VG9QYXJlbnRDYXRlZ29yeSQocGFyZW50Q2F0ZWdvcnkkOiBPYnNlcnZhYmxlPFNjSVBhcmVudENhdGVnb3J5UmVkaXJlY3Q+KTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgICAgICByZXR1cm4gcGFyZW50Q2F0ZWdvcnkkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHBhcmVudENhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gcGFyZW50Q2F0ZWdvcnlbdGhpcy5pZE9yU2x1Z107XG5cbiAgICAgICAgICAgICAgICAvLyDQoNC+0LTQuNGC0LXQu9GM0YHQutCw0Y8g0LrQsNGC0LXQs9C+0YDQuNGPINC90LUg0L3QsNC50LTQtdC90LAg4oCUINC+0YLQvtCx0YDQsNC20LDQtdC8INGB0YLRgNCw0L3QuNGG0YMg0L7RiNC40LHQutC4LlxuICAgICAgICAgICAgICAgIGlmICghdHVpSXNQcmVzZW50KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgc3RhdHVzOiA0MDQgfSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnL2NhdGFsb2cnLCB0YXJnZXRdKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNTUiDRgSDQtNC+0YHRgtGD0L/QvdGL0LwgUkVTUE9OU0UgKNC/0YDQvtC0LdGB0LXRgNCy0LXRgCk6INCy0YvRgdGC0LDQstC70Y/QtdC8IDMwMiDQuCDQt9Cw0LPQvtC70L7QstC+0LogTG9jYXRpb24g0LTQu9GPINC60L7RgNGA0LXQutGC0L3QvtCz0L4g0YDQtdC00LjRgNC10LrRgtCwINC/0L7QuNGB0LrQvtCy0YvRhSDQsdC+0YLQvtCyLlxuICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAvLyBBbmd1bGFyIDIxICjQvNC40LPRgNCw0YbQuNGPIFNTUik6INC/0YDQuCDQv9C10YDQtdGF0L7QtNC1IHNlcnZlci50cyDQvdCwIEFuZ3VsYXJOb2RlQXBwRW5naW5lINCy0YvRgdGC0LDQstC70Y/QudGC0LUg0YHRgtCw0YLRg9GBL9C30LDQs9C+0LvQvtCy0L7QulxuICAgICAgICAgICAgICAgICAgICAvLyDRh9C10YDQtdC3INC90LDRgtC40LLQvdGL0LkgUkVTUE9OU0VfSU5JVCDQstC80LXRgdGC0L4gRXhwcmVzcy3QvNC10YLQvtC00L7QsiByZXNwb25zZS5zZXRIZWFkZXIvcmVzcG9uc2Uuc3RhdHVzOlxuICAgICAgICAgICAgICAgICAgICAvLyAgIGlmICh0aGlzLnJlc3BvbnNlSW5pdCkgeyB0aGlzLnJlc3BvbnNlSW5pdC5zdGF0dXMgPSAzMDI7ICh0aGlzLnJlc3BvbnNlSW5pdC5oZWFkZXJzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pWydMb2NhdGlvbiddID0gdGFyZ2V0VXJsOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlLnNldEhlYWRlcignTG9jYXRpb24nLCB0YXJnZXRVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZS5zdGF0dXMoMzAyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU1NSINCx0LXQtyBSRVNQT05TRSAo0L3QsNC/0YDQuNC80LXRgCwgZGV2LdGB0LXRgNCy0LXRgCBuZyBzZXJ2ZSk6INGB0LXRgNCy0LXRgNC90YvQuSDRgNC10LTQuNGA0LXQutGCINC90LXQstC+0LfQvNC+0LbQtdC9LFxuICAgICAgICAgICAgICAgICAgICAvLyDQv9C+0Y3RgtC+0LzRgyDQvtGC0L7QsdGA0LDQttCw0LXQvCDRgdGC0YDQsNC90LjRhtGDINC+0YjQuNCx0LrQuCwg0LrQsNC6INC00L4g0LLQvdC10LTRgNC10L3QuNGPINGA0LXQtNC40YDQtdC60YLQsCwg0LLQvNC10YHRgtC+INCx0LXRgdC60L7QvdC10YfQvdC+0LPQviDQu9C+0LDQtNC10YDQsC5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gQW5ndWxhciAyMSAo0LzQuNCz0YDQsNGG0LjRjyBTU1IpOiDRjdGC0L7RgiDRhNC+0LvQsdGN0Log0L3Rg9C20LXQvSwg0L/QvtC60LAgbmcgc2VydmUg0L3QtSDQuNGB0L/QvtC70L3Rj9C10YIgc2VydmVyLnRzICjQvtC9INC90LAgQ29tbW9uRW5naW5lKS5cbiAgICAgICAgICAgICAgICAgICAgLy8g0J/QvtGB0LvQtSDQvNC40LPRgNCw0YbQuNC4IHNlcnZlci50cyDQvdCwIGNyZWF0ZU5vZGVSZXF1ZXN0SGFuZGxlciBkZXYt0YHQtdGA0LLQtdGAINC90LDRh9C90ZHRgiDQuNGB0L/QvtC70L3Rj9GC0Ywgc2VydmVyLnRzLCDQuCBSRVNQT05TRS9SRVNQT05TRV9JTklUXG4gICAgICAgICAgICAgICAgICAgIC8vINGB0YLQsNC90LXRgiDQtNC+0YHRgtGD0L/QtdC9INCyIG5nIHNlcnZlIOKAlCDRgtC+0LPQtNCwINGN0YLRgyDQstC10YLQutGDINGBIHRocm93RXJyb3IoNDA0KSDQvNC+0LbQvdC+INGD0LTQsNC70LjRgtGMLlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgSHR0cEVycm9yUmVzcG9uc2UoeyBzdGF0dXM6IDQwNCB9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g0JHRgNCw0YPQt9C10YA6INC/0L7RgtC+0Log0LTQsNC90L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuCAoU0NfQ0FURUdPUllfSU5GTykg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDQvtGI0LjQsdC60L7QuSDQv9GA0LggNDA0INC4INC90LUg0LLQvtC30L7QsdC90L7QstC70Y/QtdGC0YHRj1xuICAgICAgICAgICAgICAgIC8vINC/0YDQuCDQvdCw0LLQuNCz0LDRhtC40Lgg0LIg0YDQsNC80LrQsNGFINGC0L7Qs9C+INC20LUg0LzQsNGA0YjRgNGD0YLQsCwg0L/QvtGN0YLQvtC80YMg0YDQtdC00LjRgNC10LrRgiDQstGL0L/QvtC70L3Rj9C10YLRgdGPINC/0L7Qu9C90L7QuSDQv9C10YDQtdC30LDQs9GA0YPQt9C60L7QuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9uLnJlcGxhY2Ug0L3QtSDQtNC+0LHQsNCy0LvRj9C10YIg0LfQsNC/0LjRgdGMINCyINC40YHRgtC+0YDQuNGOLCDRh9GC0L7QsdGLINC60L3QvtC/0LrQsCDCq9Cd0LDQt9Cw0LTCuyDQvdC1INCy0L7Qt9Cy0YDQsNGJ0LDQu9CwINC90LAg0L3QtdC00L7RgdGC0YPQv9C90YPRjiDRgdGC0YDQsNC90LjRhtGDLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gQW5ndWxhciAyMSAo0LzQuNCz0YDQsNGG0LjRjyBTU1IpOiDRjdGC0YMg0YHRgtGA0L7QutGDINCw0L/Qs9GA0LXQudC0INCd0JUg0YHQvdC40LzQsNC10YIg4oCUINC/0YDQuNGH0LjQvdCwINCyINGA0LDQvdGC0LDQudC80LUg0L/RgNC40LvQvtC20LXQvdC40Y8gKNC80ZHRgNGC0LLRi9C5INC/0L7RgtC+0LpcbiAgICAgICAgICAgICAgICAvLyBTQ19DQVRFR09SWV9JTkZPINC/0YDQuCBTUEEt0L3QsNCy0LjQs9Cw0YbQuNC4KSwg0LAg0L3QtSDQsiBTU1IuINCS0LXRgNC90YPRgtGMIFNQQS3QvdCw0LLQuNCz0LDRhtC40Y4gKHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKSDQvNC+0LbQvdC+INGC0L7Qu9GM0LrQvlxuICAgICAgICAgICAgICAgIC8vINGB0LTQtdC70LDQsiBTQ19DQVRFR09SWV9JTkZPINGD0YHRgtC+0LnRh9C40LLRi9C8INC6IDQwNCAo0LvQvtCy0LjRgtGMINC+0YjQuNCx0LrRgyDQstC90YPRgtGA0Lggc3dpdGNoTWFwKSDQu9C40LHQviDRg9C90LXRgdGPINGA0LXQtNC40YDQtdC60YIg0LIgZ3VhcmQgKyBSZWRpcmVjdENvbW1hbmQuXG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5yZXBsYWNlKHRhcmdldFVybCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1yZWRpcmVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2ctcmVkaXJlY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXdDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFeEQ7Ozs7Ozs7Ozs7R0FVRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFIckM7UUFJSTs7V0FFRztRQUNjLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFM0Q7O1dBRUc7UUFDYyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDOztXQUVHO1FBQ2MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTNEOztXQUVHO1FBQ2MsYUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5Qzs7Ozs7Ozs7V0FRRztR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SSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLHlIQUF5SDtnQkFDekgsRUFBRTtnQkFDRix5R0FBeUc7Z0JBQ3pHLDBGQUEwRjtnQkFDMUYsOElBQThJO2dCQUM5SSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFMUIsT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7Z0JBRUQsbUZBQW1GO2dCQUNuRiwrRkFBK0Y7Z0JBQy9GLEVBQUU7Z0JBQ0YsMkdBQTJHO2dCQUMzRyx1SEFBdUg7Z0JBQ3ZILGdGQUFnRjtnQkFDaEYsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELHFHQUFxRztZQUNyRyx1R0FBdUc7WUFDdkcsOEdBQThHO1lBQzlHLEVBQUU7WUFDRiwwR0FBMEc7WUFDMUcsNkdBQTZHO1lBQzdHLDJIQUEySDtZQUMzSCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFMUMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7K0dBektRLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnJCLE1BQU07OzRGQUVULHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHR1aUlzUHJlc2VudCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgRU1QVFksIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElTX1NFUlZFUiwgUkVTUE9OU0UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvc3NyLnByb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19JRF9PUl9TTFVHX0lOX1JPVVRFIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWlkLW9yLXNsdWctaW4tcm91dGUnO1xuaW1wb3J0IHsgU2NJUGFyZW50Q2F0ZWdvcnlSZWRpcmVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2MtaS1wYXJlbnQtY2F0ZWdvcnktcmVkaXJlY3QnO1xuaW1wb3J0IHsgU2NDYXRhbG9nU2VydmljZSB9IGZyb20gJy4vc2MtY2F0YWxvZy5zZXJ2aWNlJztcblxuLyoqXG4gKiDQodC10YDQstC40YEg0YDQtdC00LjRgNC10LrRgtCwINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRjiDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7RgdGC0LggKEhUVFAgNDA0KSDRgtC+0LLQsNGA0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjQuC5cbiAqXG4gKiDQl9Cw0L/RgNCw0YjQuNCy0LDQtdGCINGDINCx0Y3QutC10L3QtNCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0L3QtdC00L7RgdGC0YPQv9C90L7QuSDRgdGD0YnQvdC+0YHRgtC4INC4INCy0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCOlxuICogLSDQvdCwINGB0LXRgNCy0LXRgNC1IChTU1IpINC/0YDQuCDQtNC+0YHRgtGD0L/QvdC+0Lwge0BsaW5rIFJFU1BPTlNFfSDigJQg0LLRi9GB0YLQsNCy0LvRj9C10YIgSFRUUC3RgdGC0LDRgtGD0YEgMzAyINC4INC30LDQs9C+0LvQvtCy0L7QuiBgTG9jYXRpb25gINC00LvRjyDQutC+0YDRgNC10LrRgtC90L7Qs9C+INGA0LXQtNC40YDQtdC60YLQsCDQv9C+0LjRgdC60L7QstGL0YUg0LHQvtGC0L7QsjtcbiAqIC0g0L3QsCDRgdC10YDQstC10YDQtSDQsdC10Lcge0BsaW5rIFJFU1BPTlNFfSAo0L3QsNC/0YDQuNC80LXRgCwgZGV2LdGB0LXRgNCy0LXRgCBgbmcgc2VydmVgKSDigJQg0LfQsNCy0LXRgNGI0LDQtdGCINC/0L7RgtC+0Log0L7RiNC40LHQutC+0LkgNDA0LCDRh9GC0L7QsdGLINC+0YLQvtCx0YDQsNC30LjQu9Cw0YHRjCDRgdGC0YDQsNC90LjRhtCwINC+0YjQuNCx0LrQuDtcbiAqIC0g0LIg0LHRgNCw0YPQt9C10YDQtSDigJQg0LLRi9C/0L7Qu9C90Y/QtdGCINC/0L7Qu9C90YPRjiDQvdCw0LLQuNCz0LDRhtC40Y4g0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOLlxuICpcbiAqINCV0YHQu9C4INGA0L7QtNC40YLQtdC70YzRgdC60LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0L3QtSDQvdCw0LnQtNC10L3QsCwg0L/QvtGC0L7QuiDRgtCw0LrQttC1INC30LDQstC10YDRiNCw0LXRgtGB0Y8g0L7RiNC40LHQutC+0Lkge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSxcbiAqINGH0YLQvtCx0Ysg0LLRi9C30YvQstCw0Y7RidC40Lkg0LrQvtC0INC+0YLQvtCx0YDQsNC30LjQuyDRgdGC0YDQsNC90LjRhtGDINC+0YjQuNCx0LrQuC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXRhbG9nUmVkaXJlY3RTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutCw0YLQsNC70L7Qs9C+0LwuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9nU2VydmljZSA9IGluamVjdChTY0NhdGFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQvNCw0YDRiNGA0YPRgtC40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQuNC70Lggc2x1ZyDQsiDQvNCw0YDRiNGA0YPRgtCw0YUg0YLQvtCy0LDRgNC+0LIg0Lgg0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRPclNsdWcgPSBpbmplY3QoU0NfSURfT1JfU0xVR19JTl9ST1VURSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGC0LXQutGD0YnQuNC5INGB0LrRgNC40L/RgiDQuNGB0L/QvtC70L3Rj9C10YLRgdGPINC90LAg0YHQtdGA0LLQtdGA0LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc1NlcnZlciA9IGluamVjdChJU19TRVJWRVIpO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+0LEg0L7RgtCy0LXRgtC1INC90LAg0LfQsNC/0YDQvtGBICjQtNC+0YHRgtGD0L/QvdGLINGC0L7Qu9GM0LrQviDQvdCwINGB0LXRgNCy0LXRgNC1INC/0YDQuCBTU1IpLlxuICAgICAqXG4gICAgICogQW5ndWxhciAyMSAo0LzQuNCz0YDQsNGG0LjRjyBTU1IpOiB7QGxpbmsgUkVTUE9OU0V9IOKAlCDQutCw0YHRgtC+0LzQvdGL0LkgRXhwcmVzcy3RgtC+0LrQtdC9LCDQutC+0YLQvtGA0YvQuSDQv9GA0L7QstCw0LnQtNC40YLRgdGPINCyIGBzZXJ2ZXIudHNgXG4gICAgICog0YfQtdGA0LXQtyBDb21tb25FbmdpbmUuINCd0LAgdXBncmFkZS3QstC10YLQutC1IGBzZXJ2ZXIudHNgINC+0YHRgtCw0LvRgdGPINC90LAgQ29tbW9uRW5naW5lLCDQv9C+0Y3RgtC+0LzRgyDQv9GA0Lgg0YHQu9C40Y/QvdC40Lgg0LfQtNC10YHRjFxuICAgICAqINC90LjRh9C10LPQviDQvNC10L3Rj9GC0Ywg0L3QtSDQvdGD0LbQvdC+LiDQldGB0LvQuCBgc2VydmVyLnRzYCDQvNC40LPRgNC40YDRg9GO0YIg0L3QsCBgQW5ndWxhck5vZGVBcHBFbmdpbmVgICsgYGNyZWF0ZU5vZGVSZXF1ZXN0SGFuZGxlcmAsXG4gICAgICog0LfQsNC80LXQvdC40YLQtSB7QGxpbmsgUkVTUE9OU0V9INC90LAg0L3QsNGC0LjQstC90YvQuSBgUkVTUE9OU0VfSU5JVGAgKGBJbmplY3Rpb25Ub2tlbjxSZXNwb25zZUluaXQgfCBudWxsPmAg0LjQtyBgQGFuZ3VsYXIvY29yZWApO1xuICAgICAqINGB0LwuINGB0LXRgNCy0LXRgNC90YPRjiDQstC10YLQutGDINCyIHtAbGluayByZWRpcmVjdFRvUGFyZW50Q2F0ZWdvcnkkfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3BvbnNlID0gaW5qZWN0KFJFU1BPTlNFLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JTQvtC60YPQvNC10L3RgiDRgtC10LrRg9GJ0LXQuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINGA0LXQtNC40YDQtdC60YIg0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOINC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0L3QtdC00L7RgdGC0YPQv9C90L7QuSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHJldHVybnMg0J/QvtGC0L7Quiwg0LfQsNCy0LXRgNGI0LDRjtGJ0LjQudGB0Y8g0L/QvtGB0LvQtSDRgNC10LTQuNGA0LXQutGC0LAuINCt0LzQuNGC0LjRgiDQvtGI0LjQsdC60YMge0BsaW5rIEh0dHBFcnJvclJlc3BvbnNlfSwg0LXRgdC70Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDQvdC1INC90LDQudC00LXQvdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWRpcmVjdFRvQ2F0ZWdvcnlQYXJlbnQkKGNhdGVnb3J5SWRPclNsdWc6IG51bWJlciB8IHN0cmluZyk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RUb1BhcmVudENhdGVnb3J5JCh0aGlzLmNhdGFsb2dTZXJ2aWNlLmdldENhdGVnb3J5UGFyZW50Q2F0ZWdvcnkkKGNhdGVnb3J5SWRPclNsdWcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0YDQtdC00LjRgNC10LrRgiDQvdCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKiBAcmV0dXJucyDQn9C+0YLQvtC6LCDQt9Cw0LLQtdGA0YjQsNGO0YnQuNC50YHRjyDQv9C+0YHQu9C1INGA0LXQtNC40YDQtdC60YLQsC4g0K3QvNC40YLQuNGCINC+0YjQuNCx0LrRgyB7QGxpbmsgSHR0cEVycm9yUmVzcG9uc2V9LCDQtdGB0LvQuCDRgNC+0LTQuNGC0LXQu9GM0YHQutCw0Y8g0LrQsNGC0LXQs9C+0YDQuNGPINC90LUg0L3QsNC50LTQtdC90LAuXG4gICAgICovXG4gICAgcHVibGljIHJlZGlyZWN0VG9Qcm9kdWN0UGFyZW50JChwcm9kdWN0SWRPclNsdWc6IG51bWJlciB8IHN0cmluZyk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RUb1BhcmVudENhdGVnb3J5JCh0aGlzLmNhdGFsb2dTZXJ2aWNlLmdldFByb2R1Y3RQYXJlbnRDYXRlZ29yeSQocHJvZHVjdElkT3JTbHVnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7Qv9C10YDQsNGC0L7RgCDRg9GB0YLQvtC50YfQuNCy0L7QuSDQvtCx0YDQsNCx0L7RgtC60Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QuSAoSFRUUC3QvtGI0LjQsdC60LApINC60LDRgtC10LPQvtGA0LjQuCDQsiDQv9C+0YLQvtC60LUg0LTQsNC90L3Ri9GFOiDQv9GA0LggNDA0INCy0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCXG4gICAgICog0L3QsCDRgNC+0LTQuNGC0LXQu9GM0YHQutGD0Y4g0LrQsNGC0LXQs9C+0YDQuNGOLCDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QvCDRgNC+0LTQuNGC0LXQu9C1INC40LvQuCDQuNC90L7QuSDQvtGI0LjQsdC60LUg0YHQvtC+0LHRidCw0LXRgiDQutC+0LQg0YfQtdGA0LXQtyB7QGxpbmsgb25FcnJvckNvZGV9LlxuICAgICAqINCe0YjQuNCx0LrRgyDQvdC1INC/0YDQvtCx0YDQsNGB0YvQstCw0LXRgiAo0LfQsNCy0LXRgNGI0LDQtdGCINC/0L7RgtC+0Loge0BsaW5rIEVNUFRZfSksINC/0L7RjdGC0L7QvNGDINC/0L7RgtC+0Log0LTQsNC90L3Ri9GFINC90LUg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDQvtGI0LjQsdC60L7QuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC90LXQtNC+0YHRgtGD0L/QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEBwYXJhbSBvbkVycm9yQ29kZSDQmtC+0LvQsdGN0Log0YPRgdGC0LDQvdC+0LLQutC4INC60L7QtNCwINC+0YjQuNCx0LrQuCAo0L3QsNC/0YDQuNC80LXRgCwg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0YHRgtGA0LDQvdC40YbRiyDQvtGI0LjQsdC60LgpLlxuICAgICAqL1xuICAgIHB1YmxpYyBoYW5kbGVVbmF2YWlsYWJsZUNhdGVnb3J5JDxUPihjYXRlZ29yeUlkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcsIG9uRXJyb3JDb2RlOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVVbmF2YWlsYWJsZSQoKCkgPT4gdGhpcy5yZWRpcmVjdFRvQ2F0ZWdvcnlQYXJlbnQkKGNhdGVnb3J5SWRPclNsdWcpLCBvbkVycm9yQ29kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7Qv9C10YDQsNGC0L7RgCDRg9GB0YLQvtC50YfQuNCy0L7QuSDQvtCx0YDQsNCx0L7RgtC60Lgg0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+IChIVFRQLdC+0YjQuNCx0LrQsCkg0YLQvtCy0LDRgNCwINCyINC/0L7RgtC+0LrQtSDQtNCw0L3QvdGL0YU6INC/0YDQuCA0MDQg0LLRi9C/0L7Qu9C90Y/QtdGCINGA0LXQtNC40YDQtdC60YJcbiAgICAgKiDQvdCwINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4g0YLQvtCy0LDRgNCwLCDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QvCDRgNC+0LTQuNGC0LXQu9C1INC40LvQuCDQuNC90L7QuSDQvtGI0LjQsdC60LUg0YHQvtC+0LHRidCw0LXRgiDQutC+0LQg0YfQtdGA0LXQtyB7QGxpbmsgb25FcnJvckNvZGV9LlxuICAgICAqINCe0YjQuNCx0LrRgyDQvdC1INC/0YDQvtCx0YDQsNGB0YvQstCw0LXRgiAo0LfQsNCy0LXRgNGI0LDQtdGCINC/0L7RgtC+0Loge0BsaW5rIEVNUFRZfSksINC/0L7RjdGC0L7QvNGDINC/0L7RgtC+0Log0LTQsNC90L3Ri9GFINC90LUg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDQvtGI0LjQsdC60L7QuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0L3QtdC00L7RgdGC0YPQv9C90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gb25FcnJvckNvZGUg0JrQvtC70LHRjdC6INGD0YHRgtCw0L3QvtCy0LrQuCDQutC+0LTQsCDQvtGI0LjQsdC60LggKNC90LDQv9GA0LjQvNC10YAsINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINGB0YLRgNCw0L3QuNGG0Ysg0L7RiNC40LHQutC4KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlVW5hdmFpbGFibGVQcm9kdWN0JDxUPihwcm9kdWN0SWRPclNsdWc6IG51bWJlciB8IHN0cmluZywgb25FcnJvckNvZGU6IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVuYXZhaWxhYmxlJCgoKSA9PiB0aGlzLnJlZGlyZWN0VG9Qcm9kdWN0UGFyZW50JChwcm9kdWN0SWRPclNsdWcpLCBvbkVycm9yQ29kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JHQsNC30L7QstGL0Lkg0L7Qv9C10YDQsNGC0L7RgCDRg9GB0YLQvtC50YfQuNCy0L7QuSDQvtCx0YDQsNCx0L7RgtC60Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QuSDRgdGD0YnQvdC+0YHRgtC4OiDQv9GA0LggNDA0IOKAlCDRgNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjyAo0YfQtdGA0LXQtyB7QGxpbmsgcmVkaXJlY3RUb1BhcmVudCR9KSxcbiAgICAgKiDQv9GA0Lgg0L3QtdC00L7RgdGC0YPQv9C90L7QvCDRgNC+0LTQuNGC0LXQu9C1INC40LvQuCDQuNC90L7QvCB7QGxpbmsgSHR0cEVycm9yUmVzcG9uc2V9IOKAlCB7QGxpbmsgb25FcnJvckNvZGV9INGBINC60L7QtNC+0Lwg0L7RgtCy0LXRgtCwOyDQstGB0LXQs9C00LAge0BsaW5rIEVNUFRZfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWRpcmVjdFRvUGFyZW50JCDQpNCw0LHRgNC40LrQsCDQv9C+0YLQvtC60LAg0YDQtdC00LjRgNC10LrRgtCwINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRji5cbiAgICAgKiBAcGFyYW0gb25FcnJvckNvZGUg0JrQvtC70LHRjdC6INGD0YHRgtCw0L3QvtCy0LrQuCDQutC+0LTQsCDQvtGI0LjQsdC60LguXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIGhhbmRsZVVuYXZhaWxhYmxlJDxUPihyZWRpcmVjdFRvUGFyZW50JDogKCkgPT4gT2JzZXJ2YWJsZTxuZXZlcj4sIG9uRXJyb3JDb2RlOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xuICAgICAgICByZXR1cm4gKHNvdXJjZSQpID0+XG4gICAgICAgICAgICBzb3VyY2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWRpcmVjdFRvUGFyZW50JCgpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigocmVkaXJlY3RFcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3RFcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yQ29kZShyZWRpcmVjdEVycm9yLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvckNvZGUoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0YDQtdC00LjRgNC10LrRgiDQvdCwINC/0L7Qu9GD0YfQtdC90L3Rg9GOINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutCw0YLQtdCz0L7RgNC40Y4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyZW50Q2F0ZWdvcnkkINCf0L7RgtC+0Log0YEg0LTQsNC90L3Ri9C80Lgg0YDQvtC00LjRgtC10LvRjNGB0LrQvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcmV0dXJucyDQn9C+0YLQvtC6LCDQt9Cw0LLQtdGA0YjQsNGO0YnQuNC50YHRjyDQv9C+0YHQu9C1INGA0LXQtNC40YDQtdC60YLQsC4g0K3QvNC40YLQuNGCINC+0YjQuNCx0LrRgyB7QGxpbmsgSHR0cEVycm9yUmVzcG9uc2V9INGBINC60L7QtNC+0LwgNDA0LCDQtdGB0LvQuCDRgNC+0LTQuNGC0LXQu9GM0YHQutCw0Y8g0LrQsNGC0LXQs9C+0YDQuNGPINC90LUg0L3QsNC50LTQtdC90LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWRpcmVjdFRvUGFyZW50Q2F0ZWdvcnkkKHBhcmVudENhdGVnb3J5JDogT2JzZXJ2YWJsZTxTY0lQYXJlbnRDYXRlZ29yeVJlZGlyZWN0Pik6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgcmV0dXJuIHBhcmVudENhdGVnb3J5JC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChwYXJlbnRDYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHBhcmVudENhdGVnb3J5W3RoaXMuaWRPclNsdWddO1xuXG4gICAgICAgICAgICAgICAgLy8g0KDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjyDQvdC1INC90LDQudC00LXQvdCwIOKAlCDQvtGC0L7QsdGA0LDQttCw0LXQvCDRgdGC0YDQsNC90LjRhtGDINC+0YjQuNCx0LrQuC5cbiAgICAgICAgICAgICAgICBpZiAoIXR1aUlzUHJlc2VudCh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7IHN0YXR1czogNDA0IH0pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy9jYXRhbG9nJywgdGFyZ2V0XSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRVcmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBTU1Ig0YEg0LTQvtGB0YLRg9C/0L3Ri9C8IFJFU1BPTlNFICjQv9GA0L7QtC3RgdC10YDQstC10YApOiDQstGL0YHRgtCw0LLQu9GP0LXQvCAzMDIg0Lgg0LfQsNCz0L7Qu9C+0LLQvtC6IExvY2F0aW9uINC00LvRjyDQutC+0YDRgNC10LrRgtC90L7Qs9C+INGA0LXQtNC40YDQtdC60YLQsCDQv9C+0LjRgdC60L7QstGL0YUg0LHQvtGC0L7Qsi5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgLy8gQW5ndWxhciAyMSAo0LzQuNCz0YDQsNGG0LjRjyBTU1IpOiDQv9GA0Lgg0L/QtdGA0LXRhdC+0LTQtSBzZXJ2ZXIudHMg0L3QsCBBbmd1bGFyTm9kZUFwcEVuZ2luZSDQstGL0YHRgtCw0LLQu9GP0LnRgtC1INGB0YLQsNGC0YPRgS/Qt9Cw0LPQvtC70L7QstC+0LpcbiAgICAgICAgICAgICAgICAgICAgLy8g0YfQtdGA0LXQtyDQvdCw0YLQuNCy0L3Ri9C5IFJFU1BPTlNFX0lOSVQg0LLQvNC10YHRgtC+IEV4cHJlc3Mt0LzQtdGC0L7QtNC+0LIgcmVzcG9uc2Uuc2V0SGVhZGVyL3Jlc3BvbnNlLnN0YXR1czpcbiAgICAgICAgICAgICAgICAgICAgLy8gICBpZiAodGhpcy5yZXNwb25zZUluaXQpIHsgdGhpcy5yZXNwb25zZUluaXQuc3RhdHVzID0gMzAyOyAodGhpcy5yZXNwb25zZUluaXQuaGVhZGVycyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KVsnTG9jYXRpb24nXSA9IHRhcmdldFVybDsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZS5zZXRIZWFkZXIoJ0xvY2F0aW9uJywgdGFyZ2V0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2Uuc3RhdHVzKDMwMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNTUiDQsdC10LcgUkVTUE9OU0UgKNC90LDQv9GA0LjQvNC10YAsIGRldi3RgdC10YDQstC10YAgbmcgc2VydmUpOiDRgdC10YDQstC10YDQvdGL0Lkg0YDQtdC00LjRgNC10LrRgiDQvdC10LLQvtC30LzQvtC20LXQvSxcbiAgICAgICAgICAgICAgICAgICAgLy8g0L/QvtGN0YLQvtC80YMg0L7RgtC+0LHRgNCw0LbQsNC10Lwg0YHRgtGA0LDQvdC40YbRgyDQvtGI0LjQsdC60LgsINC60LDQuiDQtNC+INCy0L3QtdC00YDQtdC90LjRjyDRgNC10LTQuNGA0LXQutGC0LAsINCy0LzQtdGB0YLQviDQsdC10YHQutC+0L3QtdGH0L3QvtCz0L4g0LvQvtCw0LTQtdGA0LAuXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIC8vIEFuZ3VsYXIgMjEgKNC80LjQs9GA0LDRhtC40Y8gU1NSKTog0Y3RgtC+0YIg0YTQvtC70LHRjdC6INC90YPQttC10L0sINC/0L7QutCwIG5nIHNlcnZlINC90LUg0LjRgdC/0L7Qu9C90Y/QtdGCIHNlcnZlci50cyAo0L7QvSDQvdCwIENvbW1vbkVuZ2luZSkuXG4gICAgICAgICAgICAgICAgICAgIC8vINCf0L7RgdC70LUg0LzQuNCz0YDQsNGG0LjQuCBzZXJ2ZXIudHMg0L3QsCBjcmVhdGVOb2RlUmVxdWVzdEhhbmRsZXIgZGV2LdGB0LXRgNCy0LXRgCDQvdCw0YfQvdGR0YIg0LjRgdC/0L7Qu9C90Y/RgtGMIHNlcnZlci50cywg0LggUkVTUE9OU0UvUkVTUE9OU0VfSU5JVFxuICAgICAgICAgICAgICAgICAgICAvLyDRgdGC0LDQvdC10YIg0LTQvtGB0YLRg9C/0LXQvSDQsiBuZyBzZXJ2ZSDigJQg0YLQvtCz0LTQsCDRjdGC0YMg0LLQtdGC0LrRgyDRgSB0aHJvd0Vycm9yKDQwNCkg0LzQvtC20L3QviDRg9C00LDQu9C40YLRjC5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEh0dHBFcnJvclJlc3BvbnNlKHsgc3RhdHVzOiA0MDQgfSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vINCR0YDQsNGD0LfQtdGAOiDQv9C+0YLQvtC6INC00LDQvdC90YvRhSDQutCw0YLQtdCz0L7RgNC40LggKFNDX0NBVEVHT1JZX0lORk8pINC30LDQstC10YDRiNCw0LXRgtGB0Y8g0L7RiNC40LHQutC+0Lkg0L/RgNC4IDQwNCDQuCDQvdC1INCy0L7Qt9C+0LHQvdC+0LLQu9GP0LXRgtGB0Y9cbiAgICAgICAgICAgICAgICAvLyDQv9GA0Lgg0L3QsNCy0LjQs9Cw0YbQuNC4INCyINGA0LDQvNC60LDRhSDRgtC+0LPQviDQttC1INC80LDRgNGI0YDRg9GC0LAsINC/0L7RjdGC0L7QvNGDINGA0LXQtNC40YDQtdC60YIg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyDQv9C+0LvQvdC+0Lkg0L/QtdGA0LXQt9Cw0LPRgNGD0LfQutC+0Lkg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbi5yZXBsYWNlINC90LUg0LTQvtCx0LDQstC70Y/QtdGCINC30LDQv9C40YHRjCDQsiDQuNGB0YLQvtGA0LjRjiwg0YfRgtC+0LHRiyDQutC90L7Qv9C60LAgwqvQndCw0LfQsNC0wrsg0L3QtSDQstC+0LfQstGA0LDRidCw0LvQsCDQvdCwINC90LXQtNC+0YHRgtGD0L/QvdGD0Y4g0YHRgtGA0LDQvdC40YbRgy5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIEFuZ3VsYXIgMjEgKNC80LjQs9GA0LDRhtC40Y8gU1NSKTog0Y3RgtGDINGB0YLRgNC+0LrRgyDQsNC/0LPRgNC10LnQtCDQndCVINGB0L3QuNC80LDQtdGCIOKAlCDQv9GA0LjRh9C40L3QsCDQsiDRgNCw0L3RgtCw0LnQvNC1INC/0YDQuNC70L7QttC10L3QuNGPICjQvNGR0YDRgtCy0YvQuSDQv9C+0YLQvtC6XG4gICAgICAgICAgICAgICAgLy8gU0NfQ0FURUdPUllfSU5GTyDQv9GA0LggU1BBLdC90LDQstC40LPQsNGG0LjQuCksINCwINC90LUg0LIgU1NSLiDQktC10YDQvdGD0YLRjCBTUEEt0L3QsNCy0LjQs9Cw0YbQuNGOIChyb3V0ZXIubmF2aWdhdGVCeVVybCkg0LzQvtC20L3QviDRgtC+0LvRjNC60L5cbiAgICAgICAgICAgICAgICAvLyDRgdC00LXQu9Cw0LIgU0NfQ0FURUdPUllfSU5GTyDRg9GB0YLQvtC50YfQuNCy0YvQvCDQuiA0MDQgKNC70L7QstC40YLRjCDQvtGI0LjQsdC60YMg0LLQvdGD0YLRgNC4IHN3aXRjaE1hcCkg0LvQuNCx0L4g0YPQvdC10YHRjyDRgNC10LTQuNGA0LXQutGCINCyIGd1YXJkICsgUmVkaXJlY3RDb21tYW5kLlxuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZSh0YXJnZXRVcmwpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -13,14 +13,16 @@ export const ScLoadingRequestState = { status: ScRequestStateStatusEnum.Loading
|
|
|
13
13
|
export const ScSuccessRequestState = (requestData) => ({ status: ScRequestStateStatusEnum.Success, data: requestData });
|
|
14
14
|
/**
|
|
15
15
|
* Состояние ошибки.
|
|
16
|
+
*
|
|
17
|
+
* @param error Причина ошибки (например, HttpErrorResponse).
|
|
16
18
|
*/
|
|
17
|
-
export const ScErrorRequestState = { status: ScRequestStateStatusEnum.Error };
|
|
19
|
+
export const ScErrorRequestState = (error) => ({ status: ScRequestStateStatusEnum.Error, error });
|
|
18
20
|
/**
|
|
19
21
|
* Преобразует поток данных в поток с состояниями запроса.
|
|
20
22
|
*/
|
|
21
|
-
export const mapToRequestState = () => (source$) => source$.pipe(map((requestData) => ScSuccessRequestState(requestData)), startWith(ScLoadingRequestState), catchError(() => of(ScErrorRequestState)));
|
|
23
|
+
export const mapToRequestState = () => (source$) => source$.pipe(map((requestData) => ScSuccessRequestState(requestData)), startWith(ScLoadingRequestState), catchError((error) => of(ScErrorRequestState(error))));
|
|
22
24
|
/**
|
|
23
25
|
* Извлекает данные из потока состояний запроса или возвращает null.
|
|
24
26
|
*/
|
|
25
27
|
export const mapRequestStateToDataOrNull = () => (source$) => source$.pipe(map((requestState) => (requestState.status === ScRequestStateStatusEnum.Success ? requestState.data : null)));
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1yZXF1ZXN0LXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jb21tb24vaW50ZXJmYWNlcy9zYy1pLXJlcXVlc3Qtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBb0IsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVXBEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQTJCLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRTFHOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFJLFdBQWMsRUFBc0IsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBRWxKOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWUsRUFBMEIsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFFcEk7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FDMUIsR0FBK0MsRUFBRSxDQUNqRCxDQUFDLE9BQXNCLEVBQUUsRUFBRSxDQUN2QixPQUFPLENBQUMsSUFBSSxDQUNSLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDeEQsU0FBUyxDQUFDLHFCQUEyQyxDQUFDLEVBQ3RELFVBQVUsQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBdUIsQ0FBQyxDQUFDLENBQ3ZGLENBQUM7QUFFVjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUNwQyxHQUFzRCxFQUFFLENBQ3hELENBQUMsT0FBdUMsRUFBRSxFQUFFLENBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNjUmVxdWVzdFN0YXRlU3RhdHVzRW51bSB9IGZyb20gJy4uL2VudW1zJztcblxuLyoqXG4gKiDQodC+0YHRgtC+0Y/QvdC40LUg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LfQsNC/0YDQvtGB0LAuXG4gKi9cbmV4cG9ydCB0eXBlIFNjSVJlcXVlc3RTdGF0ZTxUPiA9XG4gICAgfCB7IHN0YXR1czogU2NSZXF1ZXN0U3RhdGVTdGF0dXNFbnVtLkxvYWRpbmcgfVxuICAgIHwgeyBzdGF0dXM6IFNjUmVxdWVzdFN0YXRlU3RhdHVzRW51bS5TdWNjZXNzOyBkYXRhOiBUIH1cbiAgICB8IHsgc3RhdHVzOiBTY1JlcXVlc3RTdGF0ZVN0YXR1c0VudW0uRXJyb3I7IGVycm9yPzogdW5rbm93biB9O1xuXG4vKipcbiAqINCh0L7RgdGC0L7Rj9C90LjQtSDQt9Cw0LPRgNGD0LfQutC4LlxuICovXG5leHBvcnQgY29uc3QgU2NMb2FkaW5nUmVxdWVzdFN0YXRlOiBTY0lSZXF1ZXN0U3RhdGU8bmV2ZXI+ID0geyBzdGF0dXM6IFNjUmVxdWVzdFN0YXRlU3RhdHVzRW51bS5Mb2FkaW5nIH07XG5cbi8qKlxuICog0KHQvtGB0YLQvtGP0L3QuNC1INGD0YHQv9C10YjQvdC+0LPQviDQstGL0L/QvtC70L3QtdC90LjRjyDQt9Cw0L/RgNC+0YHQsC5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdERhdGEg0JTQsNC90L3Ri9C1INC30LDQv9GA0L7RgdCwLlxuICovXG5leHBvcnQgY29uc3QgU2NTdWNjZXNzUmVxdWVzdFN0YXRlID0gPFQ+KHJlcXVlc3REYXRhOiBUKTogU2NJUmVxdWVzdFN0YXRlPFQ+ID0+ICh7IHN0YXR1czogU2NSZXF1ZXN0U3RhdGVTdGF0dXNFbnVtLlN1Y2Nlc3MsIGRhdGE6IHJlcXVlc3REYXRhIH0pO1xuXG4vKipcbiAqINCh0L7RgdGC0L7Rj9C90LjQtSDQvtGI0LjQsdC60LguXG4gKlxuICogQHBhcmFtIGVycm9yINCf0YDQuNGH0LjQvdCwINC+0YjQuNCx0LrQuCAo0L3QsNC/0YDQuNC80LXRgCwgSHR0cEVycm9yUmVzcG9uc2UpLlxuICovXG5leHBvcnQgY29uc3QgU2NFcnJvclJlcXVlc3RTdGF0ZSA9IChlcnJvcj86IHVua25vd24pOiBTY0lSZXF1ZXN0U3RhdGU8bmV2ZXI+ID0+ICh7IHN0YXR1czogU2NSZXF1ZXN0U3RhdGVTdGF0dXNFbnVtLkVycm9yLCBlcnJvciB9KTtcblxuLyoqXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC/0L7RgtC+0Log0LTQsNC90L3Ri9GFINCyINC/0L7RgtC+0Log0YEg0YHQvtGB0YLQvtGP0L3QuNGP0LzQuCDQt9Cw0L/RgNC+0YHQsC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hcFRvUmVxdWVzdFN0YXRlID1cbiAgICA8VD4oKTogT3BlcmF0b3JGdW5jdGlvbjxULCBTY0lSZXF1ZXN0U3RhdGU8VD4+ID0+XG4gICAgKHNvdXJjZSQ6IE9ic2VydmFibGU8VD4pID0+XG4gICAgICAgIHNvdXJjZSQucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVxdWVzdERhdGEpID0+IFNjU3VjY2Vzc1JlcXVlc3RTdGF0ZShyZXF1ZXN0RGF0YSkpLFxuICAgICAgICAgICAgc3RhcnRXaXRoKFNjTG9hZGluZ1JlcXVlc3RTdGF0ZSBhcyBTY0lSZXF1ZXN0U3RhdGU8VD4pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IG9mKFNjRXJyb3JSZXF1ZXN0U3RhdGUoZXJyb3IpIGFzIFNjSVJlcXVlc3RTdGF0ZTxUPikpXG4gICAgICAgICk7XG5cbi8qKlxuICog0JjQt9Cy0LvQtdC60LDQtdGCINC00LDQvdC90YvQtSDQuNC3INC/0L7RgtC+0LrQsCDRgdC+0YHRgtC+0Y/QvdC40Lkg0LfQsNC/0YDQvtGB0LAg0LjQu9C4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCIG51bGwuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBSZXF1ZXN0U3RhdGVUb0RhdGFPck51bGwgPVxuICAgIDxUPigpOiBPcGVyYXRvckZ1bmN0aW9uPFNjSVJlcXVlc3RTdGF0ZTxUPiwgVCB8IG51bGw+ID0+XG4gICAgKHNvdXJjZSQ6IE9ic2VydmFibGU8U2NJUmVxdWVzdFN0YXRlPFQ+PikgPT5cbiAgICAgICAgc291cmNlJC5waXBlKG1hcCgocmVxdWVzdFN0YXRlKSA9PiAocmVxdWVzdFN0YXRlLnN0YXR1cyA9PT0gU2NSZXF1ZXN0U3RhdGVTdGF0dXNFbnVtLlN1Y2Nlc3MgPyByZXF1ZXN0U3RhdGUuZGF0YSA6IG51bGwpKSk7XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Inject, inject, Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, first, map, shareReplay, switchMap, tap } from 'rxjs';
|
|
2
|
+
import { BehaviorSubject, catchError, EMPTY, first, map, of, shareReplay, switchMap, tap } from 'rxjs';
|
|
3
3
|
import { SC_URLS } from '../../tokens';
|
|
4
4
|
import { SC_USER_INFO } from '../../user/tokens/sc-user-providers';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -31,7 +31,7 @@ export class ScRequisitesService {
|
|
|
31
31
|
/**
|
|
32
32
|
* Создаёт запрос получения списка всех контактов.
|
|
33
33
|
*/
|
|
34
|
-
this.contacts$ = inject(SC_USER_INFO).pipe(switchMap(() => this.http.get(`${this.urls.apiUrl}/contacts`)), shareReplay(1));
|
|
34
|
+
this.contacts$ = inject(SC_USER_INFO).pipe(switchMap(() => this.http.get(`${this.urls.apiUrl}/contacts`).pipe(catchError(() => of({ personal: [], socialMedia: [], directions: {} })))), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
35
35
|
/**
|
|
36
36
|
* Создаёт запрос получения списка контактов для решения возникающих вопросов.
|
|
37
37
|
*/
|
|
@@ -39,11 +39,11 @@ export class ScRequisitesService {
|
|
|
39
39
|
/**
|
|
40
40
|
* Создаёт запрос получения списка контактов розничных магазинов.
|
|
41
41
|
*/
|
|
42
|
-
this.retail$ = this.contacts$.pipe(map((contacts) => contacts.retail), first(), shareReplay(1));
|
|
42
|
+
this.retail$ = this.contacts$.pipe(map((contacts) => contacts.retail), first(), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
43
43
|
/**
|
|
44
44
|
* Создаёт запрос получения списка ссылок на социальные сети и другие каналы коммуникации.
|
|
45
45
|
*/
|
|
46
|
-
this.socialMedia$ = this.contacts$.pipe(map((contacts) => contacts.socialMedia), first(), shareReplay(1));
|
|
46
|
+
this.socialMedia$ = this.contacts$.pipe(map((contacts) => contacts.socialMedia), first(), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
47
47
|
/**
|
|
48
48
|
* Создаёт запрос получения списка контактов менеджеров по направлениям продаж.
|
|
49
49
|
*/
|
|
@@ -54,11 +54,11 @@ export class ScRequisitesService {
|
|
|
54
54
|
this.mapManagers(Number.parseFloat(key), manager);
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
|
-
}), first(), shareReplay(1));
|
|
57
|
+
}), first(), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
58
58
|
/**
|
|
59
59
|
* Создаёт запрос получения списка реквизитов компании.
|
|
60
60
|
*/
|
|
61
|
-
this.requisites$ = this.http.get(`${this.urls.apiUrl}/requisites`).pipe(shareReplay(1));
|
|
61
|
+
this.requisites$ = this.http.get(`${this.urls.apiUrl}/requisites`).pipe(catchError(() => EMPTY), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Устанавливает поисковый запрос в {@link BehaviorSubject}.
|
|
@@ -138,4 +138,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
138
138
|
type: Inject,
|
|
139
139
|
args: [SC_URLS]
|
|
140
140
|
}] }, { type: i2.ScAuthService }] });
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcmVxdWlzaXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jb250YWN0cy9zZXJ2aWNlcy9zYy1yZXF1aXNpdGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUs1RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUluRTs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFnRTVCOzs7Ozs7T0FNRztJQUNILFlBQ3FCLElBQWdCLEVBQ0MsSUFBYSxFQUM5QixXQUEwQjtRQUYxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ0MsU0FBSSxHQUFKLElBQUksQ0FBUztRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQXpFL0M7O1dBRUc7UUFDSyxnQkFBVyxHQUFtQyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFL0Y7O1dBRUc7UUFDSyxpQkFBWSxHQUE0QyxJQUFJLEdBQUcsRUFBc0MsQ0FBQztRQUU5Rzs7V0FFRztRQUNJLGNBQVMsR0FBbUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDeEUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQyxFQUNsRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUM7UUFFRjs7V0FF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RyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuRSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBVSxFQUFFLENBQVUsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsQixPQUFPLENBQUMsQ0FBQztnQkFDYixDQUFDO2dCQUVELElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQztnQkFFRCxPQUFPLENBQUMsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWMsQ0FBQyxTQUFpQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7K0dBdkpRLG1CQUFtQiw0Q0F5RWhCLE9BQU87bUhBekVWLG1CQUFtQixjQUZoQixNQUFNOzs0RkFFVCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkEwRVEsTUFBTTsyQkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpcnN0LCBtYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0F1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXV0aCc7XG5pbXBvcnQgeyBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IFNjSUNpdHksIFNjSVJlZ2lvbldpdGhDaXRpZXMgfSBmcm9tICcuLi8uLi9sb2NhdGlvbnMnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBTQ19VU0VSX0lORk8gfSBmcm9tICcuLi8uLi91c2VyL3Rva2Vucy9zYy11c2VyLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBTY0lDb250YWN0QW5kTWVkaWEsIFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0LCBTY0lPcmdDb250YWN0LCBTY0lSZXF1aXNpdGVzLCBTY0lTb2NpYWxNZWRpYSB9IGZyb20gJy4uL2R0byc7XG5pbXBvcnQgeyBTY0lSZXRhaWxDb250YWN0IH0gZnJvbSAnLi4vZHRvL3NjLWktcmV0YWlsLWNvbnRhY3QnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINGA0LXQutCy0LjQt9C40YLQsNC80Lgg0Lgg0YEg0L7QsdC+0LnQvdC+0Lkg0YHQstGP0LfRjNGOLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY1JlcXVpc2l0ZXNTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSDQv9C+0LjRgdC60L7QstC+0LPQviDQt9Cw0L/RgNC+0YHQsCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0LrQvtC90YLQsNC60YLQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2VhcmNoVGVybSQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60L7QvdGC0LDQutGC0L7QsiDQvNC10L3QtdC00LbQtdGA0LAg0L/QviDQvdCw0L/RgNCw0LLQu9C10L3QuNGOINC/0YDQvtC00LDQti5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlkTWFuYWdlck1hcDogTWFwPG51bWJlciwgU2NJRGlyZWN0aW9uTWFuYWdlckNvbnRhY3Q+ID0gbmV3IE1hcDxudW1iZXIsIFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0PigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0LLRgdC10YUg0LrQvtC90YLQsNC60YLQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb250YWN0cyQ6IE9ic2VydmFibGU8U2NJQ29udGFjdEFuZE1lZGlhPiA9IGluamVjdChTQ19VU0VSX0lORk8pLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFNjSUNvbnRhY3RBbmRNZWRpYT4oYCR7dGhpcy51cmxzLmFwaVVybH0vY29udGFjdHNgKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINC30LDQv9GA0L7RgSDQv9C+0LvRg9GH0LXQvdC40Y8g0YHQv9C40YHQutCwINC60L7QvdGC0LDQutGC0L7QsiDQtNC70Y8g0YDQtdGI0LXQvdC40Y8g0LLQvtC30L3QuNC60LDRjtGJ0LjRhSDQstC+0L/RgNC+0YHQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJzb25hbCQ6IE9ic2VydmFibGU8U2NJT3JnQ29udGFjdFtdPiA9IHRoaXMuY29udGFjdHMkLnBpcGUobWFwKChjb250YWN0czogU2NJQ29udGFjdEFuZE1lZGlhKSA9PiBjb250YWN0cy5wZXJzb25hbCkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0LrQvtC90YLQsNC60YLQvtCyINGA0L7Qt9C90LjRh9C90YvRhSDQvNCw0LPQsNC30LjQvdC+0LIuXG4gICAgICovXG4gICAgcHVibGljIHJldGFpbCQ6IE9ic2VydmFibGU8U2NJUmV0YWlsQ29udGFjdFtdIHwgdW5kZWZpbmVkPiA9IHRoaXMuY29udGFjdHMkLnBpcGUoXG4gICAgICAgIG1hcCgoY29udGFjdHM6IFNjSUNvbnRhY3RBbmRNZWRpYSkgPT4gY29udGFjdHMucmV0YWlsKSxcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0YHRgdGL0LvQvtC6INC90LAg0YHQvtGG0LjQsNC70YzQvdGL0LUg0YHQtdGC0Lgg0Lgg0LTRgNGD0LPQuNC1INC60LDQvdCw0LvRiyDQutC+0LzQvNGD0L3QuNC60LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIHNvY2lhbE1lZGlhJDogT2JzZXJ2YWJsZTxTY0lTb2NpYWxNZWRpYVtdPiA9IHRoaXMuY29udGFjdHMkLnBpcGUoXG4gICAgICAgIG1hcCgoY29udGFjdHM6IFNjSUNvbnRhY3RBbmRNZWRpYSkgPT4gY29udGFjdHMuc29jaWFsTWVkaWEpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDQutC+0L3RgtCw0LrRgtC+0LIg0LzQtdC90LXQtNC20LXRgNC+0LIg0L/QviDQvdCw0L/RgNCw0LLQu9C10L3QuNGP0Lwg0L/RgNC+0LTQsNC2LlxuICAgICAqL1xuICAgIHB1YmxpYyBkaXJlY3Rpb25zJDogT2JzZXJ2YWJsZTxQYXJ0aWFsPFJlY29yZDxudW1iZXIsIFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0W10+Pj4gPSB0aGlzLmNvbnRhY3RzJC5waXBlKFxuICAgICAgICBtYXAoKGNvbnRhY3RzOiBTY0lDb250YWN0QW5kTWVkaWEpID0+IGNvbnRhY3RzLmRpcmVjdGlvbnMpLFxuICAgICAgICB0YXAoKGRpcmVjdGlvbnMpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRpcmVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25zW051bWJlci5wYXJzZUZsb2F0KGtleSldPy5mb3JFYWNoKChtYW5hZ2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwTWFuYWdlcnMoTnVtYmVyLnBhcnNlRmxvYXQoa2V5KSwgbWFuYWdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgNC10LrQstC40LfQuNGC0L7QsiDQutC+0LzQv9Cw0L3QuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZXF1aXNpdGVzJDogT2JzZXJ2YWJsZTxTY0lSZXF1aXNpdGVzPiA9IHRoaXMuaHR0cC5nZXQ8U2NJUmVxdWlzaXRlcz4oYCR7dGhpcy51cmxzLmFwaVVybH0vcmVxdWlzaXRlc2ApLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1JlcXVpc2l0ZXNTZXJ2aWNlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodHRwIEhUVFAt0LrQu9C40LXQvdGCLlxuICAgICAqIEBwYXJhbSB1cmxzINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRgNCw0LfQtNC10LvRiyBiYWNrZW5kJ2EuXG4gICAgICogQHBhcmFtIGF1dGhTZXJ2aWNlINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZTogU2NBdXRoU2VydmljZVxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC/0L7QuNGB0LrQvtCy0YvQuSDQt9Cw0L/RgNC+0YEg0LIge0BsaW5rIEJlaGF2aW9yU3ViamVjdH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGVybSDQn9C+0LjRgdC60L7QstGL0Lkg0LfQsNC/0YDQvtGBLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRTZWFyY2hUZXJtQ2hhbmdlKHRlcm06IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KHRlcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQv9C+0LjRgdC60L7QstC+0LPQviDQt9Cw0L/RgNC+0YHQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2VhcmNoVGVybUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFRlcm0kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0L7QuNGB0LrQvtCy0YvQuSDQt9Cw0L/RgNC+0YEuXG4gICAgICovXG4gICAgcHVibGljIGdldEN1cnJlbnRTZWFyY2hUZXJtKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hUZXJtJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtGF0L7QtNC40YIg0L/QviDQtNGA0LXQstC+0LLQuNC00L3QvtC80YMg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y4g0LrQvtC90YLQsNC60YLQvtCyINC80LXQvdC10LTQttC10YDQvtCyINC4INC30LDQv9C40YHRi9Cy0LDQtdGCINC60LDQttC00L7Qs9C+INC80LXQvdC10LTQttC10YDQsCDQsiB7QGxpbmsgTWFwfSDQv9C+INC60LvRjtGH0YMg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkaXJlY3Rpb25JZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvdCw0L/RgNCw0LLQu9C10L3QuNGPINC/0YDQvtC00LDQti5cbiAgICAgKiBAcGFyYW0gbWFuYWdlciDQmtC+0L3RgtCw0LrRgtGLINC80LXQvdC10LTQttC10YDQsCDQv9C+INC90LDQv9GA0LDQstC70LXQvdC40Y4g0L/RgNC+0LTQsNC2LlxuICAgICAqL1xuICAgIHByaXZhdGUgbWFwTWFuYWdlcnMoZGlyZWN0aW9uSWQ6IG51bWJlciwgbWFuYWdlcjogU2NJRGlyZWN0aW9uTWFuYWdlckNvbnRhY3QpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFtYW5hZ2VyLmlkKSByZXR1cm47XG5cbiAgICAgICAgbWFuYWdlci5kaXJlY3Rpb25JZCA9IGRpcmVjdGlvbklkO1xuICAgICAgICB0aGlzLmlkTWFuYWdlck1hcC5zZXQobWFuYWdlci5pZCwgdGhpcy5zb3J0TWFuYWdlckNpdGllcyhtYW5hZ2VyKSk7XG5cbiAgICAgICAgaWYgKCFtYW5hZ2VyLm1hbmFnZXJzKSByZXR1cm47XG5cbiAgICAgICAgbWFuYWdlci5tYW5hZ2Vycy5mb3JFYWNoKChzdWJNYW5hZ2VyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcE1hbmFnZXJzKGRpcmVjdGlvbklkLCBzdWJNYW5hZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtGA0YLQuNGA0YPQtdGCINCz0L7RgNC+0LTQsCDQvNC10L3QtdC00LbQtdGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWFuYWdlciDQmtC+0L3RgtCw0LrRgtGLINC80LXQvdC10LTQttC10YDQsCDQv9C+INC90LDQv9GA0LDQstC70LXQvdC40Y4g0L/RgNC+0LTQsNC2LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBzb3J0TWFuYWdlckNpdGllcyhtYW5hZ2VyOiBTY0lEaXJlY3Rpb25NYW5hZ2VyQ29udGFjdCk6IFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0IHtcbiAgICAgICAgbWFuYWdlci5yZWdpb25zID0gbWFuYWdlci5yZWdpb25zPy5tYXA8U2NJUmVnaW9uV2l0aENpdGllcz4oKHJlZ2lvbikgPT4ge1xuICAgICAgICAgICAgcmVnaW9uLmNpdGllcyA9IHJlZ2lvbi5jaXRpZXM/LnNvcnQoKGE6IFNjSUNpdHksIGI6IFNjSUNpdHkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChhLm5hbWUgPCBiLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVnaW9uO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbWFuYWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQt9Cw0L/QuNGB0Ywg0LrQvtC90YLQsNC60YLQsCDQvNC10L3QtdC00LbQtdGA0LAg0L/QviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1hbmFnZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvNC10L3QtdC00LbQtdGA0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldE1hbmFnZXJCeUlkKG1hbmFnZXJJZDogbnVtYmVyKTogU2NJRGlyZWN0aW9uTWFuYWdlckNvbnRhY3QgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5pZE1hbmFnZXJNYXAuZ2V0KG1hbmFnZXJJZCk7XG4gICAgfVxufVxuIl19
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcmVxdWlzaXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jb250YWN0cy9zZXJ2aWNlcy9zYy1yZXF1aXNpdGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtuSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUluRTs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFxRTVCOzs7Ozs7T0FNRztJQUNILFlBQ3FCLElBQWdCLEVBQ0MsSUFBYSxFQUM5QixXQUEwQjtRQUYxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ0MsU0FBSSxHQUFKLElBQUksQ0FBUztRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQTlFL0M7O1dBRUc7UUFDSyxnQkFBVyxHQUFtQyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFL0Y7O1dBRUc7UUFDSyxpQkFBWSxHQUE0QyxJQUFJLEdBQUcsRUFBc0MsQ0FBQztRQUU5Rzs7V0FFRztRQUNJLGNBQVMsR0FBbUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDeEUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxD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QUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQTVKUSxtQkFBbUIsNENBOEVoQixPQUFPO21IQTlFVixtQkFBbUIsY0FGaEIsTUFBTTs7NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBK0VRLE1BQU07MkJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBFTVBUWSwgZmlyc3QsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0F1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXV0aCc7XG5pbXBvcnQgeyBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IFNjSUNpdHksIFNjSVJlZ2lvbldpdGhDaXRpZXMgfSBmcm9tICcuLi8uLi9sb2NhdGlvbnMnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBTQ19VU0VSX0lORk8gfSBmcm9tICcuLi8uLi91c2VyL3Rva2Vucy9zYy11c2VyLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBTY0lDb250YWN0QW5kTWVkaWEsIFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0LCBTY0lPcmdDb250YWN0LCBTY0lSZXF1aXNpdGVzLCBTY0lTb2NpYWxNZWRpYSB9IGZyb20gJy4uL2R0byc7XG5pbXBvcnQgeyBTY0lSZXRhaWxDb250YWN0IH0gZnJvbSAnLi4vZHRvL3NjLWktcmV0YWlsLWNvbnRhY3QnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINGA0LXQutCy0LjQt9C40YLQsNC80Lgg0Lgg0YEg0L7QsdC+0LnQvdC+0Lkg0YHQstGP0LfRjNGOLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY1JlcXVpc2l0ZXNTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSDQv9C+0LjRgdC60L7QstC+0LPQviDQt9Cw0L/RgNC+0YHQsCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0LrQvtC90YLQsNC60YLQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2VhcmNoVGVybSQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60L7QvdGC0LDQutGC0L7QsiDQvNC10L3QtdC00LbQtdGA0LAg0L/QviDQvdCw0L/RgNCw0LLQu9C10L3QuNGOINC/0YDQvtC00LDQti5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlkTWFuYWdlck1hcDogTWFwPG51bWJlciwgU2NJRGlyZWN0aW9uTWFuYWdlckNvbnRhY3Q+ID0gbmV3IE1hcDxudW1iZXIsIFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0PigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0LLRgdC10YUg0LrQvtC90YLQsNC60YLQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb250YWN0cyQ6IE9ic2VydmFibGU8U2NJQ29udGFjdEFuZE1lZGlhPiA9IGluamVjdChTQ19VU0VSX0lORk8pLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5odHRwLmdldDxTY0lDb250YWN0QW5kTWVkaWE+KGAke3RoaXMudXJscy5hcGlVcmx9L2NvbnRhY3RzYCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mPFNjSUNvbnRhY3RBbmRNZWRpYT4oeyBwZXJzb25hbDogW10sIHNvY2lhbE1lZGlhOiBbXSwgZGlyZWN0aW9uczoge30gfSkpKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINC30LDQv9GA0L7RgSDQv9C+0LvRg9GH0LXQvdC40Y8g0YHQv9C40YHQutCwINC60L7QvdGC0LDQutGC0L7QsiDQtNC70Y8g0YDQtdGI0LXQvdC40Y8g0LLQvtC30L3QuNC60LDRjtGJ0LjRhSDQstC+0L/RgNC+0YHQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJzb25hbCQ6IE9ic2VydmFibGU8U2NJT3JnQ29udGFjdFtdPiA9IHRoaXMuY29udGFjdHMkLnBpcGUobWFwKChjb250YWN0czogU2NJQ29udGFjdEFuZE1lZGlhKSA9PiBjb250YWN0cy5wZXJzb25hbCkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0LrQvtC90YLQsNC60YLQvtCyINGA0L7Qt9C90LjRh9C90YvRhSDQvNCw0LPQsNC30LjQvdC+0LIuXG4gICAgICovXG4gICAgcHVibGljIHJldGFpbCQ6IE9ic2VydmFibGU8U2NJUmV0YWlsQ29udGFjdFtdIHwgdW5kZWZpbmVkPiA9IHRoaXMuY29udGFjdHMkLnBpcGUoXG4gICAgICAgIG1hcCgoY29udGFjdHM6IFNjSUNvbnRhY3RBbmRNZWRpYSkgPT4gY29udGFjdHMucmV0YWlsKSxcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgdGB0YvQu9C+0Log0L3QsCDRgdC+0YbQuNCw0LvRjNC90YvQtSDRgdC10YLQuCDQuCDQtNGA0YPQs9C40LUg0LrQsNC90LDQu9GLINC60L7QvNC80YPQvdC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc29jaWFsTWVkaWEkOiBPYnNlcnZhYmxlPFNjSVNvY2lhbE1lZGlhW10+ID0gdGhpcy5jb250YWN0cyQucGlwZShcbiAgICAgICAgbWFwKChjb250YWN0czogU2NJQ29udGFjdEFuZE1lZGlhKSA9PiBjb250YWN0cy5zb2NpYWxNZWRpYSksXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0LrQvtC90YLQsNC60YLQvtCyINC80LXQvdC10LTQttC10YDQvtCyINC/0L4g0L3QsNC/0YDQsNCy0LvQtdC90LjRj9C8INC/0YDQvtC00LDQti5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGlyZWN0aW9ucyQ6IE9ic2VydmFibGU8UGFydGlhbDxSZWNvcmQ8bnVtYmVyLCBTY0lEaXJlY3Rpb25NYW5hZ2VyQ29udGFjdFtdPj4+ID0gdGhpcy5jb250YWN0cyQucGlwZShcbiAgICAgICAgbWFwKChjb250YWN0czogU2NJQ29udGFjdEFuZE1lZGlhKSA9PiBjb250YWN0cy5kaXJlY3Rpb25zKSxcbiAgICAgICAgdGFwKChkaXJlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkaXJlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uc1tOdW1iZXIucGFyc2VGbG9hdChrZXkpXT8uZm9yRWFjaCgobWFuYWdlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcE1hbmFnZXJzKE51bWJlci5wYXJzZUZsb2F0KGtleSksIG1hbmFnZXIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgNC10LrQstC40LfQuNGC0L7QsiDQutC+0LzQv9Cw0L3QuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZXF1aXNpdGVzJDogT2JzZXJ2YWJsZTxTY0lSZXF1aXNpdGVzPiA9IHRoaXMuaHR0cC5nZXQ8U2NJUmVxdWlzaXRlcz4oYCR7dGhpcy51cmxzLmFwaVVybH0vcmVxdWlzaXRlc2ApLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpLFxuICAgICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NSZXF1aXNpdGVzU2VydmljZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaHR0cCBIVFRQLdC60LvQuNC10L3Rgi5cbiAgICAgKiBAcGFyYW0gdXJscyDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC90LAg0YDQsNC30LTQtdC70YsgYmFja2VuZCdhLlxuICAgICAqIEBwYXJhbSBhdXRoU2VydmljZSDQodC10YDQstC40YEg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgQEluamVjdChTQ19VUkxTKSBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2U6IFNjQXV0aFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQv9C+0LjRgdC60L7QstGL0Lkg0LfQsNC/0YDQvtGBINCyIHtAbGluayBCZWhhdmlvclN1YmplY3R9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHRlcm0g0J/QvtC40YHQutC+0LLRi9C5INC30LDQv9GA0L7RgS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0U2VhcmNoVGVybUNoYW5nZSh0ZXJtOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dCh0ZXJtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0L/QvtC40YHQutC+0LLQvtCz0L4g0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFNlYXJjaFRlcm1DaGFuZ2UkKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hUZXJtJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9C+0LjRgdC60L7QstGL0Lkg0LfQsNC/0YDQvtGBLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDdXJyZW50U2VhcmNoVGVybSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7RhdC+0LTQuNGCINC/0L4g0LTRgNC10LLQvtCy0LjQtNC90L7QvNGDINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNGOINC60L7QvdGC0LDQutGC0L7QsiDQvNC10L3QtdC00LbQtdGA0L7QsiDQuCDQt9Cw0L/QuNGB0YvQstCw0LXRgiDQutCw0LbQtNC+0LPQviDQvNC10L3QtdC00LbQtdGA0LAg0LIge0BsaW5rIE1hcH0g0L/QviDQutC70Y7Rh9GDINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGlyZWN0aW9uSWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsNC/0YDQsNCy0LvQtdC90LjRjyDQv9GA0L7QtNCw0LYuXG4gICAgICogQHBhcmFtIG1hbmFnZXIg0JrQvtC90YLQsNC60YLRiyDQvNC10L3QtdC00LbQtdGA0LAg0L/QviDQvdCw0L/RgNCw0LLQu9C10L3QuNGOINC/0YDQvtC00LDQti5cbiAgICAgKi9cbiAgICBwcml2YXRlIG1hcE1hbmFnZXJzKGRpcmVjdGlvbklkOiBudW1iZXIsIG1hbmFnZXI6IFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0KTogdm9pZCB7XG4gICAgICAgIGlmICghbWFuYWdlci5pZCkgcmV0dXJuO1xuXG4gICAgICAgIG1hbmFnZXIuZGlyZWN0aW9uSWQgPSBkaXJlY3Rpb25JZDtcbiAgICAgICAgdGhpcy5pZE1hbmFnZXJNYXAuc2V0KG1hbmFnZXIuaWQsIHRoaXMuc29ydE1hbmFnZXJDaXRpZXMobWFuYWdlcikpO1xuXG4gICAgICAgIGlmICghbWFuYWdlci5tYW5hZ2VycykgcmV0dXJuO1xuXG4gICAgICAgIG1hbmFnZXIubWFuYWdlcnMuZm9yRWFjaCgoc3ViTWFuYWdlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYXBNYW5hZ2VycyhkaXJlY3Rpb25JZCwgc3ViTWFuYWdlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7RgNGC0LjRgNGD0LXRgiDQs9C+0YDQvtC00LAg0LzQtdC90LXQtNC20LXRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1hbmFnZXIg0JrQvtC90YLQsNC60YLRiyDQvNC10L3QtdC00LbQtdGA0LAg0L/QviDQvdCw0L/RgNCw0LLQu9C10L3QuNGOINC/0YDQvtC00LDQti5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgc29ydE1hbmFnZXJDaXRpZXMobWFuYWdlcjogU2NJRGlyZWN0aW9uTWFuYWdlckNvbnRhY3QpOiBTY0lEaXJlY3Rpb25NYW5hZ2VyQ29udGFjdCB7XG4gICAgICAgIG1hbmFnZXIucmVnaW9ucyA9IG1hbmFnZXIucmVnaW9ucz8ubWFwPFNjSVJlZ2lvbldpdGhDaXRpZXM+KChyZWdpb24pID0+IHtcbiAgICAgICAgICAgIHJlZ2lvbi5jaXRpZXMgPSByZWdpb24uY2l0aWVzPy5zb3J0KChhOiBTY0lDaXR5LCBiOiBTY0lDaXR5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYS5uYW1lIDwgYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlZ2lvbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LfQsNC/0LjRgdGMINC60L7QvdGC0LDQutGC0LAg0LzQtdC90LXQtNC20LXRgNCwINC/0L4g0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRgy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYW5hZ2VySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LzQtdC90LXQtNC20LXRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRNYW5hZ2VyQnlJZChtYW5hZ2VySWQ6IG51bWJlcik6IFNjSURpcmVjdGlvbk1hbmFnZXJDb250YWN0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWRNYW5hZ2VyTWFwLmdldChtYW5hZ2VySWQpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,37 +1,60 @@
|
|
|
1
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
|
1
2
|
import { InjectionToken } from '@angular/core';
|
|
2
3
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
4
|
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
|
4
|
-
import { filter, of, shareReplay, startWith, switchMap } from 'rxjs';
|
|
5
|
+
import { catchError, filter, map, of, shareReplay, startWith, switchMap } from 'rxjs';
|
|
5
6
|
import { ScCatalogService } from '../catalog/services/sc-catalog.service';
|
|
7
|
+
import { ScCatalogRedirectService } from '../catalog/services/sc-catalog-redirect.service';
|
|
8
|
+
import { mapRequestStateToDataOrNull, ScErrorRequestState, ScLoadingRequestState, ScSuccessRequestState } from '../common/interfaces/sc-i-request-state';
|
|
6
9
|
import { scGetCurrentRoute } from '../helpers';
|
|
10
|
+
/**
|
|
11
|
+
* Токен состояния запроса данных о категории (загрузка / успех / ошибка).
|
|
12
|
+
*/
|
|
13
|
+
export const SC_CATEGORY_STATE = new InjectionToken('A stream with current category request state');
|
|
7
14
|
/**
|
|
8
15
|
* Токен потока данных о категории.
|
|
9
16
|
*/
|
|
10
17
|
export const SC_CATEGORY_INFO = new InjectionToken('A stream with current category information');
|
|
11
18
|
/**
|
|
12
|
-
* Фабрика создания потока данных о категории.
|
|
19
|
+
* Фабрика создания потока состояния запроса данных о категории.
|
|
20
|
+
*
|
|
21
|
+
* При недоступной (HTTP 404) категории выполняет редирект на родительскую категорию; если родитель не найден
|
|
22
|
+
* или ошибка иная — эмитит состояние ошибки (по нему компонент показывает страницу ошибки).
|
|
13
23
|
*
|
|
14
24
|
* @param router Сервис для работы с маршрутом.
|
|
15
25
|
* @param route Маршрут.
|
|
16
26
|
* @param catalogService Сервис для работы с каталогом.
|
|
27
|
+
* @param catalogRedirectService Сервис редиректа на родительскую категорию.
|
|
17
28
|
*/
|
|
18
|
-
function
|
|
29
|
+
function categoryStateFactory(router, route, catalogService, catalogRedirectService) {
|
|
19
30
|
return router.events.pipe(filter((event) => event instanceof NavigationEnd)).pipe(startWith(null), switchMap(() => {
|
|
20
31
|
const categoryIdOrSlug = scGetCurrentRoute(route).snapshot.paramMap.get('categoryIdOrSlug');
|
|
21
|
-
if (categoryIdOrSlug) {
|
|
22
|
-
return
|
|
32
|
+
if (!categoryIdOrSlug) {
|
|
33
|
+
return of(ScSuccessRequestState(null));
|
|
23
34
|
}
|
|
24
|
-
return
|
|
35
|
+
return catalogService.getCategoryCached$(categoryIdOrSlug).pipe(map((category) => ScSuccessRequestState(category)), startWith(ScLoadingRequestState), catchError((error) => {
|
|
36
|
+
if (error instanceof HttpErrorResponse && error.status === 404) {
|
|
37
|
+
return catalogRedirectService
|
|
38
|
+
.redirectToCategoryParent$(categoryIdOrSlug)
|
|
39
|
+
.pipe(catchError((redirectError) => of(ScErrorRequestState(redirectError))));
|
|
40
|
+
}
|
|
41
|
+
return of(ScErrorRequestState(error));
|
|
42
|
+
}));
|
|
25
43
|
}), shareReplay({ bufferSize: 1, refCount: true }), takeUntilDestroyed());
|
|
26
44
|
}
|
|
27
45
|
/**
|
|
28
|
-
* Провайдеры потока данных о категории.
|
|
46
|
+
* Провайдеры состояния и потока данных о категории.
|
|
29
47
|
*/
|
|
30
48
|
export const CATEGORY_PROVIDERS = [
|
|
49
|
+
{
|
|
50
|
+
provide: SC_CATEGORY_STATE,
|
|
51
|
+
deps: [Router, ActivatedRoute, ScCatalogService, ScCatalogRedirectService],
|
|
52
|
+
useFactory: categoryStateFactory,
|
|
53
|
+
},
|
|
31
54
|
{
|
|
32
55
|
provide: SC_CATEGORY_INFO,
|
|
33
|
-
deps: [
|
|
34
|
-
useFactory:
|
|
56
|
+
deps: [SC_CATEGORY_STATE],
|
|
57
|
+
useFactory: (state$) => state$.pipe(mapRequestStateToDataOrNull()),
|
|
35
58
|
},
|
|
36
59
|
];
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0ZWdvcnkucHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9wcm92aWRlcnMvc2MtY2F0ZWdvcnkucHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQW1CLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUssT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWlELDhDQUE4QyxDQUFDLENBQUM7QUFFcEo7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBZ0MsNENBQTRDLENBQUMsQ0FBQztBQUVoSTs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDekIsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLGNBQWdDLEVBQ2hDLHNCQUFnRDtJQUVoRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM3RSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNYLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBb0IsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQW9CLFFBQVEsQ0FBQyxDQUFDLEVBQ3JFLFNBQVMsQ0FBQyxxQkFBMkQsQ0FBQyxFQUN0RSxVQUFVLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUMxQixJQUFJLEtBQUssWUFBWSxpQkFBaUIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUM3RCxPQUFPLHNCQUFzQjtxQkFDeEIseUJBQXlCLENBQUMsZ0JBQWdCLENBQUM7cUJBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFzQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUF1QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BJLENBQUM7WUFFRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQXVDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDOUMsa0JBQWtCLEVBQUUsQ0FDdkIsQ0FBQztBQUNOLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFlO0lBQzFDO1FBQ0ksT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixDQUFDO1FBQzFFLFVBQVUsRUFBRSxvQkFBb0I7S0FDbkM7SUFDRDtRQUNJLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUM7UUFDekIsVUFBVSxFQUFFLENBQUMsTUFBc0QsRUFBaUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQXFCLENBQUM7S0FDdks7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NDYXRlZ29yeSB9IGZyb20gJy4uL2NhdGFsb2cvZHRvL3NjLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjQ2F0YWxvZ1NlcnZpY2UgfSBmcm9tICcuLi9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBTY0NhdGFsb2dSZWRpcmVjdFNlcnZpY2UgfSBmcm9tICcuLi9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2ctcmVkaXJlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBtYXBSZXF1ZXN0U3RhdGVUb0RhdGFPck51bGwsIFNjRXJyb3JSZXF1ZXN0U3RhdGUsIFNjSVJlcXVlc3RTdGF0ZSwgU2NMb2FkaW5nUmVxdWVzdFN0YXRlLCBTY1N1Y2Nlc3NSZXF1ZXN0U3RhdGUgfSBmcm9tICcuLi9jb21tb24vaW50ZXJmYWNlcy9zYy1pLXJlcXVlc3Qtc3RhdGUnO1xuaW1wb3J0IHsgc2NHZXRDdXJyZW50Um91dGUgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuLyoqXG4gKiDQotC+0LrQtdC9INGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0L4g0LrQsNGC0LXQs9C+0YDQuNC4ICjQt9Cw0LPRgNGD0LfQutCwIC8g0YPRgdC/0LXRhSAvINC+0YjQuNCx0LrQsCkuXG4gKi9cbmV4cG9ydCBjb25zdCBTQ19DQVRFR09SWV9TVEFURSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZhYmxlPFNjSVJlcXVlc3RTdGF0ZTxTY0NhdGVnb3J5IHwgbnVsbD4+PignQSBzdHJlYW0gd2l0aCBjdXJyZW50IGNhdGVnb3J5IHJlcXVlc3Qgc3RhdGUnKTtcblxuLyoqXG4gKiDQotC+0LrQtdC9INC/0L7RgtC+0LrQsCDQtNCw0L3QvdGL0YUg0L4g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICovXG5leHBvcnQgY29uc3QgU0NfQ0FURUdPUllfSU5GTyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZhYmxlPFNjQ2F0ZWdvcnkgfCBudWxsPj4oJ0Egc3RyZWFtIHdpdGggY3VycmVudCBjYXRlZ29yeSBpbmZvcm1hdGlvbicpO1xuXG4vKipcbiAqINCk0LDQsdGA0LjQutCwINGB0L7Qt9C00LDQvdC40Y8g0L/QvtGC0L7QutCwINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0L4g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICpcbiAqINCf0YDQuCDQvdC10LTQvtGB0YLRg9C/0L3QvtC5IChIVFRQIDQwNCkg0LrQsNGC0LXQs9C+0YDQuNC4INCy0YvQv9C+0LvQvdGP0LXRgiDRgNC10LTQuNGA0LXQutGCINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRjjsg0LXRgdC70Lgg0YDQvtC00LjRgtC10LvRjCDQvdC1INC90LDQudC00LXQvVxuICog0LjQu9C4INC+0YjQuNCx0LrQsCDQuNC90LDRjyDigJQg0Y3QvNC40YLQuNGCINGB0L7RgdGC0L7Rj9C90LjQtSDQvtGI0LjQsdC60LggKNC/0L4g0L3QtdC80YMg0LrQvtC80L/QvtC90LXQvdGCINC/0L7QutCw0LfRi9Cy0LDQtdGCINGB0YLRgNCw0L3QuNGG0YMg0L7RiNC40LHQutC4KS5cbiAqXG4gKiBAcGFyYW0gcm91dGVyINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC80LDRgNGI0YDRg9GC0L7QvC5cbiAqIEBwYXJhbSByb3V0ZSDQnNCw0YDRiNGA0YPRgi5cbiAqIEBwYXJhbSBjYXRhbG9nU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutCw0YLQsNC70L7Qs9C+0LwuXG4gKiBAcGFyYW0gY2F0YWxvZ1JlZGlyZWN0U2VydmljZSDQodC10YDQstC40YEg0YDQtdC00LjRgNC10LrRgtCwINC90LAg0YDQvtC00LjRgtC10LvRjNGB0LrRg9GOINC60LDRgtC10LPQvtGA0LjRji5cbiAqL1xuZnVuY3Rpb24gY2F0ZWdvcnlTdGF0ZUZhY3RvcnkoXG4gICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIGNhdGFsb2dTZXJ2aWNlOiBTY0NhdGFsb2dTZXJ2aWNlLFxuICAgIGNhdGFsb2dSZWRpcmVjdFNlcnZpY2U6IFNjQ2F0YWxvZ1JlZGlyZWN0U2VydmljZVxuKTogT2JzZXJ2YWJsZTxTY0lSZXF1ZXN0U3RhdGU8U2NDYXRlZ29yeSB8IG51bGw+PiB7XG4gICAgcmV0dXJuIHJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkT3JTbHVnID0gc2NHZXRDdXJyZW50Um91dGUocm91dGUpLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnY2F0ZWdvcnlJZE9yU2x1ZycpO1xuXG4gICAgICAgICAgICBpZiAoIWNhdGVnb3J5SWRPclNsdWcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoU2NTdWNjZXNzUmVxdWVzdFN0YXRlPFNjQ2F0ZWdvcnkgfCBudWxsPihudWxsKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjYXRhbG9nU2VydmljZS5nZXRDYXRlZ29yeUNhY2hlZCQoY2F0ZWdvcnlJZE9yU2x1ZykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGNhdGVnb3J5KSA9PiBTY1N1Y2Nlc3NSZXF1ZXN0U3RhdGU8U2NDYXRlZ29yeSB8IG51bGw+KGNhdGVnb3J5KSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKFNjTG9hZGluZ1JlcXVlc3RTdGF0ZSBhcyBTY0lSZXF1ZXN0U3RhdGU8U2NDYXRlZ29yeSB8IG51bGw+KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJiBlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhdGFsb2dSZWRpcmVjdFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVkaXJlY3RUb0NhdGVnb3J5UGFyZW50JChjYXRlZ29yeUlkT3JTbHVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKHJlZGlyZWN0RXJyb3I6IHVua25vd24pID0+IG9mKFNjRXJyb3JSZXF1ZXN0U3RhdGUocmVkaXJlY3RFcnJvcikgYXMgU2NJUmVxdWVzdFN0YXRlPFNjQ2F0ZWdvcnkgfCBudWxsPikpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihTY0Vycm9yUmVxdWVzdFN0YXRlKGVycm9yKSBhcyBTY0lSZXF1ZXN0U3RhdGU8U2NDYXRlZ29yeSB8IG51bGw+KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgKTtcbn1cblxuLyoqXG4gKiDQn9GA0L7QstCw0LnQtNC10YDRiyDRgdC+0YHRgtC+0Y/QvdC40Y8g0Lgg0L/QvtGC0L7QutCwINC00LDQvdC90YvRhSDQviDQutCw0YLQtdCz0L7RgNC40LguXG4gKi9cbmV4cG9ydCBjb25zdCBDQVRFR09SWV9QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXG4gICAge1xuICAgICAgICBwcm92aWRlOiBTQ19DQVRFR09SWV9TVEFURSxcbiAgICAgICAgZGVwczogW1JvdXRlciwgQWN0aXZhdGVkUm91dGUsIFNjQ2F0YWxvZ1NlcnZpY2UsIFNjQ2F0YWxvZ1JlZGlyZWN0U2VydmljZV0sXG4gICAgICAgIHVzZUZhY3Rvcnk6IGNhdGVnb3J5U3RhdGVGYWN0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgICBwcm92aWRlOiBTQ19DQVRFR09SWV9JTkZPLFxuICAgICAgICBkZXBzOiBbU0NfQ0FURUdPUllfU1RBVEVdLFxuICAgICAgICB1c2VGYWN0b3J5OiAoc3RhdGUkOiBPYnNlcnZhYmxlPFNjSVJlcXVlc3RTdGF0ZTxTY0NhdGVnb3J5IHwgbnVsbD4+KTogT2JzZXJ2YWJsZTxTY0NhdGVnb3J5IHwgbnVsbD4gPT4gc3RhdGUkLnBpcGUobWFwUmVxdWVzdFN0YXRlVG9EYXRhT3JOdWxsPFNjQ2F0ZWdvcnkgfCBudWxsPigpKSxcbiAgICB9LFxuXTtcbiJdfQ==
|