@snabcentr/client-core 2.73.0 → 2.74.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.
@@ -1,3 +1,5 @@
1
1
  export * from './dto';
2
+ export * from './sc-page-query-param';
3
+ export * from './services/sc-pagination-page-query-param.service';
2
4
  export * from './services/sc-pagination.service';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3BhZ2luYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZHRvJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2MtcGFnaW5hdGlvbi5zZXJ2aWNlJztcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3BhZ2luYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsa0NBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2R0byc7XG5leHBvcnQgKiBmcm9tICcuL3NjLXBhZ2UtcXVlcnktcGFyYW0nO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9zYy1wYWdpbmF0aW9uLXBhZ2UtcXVlcnktcGFyYW0uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3NjLXBhZ2luYXRpb24uc2VydmljZSc7XG4iXX0=
@@ -0,0 +1,26 @@
1
+ /* eslint-disable unicorn/prevent-abbreviations */
2
+ import { assertInInjectionContext, inject } from '@angular/core';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { distinctUntilChanged, map } from 'rxjs';
5
+ /**
6
+ * Наименование query-параметра номера страницы пагинации.
7
+ */
8
+ export const SC_PAGE_QUERY_PARAM = 'page';
9
+ /**
10
+ * Преобразует значение query-параметра {@link SC_PAGE_QUERY_PARAM} в номер страницы пагинации.
11
+ * Нечисловые, дробные и меньшие единицы значения приводятся к первой странице.
12
+ *
13
+ * @param value Значение query-параметра номера страницы пагинации.
14
+ */
15
+ export function scParsePageQueryParam(value) {
16
+ return Math.max(1, Math.trunc(Number(value) || 1));
17
+ }
18
+ /**
19
+ * Возвращает {@link Observable} изменения номера страницы пагинации из query-параметра {@link SC_PAGE_QUERY_PARAM}.
20
+ * Должна вызываться в контексте инъекции.
21
+ */
22
+ export function scGetPageQueryParamChanges() {
23
+ assertInInjectionContext(scGetPageQueryParamChanges);
24
+ return inject(ActivatedRoute).queryParamMap.pipe(map((params) => scParsePageQueryParam(params.get(SC_PAGE_QUERY_PARAM))), distinctUntilChanged());
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcGFnZS1xdWVyeS1wYXJhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvcGFnaW5hdGlvbi9zYy1wYWdlLXF1ZXJ5LXBhcmFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUFrRDtBQUVsRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDO0FBRTFDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQXFCO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQjtJQUN0Qyx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBRXJELE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzVDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFDdkUsb0JBQW9CLEVBQUUsQ0FDekIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB1bmljb3JuL3ByZXZlbnQtYWJicmV2aWF0aW9ucyAqL1xuXG5pbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqINCd0LDQuNC80LXQvdC+0LLQsNC90LjQtSBxdWVyeS3Qv9Cw0YDQsNC80LXRgtGA0LAg0L3QvtC80LXRgNCwINGB0YLRgNCw0L3QuNGG0Ysg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICovXG5leHBvcnQgY29uc3QgU0NfUEFHRV9RVUVSWV9QQVJBTSA9ICdwYWdlJztcblxuLyoqXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUgcXVlcnkt0L/QsNGA0LDQvNC10YLRgNCwIHtAbGluayBTQ19QQUdFX1FVRVJZX1BBUkFNfSDQsiDQvdC+0LzQtdGAINGB0YLRgNCw0L3QuNGG0Ysg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICog0J3QtdGH0LjRgdC70L7QstGL0LUsINC00YDQvtCx0L3Ri9C1INC4INC80LXQvdGM0YjQuNC1INC10LTQuNC90LjRhtGLINC30L3QsNGH0LXQvdC40Y8g0L/RgNC40LLQvtC00Y/RgtGB0Y8g0Log0L/QtdGA0LLQvtC5INGB0YLRgNCw0L3QuNGG0LUuXG4gKlxuICogQHBhcmFtIHZhbHVlINCX0L3QsNGH0LXQvdC40LUgcXVlcnkt0L/QsNGA0LDQvNC10YLRgNCwINC90L7QvNC10YDQsCDRgdGC0YDQsNC90LjRhtGLINC/0LDQs9C40L3QsNGG0LjQuC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjUGFyc2VQYWdlUXVlcnlQYXJhbSh2YWx1ZT86IHN0cmluZyB8IG51bGwpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLnRydW5jKE51bWJlcih2YWx1ZSkgfHwgMSkpO1xufVxuXG4vKipcbiAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0L3QvtC80LXRgNCwINGB0YLRgNCw0L3QuNGG0Ysg0L/QsNCz0LjQvdCw0YbQuNC4INC40LcgcXVlcnkt0L/QsNGA0LDQvNC10YLRgNCwIHtAbGluayBTQ19QQUdFX1FVRVJZX1BBUkFNfS5cbiAqINCU0L7Qu9C20L3QsCDQstGL0LfRi9Cy0LDRgtGM0YHRjyDQsiDQutC+0L3RgtC10LrRgdGC0LUg0LjQvdGK0LXQutGG0LjQuC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjR2V0UGFnZVF1ZXJ5UGFyYW1DaGFuZ2VzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHNjR2V0UGFnZVF1ZXJ5UGFyYW1DaGFuZ2VzKTtcblxuICAgIHJldHVybiBpbmplY3QoQWN0aXZhdGVkUm91dGUpLnF1ZXJ5UGFyYW1NYXAucGlwZShcbiAgICAgICAgbWFwKChwYXJhbXMpID0+IHNjUGFyc2VQYWdlUXVlcnlQYXJhbShwYXJhbXMuZ2V0KFNDX1BBR0VfUVVFUllfUEFSQU0pKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xufVxuIl19
@@ -0,0 +1,97 @@
1
+ /* eslint-disable unicorn/prevent-abbreviations */
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { ActivatedRoute, Router } from '@angular/router';
5
+ import { SC_PAGE_QUERY_PARAM, scGetPageQueryParamChanges, scParsePageQueryParam } from '../sc-page-query-param';
6
+ import { ScPaginationService } from './sc-pagination.service';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * Сервис синхронизации номера страницы пагинации с query-параметром {@link SC_PAGE_QUERY_PARAM}.
10
+ */
11
+ export class ScPaginationPageQueryParamService {
12
+ /**
13
+ * Инициализирует экземпляр класса {@link ScPaginationPageQueryParamService}.
14
+ */
15
+ constructor() {
16
+ /**
17
+ * Сервис пагинации.
18
+ */
19
+ this.paginationService = inject((ScPaginationService));
20
+ /**
21
+ * Сервис предоставляющий доступ к данным о маршруте.
22
+ */
23
+ this.route = inject(ActivatedRoute);
24
+ /**
25
+ * Сервис маршрутизации.
26
+ */
27
+ this.router = inject(Router);
28
+ /**
29
+ * Номер страницы пагинации, применённый последним.
30
+ */
31
+ this.lastAppliedPage = 1;
32
+ scGetPageQueryParamChanges()
33
+ .pipe(takeUntilDestroyed())
34
+ .subscribe((page) => {
35
+ if (!this.lastParams || page === this.lastAppliedPage) {
36
+ return;
37
+ }
38
+ this.lastAppliedPage = page;
39
+ // Повторная установка параметров сбрасывает накопленный список, чтобы отобразить только страницу из query-параметра.
40
+ this.paginationService.patchOthers(this.lastParams);
41
+ this.paginationService.patchPage({ page });
42
+ });
43
+ }
44
+ /**
45
+ * Частично обновляет остальные параметры пагинации и применяет номер страницы из query-параметра при первом вызове.
46
+ *
47
+ * @param parameters Новые параметры пагинации.
48
+ */
49
+ patchOthers(parameters) {
50
+ const isFirst = !this.lastParams;
51
+ this.lastParams = parameters;
52
+ this.paginationService.patchOthers(parameters);
53
+ if (isFirst) {
54
+ const pageFromUrl = scParsePageQueryParam(this.route.snapshot.queryParamMap.get(SC_PAGE_QUERY_PARAM));
55
+ this.lastAppliedPage = pageFromUrl;
56
+ if (pageFromUrl > 1) {
57
+ this.paginationService.patchPage({ page: pageFromUrl });
58
+ }
59
+ }
60
+ else {
61
+ // Изменение фильтров сбрасывает пагинацию на первую страницу.
62
+ this.resetPageQueryParam();
63
+ }
64
+ }
65
+ /**
66
+ * Применяет количество записей на странице пагинации с сохранением текущей страницы.
67
+ *
68
+ * @param perPage Количество записей на странице пагинации.
69
+ */
70
+ patchPerPage(perPage) {
71
+ if (this.lastParams) {
72
+ // Повторная установка параметров сбрасывает накопленный список, чтобы текущая страница была запрошена заново с новым количеством записей.
73
+ this.paginationService.patchOthers(this.lastParams);
74
+ this.paginationService.patchPage({ page: this.lastAppliedPage, perPage });
75
+ }
76
+ else {
77
+ this.paginationService.patchPage({ page: 1, perPage });
78
+ }
79
+ }
80
+ /**
81
+ * Убирает номер страницы пагинации из query-параметров.
82
+ */
83
+ resetPageQueryParam() {
84
+ if (!this.lastParams || this.lastAppliedPage === 1) {
85
+ return;
86
+ }
87
+ this.lastAppliedPage = 1;
88
+ // eslint-disable-next-line no-void
89
+ void this.router.navigate([], { queryParams: { [SC_PAGE_QUERY_PARAM]: null }, queryParamsHandling: 'merge' });
90
+ }
91
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
92
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService }); }
93
+ }
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationPageQueryParamService, decorators: [{
95
+ type: Injectable
96
+ }], ctorParameters: () => [] });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcGFnaW5hdGlvbi1wYWdlLXF1ZXJ5LXBhcmFtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3BhZ2luYXRpb24vc2VydmljZXMvc2MtcGFnaW5hdGlvbi1wYWdlLXF1ZXJ5LXBhcmFtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0RBQWtEO0FBRWxELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRTlEOztHQUVHO0FBRUgsTUFBTSxPQUFPLGlDQUFpQztJQTBCMUM7O09BRUc7SUFDSDtRQTVCQTs7V0FFRztRQUNjLHNCQUFpQixHQUFHLE1BQU0sQ0FBNEIsQ0FBQSxtQkFBeUIsQ0FBQSxDQUFDLENBQUM7UUFFbEc7O1dBRUc7UUFDYyxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWhEOztXQUVHO1FBQ2MsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQU96Qzs7V0FFRztRQUNLLG9CQUFlLEdBQVcsQ0FBQyxDQUFDO1FBTWhDLDBCQUEwQixFQUFFO2FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzFCLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3BELE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIscUhBQXFIO1lBQ3JILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsVUFBc0I7UUFDckMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWpDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBRXRHLElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDO1lBRW5DLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osOERBQThEO1lBQzlELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVksQ0FBQyxPQUFlO1FBQy9CLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLDBJQUEwSTtZQUMxSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFtQjtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDekIsbUNBQW1DO1FBQ25DLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEgsQ0FBQzsrR0EvRlEsaUNBQWlDO21IQUFqQyxpQ0FBaUM7OzRGQUFqQyxpQ0FBaUM7a0JBRDdDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB1bmljb3JuL3ByZXZlbnQtYWJicmV2aWF0aW9ucyAqL1xuXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTY0lQYWdpbmF0aW9uUGFyYW1zIH0gZnJvbSAnLi4vZHRvL3NjLWktcGFnaW5hdGlvbi1wYXJhbXMnO1xuaW1wb3J0IHsgU0NfUEFHRV9RVUVSWV9QQVJBTSwgc2NHZXRQYWdlUXVlcnlQYXJhbUNoYW5nZXMsIHNjUGFyc2VQYWdlUXVlcnlQYXJhbSB9IGZyb20gJy4uL3NjLXBhZ2UtcXVlcnktcGFyYW0nO1xuaW1wb3J0IHsgU2NQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2MtcGFnaW5hdGlvbi5zZXJ2aWNlJztcblxuLyoqXG4gKiDQodC10YDQstC40YEg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Lgg0L3QvtC80LXRgNCwINGB0YLRgNCw0L3QuNGG0Ysg0L/QsNCz0LjQvdCw0YbQuNC4INGBIHF1ZXJ5LdC/0LDRgNCw0LzQtdGC0YDQvtC8IHtAbGluayBTQ19QQUdFX1FVRVJZX1BBUkFNfS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNjUGFnaW5hdGlvblBhZ2VRdWVyeVBhcmFtU2VydmljZTxQIGV4dGVuZHMgU2NJUGFnaW5hdGlvblBhcmFtcywgTyBleHRlbmRzIG9iamVjdCA9IE9taXQ8UCwga2V5b2YgU2NJUGFnaW5hdGlvblBhcmFtcz4+IHtcbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdGlvblNlcnZpY2UgPSBpbmplY3Q8U2NQYWdpbmF0aW9uU2VydmljZTxQLCBPPj4oU2NQYWdpbmF0aW9uU2VydmljZTxQLCBPPik7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YnQuNC5INC00L7RgdGC0YPQvyDQuiDQtNCw0L3QvdGL0Lwg0L4g0LzQsNGA0YjRgNGD0YLQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQvNCw0YDRiNGA0YPRgtC40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gICAgLyoqXG4gICAgICog0J/QvtGB0LvQtdC00L3QuNC1INC/0LDRgNCw0LzQtdGC0YDRiyDQv9Cw0LPQuNC90LDRhtC40LgsINC/0LXRgNC10LTQsNC90L3Ri9C1INCyIHtAbGluayBwYXRjaE90aGVyc30uXG4gICAgICovXG4gICAgcHJpdmF0ZSBsYXN0UGFyYW1zPzogUGFydGlhbDxPPjtcblxuICAgIC8qKlxuICAgICAqINCd0L7QvNC10YAg0YHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40LgsINC/0YDQuNC80LXQvdGR0L3QvdGL0Lkg0L/QvtGB0LvQtdC00L3QuNC8LlxuICAgICAqL1xuICAgIHByaXZhdGUgbGFzdEFwcGxpZWRQYWdlOiBudW1iZXIgPSAxO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1BhZ2luYXRpb25QYWdlUXVlcnlQYXJhbVNlcnZpY2V9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc2NHZXRQYWdlUXVlcnlQYXJhbUNoYW5nZXMoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxhc3RQYXJhbXMgfHwgcGFnZSA9PT0gdGhpcy5sYXN0QXBwbGllZFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEFwcGxpZWRQYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgICAvLyDQn9C+0LLRgtC+0YDQvdCw0Y8g0YPRgdGC0LDQvdC+0LLQutCwINC/0LDRgNCw0LzQtdGC0YDQvtCyINGB0LHRgNCw0YHRi9Cy0LDQtdGCINC90LDQutC+0L/Qu9C10L3QvdGL0Lkg0YHQv9C40YHQvtC6LCDRh9GC0L7QsdGLINC+0YLQvtCx0YDQsNC30LjRgtGMINGC0L7Qu9GM0LrQviDRgdGC0YDQsNC90LjRhtGDINC40LcgcXVlcnkt0L/QsNGA0LDQvNC10YLRgNCwLlxuICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGF0Y2hPdGhlcnModGhpcy5sYXN0UGFyYW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhdGNoUGFnZSh7IHBhZ2UgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQp9Cw0YHRgtC40YfQvdC+INC+0LHQvdC+0LLQu9GP0LXRgiDQvtGB0YLQsNC70YzQvdGL0LUg0L/QsNGA0LDQvNC10YLRgNGLINC/0LDQs9C40L3QsNGG0LjQuCDQuCDQv9GA0LjQvNC10L3Rj9C10YIg0L3QvtC80LXRgCDRgdGC0YDQsNC90LjRhtGLINC40LcgcXVlcnkt0L/QsNGA0LDQvNC10YLRgNCwINC/0YDQuCDQv9C10YDQstC+0Lwg0LLRi9C30L7QstC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMg0J3QvtCy0YvQtSDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBwYXRjaE90aGVycyhwYXJhbWV0ZXJzOiBQYXJ0aWFsPE8+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzRmlyc3QgPSAhdGhpcy5sYXN0UGFyYW1zO1xuXG4gICAgICAgIHRoaXMubGFzdFBhcmFtcyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGF0Y2hPdGhlcnMocGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VGcm9tVXJsID0gc2NQYXJzZVBhZ2VRdWVyeVBhcmFtKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoU0NfUEFHRV9RVUVSWV9QQVJBTSkpO1xuXG4gICAgICAgICAgICB0aGlzLmxhc3RBcHBsaWVkUGFnZSA9IHBhZ2VGcm9tVXJsO1xuXG4gICAgICAgICAgICBpZiAocGFnZUZyb21VcmwgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYXRjaFBhZ2UoeyBwYWdlOiBwYWdlRnJvbVVybCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vINCY0LfQvNC10L3QtdC90LjQtSDRhNC40LvRjNGC0YDQvtCyINGB0LHRgNCw0YHRi9Cy0LDQtdGCINC/0LDQs9C40L3QsNGG0LjRjiDQvdCwINC/0LXRgNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDLlxuICAgICAgICAgICAgdGhpcy5yZXNldFBhZ2VRdWVyeVBhcmFtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQvNC10L3Rj9C10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0LfQsNC/0LjRgdC10Lkg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC/0LDQs9C40L3QsNGG0LjQuCDRgSDRgdC+0YXRgNCw0L3QtdC90LjQtdC8INGC0LXQutGD0YnQtdC5INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGVyUGFnZSDQmtC+0LvQuNGH0LXRgdGC0LLQviDQt9Cw0L/QuNGB0LXQuSDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBwYXRjaFBlclBhZ2UocGVyUGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RQYXJhbXMpIHtcbiAgICAgICAgICAgIC8vINCf0L7QstGC0L7RgNC90LDRjyDRg9GB0YLQsNC90L7QstC60LAg0L/QsNGA0LDQvNC10YLRgNC+0LIg0YHQsdGA0LDRgdGL0LLQsNC10YIg0L3QsNC60L7Qv9C70LXQvdC90YvQuSDRgdC/0LjRgdC+0LosINGH0YLQvtCx0Ysg0YLQtdC60YPRidCw0Y8g0YHRgtGA0LDQvdC40YbQsCDQsdGL0LvQsCDQt9Cw0L/RgNC+0YjQtdC90LAg0LfQsNC90L7QstC+INGBINC90L7QstGL0Lwg0LrQvtC70LjRh9C10YHRgtCy0L7QvCDQt9Cw0L/QuNGB0LXQuS5cbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGF0Y2hPdGhlcnModGhpcy5sYXN0UGFyYW1zKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UucGF0Y2hQYWdlKHsgcGFnZTogdGhpcy5sYXN0QXBwbGllZFBhZ2UsIHBlclBhZ2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhdGNoUGFnZSh7IHBhZ2U6IDEsIHBlclBhZ2UgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9Cx0LjRgNCw0LXRgiDQvdC+0LzQtdGAINGB0YLRgNCw0L3QuNGG0Ysg0L/QsNCz0LjQvdCw0YbQuNC4INC40LcgcXVlcnkt0L/QsNGA0LDQvNC10YLRgNC+0LIuXG4gICAgICovXG4gICAgcHVibGljIHJlc2V0UGFnZVF1ZXJ5UGFyYW0oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sYXN0UGFyYW1zIHx8IHRoaXMubGFzdEFwcGxpZWRQYWdlID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RBcHBsaWVkUGFnZSA9IDE7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgIHZvaWQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcXVlcnlQYXJhbXM6IHsgW1NDX1BBR0VfUVVFUllfUEFSQU1dOiBudWxsIH0sIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XG4gICAgfVxufVxuIl19
@@ -74,7 +74,9 @@ export class ScPaginationService {
74
74
  return [value, value];
75
75
  }, [null, null]), map(([paginate]) => paginate), takeWhile((paginate) => paginate === null || paginate.meta.currentPage < paginate.meta.lastPage, true))), share());
76
76
  this.others$
77
- .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(scan((accumulator) => accumulator + 1, 1), startWith(1))), takeUntilDestroyed())
77
+ .pipe(filter(tuiIsPresent), switchMap(() => this.nextPageClickEvent.pipe(
78
+ // Страница может быть изменена извне (например, из query-параметра page), поэтому номер следующей страницы берётся из текущего состояния page$.
79
+ map(() => this.page$.value.page + 1), startWith(1))), takeUntilDestroyed())
78
80
  .subscribe((page) => {
79
81
  this.patchPage({ page: page });
80
82
  });
@@ -162,4 +164,4 @@ export class ScPaginationService {
162
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPaginationService, decorators: [{
163
165
  type: Injectable
164
166
  }], ctorParameters: () => [] });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9wYWdpbmF0aW9uL3NlcnZpY2VzL3NjLXBhZ2luYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3ZJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFDSCw2QkFBNkIsRUFDN0IscUNBQXFDLEVBQ3JDLDZCQUE2QixHQUVoQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFJbkU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBNkY1Qjs7T0FFRztJQUNIO1FBL0ZBOztXQUVHO1FBQ2MsVUFBSyxHQUF5QyxJQUFJLGVBQWUsQ0FBc0IscUNBQXFDLENBQUMsQ0FBQztRQUUvSTs7V0FFRztRQUNjLFlBQU8sR0FBbUMsSUFBSSxlQUFlLENBQWdCLFNBQVMsQ0FBQyxDQUFDO1FBRXpHOztXQUVHO1FBQ2EsdUJBQWtCLEdBQXVCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRS9GOztXQUVHO1FBQ0ksZ0JBQVcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcs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SUc7SUFDSCxrREFBa0Q7SUFDMUMsYUFBYSxDQUFDLEtBQVE7UUFDMUIsNkRBQTZEO1FBQzdELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRTNDLE9BQU8sTUFBVyxDQUFDO0lBQ3ZCLENBQUM7K0dBdk1RLG1CQUFtQjttSEFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHR1aUlzUHJlc2VudCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb25jYXRNYXAsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIHNjYW4sIHNoYXJlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjUHJvZHVjdCB9IGZyb20gJy4uLy4uL2NhdGFsb2cvZHRvL3NjLXByb2R1Y3QnO1xuaW1wb3J0IHsgU2NDYXRhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvc2VydmljZXMvc2MtY2F0YWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgU0NfTkVYVF9QQUdFX1BBR0lOQVRJT05fQ0xJQ0ssXG4gICAgU0NfUFJPRFVDVF9QQUdJTkFUSU9OX0RFRkFVTFRfT1BUSU9OUyxcbiAgICBTQ19QUk9EVUNUU19QQUdJTkFUSU9OX0xPQURFUixcbiAgICBTY1Byb2R1Y3RzUGFnaW5hdGlvbkxvYWRlcixcbn0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLXByb2R1Y3QtcGFnaW5hdGlvbi1vcHRpb25zJztcbmltcG9ydCB7IFNDX1VTRVJfSU5GTyB9IGZyb20gJy4uLy4uL3VzZXIvdG9rZW5zL3NjLXVzZXItcHJvdmlkZXJzJztcbmltcG9ydCB7IFNjSVBhZ2luYXRlIH0gZnJvbSAnLi4vZHRvL3NjLWktcGFnaW5hdGUnO1xuaW1wb3J0IHsgU2NJUGFnaW5hdGlvblBhcmFtcyB9IGZyb20gJy4uL2R0by9zYy1pLXBhZ2luYXRpb24tcGFyYW1zJztcblxuLyoqXG4gKiDQodC10YDQstC40YEg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2NQYWdpbmF0aW9uU2VydmljZTxQIGV4dGVuZHMgU2NJUGFnaW5hdGlvblBhcmFtcywgTyBleHRlbmRzIG9iamVjdCA9IE9taXQ8UCwga2V5b2YgU2NJUGFnaW5hdGlvblBhcmFtcz4+IHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSDQuNC30LzQtdC90LXQvdC40Y8g0LTQsNC90L3Ri9GFINC+INGB0YLRgNCw0L3QuNGG0LUg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZSQ6IEJlaGF2aW9yU3ViamVjdDxTY0lQYWdpbmF0aW9uUGFyYW1zPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2NJUGFnaW5hdGlvblBhcmFtcz4oU0NfUFJPRFVDVF9QQUdJTkFUSU9OX0RFRkFVTFRfT1BUSU9OUyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgQmVoYXZpb3JTdWJqZWN0fSDQuNC30LzQtdC90LXQvdC40Y8g0L7RgdGC0LDQstGI0LjRhdGB0Y8g0LTQsNC90L3Ri9GFINC/0LDQs9C40L3QsNGG0LjQuCDQsdC10Lcg0LTQsNC90L3Ri9GFINC+INGB0YLRgNCw0L3QuNGG0LUg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3RoZXJzJDogQmVoYXZpb3JTdWJqZWN0PE8gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIEV2ZW50RW1pdHRlcn0g0YHQvtCx0YvRgtC40Y8g0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgKNGB0LvQtdC00YPRjtGJ0LjQtSDRgtC+0LLQsNGA0YspLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBuZXh0UGFnZUNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IGluamVjdChTQ19ORVhUX1BBR0VfUEFHSU5BVElPTl9DTElDSyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0YLQsNGC0YPRgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIGF1dGhTdGF0dXMkID0gaW5qZWN0KFNDX1VTRVJfSU5GTykucGlwZShtYXAoKHVzZXIpID0+IHVzZXIuaXNHdWVzdCkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINGA0LDQsdC+0YLRiyDRgSDQutCw0YLQsNC70L7Qs9C+0LwuXG4gICAgICovXG4gICAgcHVibGljIGNhdGFsb2dTZXJ2aWNlID0gaW5qZWN0KFNjQ2F0YWxvZ1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0JfQsNCz0YDRg9C30YfQuNC6INGB0YLRgNCw0L3QuNGG0Ysg0YLQvtCy0LDRgNC+0LIuINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIOKAlCDQvtCx0YvRh9C90YvQuSDRgdC/0LjRgdC+0Log0YLQvtCy0LDRgNC+0LIgKHtAbGluayBTY0NhdGFsb2dTZXJ2aWNlLmdldFByb2R1Y3RzJH0pO1xuICAgICAqINC80L7QttC10YIg0LHRi9GC0Ywg0L/QtdGA0LXQvtC/0YDQtdC00LXQu9GR0L0g0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19QUk9EVUNUU19QQUdJTkFUSU9OX0xPQURFUn0gKNC90LDQv9GA0LjQvNC10YAsINC00LvRjyDRgdGC0YDQsNC90LjRhtGLINC90L7QstGL0YUg0YLQvtCy0LDRgNC+0LIpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtcyDQn9Cw0YDQsNC80LXRgtGA0Ysg0LfQsNC/0YDQvtGB0LAg0YHRgtGA0LDQvdC40YbRiyDRgtC+0LLQsNGA0L7QsiDRgSDQv9Cw0LPQuNC90LDRhtC40LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3RzTG9hZGVyOiBTY1Byb2R1Y3RzUGFnaW5hdGlvbkxvYWRlciA9XG4gICAgICAgIGluamVjdChTQ19QUk9EVUNUU19QQUdJTkFUSU9OX0xPQURFUiwgeyBvcHRpb25hbDogdHJ1ZSB9KSA/P1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmdcbiAgICAgICAgKChwYXJhbXMpID0+IHRoaXMuY2F0YWxvZ1NlcnZpY2UuZ2V0UHJvZHVjdHMkKHBhcmFtcykpO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGK0LXQutGCINC00LDQvdC90YvRhSDQv9Cw0LPQuNC90LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIGRhdGEkOiBPYnNlcnZhYmxlPFNjSVBhZ2luYXRlPFNjUHJvZHVjdD4gfCBudWxsPiA9IHRoaXMub3RoZXJzJC5waXBlKFxuICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgc3dpdGNoTWFwKChwYXJhbXMpID0+XG4gICAgICAgICAgICB0aGlzLnBhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICAgICAgLy8g0JjQt9Cx0LXQs9Cw0LXQvCDQvNC90L7QttC10YHRgtCy0LXQvdC90YvRhSDRgdC40LPQvdCw0LvQvtCyINC/0YDQuCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L7QvCDQuNC30LzQtdC90LXQvdC40Lgg0YTQuNC70YzRgtGA0L7QsiBwYWdlJCDQuCBvdGhlcnMkLlxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgICAgICAgICBtYXAoKHBhZ2UpID0+ICh7IC4uLnBhcmFtcywgLi4ucGFnZSB9KSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChwYWdpbmF0aW9uUGFyYW1zKSA9PiB0aGlzLmF1dGhTdGF0dXMkLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMucHJvZHVjdHNMb2FkZXIocGFnaW5hdGlvblBhcmFtcykucGlwZShzdGFydFdpdGgobnVsbCkpKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGK0LXQutGCINC00LDQvdC90YvRhSDQv9Cw0LPQuNC90LDRhtC40Lgg0YEg0YHQvtGF0YDQsNC90LXQvdC40LXQvCDQv9GA0LXQtNGL0LTRg9GJ0LjRhSDQt9C90LDRh9C10L3QuNC5INC00LvRjyBcItGA0LDQt9Cy0L7RgNCw0YfQuNCy0LDQvdC40Y9cIiDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIuXG4gICAgICog0KHQv9C40YHQvtC6INGB0L7RhdGA0LDQvdGP0LXRgtGB0Y8g0L/RgNC4INC/0LXRgNC10YXQvtC00LUg0L/QviDRgdGC0YDQsNC90LjRhtCw0LwsINC00L4g0YLQtdGFINC/0L7RgCDQv9C+0LrQsCDQvdC1INCx0YPQtNC10YIg0L/QvtC70YPRh9C10L0g0YHQuNCz0L3QsNC7IGBvdGhlcnMkYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YUFjY3VtdWxhdGVkJDogT2JzZXJ2YWJsZTxTY0lQYWdpbmF0ZTxTY1Byb2R1Y3Q+IHwgbnVsbD4gPSB0aGlzLm90aGVycyQucGlwZShcbiAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgIHN3aXRjaE1hcCgocGFyYW1zKSA9PiB0aGlzLmF1dGhTdGF0dXMkLnBpcGUobWFwKCgpID0+IHBhcmFtcykpKSxcbiAgICAgICAgc3dpdGNoTWFwKChwYXJhbXMpID0+XG4gICAgICAgICAgICB0aGlzLnBhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8g0JjQt9Cx0LXQs9Cw0LXQvCDQu9C40YjQvdC10LPQviDQt9Cw0L/RgNC+0YHQsCDRgdC+INGB0YLQsNGA0YvQvNC4INC/0LDRgNCw0LzQtdGC0YDQsNC80Lg6INGB0LHRgNC+0YEg0YHRgtGA0LDQvdC40YbRiyAocGF0Y2hQYWdlKSDQv9GA0Lgg0YHQvNC10L3QtSBvdGhlcnMkINGB0LjQvdGF0YDQvtC90L3QvlxuICAgICAgICAgICAgICAgIC8vIMKr0L/QuNC90LDQtdGCwrsg0LXRidGRINC20LjQstGD0Y4g0L/RgNC10LTRi9C00YPRidGD0Y4g0L/QvtC00L/QuNGB0LrRgyDigJQgZGVib3VuY2VUaW1lKDApINGB0YXQu9C+0L/Ri9Cy0LDQtdGCINGC0LDQutC+0Lkg0LLRgdC/0LvQtdGB0Log0LTQviDQvtC00L3QvtC5INGN0LzQuNGB0YHQuNC4LlxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzLEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgICAgIG1hcCgocGFnZSkgPT4gKHsgLi4ucGFyYW1zLCAuLi5wYWdlIH0pKSxcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAoKHBhZ2luYXRpb25QYXJhbXMpID0+IHRoaXMucHJvZHVjdHNMb2FkZXIocGFnaW5hdGlvblBhcmFtcykucGlwZShzdGFydFdpdGgobnVsbCkpKSxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiDQl9Cw0LzQtdC90LjRgtGMIGBTY1Byb2R1Y3RgINC90LAgVCDRgtC40L8uXG4gICAgICAgICAgICAgICAgc2NhbjxTY0lQYWdpbmF0ZTxTY1Byb2R1Y3Q+IHwgbnVsbCwgW1NjSVBhZ2luYXRlPFNjUHJvZHVjdD4gfCBudWxsLCBTY0lQYWdpbmF0ZTxTY1Byb2R1Y3Q+IHwgbnVsbF0+KFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgIChbXywgYWNjdW11bGF0b3JdLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWUsIGFjY3VtdWxhdG9yXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY3VtdWxhdG9yICYmIHZhbHVlLm1ldGEuY3VycmVudFBhZ2UgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZGF0YS51bnNoaWZ0KC4uLmFjY3VtdWxhdG9yLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3ZhbHVlLCB2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtudWxsLCBudWxsXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwKChbcGFnaW5hdGVdKSA9PiBwYWdpbmF0ZSksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKChwYWdpbmF0ZSkgPT4gcGFnaW5hdGUgPT09IG51bGwgfHwgcGFnaW5hdGUubWV0YS5jdXJyZW50UGFnZSA8IHBhZ2luYXRlLm1ldGEubGFzdFBhZ2UsIHRydWUpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1BhZ2luYXRpb25TZXJ2aWNlfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3RoZXJzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhZ2VDbGlja0V2ZW50LnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FuKChhY2N1bXVsYXRvcikgPT4gYWNjdW11bGF0b3IgKyAxLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCgxKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocGFnZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGF0Y2hQYWdlKHsgcGFnZTogcGFnZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0L7Qu9C90L7RgdGC0YzRjiDQvtCx0L3QvtCy0LvRj9C10YIg0LfQvdCw0YfQtdC90LjRjyDRgdGC0YDQsNC90LjRhtGLINC/0LDQs9C40L3QsNGG0LjQuCB7QGxpbmsgcGFnZSR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1BhZ2VWYWx1ZSDQndC+0LLRi9C1INC00LDQvdC90YvQtSDRgdGC0YDQsNC90LjRhtGLINC/0LDQs9C40L3QsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0UGFnZShuZXdQYWdlVmFsdWU6IFNjSVBhZ2luYXRpb25QYXJhbXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlJC5uZXh0KG5ld1BhZ2VWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KfQsNGB0YLQuNGH0L3QviDQvtCx0L3QvtCy0LvRj9C10YIg0LfQvdCw0YfQtdC90LjRjyDRgdGC0YDQsNC90LjRhtGLINC/0LDQs9C40L3QsNGG0LjQuCB7QGxpbmsgcGFnZSR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcnRpYWxQYWdlVmFsdWUg0J3QvtCy0YvQtSDQtNCw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40LguINCc0L7QttC90L4g0L/QtdGA0LXQtNCw0YLRjCDRh9Cw0YHRgtGMINC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGF0Y2hQYWdlKHBhcnRpYWxQYWdlVmFsdWU6IFBhcnRpYWw8U2NJUGFnaW5hdGlvblBhcmFtcz4pOiB2b2lkIHtcbiAgICAgICAgLy8g0JfQvdCw0YfQtdC90LjRjyDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMucGFnZSQudmFsdWU7XG5cbiAgICAgICAgLy8g0J7QsdC90L7QstC70Y/QtdC8INGC0L7Qu9GM0LrQviDRgtC1INC/0L7Qu9GPLCDQutC+0YLQvtGA0YvQtSDQv9C10YDQtdC00LDQvdGLINCyIHBhcnRpYWxQYWdlVmFsdWUuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRQYWdlOiBTY0lQYWdpbmF0aW9uUGFyYW1zID0ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgICAgIHBhZ2U6IHBhcnRpYWxQYWdlVmFsdWUucGFnZSA/PyBjdXJyZW50UGFnZS5wYWdlLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgICAgIHBlclBhZ2U6IHBhcnRpYWxQYWdlVmFsdWUucGVyUGFnZSA/PyBjdXJyZW50UGFnZS5wZXJQYWdlLFxuICAgICAgICAgICAgcGFnaW5hdGU6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHVwZGF0ZWRQYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQvdC+0YHRgtGM0Y4g0L7QsdC90L7QstC70Y/QtdGCINC+0YHRgtCw0LvRjNC90YvQtSDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4IHtAbGluayBvdGhlcnMkfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdPdGhlcnNWYWx1ZSDQndC+0LLRi9C1INC/0LDRgNCw0LzQtdGC0YDRiyDQv9Cw0LPQuNC90LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIHNldE90aGVycyhuZXdPdGhlcnNWYWx1ZTogTyk6IHZvaWQge1xuICAgICAgICB0aGlzLm90aGVycyQubmV4dChuZXdPdGhlcnNWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KfQsNGB0YLQuNGH0L3QviDQvtCx0L3QvtCy0LvRj9C10YIg0L7RgdGC0LDQu9GM0L3Ri9C1INC/0LDRgNCw0LzQtdGC0YDRiyDQv9Cw0LPQuNC90LDRhtC40Lgge0BsaW5rIG90aGVycyR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcnRpYWxPdGhlcnNWYWx1ZSDQndC+0LLRi9C1INC/0LDRgNCw0LzQtdGC0YDRiyDQv9Cw0LPQuNC90LDRhtC40LguINCc0L7QttC90L4g0L/QtdGA0LXQtNCw0YLRjCDRh9Cw0YHRgtGMINC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGF0Y2hPdGhlcnMocGFydGlhbE90aGVyc1ZhbHVlOiBQYXJ0aWFsPE8+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPdGhlcnMgPSB0aGlzLm90aGVycyQudmFsdWUgPz8gKHt9IGFzIE8pO1xuXG4gICAgICAgIC8vINCY0LfQsdC10LPQsNC10Lwg0L7QsdC90L7QstC70LXQvdC40Y8sINC10YHQu9C4IHBhcnRpYWxPdGhlcnNWYWx1ZSDQv9GD0YHRgtC+0LkuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXJ0aWFsT3RoZXJzVmFsdWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRPdGhlcnM6IE8gPSB7IC4uLmN1cnJlbnRPdGhlcnMsIC4uLnBhcnRpYWxPdGhlcnNWYWx1ZSB9O1xuICAgICAgICAgICAgdGhpcy5vdGhlcnMkLm5leHQodXBkYXRlZE90aGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LLRgdC1INC00LDQvdC90YvQtSDQv9Cw0LPQuNC90LDRhtC40Lgge0BsaW5rIHBhZ2UkfSDQuCB7QGxpbmsgb3RoZXJzJH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3VmFsdWUg0J3QvtCy0YvQtSDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4INC00LvRjyB7QGxpbmsgcGFnZSR9INC4IHtAbGluayBvdGhlcnMkfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0UGFnaW5hdGlvblBhcmFtcyhuZXdWYWx1ZTogUCk6IHZvaWQge1xuICAgICAgICAvLyDQntCx0L3QvtCy0LvRj9C10Lwg0LfQvdCw0YfQtdC90LjQtSBwYWdlJC5cbiAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgICAgIHBhZ2U6IG5ld1ZhbHVlLnBhZ2UsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICBwZXJQYWdlOiBuZXdWYWx1ZS5wZXJQYWdlLFxuICAgICAgICAgICAgcGFnaW5hdGU6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vINCe0LHQvdC+0LLQu9GP0LXQvCDQt9C90LDRh9C10L3QuNC1IG90aGVycyQuXG4gICAgICAgIGNvbnN0IG90aGVyc1ZhbHVlID0gdGhpcy5leHRyYWN0T3RoZXJzKG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5vdGhlcnMkLm5leHQob3RoZXJzVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvQtNC10LvRj9C10YIg0L/QsNGA0LDQvNC10YLRgNGLINC/0LDQs9C40L3QsNGG0LjQuCwg0L3QtSDQvtGC0L3QvtGB0Y/RidC40LXRgdGPINC6INGB0YLRgNCw0L3QuNGG0LUg0L/QsNCz0LjQvdCw0YbQuNC4IHtAbGluayBPfSDQuNC3INC/0L7Qu9C90L7Qs9C+INC+0LHRitC10LrRgtCwINC/0LDRgNCw0LzQtdGC0YDQvtCyINC/0LDQs9C40L3QsNGG0LjQuCB7QGxpbmsgUH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUg0J7QsdGK0LXQutGC0Ysg0L/QsNGA0LDQvNC10YLRgNC+0LIg0L/QsNCz0LjQvdCw0YbQuNC4IHtAbGluayBQfVxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBleHRyYWN0T3RoZXJzKHZhbHVlOiBQKTogTyB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY29uc3QgeyBwYWdlLCBwZXJQYWdlLCAuLi5vdGhlcnMgfSA9IHZhbHVlO1xuXG4gICAgICAgIHJldHVybiBvdGhlcnMgYXMgTztcbiAgICB9XG59XG4iXX0=
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcGFnaW5hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9wYWdpbmF0aW9uL3NlcnZpY2VzL3NjLXBhZ2luYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3ZJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFDSCw2QkFBNkIsRUFDN0IscUNBQXFDLEVBQ3JDLDZCQUE2QixHQUVoQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFJbkU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBNkY1Qjs7T0FFRztJQUNIO1FBL0ZBOztXQUVHO1FBQ2MsVUFBSyxHQUF5QyxJQUFJLGVBQWUsQ0FBc0IscUNBQXFDLENBQUMsQ0FBQztRQUUvSTs7V0FFRztRQUNjLFlBQU8sR0FBbUMsSUFBSSxlQUFlLENBQWdCLFNBQVMsQ0FBQyxDQUFDO1FBRXpHOztXQUVHO1FBQ2EsdUJBQWtCLEdBQXVCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRS9GOztXQUVHO1FBQ0ksZ0JBQVcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcs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QztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtEQUFrRDtJQUMxQyxhQUFhLENBQUMsS0FBUTtRQUMxQiw2REFBNkQ7UUFDN0QsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFM0MsT0FBTyxNQUFXLENBQUM7SUFDdkIsQ0FBQzsrR0F4TVEsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgdHVpSXNQcmVzZW50IH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbmNhdE1hcCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgc2Nhbiwgc2hhcmUsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NQcm9kdWN0IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9kdG8vc2MtcHJvZHVjdCc7XG5pbXBvcnQgeyBTY0NhdGFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9zZXJ2aWNlcy9zYy1jYXRhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBTQ19ORVhUX1BBR0VfUEFHSU5BVElPTl9DTElDSyxcbiAgICBTQ19QUk9EVUNUX1BBR0lOQVRJT05fREVGQVVMVF9PUFRJT05TLFxuICAgIFNDX1BST0RVQ1RTX1BBR0lOQVRJT05fTE9BREVSLFxuICAgIFNjUHJvZHVjdHNQYWdpbmF0aW9uTG9hZGVyLFxufSBmcm9tICcuLi8uLi90b2tlbnMvc2MtcHJvZHVjdC1wYWdpbmF0aW9uLW9wdGlvbnMnO1xuaW1wb3J0IHsgU0NfVVNFUl9JTkZPIH0gZnJvbSAnLi4vLi4vdXNlci90b2tlbnMvc2MtdXNlci1wcm92aWRlcnMnO1xuaW1wb3J0IHsgU2NJUGFnaW5hdGUgfSBmcm9tICcuLi9kdG8vc2MtaS1wYWdpbmF0ZSc7XG5pbXBvcnQgeyBTY0lQYWdpbmF0aW9uUGFyYW1zIH0gZnJvbSAnLi4vZHRvL3NjLWktcGFnaW5hdGlvbi1wYXJhbXMnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQv9Cw0LPQuNC90LDRhtC40LguXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTY1BhZ2luYXRpb25TZXJ2aWNlPFAgZXh0ZW5kcyBTY0lQYWdpbmF0aW9uUGFyYW1zLCBPIGV4dGVuZHMgb2JqZWN0ID0gT21pdDxQLCBrZXlvZiBTY0lQYWdpbmF0aW9uUGFyYW1zPj4ge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LfQvNC10L3QtdC90LjRjyDQtNCw0L3QvdGL0YUg0L4g0YHRgtGA0LDQvdC40YbQtSDQv9Cw0LPQuNC90LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlJDogQmVoYXZpb3JTdWJqZWN0PFNjSVBhZ2luYXRpb25QYXJhbXM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY0lQYWdpbmF0aW9uUGFyYW1zPihTQ19QUk9EVUNUX1BBR0lOQVRJT05fREVGQVVMVF9PUFRJT05TKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBCZWhhdmlvclN1YmplY3R9INC40LfQvNC10L3QtdC90LjRjyDQvtGB0YLQsNCy0YjQuNGF0YHRjyDQtNCw0L3QvdGL0YUg0L/QsNCz0LjQvdCw0YbQuNC4INCx0LXQtyDQtNCw0L3QvdGL0YUg0L4g0YHRgtGA0LDQvdC40YbQtSDQv9Cw0LPQuNC90LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdGhlcnMkOiBCZWhhdmlvclN1YmplY3Q8TyB8IHVuZGVmaW5lZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE8gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgRXZlbnRFbWl0dGVyfSDRgdC+0LHRi9GC0LjRjyDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyAo0YHQu9C10LTRg9GO0YnQuNC1INGC0L7QstCw0YDRiykuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5leHRQYWdlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gaW5qZWN0KFNDX05FWFRfUEFHRV9QQUdJTkFUSU9OX0NMSUNLKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHRgtCw0YLRg9GB0LAg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXV0aFN0YXR1cyQgPSBpbmplY3QoU0NfVVNFUl9JTkZPKS5waXBlKG1hcCgodXNlcikgPT4gdXNlci5pc0d1ZXN0KSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YDQsNCx0L7RgtGLINGBINC60LDRgtCw0LvQvtCz0L7QvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2F0YWxvZ1NlcnZpY2UgPSBpbmplY3QoU2NDYXRhbG9nU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0LPRgNGD0LfRh9C40Log0YHRgtGA0LDQvdC40YbRiyDRgtC+0LLQsNGA0L7Qsi4g0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4g4oCUINC+0LHRi9GH0L3Ri9C5INGB0L/QuNGB0L7QuiDRgtC+0LLQsNGA0L7QsiAoe0BsaW5rIFNjQ2F0YWxvZ1NlcnZpY2UuZ2V0UHJvZHVjdHMkfSk7XG4gICAgICog0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C10YDQtdC+0L/RgNC10LTQtdC70ZHQvSDRh9C10YDQtdC3INGC0L7QutC10L0ge0BsaW5rIFNDX1BST0RVQ1RTX1BBR0lOQVRJT05fTE9BREVSfSAo0L3QsNC/0YDQuNC80LXRgCwg0LTQu9GPINGB0YLRgNCw0L3QuNGG0Ysg0L3QvtCy0YvRhSDRgtC+0LLQsNGA0L7QsikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zINCf0LDRgNCw0LzQtdGC0YDRiyDQt9Cw0L/RgNC+0YHQsCDRgdGC0YDQsNC90LjRhtGLINGC0L7QstCw0YDQvtCyINGBINC/0LDQs9C40L3QsNGG0LjQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdHNMb2FkZXI6IFNjUHJvZHVjdHNQYWdpbmF0aW9uTG9hZGVyID1cbiAgICAgICAgaW5qZWN0KFNDX1BST0RVQ1RTX1BBR0lOQVRJT05fTE9BREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZ1xuICAgICAgICAoKHBhcmFtcykgPT4gdGhpcy5jYXRhbG9nU2VydmljZS5nZXRQcm9kdWN0cyQocGFyYW1zKSk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIg0LTQsNC90L3Ri9GFINC/0LDQs9C40L3QsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YSQ6IE9ic2VydmFibGU8U2NJUGFnaW5hdGU8U2NQcm9kdWN0PiB8IG51bGw+ID0gdGhpcy5vdGhlcnMkLnBpcGUoXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBzd2l0Y2hNYXAoKHBhcmFtcykgPT5cbiAgICAgICAgICAgIHRoaXMucGFnZSQucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgICAgICAvLyDQmNC30LHQtdCz0LDQtdC8INC80L3QvtC20LXRgdGC0LLQtdC90L3Ri9GFINGB0LjQs9C90LDQu9C+0LIg0L/RgNC4INC+0LTQvdC+0LLRgNC10LzQtdC90L3QvtC8INC40LfQvNC10L3QtdC90LjQuCDRhNC40LvRjNGC0YDQvtCyIHBhZ2UkINC4IG90aGVycyQuXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICAgICAgICAgIG1hcCgocGFnZSkgPT4gKHsgLi4ucGFyYW1zLCAuLi5wYWdlIH0pKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHBhZ2luYXRpb25QYXJhbXMpID0+IHRoaXMuYXV0aFN0YXR1cyQucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5wcm9kdWN0c0xvYWRlcihwYWdpbmF0aW9uUGFyYW1zKS5waXBlKHN0YXJ0V2l0aChudWxsKSkpKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIg0LTQsNC90L3Ri9GFINC/0LDQs9C40L3QsNGG0LjQuCDRgSDRgdC+0YXRgNCw0L3QtdC90LjQtdC8INC/0YDQtdC00YvQtNGD0YnQuNGFINC30L3QsNGH0LXQvdC40Lkg0LTQu9GPIFwi0YDQsNC30LLQvtGA0LDRh9C40LLQsNC90LjRj1wiINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7Qsi5cbiAgICAgKiDQodC/0LjRgdC+0Log0YHQvtGF0YDQsNC90Y/QtdGC0YHRjyDQv9GA0Lgg0L/QtdGA0LXRhdC+0LTQtSDQv9C+INGB0YLRgNCw0L3QuNGG0LDQvCwg0LTQviDRgtC10YUg0L/QvtGAINC/0L7QutCwINC90LUg0LHRg9C00LXRgiDQv9C+0LvRg9GH0LXQvSDRgdC40LPQvdCw0LsgYG90aGVycyRgLlxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRhQWNjdW11bGF0ZWQkOiBPYnNlcnZhYmxlPFNjSVBhZ2luYXRlPFNjUHJvZHVjdD4gfCBudWxsPiA9IHRoaXMub3RoZXJzJC5waXBlKFxuICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgc3dpdGNoTWFwKChwYXJhbXMpID0+IHRoaXMuYXV0aFN0YXR1cyQucGlwZShtYXAoKCkgPT4gcGFyYW1zKSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKHBhcmFtcykgPT5cbiAgICAgICAgICAgIHRoaXMucGFnZSQucGlwZShcbiAgICAgICAgICAgICAgICAvLyDQmNC30LHQtdCz0LDQtdC8INC70LjRiNC90LXQs9C+INC30LDQv9GA0L7RgdCwINGB0L4g0YHRgtCw0YDRi9C80Lgg0L/QsNGA0LDQvNC10YLRgNCw0LzQuDog0YHQsdGA0L7RgSDRgdGC0YDQsNC90LjRhtGLIChwYXRjaFBhZ2UpINC/0YDQuCDRgdC80LXQvdC1IG90aGVycyQg0YHQuNC90YXRgNC+0L3QvdC+XG4gICAgICAgICAgICAgICAgLy8gwqvQv9C40L3QsNC10YLCuyDQtdGJ0ZEg0LbQuNCy0YPRjiDQv9GA0LXQtNGL0LTRg9GJ0YPRjiDQv9C+0LTQv9C40YHQutGDIOKAlCBkZWJvdW5jZVRpbWUoMCkg0YHRhdC70L7Qv9GL0LLQsNC10YIg0YLQsNC60L7QuSDQstGB0L/Qu9C10YHQuiDQtNC+INC+0LTQvdC+0Lkg0Y3QvNC40YHRgdC40LguXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICAgICAgbWFwKChwYWdlKSA9PiAoeyAuLi5wYXJhbXMsIC4uLnBhZ2UgfSkpLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgocGFnaW5hdGlvblBhcmFtcykgPT4gdGhpcy5wcm9kdWN0c0xvYWRlcihwYWdpbmF0aW9uUGFyYW1zKS5waXBlKHN0YXJ0V2l0aChudWxsKSkpLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86INCX0LDQvNC10L3QuNGC0YwgYFNjUHJvZHVjdGAg0L3QsCBUINGC0LjQvy5cbiAgICAgICAgICAgICAgICBzY2FuPFNjSVBhZ2luYXRlPFNjUHJvZHVjdD4gfCBudWxsLCBbU2NJUGFnaW5hdGU8U2NQcm9kdWN0PiB8IG51bGwsIFNjSVBhZ2luYXRlPFNjUHJvZHVjdD4gfCBudWxsXT4oXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgKFtfLCBhY2N1bXVsYXRvcl0sIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgYWNjdW11bGF0b3JdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjdW11bGF0b3IgJiYgdmFsdWUubWV0YS5jdXJyZW50UGFnZSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5kYXRhLnVuc2hpZnQoLi4uYWNjdW11bGF0b3IuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWUsIHZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW251bGwsIG51bGxdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXAoKFtwYWdpbmF0ZV0pID0+IHBhZ2luYXRlKSxcbiAgICAgICAgICAgICAgICB0YWtlV2hpbGUoKHBhZ2luYXRlKSA9PiBwYWdpbmF0ZSA9PT0gbnVsbCB8fCBwYWdpbmF0ZS5tZXRhLmN1cnJlbnRQYWdlIDwgcGFnaW5hdGUubWV0YS5sYXN0UGFnZSwgdHJ1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjUGFnaW5hdGlvblNlcnZpY2V9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vdGhlcnMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFnZUNsaWNrRXZlbnQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vINCh0YLRgNCw0L3QuNGG0LAg0LzQvtC20LXRgiDQsdGL0YLRjCDQuNC30LzQtdC90LXQvdCwINC40LfQstC90LUgKNC90LDQv9GA0LjQvNC10YAsINC40LcgcXVlcnkt0L/QsNGA0LDQvNC10YLRgNCwIHBhZ2UpLCDQv9C+0Y3RgtC+0LzRgyDQvdC+0LzQtdGAINGB0LvQtdC00YPRjtGJ0LXQuSDRgdGC0YDQsNC90LjRhtGLINCx0LXRgNGR0YLRgdGPINC40Lcg0YLQtdC60YPRidC10LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8gcGFnZSQuXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5wYWdlJC52YWx1ZS5wYWdlICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoMSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGNoUGFnZSh7IHBhZ2U6IHBhZ2UgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQvdC+0YHRgtGM0Y4g0L7QsdC90L7QstC70Y/QtdGCINC30L3QsNGH0LXQvdC40Y8g0YHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40Lgge0BsaW5rIHBhZ2UkfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdQYWdlVmFsdWUg0J3QvtCy0YvQtSDQtNCw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIHNldFBhZ2UobmV3UGFnZVZhbHVlOiBTY0lQYWdpbmF0aW9uUGFyYW1zKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnZSQubmV4dChuZXdQYWdlVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCn0LDRgdGC0LjRh9C90L4g0L7QsdC90L7QstC70Y/QtdGCINC30L3QsNGH0LXQvdC40Y8g0YHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40Lgge0BsaW5rIHBhZ2UkfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJ0aWFsUGFnZVZhbHVlINCd0L7QstGL0LUg0LTQsNC90L3Ri9C1INGB0YLRgNCw0L3QuNGG0Ysg0L/QsNCz0LjQvdCw0YbQuNC4LiDQnNC+0LbQvdC+INC/0LXRgNC10LTQsNGC0Ywg0YfQsNGB0YLRjCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHBhdGNoUGFnZShwYXJ0aWFsUGFnZVZhbHVlOiBQYXJ0aWFsPFNjSVBhZ2luYXRpb25QYXJhbXM+KTogdm9pZCB7XG4gICAgICAgIC8vINCX0L3QsNGH0LXQvdC40Y8g0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2UkLnZhbHVlO1xuXG4gICAgICAgIC8vINCe0LHQvdC+0LLQu9GP0LXQvCDRgtC+0LvRjNC60L4g0YLQtSDQv9C+0LvRjywg0LrQvtGC0L7RgNGL0LUg0L/QtdGA0LXQtNCw0L3RiyDQsiBwYXJ0aWFsUGFnZVZhbHVlLlxuICAgICAgICBjb25zdCB1cGRhdGVkUGFnZTogU2NJUGFnaW5hdGlvblBhcmFtcyA9IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICBwYWdlOiBwYXJ0aWFsUGFnZVZhbHVlLnBhZ2UgPz8gY3VycmVudFBhZ2UucGFnZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICBwZXJQYWdlOiBwYXJ0aWFsUGFnZVZhbHVlLnBlclBhZ2UgPz8gY3VycmVudFBhZ2UucGVyUGFnZSxcbiAgICAgICAgICAgIHBhZ2luYXRlOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucGFnZSQubmV4dCh1cGRhdGVkUGFnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QvtC70L3QvtGB0YLRjNGOINC+0LHQvdC+0LLQu9GP0LXRgiDQvtGB0YLQsNC70YzQvdGL0LUg0L/QsNGA0LDQvNC10YLRgNGLINC/0LDQs9C40L3QsNGG0LjQuCB7QGxpbmsgb3RoZXJzJH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3T3RoZXJzVmFsdWUg0J3QvtCy0YvQtSDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRPdGhlcnMobmV3T3RoZXJzVmFsdWU6IE8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdGhlcnMkLm5leHQobmV3T3RoZXJzVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCn0LDRgdGC0LjRh9C90L4g0L7QsdC90L7QstC70Y/QtdGCINC+0YHRgtCw0LvRjNC90YvQtSDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4IHtAbGluayBvdGhlcnMkfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJ0aWFsT3RoZXJzVmFsdWUg0J3QvtCy0YvQtSDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4LiDQnNC+0LbQvdC+INC/0LXRgNC10LTQsNGC0Ywg0YfQsNGB0YLRjCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHVibGljIHBhdGNoT3RoZXJzKHBhcnRpYWxPdGhlcnNWYWx1ZTogUGFydGlhbDxPPik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50T3RoZXJzID0gdGhpcy5vdGhlcnMkLnZhbHVlID8/ICh7fSBhcyBPKTtcblxuICAgICAgICAvLyDQmNC30LHQtdCz0LDQtdC8INC+0LHQvdC+0LLQu9C10L3QuNGPLCDQtdGB0LvQuCBwYXJ0aWFsT3RoZXJzVmFsdWUg0L/Rg9GB0YLQvtC5LlxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGFydGlhbE90aGVyc1ZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkT3RoZXJzOiBPID0geyAuLi5jdXJyZW50T3RoZXJzLCAuLi5wYXJ0aWFsT3RoZXJzVmFsdWUgfTtcbiAgICAgICAgICAgIHRoaXMub3RoZXJzJC5uZXh0KHVwZGF0ZWRPdGhlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINCy0YHQtSDQtNCw0L3QvdGL0LUg0L/QsNCz0LjQvdCw0YbQuNC4IHtAbGluayBwYWdlJH0g0Lgge0BsaW5rIG90aGVycyR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbHVlINCd0L7QstGL0LUg0L/QsNGA0LDQvNC10YLRgNGLINC/0LDQs9C40L3QsNGG0LjQuCDQtNC70Y8ge0BsaW5rIHBhZ2UkfSDQuCB7QGxpbmsgb3RoZXJzJH0uXG4gICAgICovXG4gICAgcHVibGljIHNldFBhZ2luYXRpb25QYXJhbXMobmV3VmFsdWU6IFApOiB2b2lkIHtcbiAgICAgICAgLy8g0J7QsdC90L7QstC70Y/QtdC8INC30L3QsNGH0LXQvdC40LUgcGFnZSQuXG4gICAgICAgIHRoaXMucGFnZSQubmV4dCh7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgICAgICBwYWdlOiBuZXdWYWx1ZS5wYWdlLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgICAgcGVyUGFnZTogbmV3VmFsdWUucGVyUGFnZSxcbiAgICAgICAgICAgIHBhZ2luYXRlOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDQntCx0L3QvtCy0LvRj9C10Lwg0LfQvdCw0YfQtdC90LjQtSBvdGhlcnMkLlxuICAgICAgICBjb25zdCBvdGhlcnNWYWx1ZSA9IHRoaXMuZXh0cmFjdE90aGVycyhuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMub3RoZXJzJC5uZXh0KG90aGVyc1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0LTQtdC70Y/QtdGCINC/0LDRgNCw0LzQtdGC0YDRiyDQv9Cw0LPQuNC90LDRhtC40LgsINC90LUg0L7RgtC90L7RgdGP0YnQuNC10YHRjyDQuiDRgdGC0YDQsNC90LjRhtC1INC/0LDQs9C40L3QsNGG0LjQuCB7QGxpbmsgT30g0LjQtyDQv9C+0LvQvdC+0LPQviDQvtCx0YrQtdC60YLQsCDQv9Cw0YDQsNC80LXRgtGA0L7QsiDQv9Cw0LPQuNC90LDRhtC40Lgge0BsaW5rIFB9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlINCe0LHRitC10LrRgtGLINC/0LDRgNCw0LzQtdGC0YDQvtCyINC/0LDQs9C40L3QsNGG0LjQuCB7QGxpbmsgUH1cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgZXh0cmFjdE90aGVycyh2YWx1ZTogUCk6IE8ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIGNvbnN0IHsgcGFnZSwgcGVyUGFnZSwgLi4ub3RoZXJzIH0gPSB2YWx1ZTtcblxuICAgICAgICByZXR1cm4gb3RoZXJzIGFzIE87XG4gICAgfVxufVxuIl19
@@ -3,6 +3,7 @@ import { inject, Injectable, RendererFactory2 } from '@angular/core';
3
3
  import { Meta, Title } from '@angular/platform-browser';
4
4
  import { Router } from '@angular/router';
5
5
  import { get, isNil, isString } from 'lodash-es';
6
+ import { SC_PAGE_QUERY_PARAM, scParsePageQueryParam as scParsePageQueryParameter } from '../../pagination/sc-page-query-param';
6
7
  import { ScIdOrSlugPipe } from '../../pipes/sc-id-or-slug.pipe';
7
8
  import { ScMediaImageTransformerPipe } from '../../pipes/sc-media-image-transformer.pipe';
8
9
  import { SC_COMPANY_INFO } from '../../tokens/sc-company-info';
@@ -128,9 +129,12 @@ export class ScSeoService {
128
129
  const keywords = item.seo?.keywords ?? `${item.name}, ${this.catalogItemDefaultSeo.keywords}`;
129
130
  const meta = item.seo?.meta ?? [];
130
131
  // Устанавливаем стандартные seo-параметры, в том числе и каноническую ссылку.
132
+ // Страницы пагинации индексируются отдельно, поэтому каноническая ссылка содержит номер страницы из query-параметров.
133
+ const page = scParsePageQueryParameter(this.router.parseUrl(this.router.url).queryParamMap.get(SC_PAGE_QUERY_PARAM));
134
+ const canonicalUrl = page > 1 ? `${url}?${SC_PAGE_QUERY_PARAM}=${page}` : url;
131
135
  this.setMetaTags(title, description, keywords, meta, ['index', 'follow']);
132
136
  this.setOpenGraphMetaTags(title, description, url, this.mediaImageTransformerPipe.transform(item.image, true));
133
- this.setCanonicalLink(url);
137
+ this.setCanonicalLink(canonicalUrl);
134
138
  // Устанавливаем Schema.org параметры.
135
139
  this.setSchemaOrgData(this.schemaOrgFactory.merge([this.schemaOrgFactory.generateForOrganization(), ...(schemaOrgData ? [schemaOrgData] : [])]));
136
140
  }
@@ -234,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
234
238
  providedIn: 'root',
235
239
  }]
236
240
  }] });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUlqRTs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUUzRDs7V0FFRztRQUNjLDBCQUFxQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNFOztX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USxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDOytHQTdQUSxZQUFZO21IQUFaLFlBQVksY0FGVCxNQUFNOzs0RkFFVCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXRhLCBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGdldCwgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRoaW5nLCBXaXRoQ29udGV4dCB9IGZyb20gJ3NjaGVtYS1kdHMnO1xuXG5pbXBvcnQgeyBTY0lDYXRhbG9nSXRlbSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLWNhdGFsb2ctaXRlbSc7XG5pbXBvcnQgeyBTY0lDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSVZpcnR1YWxDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLXZpcnR1YWwtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJZE9yU2x1Z1BpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1pZC1vci1zbHVnLnBpcGUnO1xuaW1wb3J0IHsgU2NNZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtbWVkaWEtaW1hZ2UtdHJhbnNmb3JtZXIucGlwZSc7XG5pbXBvcnQgeyBTQ19DT01QQU5ZX0lORk8gfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtY29tcGFueS1pbmZvJztcbmltcG9ydCB7IFNDX0NBVEFMT0dfSVRFTV9QQUdFX01FVEEsIFNDX0RFRkFVTFRfUEFHRV9NRVRBIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWRlZmF1bHQtcGFnZS1tZXRhJztcbmltcG9ydCB7IFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtdXJscyc7XG5pbXBvcnQgeyBTY2hlbWFPcmdGYWN0b3J5IH0gZnJvbSAnLi4vY2xhc3Nlcy9zY2hlbWEtb3JnLWZhY3RvcnknO1xuaW1wb3J0IHsgU2NJU2VvIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zYy1pLXNlbyc7XG5pbXBvcnQgeyBSb2JvdHNUYWdUeXBlIH0gZnJvbSAnLi4vdHlwZXMvcm9ib3RzLXRhZy10eXBlJztcblxuLyoqXG4gKiDQodC10YDQstC40YEg0YPQv9GA0LDQstC70LXQvdC40Y8gU0VPLdC/0LDRgNCw0LzQtdGC0YDQsNC80LguXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjU2VvU2VydmljZSB7XG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INC60L7QvNC/0LDQvdC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wYW55SW5mbyA9IGluamVjdChTQ19DT01QQU5ZX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICog0JzQtdGC0LDQtNCw0L3QvdGL0LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2VvID0gaW5qZWN0KFNDX0RFRkFVTFRfUEFHRV9NRVRBKTtcblxuICAgIC8qKlxuICAgICAqINCc0LXRgtCw0LTQsNC90L3Ri9C1INGB0YLRgNCw0L3QuNGG0Ysg0LrQsNGC0LDQu9C+0LPQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2dJdGVtRGVmYXVsdFNlbyA9IGluamVjdChTQ19DQVRBTE9HX0lURU1fUEFHRV9NRVRBKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cmxzID0gaW5qZWN0KFNDX1VSTFMpO1xuXG4gICAgLyoqXG4gICAgICog0J/QsNC50L8sINCy0L7Qt9Cy0YDQsNGJ0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lgg0YHQuNC80LLQvtC70YzQvdC+0LUg0L7QsdC+0LfQvdCw0YfQtdC90LjQtSAoc2x1Zykg0LjRgdGF0L7QtNGPINC40Lcg0L3QsNGB0YLRgNC+0LXQuiDQvtC60YDRg9C20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpZE9yU2x1Z1BpcGU6IFNjSWRPclNsdWdQaXBlID0gaW5qZWN0KFNjSWRPclNsdWdQaXBlKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/INC00LvRjyDRhNC+0YDQvNC40YDQvtCy0LDQvdC40Y8g0L/QvtC70L3QvtCz0L4gVVJJINC40LfQvtCx0YDQsNC20LXQvdC40Y8g0L3QsCBtZWRpYSDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgPSBpbmplY3QoU2NNZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRg9GB0YLQsNC90L7QstC60Lgg0LzQtdGC0LDQtNCw0L3QvdGL0YUg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG1ldGFTZXJ2aWNlID0gaW5qZWN0KE1ldGEpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC80LDRgNGI0YDRg9GC0LjQt9Cw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPQv9GA0LDQstC70LXQvdC40Y8g0LfQsNCz0L7Qu9C+0LLQutC+0Lwg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlU2VydmljZSA9IGluamVjdChUaXRsZSk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIge0BsaW5rIERvY3VtZW50fSwg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YnQuNC5INC00L7RgdGC0YPQvyDQuiBET00g0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIC8qKlxuICAgICAqINCk0LDQsdGA0LjQutCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINC00LDQvdC90YvRhSBTY2hlbWEub3JnLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hT3JnRmFjdG9yeSA9IGluamVjdChTY2hlbWFPcmdGYWN0b3J5KTtcblxuICAgIC8qKlxuICAgICAqINCk0LDQsdGA0LjQutCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINGN0LrQt9C10LzQv9C70Y/RgNC+0LIge0BsaW5rIFJlbmRlcmVyMn0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5Mik7XG5cbiAgICAvKipcbiAgICAgKiDQrdC60LfQtdC80L/Qu9GP0YAge0BsaW5rIFJlbmRlcmVyMn0g0LTQu9GPINCx0LXQt9C+0L/QsNGB0L3QvtC5INGA0LDQsdC+0YLRiyDRgSBET00uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8g0L/QsNGA0LDQvNC10YLRgNGLINC90LAg0L7RgdC90L7QstC1INGD0LrQsNC30LDQvdC90L7Qs9C+INGA0LXRgdGD0YDRgdCwLiDQldGB0LvQuCDQutCw0LrQvtCz0L4t0YLQviDRgtC10LPQsCDQvdC10YIsINCx0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L3QviDQt9C90LDRh9C10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc291cmNlINCg0LXRgdGD0YDRgSDQvdCwINC+0YHQvdC+0LLQtSDQutC+0YLQvtGA0L7Qs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INGD0YHRgtCw0L3QvtCy0LjRgtGMINC80LXRgtCwLdGC0LXQs9C4LlxuICAgICAqIEBwYXJhbSBpbWcg0JjQt9C+0LHRgNCw0LbQtdC90LjQtS4g0JXRgdC70Lgg0L3QtSDQv9GA0LjRiNC70L4sINGC0L4g0LHRg9C00LXRgiDRg9GB0YLQsNC90L7QstC70LXQvdC+INC30L3QsNGH0LXQvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4gKGxvZ28g0LrQvtC80L/QsNC90LjQuCkuXG4gICAgICogQHBhcmFtIHJvYm90cyDQodC/0LjRgdC+0Logcm9ib3RzLdGC0LXQs9C+0LIg0LTQu9GPINGB0YLRgNCw0L3QuNGG0YsuINCX0L3QsNGH0LXQvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4gKFsnaW5kZXgnLCAnZm9sbG93J10pLlxuICAgICAqIEBwYXJhbSBzY2hlbWFPcmdEYXRhINCU0LDQvdC90YvQtSBTY2hlbWEub3JnINC00LvRjyDQstGB0YLRgNCw0LjQstCw0L3QuNGPINC90LAg0YHRgtGA0LDQvdC40YbQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RnJvbVJlc291cmNlKHJlc291cmNlPzogU2NJU2VvLCBpbWc/OiBzdHJpbmcsIHJvYm90cz86IFJvYm90c1RhZ1R5cGVbXSwgc2NoZW1hT3JnRGF0YT86IFdpdGhDb250ZXh0PFRoaW5nPik6IHZvaWQge1xuICAgICAgICBjb25zdCB1cGRhdGVkUmVzb3VyY2UgPSB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5yZXBsYWNlVGVtcGxhdGVzKHJlc291cmNlPy50aXRsZSA/PyB0aGlzLmRlZmF1bHRTZW8udGl0bGUsIHJlc291cmNlPy5pbnN0YW5jZURhdGEgPz8ge30pLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMucmVwbGFjZVRlbXBsYXRlcyhyZXNvdXJjZT8uZGVzY3JpcHRpb24gPz8gdGhpcy5kZWZhdWx0U2VvLmRlc2NyaXB0aW9uLCByZXNvdXJjZT8uaW5zdGFuY2VEYXRhID8/IHt9KSxcbiAgICAgICAgICAgIGtleXdvcmRzOiByZXNvdXJjZT8ua2V5d29yZHMgPz8gdGhpcy5kZWZhdWx0U2VvLmtleXdvcmRzLFxuICAgICAgICAgICAgbWV0YTogcmVzb3VyY2U/Lm1ldGEgPz8gW10sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7dGhpcy5yb3V0ZXIudXJsfWA7XG5cbiAgICAgICAgdGhpcy5zZXRNZXRhVGFncyh1cGRhdGVkUmVzb3VyY2UudGl0bGUsIHVwZGF0ZWRSZXNvdXJjZS5kZXNjcmlwdGlvbiwgdXBkYXRlZFJlc291cmNlLmtleXdvcmRzLCB1cGRhdGVkUmVzb3VyY2UubWV0YSwgcm9ib3RzID8/IFsnaW5kZXgnLCAnZm9sbG93J10pO1xuICAgICAgICB0aGlzLnNldE9wZW5HcmFwaE1ldGFUYWdzKHVwZGF0ZWRSZXNvdXJjZS50aXRsZSwgdXBkYXRlZFJlc291cmNlLmRlc2NyaXB0aW9uLCB1cmwsIGltZyA/PyB0aGlzLnVybHMubG9nb1VybCk7XG4gICAgICAgIHRoaXMuc2V0Q2Fub25pY2FsTGluayh1cmwpO1xuXG4gICAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8IFNjaGVtYS5vcmcg0L/QsNGA0LDQvNC10YLRgNGLLlxuICAgICAgICB0aGlzLnNldFNjaGVtYU9yZ0RhdGEodGhpcy5zY2hlbWFPcmdGYWN0b3J5Lm1lcmdlKFt0aGlzLnNjaGVtYU9yZ0ZhY3RvcnkuZ2VuZXJhdGVGb3JPcmdhbml6YXRpb24oKSwgLi4uKHNjaGVtYU9yZ0RhdGEgPyBbc2NoZW1hT3JnRGF0YV0gOiBbXSldKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgc2VvINC/0LDRgNCw0LzQtdGC0YDRiyDRgdC+INC30L3QsNGH0LXQvdC40LXQvCDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aXRsZSDQl9Cw0LPQvtC70L7QstC+0Log0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKiBAcGFyYW0gcm9ib3RzINCh0L/QuNGB0L7QuiByb2JvdHMg0YLQtdCz0L7QsiDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiy4g0JfQvdCw0YfQtdC90LjQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiAoWydpbmRleCcsICdmb2xsb3cnXSkuXG4gICAgICogQHBhcmFtIHNjaGVtYU9yZ0RhdGEg0JTQsNC90L3Ri9C1IFNjaGVtYS5vcmcg0LTQu9GPINCy0YHRgtGA0LDQuNCy0LDQvdC40Y8g0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCeURlZmF1bHQodGl0bGU/OiBzdHJpbmcsIHJvYm90cz86IFJvYm90c1RhZ1R5cGVbXSwgc2NoZW1hT3JnRGF0YT86IFdpdGhDb250ZXh0PFRoaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEZyb21SZXNvdXJjZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogYCR7dGl0bGUgPz8gdGhpcy5kZWZhdWx0U2VvLnRpdGxlfSAtICR7dGhpcy5jb21wYW55SW5mby5uYW1lfWAsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRpdGxlID8gYCR7dGl0bGV9LCAke3RoaXMuZGVmYXVsdFNlby5kZXNjcmlwdGlvbn1gIDogdGhpcy5kZWZhdWx0U2VvLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudXJscy5sb2dvVXJsLFxuICAgICAgICAgICAgcm9ib3RzID8/IFsnaW5kZXgnLCAnZm9sbG93J10sXG4gICAgICAgICAgICBzY2hlbWFPcmdEYXRhXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgc2VvINC/0LDRgNCw0LzQtdGC0YDRiyDRgdC+INC30L3QsNGH0LXQvdC40LXQvCDQv9C+INGD0LzQvtC70YfQsNC90LjRji4g0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0LfQvdCw0YfQtdC90LjQtSBcItC90LUg0LjQvdC00LXQutGB0LjRgNC+0LLQsNGC0YxcIiDQtNC70Y8g0L/QvtC40YHQutC+0LLRi9GFINGA0L7QsdC+0YLQvtCyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpdGxlINCX0LDQs9C+0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRCeURlZmF1bHRBc05vSW5kZXhlZCh0aXRsZT86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEJ5RGVmYXVsdCh0aXRsZSwgWydub2luZGV4JywgJ25vZm9sbG93JywgJ25vYXJjaGl2ZSddKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8t0L/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0LPQviDRjdC70LXQvNC10L3RgtCwINC60LDRgtCw0LvQvtCz0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQlNCw0L3QvdGL0LUg0L7QsSDRjdC70LXQvNC10L3RgtC1INC60LDRgtCw0LvQvtCz0LAuXG4gICAgICogQHBhcmFtIHVybFBhdGggVXJsINC/0YPRgtGMINC6INGN0LvQtdC80LXQvdGC0YMg0LrQsNGC0LDQu9C+0LPQsC4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0Y3Qu9C10LzQtdC90YLQsCDQutCw0YLQsNC70L7Qs9CwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBzY2hlbWFPcmdEYXRhINCU0LDQvdC90YvQtSBTY2hlbWEub3JnINGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGb3JDYXRhbG9nSXRlbShpdGVtOiBTY0lDYXRhbG9nSXRlbTxTY0lDYXRlZ29yeSB8IFNjSVZpcnR1YWxDYXRlZ29yeT4sIHVybFBhdGg6IHN0cmluZywgc2NoZW1hT3JnRGF0YT86IFdpdGhDb250ZXh0PFRoaW5nPik6IHZvaWQge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke3VybFBhdGgucmVwbGFjZSgnOmlkJywgdGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKGl0ZW0pLnRvU3RyaW5nKCkpfWA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5yZXBsYWNlVGVtcGxhdGVzKGl0ZW0uc2VvPy50aXRsZSA/PyB0aGlzLmNhdGFsb2dJdGVtRGVmYXVsdFNlby50aXRsZSA/PyBgJHtpdGVtLm5hbWV9IC0g0JrRg9C/0LjRgtGMINCyICR7dGhpcy5jb21wYW55SW5mby5uYW1lfWAsIGl0ZW0pO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRoaXMucmVwbGFjZVRlbXBsYXRlcyhcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgICAgICBpdGVtLnNlbz8uZGVzY3JpcHRpb24gPz8gdGhpcy5jYXRhbG9nSXRlbURlZmF1bHRTZW8uZGVzY3JpcHRpb24gPz8gYCR7aXRlbS5uYW1lfSAtINCa0YPQv9C40YLRjCDQv9C+INCy0YvQs9C+0LTQvdGL0Lwg0YbQtdC90LDQvCDQsiAke3RoaXMuY29tcGFueUluZm8ubmFtZX1gLFxuICAgICAgICAgICAgaXRlbVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBrZXl3b3JkcyA9IGl0ZW0uc2VvPy5rZXl3b3JkcyA/PyBgJHtpdGVtLm5hbWV9LCAke3RoaXMuY2F0YWxvZ0l0ZW1EZWZhdWx0U2VvLmtleXdvcmRzfWA7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBpdGVtLnNlbz8ubWV0YSA/PyBbXTtcblxuICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C1IHNlby3Qv9Cw0YDQsNC80LXRgtGA0YssINCyINGC0L7QvCDRh9C40YHQu9C1INC4INC60LDQvdC+0L3QuNGH0LXRgdC60YPRjiDRgdGB0YvQu9C60YMuXG4gICAgICAgIHRoaXMuc2V0TWV0YVRhZ3ModGl0bGUsIGRlc2NyaXB0aW9uLCBrZXl3b3JkcywgbWV0YSwgWydpbmRleCcsICdmb2xsb3cnXSk7XG4gICAgICAgIHRoaXMuc2V0T3BlbkdyYXBoTWV0YVRhZ3ModGl0bGUsIGRlc2NyaXB0aW9uLCB1cmwsIHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oaXRlbS5pbWFnZSwgdHJ1ZSkpO1xuICAgICAgICB0aGlzLnNldENhbm9uaWNhbExpbmsodXJsKTtcblxuICAgICAgICAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCBTY2hlbWEub3JnINC/0LDRgNCw0LzQtdGC0YDRiy5cbiAgICAgICAgdGhpcy5zZXRTY2hlbWFPcmdEYXRhKHRoaXMuc2NoZW1hT3JnRmFjdG9yeS5tZXJnZShbdGhpcy5zY2hlbWFPcmdGYWN0b3J5LmdlbmVyYXRlRm9yT3JnYW5pemF0aW9uKCksIC4uLihzY2hlbWFPcmdEYXRhID8gW3NjaGVtYU9yZ0RhdGFdIDogW10pXSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCX0LDQvNC10L3Rj9C10YIg0YjQsNCx0LvQvtC90Ysg0LIg0YLQtdC60YHRgtC1INC90LAg0LfQvdCw0YfQtdC90LjRjyDQuNC3INC+0LHRitC10LrRgtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQg0KLQtdC60YHRgiDRgSDRiNCw0LHQu9C+0L3QsNC80LguXG4gICAgICogQHBhcmFtIGluc3RhbmNlRGF0YSDQntCx0YrQtdC60YIg0YEg0LTQsNC90L3Ri9C80Lgg0LTQu9GPINC30LDQvNC10L3Riy5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgcmVwbGFjZVRlbXBsYXRlcyh0ZXh0OiBzdHJpbmcsIGluc3RhbmNlRGF0YTogb2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgvXFwkXFx7KFtefV0rKVxcfS9nLCAoX3RlbXBsYXRlOiBzdHJpbmcsIGZpZWxkUGF0aFZhcmlhbnRzOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBmaWVsZFBhdGhWYXJpYW50c1xuICAgICAgICAgICAgICAgIC5zcGxpdCgnfCcpXG4gICAgICAgICAgICAgICAgLm1hcCgoZmllbGRQYXRoKSA9PiBmaWVsZFBhdGgudHJpbSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAubWFwKChmaWVsZFBhdGgpID0+IGdldChpbnN0YW5jZURhdGEsIGZpZWxkUGF0aCkgYXMgdW5rbm93bilcbiAgICAgICAgICAgICAgICAuZmluZCgoZmllbGRWYWx1ZSkgPT4gIWlzTmlsKGZpZWxkVmFsdWUpKTtcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tbmVzdGVkLWNvbmRpdGlvbmFsXG4gICAgICAgICAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gJycgOiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINCy0YHQtSBtZXRhLdGC0LXQs9C4INGB0YLRgNCw0L3QuNGG0YsuINCV0YHQu9C4INC60LDQutC+0Lkt0LvQuNCx0L4g0LjQtyDQv9Cw0YDQsNC80LXRgtGA0L7QsiDQvdC1INGD0LrQsNC30LDQvSwg0LTQu9GPINC90LXQs9C+INGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjyDQt9C90LDRh9C10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpdGxlINCX0LDQs9C+0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiDQntC/0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICogQHBhcmFtIGtleXdvcmRzINCa0LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSBtZXRhINCc0LDRgdGB0LjQsiDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9GFINC30L3QsNGH0LXQvdC40Lkg0LzQtdGC0LDRgtC10LPQvtCyLlxuICAgICAqIEBwYXJhbSByb2JvdHMg0KHQv9C40YHQvtC6IHJvYm90cyDRgtC10LPQvtCyINC00LvRjyDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0TWV0YVRhZ3MoXG4gICAgICAgIHRpdGxlOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZW8udGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZW8uZGVzY3JpcHRpb24sXG4gICAgICAgIGtleXdvcmRzOiBzdHJpbmcgPSB0aGlzLmRlZmF1bHRTZW8ua2V5d29yZHMsXG4gICAgICAgIG1ldGE6IFNjSVNlb1snbWV0YSddID0gW10sXG4gICAgICAgIHJvYm90czogUm9ib3RzVGFnVHlwZVtdID0gWydpbmRleCcsICdmb2xsb3cnXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XG5cbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiAnZGVzY3JpcHRpb24nLCBjb250ZW50OiBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiAna2V5d29yZHMnLCBjb250ZW50OiBrZXl3b3JkcyB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiAncm9ib3RzJywgY29udGVudDogcm9ib3RzLmpvaW4oJywgJykgfSk7XG5cbiAgICAgICAgbWV0YS5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgbmFtZTogdGFnLm5hbWUsIGNvbnRlbnQ6IHRhZy5jb250ZW50IH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBPcGVuIEdyYXBoIG1ldGEt0YLQtdCz0LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2dUaXRsZSDQl9Cw0LPQvtC70L7QstC+0LouXG4gICAgICogQHBhcmFtIG9nRGVzY3JpcHRpb24g0J7Qv9C40YHQsNC90LjQtS5cbiAgICAgKiBAcGFyYW0gb2dVcmwgVXJsLlxuICAgICAqIEBwYXJhbSBvZ0ltZyDQodGB0YvQu9C60LAg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0T3BlbkdyYXBoTWV0YVRhZ3Mob2dUaXRsZTogc3RyaW5nLCBvZ0Rlc2NyaXB0aW9uOiBzdHJpbmcsIG9nVXJsOiBzdHJpbmcsIG9nSW1nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnR5cGUnLCBjb250ZW50OiAnd2Vic2l0ZScgfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0aXRsZScsIGNvbnRlbnQ6IG9nVGl0bGUgfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzpkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IG9nRGVzY3JpcHRpb24gfSk7XG4gICAgICAgIHRoaXMubWV0YVNlcnZpY2UudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp1cmwnLCBjb250ZW50OiBvZ1VybCB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmltYWdlJywgY29udGVudDogb2dJbWcgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YLQtdCzINC60LDQvdC+0L3QuNGH0LXRgdC60L7QuSDRgdGC0YDQsNC90LjRhtGLIDxsaW5rIHJlbD1cImNhbm9uaWNhbFwiIGhyZWY9XCIuLi5cIiAvPi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgVVJMINC60L7RgtC+0YDRi9C5INC90LXQvtCx0YXQvtC00LjQvNC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQsiDQutCw0YfQtdGB0YLQstC1INGB0YHRi9C70LrQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldENhbm9uaWNhbExpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5IGxpbmsgY2Fub25pY2FsLlxuICAgICAgICBjb25zdCBleGlzdGluZ0xpbmsgPSB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPVwiY2Fub25pY2FsXCJdJyk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nTGluaz8ucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChleGlzdGluZ0xpbmsucGFyZW50Tm9kZSwgZXhpc3RpbmdMaW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCh0L7Qt9C00LDRkdC8INC4INGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INC90L7QstGL0Lkg0YLQtdCzLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50XG4gICAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ3JlbCcsICdjYW5vbmljYWwnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ2hyZWYnLCB1cmwpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuaGVhZCwgbGluayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgU2NoZW1hLm9yZyDQvtCx0YrQtdC60YIg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhINCU0LDQvdC90YvQtSBTY2hlbWEub3JnINC00LvRjyDQstGB0YLRgNCw0LjQstCw0L3QuNGPINC90LAg0YHRgtGA0LDQvdC40YbQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFNjaGVtYU9yZ0RhdGE8VCBleHRlbmRzIFRoaW5nPihkYXRhOiBXaXRoQ29udGV4dDxUPik6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm9qZWN0QXR0cmlidXRlTmFtZSA9ICdkYXRhLXNjLXNjaGVtYS1vcmcnO1xuICAgICAgICAvLyDQo9C00LDQu9GP0LXQvCDQstGB0LUg0YDQsNC90LXQtSDRgdC+0LfQtNCw0L3QvdGL0LUg0YHQutGA0LjQv9GC0YsgU2NoZW1hLm9yZyAo0L/QviDRg9C90LjQutCw0LvRjNC90L7QvNGDINCw0YLRgNC40LHRg9GC0YMg0L/RgNC+0LXQutGC0LApLlxuICAgICAgICBjb25zdCBleGlzdGluZ1NjcmlwdHMgPSB0aGlzLmRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChgc2NyaXB0WyR7cHJvamVjdEF0dHJpYnV0ZU5hbWV9XWApO1xuICAgICAgICBleGlzdGluZ1NjcmlwdHMuZm9yRWFjaCgoZXhpc3RpbmdTY3JpcHQpID0+IHtcbiAgICAgICAgICAgIGlmIChleGlzdGluZ1NjcmlwdC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChleGlzdGluZ1NjcmlwdC5wYXJlbnROb2RlLCBleGlzdGluZ1NjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgY29uc3Qgc2NyaXB0ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoc2NyaXB0LCAndHlwZScsICdhcHBsaWNhdGlvbi9sZCtqc29uJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHNjcmlwdCwgcHJvamVjdEF0dHJpYnV0ZU5hbWUsICcnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChzY3JpcHQsIHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmhlYWQsIHNjcmlwdCk7XG4gICAgfVxufVxuIl19
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Nlby9zZXJ2aWNlcy9zYy1zZW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsSUFBSSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUlqRTs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMs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O1FBQ2xELG9GQUFvRjtRQUNwRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUMvRixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDekUsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUVBQW1FO1FBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7K0dBalFRLFlBQVk7bUhBQVosWUFBWSxjQUZULE1BQU07OzRGQUVULFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0LCBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVGhpbmcsIFdpdGhDb250ZXh0IH0gZnJvbSAnc2NoZW1hLWR0cyc7XG5cbmltcG9ydCB7IFNjSUNhdGFsb2dJdGVtIH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktY2F0YWxvZy1pdGVtJztcbmltcG9ydCB7IFNjSUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJVmlydHVhbENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktdmlydHVhbC1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTQ19QQUdFX1FVRVJZX1BBUkFNLCBzY1BhcnNlUGFnZVF1ZXJ5UGFyYW0gYXMgc2NQYXJzZVBhZ2VRdWVyeVBhcmFtZXRlciB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24vc2MtcGFnZS1xdWVyeS1wYXJhbSc7XG5pbXBvcnQgeyBTY0lkT3JTbHVnUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLWlkLW9yLXNsdWcucGlwZSc7XG5pbXBvcnQgeyBTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1tZWRpYS1pbWFnZS10cmFuc2Zvcm1lci5waXBlJztcbmltcG9ydCB7IFNDX0NPTVBBTllfSU5GTyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1jb21wYW55LWluZm8nO1xuaW1wb3J0IHsgU0NfQ0FUQUxPR19JVEVNX1BBR0VfTUVUQSwgU0NfREVGQVVMVF9QQUdFX01FVEEgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtZGVmYXVsdC1wYWdlLW1ldGEnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjaGVtYU9yZ0ZhY3RvcnkgfSBmcm9tICcuLi9jbGFzc2VzL3NjaGVtYS1vcmctZmFjdG9yeSc7XG5pbXBvcnQgeyBTY0lTZW8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktc2VvJztcbmltcG9ydCB7IFJvYm90c1RhZ1R5cGUgfSBmcm9tICcuLi90eXBlcy9yb2JvdHMtdGFnLXR5cGUnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyBTRU8t0L/QsNGA0LDQvNC10YLRgNCw0LzQuC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NTZW9TZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC80L/QsNC90LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBhbnlJbmZvID0gaW5qZWN0KFNDX0NPTVBBTllfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQsNC00LDQvdC90YvQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRji5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTZW8gPSBpbmplY3QoU0NfREVGQVVMVF9QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0JzQtdGC0LDQtNCw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRiyDQutCw0YLQsNC70L7Qs9CwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ0l0ZW1EZWZhdWx0U2VvID0gaW5qZWN0KFNDX0NBVEFMT0dfSVRFTV9QQUdFX01FVEEpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybHMgPSBpbmplY3QoU0NfVVJMUyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvywg0LLQvtC30LLRgNCw0YnQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDQuNGB0YXQvtC00Y8g0LjQtyDQvdCw0YHRgtGA0L7QtdC6INC+0LrRgNGD0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlkT3JTbHVnUGlwZTogU2NJZE9yU2x1Z1BpcGUgPSBpbmplY3QoU2NJZE9yU2x1Z1BpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0J/QsNC50L8g0LTQu9GPINGE0L7RgNC80LjRgNC+0LLQsNC90LjRjyDQv9C+0LvQvdC+0LPQviBVUkkg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQvdCwIG1lZGlhINGB0LXRgNCy0LXRgNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSA9IGluamVjdChTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINGD0YHRgtCw0L3QvtCy0LrQuCDQvNC10YLQsNC00LDQvdC90YvRhSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWV0YVNlcnZpY2UgPSBpbmplY3QoTWV0YSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LzQsNGA0YjRgNGD0YLQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRg9C/0YDQsNCy0LvQtdC90LjRjyDQt9Cw0LPQvtC70L7QstC60L7QvCDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcblxuICAgIC8qKlxuICAgICAqINCe0LHRitC10LrRgiB7QGxpbmsgRG9jdW1lbnR9LCDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0Y7RidC40Lkg0LTQvtGB0YLRg9C/INC6IERPTSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgLyoqXG4gICAgICog0KTQsNCx0YDQuNC60LAg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0LTQsNC90L3Ri9GFIFNjaGVtYS5vcmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWFPcmdGYWN0b3J5ID0gaW5qZWN0KFNjaGVtYU9yZ0ZhY3RvcnkpO1xuXG4gICAgLyoqXG4gICAgICog0KTQsNCx0YDQuNC60LAg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0Y3QutC30LXQvNC/0LvRj9GA0L7QsiB7QGxpbmsgUmVuZGVyZXIyfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKTtcblxuICAgIC8qKlxuICAgICAqINCt0LrQt9C10LzQv9C70Y/RgCB7QGxpbmsgUmVuZGVyZXIyfSDQtNC70Y8g0LHQtdC30L7Qv9Cw0YHQvdC+0Lkg0YDQsNCx0L7RgtGLINGBIERPTS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIgPSB0aGlzLnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIHNlbyDQv9Cw0YDQsNC80LXRgtGA0Ysg0L3QsCDQvtGB0L3QvtCy0LUg0YPQutCw0LfQsNC90L3QvtCz0L4g0YDQtdGB0YPRgNGB0LAuINCV0YHQu9C4INC60LDQutC+0LPQvi3RgtC+INGC0LXQs9CwINC90LXRgiwg0LHRg9C00LXRgiDRg9GB0YLQsNC90L7QstC70LXQvdC+INC30L3QsNGH0LXQvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzb3VyY2Ug0KDQtdGB0YPRgNGBINC90LAg0L7RgdC90L7QstC1INC60L7RgtC+0YDQvtCz0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LzQtdGC0LAt0YLQtdCz0LguXG4gICAgICogQHBhcmFtIGltZyDQmNC30L7QsdGA0LDQttC10L3QuNC1LiDQldGB0LvQuCDQvdC1INC/0YDQuNGI0LvQviwg0YLQviDQsdGD0LTQtdGCINGD0YHRgtCw0L3QvtCy0LvQtdC90L4g0LfQvdCw0YfQtdC90LjQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiAobG9nbyDQutC+0LzQv9Cw0L3QuNC4KS5cbiAgICAgKiBAcGFyYW0gcm9ib3RzINCh0L/QuNGB0L7QuiByb2JvdHMt0YLQtdCz0L7QsiDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiy4g0JfQvdCw0YfQtdC90LjQtSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiAoWydpbmRleCcsICdmb2xsb3cnXSkuXG4gICAgICogQHBhcmFtIHNjaGVtYU9yZ0RhdGEg0JTQsNC90L3Ri9C1IFNjaGVtYS5vcmcg0LTQu9GPINCy0YHRgtGA0LDQuNCy0LDQvdC40Y8g0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGcm9tUmVzb3VyY2UocmVzb3VyY2U/OiBTY0lTZW8sIGltZz86IHN0cmluZywgcm9ib3RzPzogUm9ib3RzVGFnVHlwZVtdLCBzY2hlbWFPcmdEYXRhPzogV2l0aENvbnRleHQ8VGhpbmc+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnJlcGxhY2VUZW1wbGF0ZXMocmVzb3VyY2U/LnRpdGxlID8/IHRoaXMuZGVmYXVsdFNlby50aXRsZSwgcmVzb3VyY2U/Lmluc3RhbmNlRGF0YSA/PyB7fSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5yZXBsYWNlVGVtcGxhdGVzKHJlc291cmNlPy5kZXNjcmlwdGlvbiA/PyB0aGlzLmRlZmF1bHRTZW8uZGVzY3JpcHRpb24sIHJlc291cmNlPy5pbnN0YW5jZURhdGEgPz8ge30pLFxuICAgICAgICAgICAga2V5d29yZHM6IHJlc291cmNlPy5rZXl3b3JkcyA/PyB0aGlzLmRlZmF1bHRTZW8ua2V5d29yZHMsXG4gICAgICAgICAgICBtZXRhOiByZXNvdXJjZT8ubWV0YSA/PyBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxzLnNpdGVVcmx9JHt0aGlzLnJvdXRlci51cmx9YDtcblxuICAgICAgICB0aGlzLnNldE1ldGFUYWdzKHVwZGF0ZWRSZXNvdXJjZS50aXRsZSwgdXBkYXRlZFJlc291cmNlLmRlc2NyaXB0aW9uLCB1cGRhdGVkUmVzb3VyY2Uua2V5d29yZHMsIHVwZGF0ZWRSZXNvdXJjZS5tZXRhLCByb2JvdHMgPz8gWydpbmRleCcsICdmb2xsb3cnXSk7XG4gICAgICAgIHRoaXMuc2V0T3BlbkdyYXBoTWV0YVRhZ3ModXBkYXRlZFJlc291cmNlLnRpdGxlLCB1cGRhdGVkUmVzb3VyY2UuZGVzY3JpcHRpb24sIHVybCwgaW1nID8/IHRoaXMudXJscy5sb2dvVXJsKTtcbiAgICAgICAgdGhpcy5zZXRDYW5vbmljYWxMaW5rKHVybCk7XG5cbiAgICAgICAgLy8g0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10LwgU2NoZW1hLm9yZyDQv9Cw0YDQsNC80LXRgtGA0YsuXG4gICAgICAgIHRoaXMuc2V0U2NoZW1hT3JnRGF0YSh0aGlzLnNjaGVtYU9yZ0ZhY3RvcnkubWVyZ2UoW3RoaXMuc2NoZW1hT3JnRmFjdG9yeS5nZW5lcmF0ZUZvck9yZ2FuaXphdGlvbigpLCAuLi4oc2NoZW1hT3JnRGF0YSA/IFtzY2hlbWFPcmdEYXRhXSA6IFtdKV0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8g0L/QsNGA0LDQvNC10YLRgNGLINGB0L4g0LfQvdCw0YfQtdC90LjQtdC8INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRpdGxlINCX0LDQs9C+0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSByb2JvdHMg0KHQv9C40YHQvtC6IHJvYm90cyDRgtC10LPQvtCyINC00LvRjyDRgdGC0YDQsNC90LjRhtGLLiDQl9C90LDRh9C10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIChbJ2luZGV4JywgJ2ZvbGxvdyddKS5cbiAgICAgKiBAcGFyYW0gc2NoZW1hT3JnRGF0YSDQlNCw0L3QvdGL0LUgU2NoZW1hLm9yZyDQtNC70Y8g0LLRgdGC0YDQsNC40LLQsNC90LjRjyDQvdCwINGB0YLRgNCw0L3QuNGG0LUuXG4gICAgICovXG4gICAgcHVibGljIHNldEJ5RGVmYXVsdCh0aXRsZT86IHN0cmluZywgcm9ib3RzPzogUm9ib3RzVGFnVHlwZVtdLCBzY2hlbWFPcmdEYXRhPzogV2l0aENvbnRleHQ8VGhpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0RnJvbVJlc291cmNlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBgJHt0aXRsZSA/PyB0aGlzLmRlZmF1bHRTZW8udGl0bGV9IC0gJHt0aGlzLmNvbXBhbnlJbmZvLm5hbWV9YCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGl0bGUgPyBgJHt0aXRsZX0sICR7dGhpcy5kZWZhdWx0U2VvLmRlc2NyaXB0aW9ufWAgOiB0aGlzLmRlZmF1bHRTZW8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy51cmxzLmxvZ29VcmwsXG4gICAgICAgICAgICByb2JvdHMgPz8gWydpbmRleCcsICdmb2xsb3cnXSxcbiAgICAgICAgICAgIHNjaGVtYU9yZ0RhdGFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBzZW8g0L/QsNGA0LDQvNC10YLRgNGLINGB0L4g0LfQvdCw0YfQtdC90LjQtdC8INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQt9C90LDRh9C10L3QuNC1IFwi0L3QtSDQuNC90LTQtdC60YHQuNGA0L7QstCw0YLRjFwiINC00LvRjyDQv9C+0LjRgdC60L7QstGL0YUg0YDQvtCx0L7RgtC+0LIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGl0bGUg0JfQsNCz0L7Qu9C+0LLQvtC6INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHVibGljIHNldEJ5RGVmYXVsdEFzTm9JbmRleGVkKHRpdGxlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0QnlEZWZhdWx0KHRpdGxlLCBbJ25vaW5kZXgnLCAnbm9mb2xsb3cnLCAnbm9hcmNoaXZlJ10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIHNlby3Qv9Cw0YDQsNC80LXRgtGA0Ysg0LTQu9GPINGD0LrQsNC30LDQvdC90L7Qs9C+INGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCU0LDQvdC90YvQtSDQvtCxINGN0LvQtdC80LXQvdGC0LUg0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKiBAcGFyYW0gdXJsUGF0aCBVcmwg0L/Rg9GC0Ywg0Log0Y3Qu9C10LzQtdC90YLRgyDQutCw0YLQsNC70L7Qs9CwLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRjdC70LXQvNC10L3RgtCwINC60LDRgtCw0LvQvtCz0LAg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICogQHBhcmFtIHNjaGVtYU9yZ0RhdGEg0JTQsNC90L3Ri9C1IFNjaGVtYS5vcmcg0Y3Qu9C10LzQtdC90YLQsCDQutCw0YLQsNC70L7Qs9CwXG4gICAgICovXG4gICAgcHVibGljIHNldEZvckNhdGFsb2dJdGVtKGl0ZW06IFNjSUNhdGFsb2dJdGVtPFNjSUNhdGVnb3J5IHwgU2NJVmlydHVhbENhdGVnb3J5PiwgdXJsUGF0aDogc3RyaW5nLCBzY2hlbWFPcmdEYXRhPzogV2l0aENvbnRleHQ8VGhpbmc+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7dXJsUGF0aC5yZXBsYWNlKCc6aWQnLCB0aGlzLmlkT3JTbHVnUGlwZS50cmFuc2Zvcm0oaXRlbSkudG9TdHJpbmcoKSl9YDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnJlcGxhY2VUZW1wbGF0ZXMoaXRlbS5zZW8/LnRpdGxlID8/IHRoaXMuY2F0YWxvZ0l0ZW1EZWZhdWx0U2VvLnRpdGxlID8/IGAke2l0ZW0ubmFtZX0gLSDQmtGD0L/QuNGC0Ywg0LIgJHt0aGlzLmNvbXBhbnlJbmZvLm5hbWV9YCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5yZXBsYWNlVGVtcGxhdGVzKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICAgICAgICAgIGl0ZW0uc2VvPy5kZXNjcmlwdGlvbiA/PyB0aGlzLmNhdGFsb2dJdGVtRGVmYXVsdFNlby5kZXNjcmlwdGlvbiA/PyBgJHtpdGVtLm5hbWV9IC0g0JrRg9C/0LjRgtGMINC/0L4g0LLRi9Cz0L7QtNC90YvQvCDRhtC10L3QsNC8INCyICR7dGhpcy5jb21wYW55SW5mby5uYW1lfWAsXG4gICAgICAgICAgICBpdGVtXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGtleXdvcmRzID0gaXRlbS5zZW8/LmtleXdvcmRzID8/IGAke2l0ZW0ubmFtZX0sICR7dGhpcy5jYXRhbG9nSXRlbURlZmF1bHRTZW8ua2V5d29yZHN9YDtcbiAgICAgICAgY29uc3QgbWV0YSA9IGl0ZW0uc2VvPy5tZXRhID8/IFtdO1xuXG4gICAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INGB0YLQsNC90LTQsNGA0YLQvdGL0LUgc2VvLdC/0LDRgNCw0LzQtdGC0YDRiywg0LIg0YLQvtC8INGH0LjRgdC70LUg0Lgg0LrQsNC90L7QvdC40YfQtdGB0LrRg9GOINGB0YHRi9C70LrRgy5cbiAgICAgICAgLy8g0KHRgtGA0LDQvdC40YbRiyDQv9Cw0LPQuNC90LDRhtC40Lgg0LjQvdC00LXQutGB0LjRgNGD0Y7RgtGB0Y8g0L7RgtC00LXQu9GM0L3Qviwg0L/QvtGN0YLQvtC80YMg0LrQsNC90L7QvdC40YfQtdGB0LrQsNGPINGB0YHRi9C70LrQsCDRgdC+0LTQtdGA0LbQuNGCINC90L7QvNC10YAg0YHRgtGA0LDQvdC40YbRiyDQuNC3IHF1ZXJ5LdC/0LDRgNCw0LzQtdGC0YDQvtCyLlxuICAgICAgICBjb25zdCBwYWdlID0gc2NQYXJzZVBhZ2VRdWVyeVBhcmFtZXRlcih0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpLnF1ZXJ5UGFyYW1NYXAuZ2V0KFNDX1BBR0VfUVVFUllfUEFSQU0pKTtcbiAgICAgICAgY29uc3QgY2Fub25pY2FsVXJsID0gcGFnZSA+IDEgPyBgJHt1cmx9PyR7U0NfUEFHRV9RVUVSWV9QQVJBTX09JHtwYWdlfWAgOiB1cmw7XG5cbiAgICAgICAgdGhpcy5zZXRNZXRhVGFncyh0aXRsZSwgZGVzY3JpcHRpb24sIGtleXdvcmRzLCBtZXRhLCBbJ2luZGV4JywgJ2ZvbGxvdyddKTtcbiAgICAgICAgdGhpcy5zZXRPcGVuR3JhcGhNZXRhVGFncyh0aXRsZSwgZGVzY3JpcHRpb24sIHVybCwgdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShpdGVtLmltYWdlLCB0cnVlKSk7XG4gICAgICAgIHRoaXMuc2V0Q2Fub25pY2FsTGluayhjYW5vbmljYWxVcmwpO1xuXG4gICAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8IFNjaGVtYS5vcmcg0L/QsNGA0LDQvNC10YLRgNGLLlxuICAgICAgICB0aGlzLnNldFNjaGVtYU9yZ0RhdGEodGhpcy5zY2hlbWFPcmdGYWN0b3J5Lm1lcmdlKFt0aGlzLnNjaGVtYU9yZ0ZhY3RvcnkuZ2VuZXJhdGVGb3JPcmdhbml6YXRpb24oKSwgLi4uKHNjaGVtYU9yZ0RhdGEgPyBbc2NoZW1hT3JnRGF0YV0gOiBbXSldKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNC80LXQvdGP0LXRgiDRiNCw0LHQu9C+0L3RiyDQsiDRgtC10LrRgdGC0LUg0L3QsCDQt9C90LDRh9C10L3QuNGPINC40Lcg0L7QsdGK0LXQutGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCDQotC10LrRgdGCINGBINGI0LDQsdC70L7QvdCw0LzQuC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VEYXRhINCe0LHRitC10LrRgiDRgSDQtNCw0L3QvdGL0LzQuCDQtNC70Y8g0LfQsNC80LXQvdGLLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSByZXBsYWNlVGVtcGxhdGVzKHRleHQ6IHN0cmluZywgaW5zdGFuY2VEYXRhOiBvYmplY3QpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKC9cXCRcXHsoW159XSspXFx9L2csIChfdGVtcGxhdGU6IHN0cmluZywgZmllbGRQYXRoVmFyaWFudHM6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGZpZWxkUGF0aFZhcmlhbnRzXG4gICAgICAgICAgICAgICAgLnNwbGl0KCd8JylcbiAgICAgICAgICAgICAgICAubWFwKChmaWVsZFBhdGgpID0+IGZpZWxkUGF0aC50cmltKCkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkUGF0aCkgPT4gZ2V0KGluc3RhbmNlRGF0YSwgZmllbGRQYXRoKSBhcyB1bmtub3duKVxuICAgICAgICAgICAgICAgIC5maW5kKChmaWVsZFZhbHVlKSA9PiAhaXNOaWwoZmllbGRWYWx1ZSkpO1xuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9uby1uZXN0ZWQtY29uZGl0aW9uYWxcbiAgICAgICAgICAgIHJldHVybiBpc05pbCh2YWx1ZSkgPyAnJyA6IGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0LLRgdC1IG1ldGEt0YLQtdCz0Lgg0YHRgtGA0LDQvdC40YbRiy4g0JXRgdC70Lgg0LrQsNC60L7QuS3Qu9C40LHQviDQuNC3INC/0LDRgNCw0LzQtdGC0YDQvtCyINC90LUg0YPQutCw0LfQsNC9LCDQtNC70Y8g0L3QtdCz0L4g0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YLRgdGPINC30L3QsNGH0LXQvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGl0bGUg0JfQsNCz0L7Qu9C+0LLQvtC6INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICogQHBhcmFtIGRlc2NyaXB0aW9uINCe0L/QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKiBAcGFyYW0ga2V5d29yZHMg0JrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICogQHBhcmFtIG1ldGEg0JzQsNGB0YHQuNCyINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0YUg0LfQvdCw0YfQtdC90LjQuSDQvNC10YLQsNGC0LXQs9C+0LIuXG4gICAgICogQHBhcmFtIHJvYm90cyDQodC/0LjRgdC+0Logcm9ib3RzINGC0LXQs9C+0LIg0LTQu9GPINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRNZXRhVGFncyhcbiAgICAgICAgdGl0bGU6IHN0cmluZyA9IHRoaXMuZGVmYXVsdFNlby50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyA9IHRoaXMuZGVmYXVsdFNlby5kZXNjcmlwdGlvbixcbiAgICAgICAga2V5d29yZHM6IHN0cmluZyA9IHRoaXMuZGVmYXVsdFNlby5rZXl3b3JkcyxcbiAgICAgICAgbWV0YTogU2NJU2VvWydtZXRhJ10gPSBbXSxcbiAgICAgICAgcm9ib3RzOiBSb2JvdHNUYWdUeXBlW10gPSBbJ2luZGV4JywgJ2ZvbGxvdyddXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcblxuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICdkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IGRlc2NyaXB0aW9uIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICdrZXl3b3JkcycsIGNvbnRlbnQ6IGtleXdvcmRzIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IG5hbWU6ICdyb2JvdHMnLCBjb250ZW50OiByb2JvdHMuam9pbignLCAnKSB9KTtcblxuICAgICAgICBtZXRhLmZvckVhY2goKHRhZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBuYW1lOiB0YWcubmFtZSwgY29udGVudDogdGFnLmNvbnRlbnQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCIE9wZW4gR3JhcGggbWV0YS3RgtC10LPQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZ1RpdGxlINCX0LDQs9C+0LvQvtCy0L7Qui5cbiAgICAgKiBAcGFyYW0gb2dEZXNjcmlwdGlvbiDQntC/0LjRgdCw0L3QuNC1LlxuICAgICAqIEBwYXJhbSBvZ1VybCBVcmwuXG4gICAgICogQHBhcmFtIG9nSW1nINCh0YHRi9C70LrQsCDQvdCwINC40LfQvtCx0YDQsNC20LXQvdC40LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRPcGVuR3JhcGhNZXRhVGFncyhvZ1RpdGxlOiBzdHJpbmcsIG9nRGVzY3JpcHRpb246IHN0cmluZywgb2dVcmw6IHN0cmluZywgb2dJbWc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6dHlwZScsIGNvbnRlbnQ6ICd3ZWJzaXRlJyB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnRpdGxlJywgY29udGVudDogb2dUaXRsZSB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmRlc2NyaXB0aW9uJywgY29udGVudDogb2dEZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnVybCcsIGNvbnRlbnQ6IG9nVXJsIH0pO1xuICAgICAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6aW1hZ2UnLCBjb250ZW50OiBvZ0ltZyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDRgtC10LMg0LrQsNC90L7QvdC40YfQtdGB0LrQvtC5INGB0YLRgNCw0L3QuNGG0YsgPGxpbmsgcmVsPVwiY2Fub25pY2FsXCIgaHJlZj1cIi4uLlwiIC8+LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBVUkwg0LrQvtGC0L7RgNGL0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCyINC60LDRh9C10YHRgtCy0LUg0YHRgdGL0LvQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Q2Fub25pY2FsTGluayh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyDQo9C00LDQu9GP0LXQvCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40LkgbGluayBjYW5vbmljYWwuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTGluayA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGlua1tyZWw9XCJjYW5vbmljYWxcIl0nKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdMaW5rPy5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGV4aXN0aW5nTGluay5wYXJlbnROb2RlLCBleGlzdGluZ0xpbmspO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0KHQvtC30LTQsNGR0Lwg0Lgg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0L3QvtCy0YvQuSDRgtC10LMuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnRcbiAgICAgICAgY29uc3QgbGluayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsaW5rLCAncmVsJywgJ2Nhbm9uaWNhbCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicsIHVybCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5oZWFkLCBsaW5rKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiBTY2hlbWEub3JnINC+0LHRitC10LrRgiDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg0JTQsNC90L3Ri9C1IFNjaGVtYS5vcmcg0LTQu9GPINCy0YHRgtGA0LDQuNCy0LDQvdC40Y8g0L3QsCDRgdGC0YDQsNC90LjRhtC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2NoZW1hT3JnRGF0YTxUIGV4dGVuZHMgVGhpbmc+KGRhdGE6IFdpdGhDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByb2plY3RBdHRyaWJ1dGVOYW1lID0gJ2RhdGEtc2Mtc2NoZW1hLW9yZyc7XG4gICAgICAgIC8vINCj0LTQsNC70Y/QtdC8INCy0YHQtSDRgNCw0L3QtdC1INGB0L7Qt9C00LDQvdC90YvQtSDRgdC60YDQuNC/0YLRiyBTY2hlbWEub3JnICjQv9C+INGD0L3QuNC60LDQu9GM0L3QvtC80YMg0LDRgtGA0LjQsdGD0YLRgyDQv9GA0L7QtdC60YLQsCkuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU2NyaXB0cyA9IHRoaXMuZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKGBzY3JpcHRbJHtwcm9qZWN0QXR0cmlidXRlTmFtZX1dYCk7XG4gICAgICAgIGV4aXN0aW5nU2NyaXB0cy5mb3JFYWNoKChleGlzdGluZ1NjcmlwdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nU2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGV4aXN0aW5nU2NyaXB0LnBhcmVudE5vZGUsIGV4aXN0aW5nU2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICBjb25zdCBzY3JpcHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShzY3JpcHQsICd0eXBlJywgJ2FwcGxpY2F0aW9uL2xkK2pzb24nKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoc2NyaXB0LCBwcm9qZWN0QXR0cmlidXRlTmFtZSwgJycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHNjcmlwdCwgdGhpcy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShKU09OLnN0cmluZ2lmeShkYXRhKSkpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuaGVhZCwgc2NyaXB0KTtcbiAgICB9XG59XG4iXX0=