@mediusinc/mng-commons-data-api 6.0.0-rc.5 → 6.0.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/openapi/api.service.mustache +1 -1
- package/openapi/apiInterface.mustache +1 -1
- package/openapi/configuration.mustache +1 -2
- package/openapi/modelGeneric.mustache +1 -1
- package/package.json +3 -7
- package/version-info.json +3 -3
- package/esm2022/index.mjs +0 -9
- package/esm2022/lib/helpers/get-all-params.mjs +0 -226
- package/esm2022/lib/models/api-version.model.mjs +0 -2
- package/esm2022/lib/models/request-params.model.mjs +0 -2
- package/esm2022/lib/models/schema.model.mjs +0 -2
- package/esm2022/lib/types/extract-get-all-types.type.mjs +0 -2
- package/esm2022/mediusinc-mng-commons-data-api.mjs +0 -5
- package/esm2022/tableview/filter/generic-filters.mjs +0 -127
- package/esm2022/tableview/helpers/lookup-get-all-create.mjs +0 -60
- package/esm2022/tableview/helpers/tableview-get-all-params-create.mjs +0 -67
- package/esm2022/tableview/index.mjs +0 -10
- package/esm2022/tableview/mediusinc-mng-commons-data-api-tableview.mjs +0 -5
- package/esm2022/tableview/schema/columns-from-schema.mjs +0 -179
- package/esm2022/tableview/schema/enum-from-schema.mjs +0 -23
- package/esm2022/tableview/schema/fields-from-schema.mjs +0 -377
- package/esm2022/tableview/schema/internal/common-from-schema.mjs +0 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{{>licenseInfo}}
|
|
2
2
|
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type */
|
|
4
4
|
|
|
5
5
|
import {Injectable} from '@angular/core';
|
|
6
6
|
import {HttpParams, HttpResponse} from '@angular/common/http';
|
|
@@ -105,8 +105,7 @@ export class {{configurationClassName}} {
|
|
|
105
105
|
* @return True if the given MIME is JSON, false otherwise.
|
|
106
106
|
*/
|
|
107
107
|
public isJsonMime(mime: string): boolean {
|
|
108
|
-
|
|
109
|
-
const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
|
|
108
|
+
const jsonMime = new RegExp('^(application/json|[^;/\\s]+/[^;/\\s]+[+]json)\\s*(;.*)?$', 'i');
|
|
110
109
|
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
|
|
111
110
|
}
|
|
112
111
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
|
|
3
3
|
export interface {{classname}}{{#allParents}}{{#-first}} extends {{/-first}}{{{.}}}{{^-last}}, {{/-last}}{{/allParents}} { {{>modelGenericAdditionalProperties}}
|
|
4
4
|
{{#vars}}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mediusinc/mng-commons-data-api",
|
|
3
|
-
"version": "6.0.0-rc.
|
|
3
|
+
"version": "6.0.0-rc.6",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/core": "^
|
|
6
|
-
"@mediusinc/mng-commons": "~6.0.0-rc.
|
|
5
|
+
"@angular/core": "^19.0.0",
|
|
6
|
+
"@mediusinc/mng-commons": "~6.0.0-rc.6"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"tslib": "^2.8.1"
|
|
@@ -20,14 +20,10 @@
|
|
|
20
20
|
},
|
|
21
21
|
".": {
|
|
22
22
|
"types": "./index.d.ts",
|
|
23
|
-
"esm2022": "./esm2022/mediusinc-mng-commons-data-api.mjs",
|
|
24
|
-
"esm": "./esm2022/mediusinc-mng-commons-data-api.mjs",
|
|
25
23
|
"default": "./fesm2022/mediusinc-mng-commons-data-api.mjs"
|
|
26
24
|
},
|
|
27
25
|
"./tableview": {
|
|
28
26
|
"types": "./tableview/index.d.ts",
|
|
29
|
-
"esm2022": "./esm2022/tableview/mediusinc-mng-commons-data-api-tableview.mjs",
|
|
30
|
-
"esm": "./esm2022/tableview/mediusinc-mng-commons-data-api-tableview.mjs",
|
|
31
27
|
"default": "./fesm2022/mediusinc-mng-commons-data-api-tableview.mjs"
|
|
32
28
|
}
|
|
33
29
|
}
|
package/version-info.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mediusinc/mng-commons-data-api",
|
|
3
|
-
"version": "6.0.0-rc.
|
|
3
|
+
"version": "6.0.0-rc.6",
|
|
4
4
|
"tag": null,
|
|
5
5
|
"distance": null,
|
|
6
|
-
"hash": "
|
|
6
|
+
"hash": "65c2b24",
|
|
7
7
|
"dirty": true,
|
|
8
8
|
"semver": null,
|
|
9
9
|
"buildTimestamp": null,
|
|
10
|
-
"raw": "6.0.0-rc.
|
|
10
|
+
"raw": "6.0.0-rc.6-65c2b24-dirty"
|
|
11
11
|
}
|
package/esm2022/index.mjs
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// helpers
|
|
2
|
-
export * from './lib/helpers/get-all-params';
|
|
3
|
-
// models
|
|
4
|
-
export * from './lib/models/api-version.model';
|
|
5
|
-
export * from './lib/models/request-params.model';
|
|
6
|
-
export * from './lib/models/schema.model';
|
|
7
|
-
// types
|
|
8
|
-
export * from './lib/types/extract-get-all-types.type';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsU0FBUztBQUNULGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDJCQUEyQixDQUFDO0FBRTFDLFFBQVE7QUFDUixjQUFjLHdDQUF3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycy9nZXQtYWxsLXBhcmFtcyc7XG5cbi8vIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2FwaS12ZXJzaW9uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9yZXF1ZXN0LXBhcmFtcy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsJztcblxuLy8gdHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzL2V4dHJhY3QtZ2V0LWFsbC10eXBlcy50eXBlJztcbiJdfQ==
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { CommonsInternalError, FilterMatchMode, dataListParamsFilterToUrlQuery, dataListParamsFiltersToUrlQuery, dataListParamsSortToUrlQuery, mapToDataList } from '@mediusinc/mng-commons/core';
|
|
2
|
-
/**
|
|
3
|
-
* Converts a filter match mode to its corresponding enum value.
|
|
4
|
-
*
|
|
5
|
-
* @param {string} matchMode - The filter match mode from data list filter to convert.
|
|
6
|
-
* @returns {GetAllParamsFilterMatchType} - The converted enum value.
|
|
7
|
-
* @throws {CommonsInternalError} - If the filter match mode is not supported.
|
|
8
|
-
*/
|
|
9
|
-
export function toGetAllParamsFilterMatchMode(matchMode) {
|
|
10
|
-
switch (matchMode) {
|
|
11
|
-
case FilterMatchMode.Equals:
|
|
12
|
-
return 'EQUALS';
|
|
13
|
-
case FilterMatchMode.NotEquals:
|
|
14
|
-
return 'NOT_EQUALS';
|
|
15
|
-
case FilterMatchMode.Contains:
|
|
16
|
-
return 'CONTAINS';
|
|
17
|
-
case FilterMatchMode.NotContains:
|
|
18
|
-
return 'NOT_CONTAINS';
|
|
19
|
-
case FilterMatchMode.In:
|
|
20
|
-
return 'IN';
|
|
21
|
-
case FilterMatchMode.NotIn:
|
|
22
|
-
return 'NOT_IN';
|
|
23
|
-
case FilterMatchMode.StartsWith:
|
|
24
|
-
return 'STARTS_WITH';
|
|
25
|
-
case FilterMatchMode.EndsWith:
|
|
26
|
-
return 'ENDS_WITH';
|
|
27
|
-
case FilterMatchMode.LessThan:
|
|
28
|
-
return 'LESS_THAN';
|
|
29
|
-
case FilterMatchMode.LessThanOrEqualTo:
|
|
30
|
-
return 'LESS_THAN_OR_EQUAL_TO';
|
|
31
|
-
case FilterMatchMode.GreaterThan:
|
|
32
|
-
return 'GREATER_THAN';
|
|
33
|
-
case FilterMatchMode.GreaterThanOrEqualTo:
|
|
34
|
-
return 'GREATER_THAN_OR_EQUAL_TO';
|
|
35
|
-
case FilterMatchMode.Between:
|
|
36
|
-
return 'BETWEEN';
|
|
37
|
-
case FilterMatchMode.Exists:
|
|
38
|
-
return 'EXISTS';
|
|
39
|
-
case FilterMatchMode.DoesNotExist:
|
|
40
|
-
return 'DOES_NOT_EXIST';
|
|
41
|
-
default:
|
|
42
|
-
throw new CommonsInternalError(`Filter match type '${matchMode}' not supported.`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function toGetAllParamsAsUrlQueryCommon(params) {
|
|
46
|
-
const res = {};
|
|
47
|
-
if (params.offset != null) {
|
|
48
|
-
res.offset = params.offset;
|
|
49
|
-
}
|
|
50
|
-
if (params.limit != null) {
|
|
51
|
-
res.limit = params.limit;
|
|
52
|
-
}
|
|
53
|
-
if (params.search != null && params.search !== '') {
|
|
54
|
-
let caseSensitivityOption = 'ci';
|
|
55
|
-
if (params.filters?.['global']?.caseSensitive === true) {
|
|
56
|
-
caseSensitivityOption = 'cs';
|
|
57
|
-
}
|
|
58
|
-
res.globalFilter = `${caseSensitivityOption}:${params.search}`;
|
|
59
|
-
}
|
|
60
|
-
if (Array.isArray(params.sort) && params.sort.length > 0) {
|
|
61
|
-
res.sort = dataListParamsSortToUrlQuery(params);
|
|
62
|
-
}
|
|
63
|
-
return res;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Converts given parameters of a DataListParams object into a get all request param object with values as URL query string representation.
|
|
67
|
-
*
|
|
68
|
-
* @param {DataListParams} params - The parameters to convert.
|
|
69
|
-
* @typeparam Sorts - The type of the sorting options for the data list.
|
|
70
|
-
* @typeparam Filters - The type of the filters for the data list.
|
|
71
|
-
* @returns {GetAllParamsUrlQueryType<Filters>} - Get all request param object with values as URL query string representation.
|
|
72
|
-
*/
|
|
73
|
-
export function toGetAllParamsAsUrlQuery(params) {
|
|
74
|
-
const res = toGetAllParamsAsUrlQueryCommon(params);
|
|
75
|
-
if (params.filters) {
|
|
76
|
-
Object.keys(params.filters).forEach(key => {
|
|
77
|
-
res[key] = dataListParamsFiltersToUrlQuery(params, key);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
return res;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Converts given parameters of a DataListParams object into a get all request param object with values as URL query string representation.
|
|
84
|
-
*
|
|
85
|
-
* @param {DataListParams} params - The parameters to convert.
|
|
86
|
-
* @param {FilterKey} filterKey - Property key for filter object.
|
|
87
|
-
* @typeparam Sorts - The type of the sorting options for the data list.
|
|
88
|
-
* @typeparam Filters - The type of the filters for the data list.
|
|
89
|
-
* @typeparam FilterKey - The type representing property key where filters will be put to.
|
|
90
|
-
* @returns {GetAllParamsUrlQueryWithFiltersInKeyType<FilterKey, Filters>} - Get all request param object with values as URL query string representation.
|
|
91
|
-
*/
|
|
92
|
-
export function toGetAllParamsAsUrlQueryWithFiltersInProperty(params, filterKey = 'filters') {
|
|
93
|
-
const res = toGetAllParamsAsUrlQueryCommon(params);
|
|
94
|
-
if (params.filters && Object.keys(params.filters).length > 0) {
|
|
95
|
-
res[filterKey] = {};
|
|
96
|
-
Object.keys(params.filters).forEach(key => {
|
|
97
|
-
res[filterKey][key] = dataListParamsFiltersToUrlQuery(params, key);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return res;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Converts given parameters of a DataListParams object into a get all request param object with values as objects for POST requests.
|
|
104
|
-
*
|
|
105
|
-
* @param {DataListParams} params - The parameters to convert.
|
|
106
|
-
* @typeparam Sorts - The type of the sorting options for the data list.
|
|
107
|
-
* @typeparam Filters - The type of the filters for the data list.
|
|
108
|
-
* @returns {GetAllParamsType<Sorts, Filters>} - Get all request param object with values as objects for POST requests.
|
|
109
|
-
*/
|
|
110
|
-
export function toGetAllParams(params) {
|
|
111
|
-
const res = {};
|
|
112
|
-
if (params.offset != null) {
|
|
113
|
-
res.offset = params.offset;
|
|
114
|
-
}
|
|
115
|
-
if (params.limit != null) {
|
|
116
|
-
res.limit = params.limit;
|
|
117
|
-
}
|
|
118
|
-
if (params.search != null) {
|
|
119
|
-
res.globalFilter = {
|
|
120
|
-
value: params.search
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
if (Array.isArray(params.sort) && params.sort.length > 0) {
|
|
124
|
-
res.sort = params.sort.map(s => ({
|
|
125
|
-
property: s.property,
|
|
126
|
-
direction: s.ascending === true || s.ascending == null ? 'ASCENDING' : 'DESCENDING'
|
|
127
|
-
}));
|
|
128
|
-
}
|
|
129
|
-
if (params.filters) {
|
|
130
|
-
Object.keys(params.filters).forEach(key => {
|
|
131
|
-
const paramsFilter = params.filters[key];
|
|
132
|
-
if (!paramsFilter.matchMode) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
let value = Array.isArray(paramsFilter.value) ? undefined : paramsFilter.value;
|
|
136
|
-
let values = Array.isArray(paramsFilter.value) ? paramsFilter.value : undefined;
|
|
137
|
-
if (paramsFilter.matchMode === FilterMatchMode.Exists || paramsFilter.matchMode === FilterMatchMode.DoesNotExist) {
|
|
138
|
-
value = undefined;
|
|
139
|
-
values = undefined;
|
|
140
|
-
}
|
|
141
|
-
else if (paramsFilter.matchMode === FilterMatchMode.In || paramsFilter.matchMode === FilterMatchMode.NotIn) {
|
|
142
|
-
if (values == null || values.length === 0) {
|
|
143
|
-
throw new CommonsInternalError(`Filter with mode ${paramsFilter.matchMode} must have values in array, but has ${values}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
else if (paramsFilter.matchMode === FilterMatchMode.Between) {
|
|
147
|
-
if (values == null || values.length !== 2) {
|
|
148
|
-
throw new CommonsInternalError(`Filter with mode ${paramsFilter.matchMode} must have 2 values in array, but has ${values}`);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else if (paramsFilter.value == null) {
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const caseSensitivity = paramsFilter.caseSensitive ? 'CASE_SENSITIVE' : paramsFilter.caseSensitive === false ? 'CASE_INSENSITIVE' : undefined;
|
|
155
|
-
const filter = {
|
|
156
|
-
filterMatchType: toGetAllParamsFilterMatchMode(paramsFilter.matchMode)
|
|
157
|
-
};
|
|
158
|
-
if (value != null) {
|
|
159
|
-
filter.value = value;
|
|
160
|
-
}
|
|
161
|
-
if (values != null && Array.isArray(values) && values.length > 0) {
|
|
162
|
-
filter.values = values;
|
|
163
|
-
}
|
|
164
|
-
if (caseSensitivity != null) {
|
|
165
|
-
filter.caseSensitivity = caseSensitivity;
|
|
166
|
-
}
|
|
167
|
-
res[key] = filter;
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
return res;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Converts DataListParams to sort query URL representation.
|
|
174
|
-
*
|
|
175
|
-
* @param {DataListParams} params - The params object with sort property to convert.
|
|
176
|
-
* @returns {string | undefined} - The formatted sort query URL param or undefined.
|
|
177
|
-
*/
|
|
178
|
-
export function toGetAllSortAsQueryUrl(params) {
|
|
179
|
-
return dataListParamsSortToUrlQuery(params);
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Converts a DataListFilter object to a query URL string.
|
|
183
|
-
*
|
|
184
|
-
* @param {DataListFilter} filter - The filter object from params to convert.
|
|
185
|
-
* @returns {string|undefined} - The formatted filter query URL param or undefined.
|
|
186
|
-
*/
|
|
187
|
-
export function toGetAllFilterAsQueryUrl(filter) {
|
|
188
|
-
return dataListParamsFilterToUrlQuery(filter);
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Executes the "getAll" on API service with request parameters.
|
|
192
|
-
* Get all is expected to be executed via GET method using params as URL queries.
|
|
193
|
-
*
|
|
194
|
-
* @param {Service} service - The API service instance.
|
|
195
|
-
* @param {Function} getAllFn - The "getAll" function on provided service instance.
|
|
196
|
-
* @param {Object} params - The data list params.
|
|
197
|
-
* @returns {Observable<<DataListResult<Item>>>} An observable with data list result.
|
|
198
|
-
*/
|
|
199
|
-
export function executeGetAll(service, getAllFn, params) {
|
|
200
|
-
return getAllFn.bind(service)(toGetAllParamsAsUrlQuery(params)).pipe(mapToDataList());
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Executes the "getAll" on API service with request parameters.
|
|
204
|
-
* Get all is expected to be executed via GET method using params as URL queries.
|
|
205
|
-
*
|
|
206
|
-
* @param {Service} service - The API service instance.
|
|
207
|
-
* @param {Function} getAllFn - The "getAll" function on provided service.
|
|
208
|
-
* @param {Object} params - The data list params.
|
|
209
|
-
* @returns {Observable<<DataListResult<Item>>>} An observable with data list result.
|
|
210
|
-
*/
|
|
211
|
-
export function apiServiceGetAll(service, fn, params) {
|
|
212
|
-
return service[fn](toGetAllParamsAsUrlQuery(params)).pipe(mapToDataList());
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Executes the "getAll" on API service with request parameters.
|
|
216
|
-
* Get all is expected to be executed via POST method using params as object in body of request.
|
|
217
|
-
*
|
|
218
|
-
* @param {Service} service - The API service instance.
|
|
219
|
-
* @param {Function} getAllFn - The "getAll" function on provided service instance.
|
|
220
|
-
* @param {Object} params - The data list params.
|
|
221
|
-
* @returns {Observable<<DataListResult<Item>>>} An observable with data list result.
|
|
222
|
-
*/
|
|
223
|
-
export function executeGetAllAsPost(service, getAllFn, params) {
|
|
224
|
-
return getAllFn.bind(service)(toGetAllParams(params)).pipe(mapToDataList());
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFsbC1wYXJhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlcnMvZ2V0LWFsbC1wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUVILG9CQUFvQixFQUlwQixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBVXJDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxTQUFpQjtJQUMzRCxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssZUFBZSxDQUFDLE1BQU07WUFDdkIsT0FBTyxRQUFRLENBQUM7UUFDcEIsS0FBSyxlQUFlLENBQUMsU0FBUztZQUMxQixPQUFPLFlBQVksQ0FBQztRQUN4QixLQUFLLGVBQWUsQ0FBQyxRQUFRO1lBQ3pCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLEtBQUssZUFBZSxDQUFDLFdBQVc7WUFDNUIsT0FBTyxjQUFjLENBQUM7UUFDMUIsS0FBSyxlQUFlLENBQUMsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQztRQUNoQixLQUFLLGVBQWUsQ0FBQyxLQUFLO1lBQ3RCLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssZUFBZSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxhQUFhLENBQUM7UUFDekIsS0FBSyxlQUFlLENBQUMsUUFBUTtZQUN6QixPQUFPLFdBQVcsQ0FBQztRQUN2QixLQUFLLGVBQWUsQ0FBQyxRQUFRO1lBQ3pCLE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLEtBQUssZUFBZSxDQUFDLGlCQUFpQjtZQUNsQyxPQUFPLHVCQUF1QixDQUFDO1FBQ25DLEtBQUssZUFBZSxDQUFDLFdBQVc7WUFDNUIsT0FBTyxjQUFjLENBQUM7UUFDMUIsS0FBSyxlQUFlLENBQUMsb0JBQW9CO1lBQ3JDLE9BQU8sMEJBQTBCLENBQUM7UUFDdEMsS0FB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QVUsd0JBQXdCLENBQUMsTUFBdUI7SUFDNUQsT0FBTyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUN6QixPQUFnQixFQUNoQixRQUFvSCxFQUNwSCxNQUFzQztJQUV0QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFRLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLE9BQWdCLEVBQ2hCLEVBQXlJLEVBQ3pJLE1BQXNDO0lBRXRDLE9BQVEsT0FBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBUSxDQUFDLENBQUM7QUFDOUYsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixPQUFnQixFQUNoQixRQUFtSCxFQUNuSCxNQUFzQztJQUV0QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBUSxDQUFDLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIERhdGFMaXN0RmlsdGVyLFxuICAgIERhdGFMaXN0UGFyYW1zLFxuICAgIERhdGFMaXN0UmVzdWx0LFxuICAgIEZpbHRlck1hdGNoTW9kZSxcbiAgICBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnksXG4gICAgZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeSxcbiAgICBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5LFxuICAgIG1hcFRvRGF0YUxpc3Rcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBHZXRBbGxQYXJhbXNGaWx0ZXJNYXRjaFR5cGUsXG4gICAgR2V0QWxsUGFyYW1zRmlsdGVyVHlwZSxcbiAgICBHZXRBbGxQYXJhbXNUeXBlLFxuICAgIEdldEFsbFBhcmFtc1VybFF1ZXJ5VHlwZSxcbiAgICBHZXRBbGxQYXJhbXNVcmxRdWVyeVdpdGhGaWx0ZXJzSW5LZXlUeXBlXG59IGZyb20gJy4uL21vZGVscy9yZXF1ZXN0LXBhcmFtcy5tb2RlbCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWx0ZXIgbWF0Y2ggbW9kZSB0byBpdHMgY29ycmVzcG9uZGluZyBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaE1vZGUgLSBUaGUgZmlsdGVyIG1hdGNoIG1vZGUgZnJvbSBkYXRhIGxpc3QgZmlsdGVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7R2V0QWxsUGFyYW1zRmlsdGVyTWF0Y2hUeXBlfSAtIFRoZSBjb252ZXJ0ZWQgZW51bSB2YWx1ZS5cbiAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSAtIElmIHRoZSBmaWx0ZXIgbWF0Y2ggbW9kZSBpcyBub3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HZXRBbGxQYXJhbXNGaWx0ZXJNYXRjaE1vZGUobWF0Y2hNb2RlOiBzdHJpbmcpOiBHZXRBbGxQYXJhbXNGaWx0ZXJNYXRjaFR5cGUge1xuICAgIHN3aXRjaCAobWF0Y2hNb2RlKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVxdWFsczpcbiAgICAgICAgICAgIHJldHVybiAnRVFVQUxTJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzOlxuICAgICAgICAgICAgcmV0dXJuICdOT1RfRVFVQUxTJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnM6XG4gICAgICAgICAgICByZXR1cm4gJ0NPTlRBSU5TJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90Q29udGFpbnM6XG4gICAgICAgICAgICByZXR1cm4gJ05PVF9DT05UQUlOUyc7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkluOlxuICAgICAgICAgICAgcmV0dXJuICdJTic7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLk5vdEluOlxuICAgICAgICAgICAgcmV0dXJuICdOT1RfSU4nO1xuICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoOlxuICAgICAgICAgICAgcmV0dXJuICdTVEFSVFNfV0lUSCc7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVuZHNXaXRoOlxuICAgICAgICAgICAgcmV0dXJuICdFTkRTX1dJVEgnO1xuICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbjpcbiAgICAgICAgICAgIHJldHVybiAnTEVTU19USEFOJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG86XG4gICAgICAgICAgICByZXR1cm4gJ0xFU1NfVEhBTl9PUl9FUVVBTF9UTyc7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuOlxuICAgICAgICAgICAgcmV0dXJuICdHUkVBVEVSX1RIQU4nO1xuICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbzpcbiAgICAgICAgICAgIHJldHVybiAnR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjpcbiAgICAgICAgICAgIHJldHVybiAnQkVUV0VFTic7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkV4aXN0czpcbiAgICAgICAgICAgIHJldHVybiAnRVhJU1RTJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0OlxuICAgICAgICAgICAgcmV0dXJuICdET0VTX05PVF9FWElTVCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCB0eXBlICcke21hdGNoTW9kZX0nIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnlDb21tb248U29ydHMsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+KHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+KTogR2V0QWxsUGFyYW1zVXJsUXVlcnlUeXBlPEZpbHRlcnM+IHtcbiAgICBjb25zdCByZXMgPSB7fSBhcyBHZXRBbGxQYXJhbXNVcmxRdWVyeVR5cGU8RmlsdGVycz47XG5cbiAgICBpZiAocGFyYW1zLm9mZnNldCAhPSBudWxsKSB7XG4gICAgICAgIHJlcy5vZmZzZXQgPSBwYXJhbXMub2Zmc2V0O1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmxpbWl0ICE9IG51bGwpIHtcbiAgICAgICAgcmVzLmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2VhcmNoICE9IG51bGwgJiYgcGFyYW1zLnNlYXJjaCAhPT0gJycpIHtcbiAgICAgICAgbGV0IGNhc2VTZW5zaXRpdml0eU9wdGlvbiA9ICdjaSc7XG5cbiAgICAgICAgaWYgKHBhcmFtcy5maWx0ZXJzPy5bJ2dsb2JhbCcgYXMgRmlsdGVyc10/LmNhc2VTZW5zaXRpdmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNhc2VTZW5zaXRpdml0eU9wdGlvbiA9ICdjcyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXMuZ2xvYmFsRmlsdGVyID0gYCR7Y2FzZVNlbnNpdGl2aXR5T3B0aW9ufToke3BhcmFtcy5zZWFyY2h9YDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMuc29ydCkgJiYgcGFyYW1zLnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICByZXMuc29ydCA9IGRhdGFMaXN0UGFyYW1zU29ydFRvVXJsUXVlcnkocGFyYW1zIGFzIERhdGFMaXN0UGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGdpdmVuIHBhcmFtZXRlcnMgb2YgYSBEYXRhTGlzdFBhcmFtcyBvYmplY3QgaW50byBhIGdldCBhbGwgcmVxdWVzdCBwYXJhbSBvYmplY3Qgd2l0aCB2YWx1ZXMgYXMgVVJMIHF1ZXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBjb252ZXJ0LlxuICogQHR5cGVwYXJhbSBTb3J0cyAtIFRoZSB0eXBlIG9mIHRoZSBzb3J0aW5nIG9wdGlvbnMgZm9yIHRoZSBkYXRhIGxpc3QuXG4gKiBAdHlwZXBhcmFtIEZpbHRlcnMgLSBUaGUgdHlwZSBvZiB0aGUgZmlsdGVycyBmb3IgdGhlIGRhdGEgbGlzdC5cbiAqIEByZXR1cm5zIHtHZXRBbGxQYXJhbXNVcmxRdWVyeVR5cGU8RmlsdGVycz59IC0gR2V0IGFsbCByZXF1ZXN0IHBhcmFtIG9iamVjdCB3aXRoIHZhbHVlcyBhcyBVUkwgcXVlcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HZXRBbGxQYXJhbXNBc1VybFF1ZXJ5PFNvcnRzLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55PihwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPik6IEdldEFsbFBhcmFtc1VybFF1ZXJ5VHlwZTxGaWx0ZXJzPiB7XG4gICAgY29uc3QgcmVzID0gdG9HZXRBbGxQYXJhbXNBc1VybFF1ZXJ5Q29tbW9uKHBhcmFtcyk7XG5cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zLmZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHJlc1trZXkgYXMgRmlsdGVyc10gPSBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5KHBhcmFtcywga2V5IGFzIEZpbHRlcnMpIGFzIGFueTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBwYXJhbWV0ZXJzIG9mIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGludG8gYSBnZXQgYWxsIHJlcXVlc3QgcGFyYW0gb2JqZWN0IHdpdGggdmFsdWVzIGFzIFVSTCBxdWVyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gY29udmVydC5cbiAqIEBwYXJhbSB7RmlsdGVyS2V5fSBmaWx0ZXJLZXkgLSBQcm9wZXJ0eSBrZXkgZm9yIGZpbHRlciBvYmplY3QuXG4gKiBAdHlwZXBhcmFtIFNvcnRzIC0gVGhlIHR5cGUgb2YgdGhlIHNvcnRpbmcgb3B0aW9ucyBmb3IgdGhlIGRhdGEgbGlzdC5cbiAqIEB0eXBlcGFyYW0gRmlsdGVycyAtIFRoZSB0eXBlIG9mIHRoZSBmaWx0ZXJzIGZvciB0aGUgZGF0YSBsaXN0LlxuICogQHR5cGVwYXJhbSBGaWx0ZXJLZXkgLSBUaGUgdHlwZSByZXByZXNlbnRpbmcgcHJvcGVydHkga2V5IHdoZXJlIGZpbHRlcnMgd2lsbCBiZSBwdXQgdG8uXG4gKiBAcmV0dXJucyB7R2V0QWxsUGFyYW1zVXJsUXVlcnlXaXRoRmlsdGVyc0luS2V5VHlwZTxGaWx0ZXJLZXksIEZpbHRlcnM+fSAtIEdldCBhbGwgcmVxdWVzdCBwYXJhbSBvYmplY3Qgd2l0aCB2YWx1ZXMgYXMgVVJMIHF1ZXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR2V0QWxsUGFyYW1zQXNVcmxRdWVyeVdpdGhGaWx0ZXJzSW5Qcm9wZXJ0eTxTb3J0cywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSwgRmlsdGVyS2V5IGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sID0gJ2ZpbHRlcnMnPihcbiAgICBwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPixcbiAgICBmaWx0ZXJLZXk6IEZpbHRlcktleSA9ICdmaWx0ZXJzJyBhcyBGaWx0ZXJLZXlcbik6IEdldEFsbFBhcmFtc1VybFF1ZXJ5V2l0aEZpbHRlcnNJbktleVR5cGU8RmlsdGVyS2V5LCBGaWx0ZXJzPiB7XG4gICAgY29uc3QgcmVzID0gdG9HZXRBbGxQYXJhbXNBc1VybFF1ZXJ5Q29tbW9uKHBhcmFtcykgYXMgR2V0QWxsUGFyYW1zVXJsUXVlcnlXaXRoRmlsdGVyc0luS2V5VHlwZTxGaWx0ZXJLZXksIEZpbHRlcnM+O1xuXG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzICYmIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIChyZXMgYXMgYW55KVtmaWx0ZXJLZXldID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAocmVzIGFzIGFueSlbZmlsdGVyS2V5XVtrZXkgYXMgRmlsdGVyc10gPSBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5KHBhcmFtcywga2V5IGFzIEZpbHRlcnMpIGFzIGFueTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBwYXJhbWV0ZXJzIG9mIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGludG8gYSBnZXQgYWxsIHJlcXVlc3QgcGFyYW0gb2JqZWN0IHdpdGggdmFsdWVzIGFzIG9iamVjdHMgZm9yIFBPU1QgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gY29udmVydC5cbiAqIEB0eXBlcGFyYW0gU29ydHMgLSBUaGUgdHlwZSBvZiB0aGUgc29ydGluZyBvcHRpb25zIGZvciB0aGUgZGF0YSBsaXN0LlxuICogQHR5cGVwYXJhbSBGaWx0ZXJzIC0gVGhlIHR5cGUgb2YgdGhlIGZpbHRlcnMgZm9yIHRoZSBkYXRhIGxpc3QuXG4gKiBAcmV0dXJucyB7R2V0QWxsUGFyYW1zVHlwZTxTb3J0cywgRmlsdGVycz59IC0gR2V0IGFsbCByZXF1ZXN0IHBhcmFtIG9iamVjdCB3aXRoIHZhbHVlcyBhcyBvYmplY3RzIGZvciBQT1NUIHJlcXVlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HZXRBbGxQYXJhbXM8U29ydHMsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+KHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+KTogR2V0QWxsUGFyYW1zVHlwZTxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IHJlcyA9IHt9IGFzIEdldEFsbFBhcmFtc1R5cGU8U29ydHMsIEZpbHRlcnM+O1xuXG4gICAgaWYgKHBhcmFtcy5vZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICByZXMub2Zmc2V0ID0gcGFyYW1zLm9mZnNldDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5saW1pdCAhPSBudWxsKSB7XG4gICAgICAgIHJlcy5saW1pdCA9IHBhcmFtcy5saW1pdDtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNlYXJjaCAhPSBudWxsKSB7XG4gICAgICAgIHJlcy5nbG9iYWxGaWx0ZXIgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcGFyYW1zLnNlYXJjaFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KSAmJiBwYXJhbXMuc29ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcy5zb3J0ID0gcGFyYW1zLnNvcnQubWFwKHMgPT4gKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBzLnByb3BlcnR5LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBzLmFzY2VuZGluZyA9PT0gdHJ1ZSB8fCBzLmFzY2VuZGluZyA9PSBudWxsID8gJ0FTQ0VORElORycgOiAnREVTQ0VORElORydcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuZmlsdGVycykge1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMuZmlsdGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zRmlsdGVyID0gcGFyYW1zLmZpbHRlcnMhW2tleSBhcyBGaWx0ZXJzXSE7XG4gICAgICAgICAgICBpZiAoIXBhcmFtc0ZpbHRlci5tYXRjaE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocGFyYW1zRmlsdGVyLnZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcmFtc0ZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHBhcmFtc0ZpbHRlci52YWx1ZSkgPyBwYXJhbXNGaWx0ZXIudmFsdWUgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IHBhcmFtc0ZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtc0ZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5JbiB8fCBwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciB3aXRoIG1vZGUgJHtwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlfSBtdXN0IGhhdmUgdmFsdWVzIGluIGFycmF5LCBidXQgaGFzICR7dmFsdWVzfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zRmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciB3aXRoIG1vZGUgJHtwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlfSBtdXN0IGhhdmUgMiB2YWx1ZXMgaW4gYXJyYXksIGJ1dCBoYXMgJHt2YWx1ZXN9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXNGaWx0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2FzZVNlbnNpdGl2aXR5ID0gcGFyYW1zRmlsdGVyLmNhc2VTZW5zaXRpdmUgPyAnQ0FTRV9TRU5TSVRJVkUnIDogcGFyYW1zRmlsdGVyLmNhc2VTZW5zaXRpdmUgPT09IGZhbHNlID8gJ0NBU0VfSU5TRU5TSVRJVkUnIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gPEdldEFsbFBhcmFtc0ZpbHRlclR5cGU8YW55Pj57XG4gICAgICAgICAgICAgICAgZmlsdGVyTWF0Y2hUeXBlOiB0b0dldEFsbFBhcmFtc0ZpbHRlck1hdGNoTW9kZShwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZXMgIT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWVzID0gdmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdml0eSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhc2VTZW5zaXRpdml0eSA9IGNhc2VTZW5zaXRpdml0eTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKHJlcyBhcyBhbnkpW2tleSBhcyBGaWx0ZXJzXSA9IGZpbHRlcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBEYXRhTGlzdFBhcmFtcyB0byBzb3J0IHF1ZXJ5IFVSTCByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1zIG9iamVjdCB3aXRoIHNvcnQgcHJvcGVydHkgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIGZvcm1hdHRlZCBzb3J0IHF1ZXJ5IFVSTCBwYXJhbSBvciB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0dldEFsbFNvcnRBc1F1ZXJ5VXJsKHBhcmFtcz86IERhdGFMaXN0UGFyYW1zPGFueSwgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRhdGFMaXN0UGFyYW1zU29ydFRvVXJsUXVlcnkocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIERhdGFMaXN0RmlsdGVyIG9iamVjdCB0byBhIHF1ZXJ5IFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdEZpbHRlcn0gZmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgZnJvbSBwYXJhbXMgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSAtIFRoZSBmb3JtYXR0ZWQgZmlsdGVyIHF1ZXJ5IFVSTCBwYXJhbSBvciB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0dldEFsbEZpbHRlckFzUXVlcnlVcmwoZmlsdGVyPzogRGF0YUxpc3RGaWx0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkoZmlsdGVyKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgXCJnZXRBbGxcIiBvbiBBUEkgc2VydmljZSB3aXRoIHJlcXVlc3QgcGFyYW1ldGVycy5cbiAqIEdldCBhbGwgaXMgZXhwZWN0ZWQgdG8gYmUgZXhlY3V0ZWQgdmlhIEdFVCBtZXRob2QgdXNpbmcgcGFyYW1zIGFzIFVSTCBxdWVyaWVzLlxuICpcbiAqIEBwYXJhbSB7U2VydmljZX0gc2VydmljZSAtIFRoZSBBUEkgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldEFsbEZuIC0gVGhlIFwiZ2V0QWxsXCIgZnVuY3Rpb24gb24gcHJvdmlkZWQgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBUaGUgZGF0YSBsaXN0IHBhcmFtcy5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPDxEYXRhTGlzdFJlc3VsdDxJdGVtPj4+fSBBbiBvYnNlcnZhYmxlIHdpdGggZGF0YSBsaXN0IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVHZXRBbGw8U2VydmljZSwgSXRlbSwgU29ydHMsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+KFxuICAgIHNlcnZpY2U6IFNlcnZpY2UsXG4gICAgZ2V0QWxsRm46IChyZXF1ZXN0UGFyYW1ldGVyczogR2V0QWxsUGFyYW1zVXJsUXVlcnlUeXBlPEZpbHRlcnM+KSA9PiBPYnNlcnZhYmxlPHtkYXRhPzogSXRlbVtdOyB0b3RhbENvdW50PzogbnVtYmVyfT4sXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz5cbik6IE9ic2VydmFibGU8RGF0YUxpc3RSZXN1bHQ8SXRlbT4+IHtcbiAgICByZXR1cm4gZ2V0QWxsRm4uYmluZChzZXJ2aWNlKSh0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnkocGFyYW1zKSkucGlwZShtYXBUb0RhdGFMaXN0PEl0ZW0+KCkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBcImdldEFsbFwiIG9uIEFQSSBzZXJ2aWNlIHdpdGggcmVxdWVzdCBwYXJhbWV0ZXJzLlxuICogR2V0IGFsbCBpcyBleHBlY3RlZCB0byBiZSBleGVjdXRlZCB2aWEgR0VUIG1ldGhvZCB1c2luZyBwYXJhbXMgYXMgVVJMIHF1ZXJpZXMuXG4gKlxuICogQHBhcmFtIHtTZXJ2aWNlfSBzZXJ2aWNlIC0gVGhlIEFQSSBzZXJ2aWNlIGluc3RhbmNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0QWxsRm4gLSBUaGUgXCJnZXRBbGxcIiBmdW5jdGlvbiBvbiBwcm92aWRlZCBzZXJ2aWNlLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBkYXRhIGxpc3QgcGFyYW1zLlxuICogQHJldHVybnMge09ic2VydmFibGU8PERhdGFMaXN0UmVzdWx0PEl0ZW0+Pj59IEFuIG9ic2VydmFibGUgd2l0aCBkYXRhIGxpc3QgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpU2VydmljZUdldEFsbDxTZXJ2aWNlLCBJdGVtLCBTb3J0cywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueT4oXG4gICAgc2VydmljZTogU2VydmljZSxcbiAgICBmbjogQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlPFNlcnZpY2UsIEdldEFsbFBhcmFtc1VybFF1ZXJ5VHlwZTxGaWx0ZXJzPiwgT2JzZXJ2YWJsZTx7ZGF0YT86IEl0ZW1bXTsgdG90YWxDb3VudD86IG51bWJlcn0+PixcbiAgICBwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPlxuKTogT2JzZXJ2YWJsZTxEYXRhTGlzdFJlc3VsdDxJdGVtPj4ge1xuICAgIHJldHVybiAoc2VydmljZSBhcyBhbnkpW2ZuXSh0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnkocGFyYW1zKSkucGlwZShtYXBUb0RhdGFMaXN0PEl0ZW0+KCkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBcImdldEFsbFwiIG9uIEFQSSBzZXJ2aWNlIHdpdGggcmVxdWVzdCBwYXJhbWV0ZXJzLlxuICogR2V0IGFsbCBpcyBleHBlY3RlZCB0byBiZSBleGVjdXRlZCB2aWEgUE9TVCBtZXRob2QgdXNpbmcgcGFyYW1zIGFzIG9iamVjdCBpbiBib2R5IG9mIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtTZXJ2aWNlfSBzZXJ2aWNlIC0gVGhlIEFQSSBzZXJ2aWNlIGluc3RhbmNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0QWxsRm4gLSBUaGUgXCJnZXRBbGxcIiBmdW5jdGlvbiBvbiBwcm92aWRlZCBzZXJ2aWNlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBkYXRhIGxpc3QgcGFyYW1zLlxuICogQHJldHVybnMge09ic2VydmFibGU8PERhdGFMaXN0UmVzdWx0PEl0ZW0+Pj59IEFuIG9ic2VydmFibGUgd2l0aCBkYXRhIGxpc3QgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUdldEFsbEFzUG9zdDxTZXJ2aWNlLCBJdGVtLCBTb3J0cywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueT4oXG4gICAgc2VydmljZTogU2VydmljZSxcbiAgICBnZXRBbGxGbjogKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRBbGxQYXJhbXNUeXBlPFNvcnRzLCBGaWx0ZXJzPikgPT4gT2JzZXJ2YWJsZTx7ZGF0YT86IEl0ZW1bXTsgdG90YWxDb3VudD86IG51bWJlcn0+LFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+XG4pOiBPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PEl0ZW0+PiB7XG4gICAgcmV0dXJuIGdldEFsbEZuLmJpbmQoc2VydmljZSkodG9HZXRBbGxQYXJhbXMocGFyYW1zKSkucGlwZShtYXBUb0RhdGFMaXN0PEl0ZW0+KCkpO1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXZlcnNpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21vZGVscy9hcGktdmVyc2lvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBcGlWZXJzaW9uIHtcbiAgICBhcHBOYW1lPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgaW5mb0VtYWlsPzogc3RyaW5nO1xuICAgIGluZm9Vcmw/OiBzdHJpbmc7XG4gICAgbGljZW5zZUluZm8/OiBzdHJpbmc7XG4gICAgbGljZW5zZVVybD86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wYXJhbXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21vZGVscy9yZXF1ZXN0LXBhcmFtcy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWZhdWx0IChleHBlY3RlZCkgdHlwZSB3aXRob3V0IGZpbHRlcnMsIHdoaWNoIGFyZSBcImR5bmFtaWNcIiBrZXlzLlxuICovXG5leHBvcnQgdHlwZSBHZXRBbGxQYXJhbXNEZWZhdWx0V29GaWx0ZXJzVHlwZTxTb3J0ID0gR2V0QWxsUGFyYW1zU29ydFR5cGVbXSB8IHN0cmluZywgR2xvYmFsRmlsdGVyID0gR2V0QWxsUGFyYW1zR2xvYmFsRmlsdGVyVHlwZSB8IHN0cmluZz4gPSB7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIGdsb2JhbEZpbHRlcj86IEdsb2JhbEZpbHRlcjtcbiAgICBzb3J0PzogU29ydDtcbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc29ydCBkaXJlY3Rpb24gdHlwZSBmb3IgYSBnZXQgYWxsIHJlcXVlc3QgcGFyYW1zIChhc2NlbmRpbmcgb3IgZGVzY2VuZGluZykuXG4gKi9cbmV4cG9ydCB0eXBlIEdldEFsbFBhcmFtc1NvcnREaXJlY3Rpb25UeXBlID0gJ0FTQ0VORElORycgfCAnREVTQ0VORElORyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc29ydCB0eXBlIGZvciBhIGdldCBhbGwgcmVxdWVzdCBwYXJhbXMuXG4gKlxuICogQHR5cGVwYXJhbSBQcm9wZXJ0eSBUaGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgdG8gc29ydCBieS5cbiAqIEB0eXBlcGFyYW0gRGlyZWN0aW9uIFRoZSB0eXBlIG9mIHRoZSBzb3J0IGRpcmVjdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0QWxsUGFyYW1zU29ydFR5cGU8UHJvcGVydHkgPSBzdHJpbmcsIERpcmVjdGlvbiA9IEdldEFsbFBhcmFtc1NvcnREaXJlY3Rpb25UeXBlPiA9IHtcbiAgICBwcm9wZXJ0eTogUHJvcGVydHk7XG4gICAgZGlyZWN0aW9uOiBEaXJlY3Rpb247XG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHBvc3NpYmxlIG1hdGNoIHR5cGVzIGZvciBmaWx0ZXJzIGluIGdldCBhbGwgcmVxdWVzdCBwYXJhbXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdldEFsbFBhcmFtc0ZpbHRlck1hdGNoVHlwZSA9XG4gICAgfCAnRVFVQUxTJ1xuICAgIHwgJ05PVF9FUVVBTFMnXG4gICAgfCAnQkVUV0VFTidcbiAgICB8ICdDT05UQUlOUydcbiAgICB8ICdOT1RfQ09OVEFJTlMnXG4gICAgfCAnU1RBUlRTX1dJVEgnXG4gICAgfCAnRU5EU19XSVRIJ1xuICAgIHwgJ0lOJ1xuICAgIHwgJ05PVF9JTidcbiAgICB8ICdMRVNTX1RIQU4nXG4gICAgfCAnTEVTU19USEFOX09SX0VRVUFMX1RPJ1xuICAgIHwgJ0dSRUFURVJfVEhBTidcbiAgICB8ICdHUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE8nXG4gICAgfCAnRVhJU1RTJ1xuICAgIHwgJ0RPRVNfTk9UX0VYSVNUJztcblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIHBvc3NpYmxlIGNhc2Ugc2Vuc2l0aXZpdHkgZm9yIGZpbHRlciBpbiBnZXQgYWxsIHJlcXVlc3QgcGFyYW1zLlxuICovXG5leHBvcnQgdHlwZSBHZXRBbGxQYXJhbXNGaWx0ZXJDYXNlU2Vuc2l0aXZpdHlUeXBlID0gJ0NBU0VfU0VOU0lUSVZFJyB8ICdDQVNFX0lOU0VOU0lUSVZFJztcblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIGdsb2JhbCBmaWx0ZXIgKHNlYXJjaCkgaW4gZ2V0IGFsbCByZXF1ZXN0IHBhcmFtcy5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0QWxsUGFyYW1zR2xvYmFsRmlsdGVyVHlwZTxDYXNlU2Vuc2l0aXZpdHkgPSBHZXRBbGxQYXJhbXNGaWx0ZXJDYXNlU2Vuc2l0aXZpdHlUeXBlPiA9IHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGNhc2VTZW5zaXRpdml0eT86IENhc2VTZW5zaXRpdml0eTtcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBmaWx0ZXJzIGluIGdldCBhbGwgcmVxdWVzdCBwYXJhbXMuXG4gKi9cbmV4cG9ydCB0eXBlIEdldEFsbFBhcmFtc0ZpbHRlcnNUeXBlPEZpbHRlclR5cGUsIEZpbHRlclByb3BlcnRpZXMgZXh0ZW5kcyBrZXlvZiBhbnk+ID0ge1xuICAgIFtQIGluIEZpbHRlclByb3BlcnRpZXNdPzogRmlsdGVyVHlwZTtcbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZpbHRlciB0eXBlIGZvciBnZXQgYWxsIHJlcXVlc3QgcGFyYW1zLlxuICovXG5leHBvcnQgdHlwZSBHZXRBbGxQYXJhbXNGaWx0ZXJUeXBlPFZhbHVlLCBDYXNlU2Vuc2l0aXZpdHkgPSBHZXRBbGxQYXJhbXNGaWx0ZXJDYXNlU2Vuc2l0aXZpdHlUeXBlLCBNYXRjaFR5cGUgPSBHZXRBbGxQYXJhbXNGaWx0ZXJNYXRjaFR5cGU+ID0ge1xuICAgIHZhbHVlPzogVmFsdWU7XG4gICAgdmFsdWVzPzogQXJyYXk8VmFsdWU+O1xuICAgIGNhc2VTZW5zaXRpdml0eT86IENhc2VTZW5zaXRpdml0eTtcbiAgICBmaWx0ZXJNYXRjaFR5cGU6IE1hdGNoVHlwZTtcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIGdldCBhbGwgcGFyYW1zIHdpdGggdmFsdWVzIGFzIG9iamVjdHMgKGZvciBQT1NUIHJlcXVlc3RzKS5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0QWxsUGFyYW1zVHlwZTxTb3J0cyA9IHN0cmluZywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4gPSBHZXRBbGxQYXJhbXNEZWZhdWx0V29GaWx0ZXJzVHlwZTxHZXRBbGxQYXJhbXNTb3J0VHlwZTxTb3J0cz5bXSwgR2V0QWxsUGFyYW1zR2xvYmFsRmlsdGVyVHlwZT4gJlxuICAgIEdldEFsbFBhcmFtc0ZpbHRlcnNUeXBlPEdldEFsbFBhcmFtc0ZpbHRlclR5cGU8YW55PiwgRmlsdGVycz47XG5cbi8qKlxuICogRGVzY3JpYmVzIGdldCBhbGwgcGFyYW1zIHdpdGggdmFsdWVzIGFzIFVSTCBxdWVyaWVzIChmb3IgR0VUIHJlcXVlc3RzKS5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0QWxsUGFyYW1zVXJsUXVlcnlUeXBlPEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGU8c3RyaW5nLCBzdHJpbmc+ICYgR2V0QWxsUGFyYW1zRmlsdGVyc1R5cGU8c3RyaW5nLCBGaWx0ZXJzPjtcblxuLyoqXG4gKiBEZXNjcmliZXMgZ2V0IGFsbCBwYXJhbXMgd2l0aCB2YWx1ZXMgYXMgVVJMIHF1ZXJpZXMgKGZvciBHRVQgcmVxdWVzdHMpIHdoZXJlIGZpbHRlcnMgYXJlIHBsYWNlcyBhcyBvYmplY3QgdW5kZXIgcm9vdCB7RmlsdGVyS2V5fSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0QWxsUGFyYW1zVXJsUXVlcnlXaXRoRmlsdGVyc0luS2V5VHlwZTxGaWx0ZXJLZXkgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGU8c3RyaW5nLCBzdHJpbmc+ICYge1xuICAgIFtrZXkgaW4gRmlsdGVyS2V5XT86IEdldEFsbFBhcmFtc0ZpbHRlcnNUeXBlPHN0cmluZywgRmlsdGVycz47XG59O1xuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNjaGVtYU1vZGVsPE1vZGVsID0gYW55PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHByb3BlcnRpZXM6IFJlY29yZDxrZXlvZiBNb2RlbCwgU2NoZW1hUHJvcGVydHk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUVudW08RW51bVR5cGU+IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWVzOiBFbnVtVHlwZVtdO1xuICAgIGNvbnN0YW50czogc3RyaW5nW107XG4gICAgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYVByb3BlcnR5IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgb2JqZWN0VHlwZT86IHN0cmluZztcbiAgICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcbiAgICBtaW5pbXVtPzogbnVtYmVyO1xuICAgIG1heGltdW0/OiBudW1iZXI7XG4gICAgZXhjbHVzaXZlTWluaW11bT86IGJvb2xlYW47XG4gICAgZXhjbHVzaXZlTWF4aW11bT86IGJvb2xlYW47XG4gICAgaXNJbnRlZ2VyPzogYm9vbGVhbjtcbiAgICBwYXR0ZXJuPzogc3RyaW5nO1xuICAgIG1heEl0ZW1zPzogbnVtYmVyO1xuICAgIG1pbkl0ZW1zPzogbnVtYmVyO1xuICAgIGVudW1Nb2RlbD86IGFueTtcbiAgICBlbnVtTmFtZT86IHN0cmluZztcbiAgICBpc0VtYWlsPzogYm9vbGVhbjtcbiAgICBpc1Bhc3N3b3JkPzogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdC1nZXQtYWxsLXR5cGVzLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3R5cGVzL2V4dHJhY3QtZ2V0LWFsbC10eXBlcy50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NsYXNzRnVuY3Rpb25LZXlzV2l0aEFueUFyZ3NBbmRSZXR1cm5UeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge0dldEFsbFBhcmFtc0RlZmF1bHRXb0ZpbHRlcnNUeXBlLCBHZXRBbGxQYXJhbXNTb3J0VHlwZX0gZnJvbSAnLi4vbW9kZWxzL3JlcXVlc3QtcGFyYW1zLm1vZGVsJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBgR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGVgIGNsYXNzIC0gZXhjbHVkZXMgb2Zmc2V0LCBsaW1pdCwgc2VhcmNoIGFuZCBzb3J0IHByb3BlcnRpZXMuXG4gKiBBbGwgb3RoZXIgcHJvcGVydGllcyBhcmUgZXhwZWN0ZWQgdG8gYmUgZmlsdGVycy5cbiAqXG4gKiBAdHlwZXBhcmFtIFJlcXVlc3QgLSBUaGUgdHlwZSBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHRoZSBleHRlbmRlZCBHZXRBbGxQYXJhbXNEZWZhdWx0V29GaWx0ZXJzVHlwZSBvYmplY3QuXG4gKi9cbmV4cG9ydCB0eXBlIEV4dHJhY3RHZXRBbGxQYXJhbXNGaWx0ZXJUeXBlPFJlcXVlc3QgZXh0ZW5kcyBHZXRBbGxQYXJhbXNEZWZhdWx0V29GaWx0ZXJzVHlwZT4gPSBSZXF1ZXN0IGV4dGVuZHMgR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGVcbiAgICA/IGtleW9mIE9taXQ8UmVxdWVzdCwgJ29mZnNldCcgfCAnbGltaXQnIHwgJ2dsb2JhbEZpbHRlcicgfCAnc29ydCc+XG4gICAgOiBuZXZlcjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBgR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGVgIGNsYXNzIC0gZXh0cmFjdHMgYWxsb3dlZCBzb3J0IHByb3BlcnRpZXMgKHVzdWFsbHkgYW4gZW51bSkgb24gcHJvcGVydHkga2V5IHdpdGhpbiBhcnJheSB0eXBlLlxuICpcbiAqIEB0eXBlcGFyYW0gUmVxdWVzdCAtIFRoZSB0eXBlIHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGV4dGVuZGVkIEdldEFsbFBhcmFtc0RlZmF1bHRXb0ZpbHRlcnNUeXBlIG9iamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgRXh0cmFjdEdldEFsbFBhcmFtc1NvcnRUeXBlPFJlcXVlc3QgZXh0ZW5kcyBHZXRBbGxQYXJhbXNEZWZhdWx0V29GaWx0ZXJzVHlwZTxHZXRBbGxQYXJhbXNTb3J0VHlwZTxhbnksIGFueT5bXSB8IHN0cmluZywgYW55Pj4gPVxuICAgIE5vbk51bGxhYmxlPFJlcXVlc3RbJ3NvcnQnXT4gZXh0ZW5kcyBBcnJheTxpbmZlciBVPiB8IHN0cmluZyA/ICgncHJvcGVydHknIGV4dGVuZHMga2V5b2YgVSA/IE5vbk51bGxhYmxlPFVbJ3Byb3BlcnR5J10+IDogbmV2ZXIpIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIEdldEFsbEh0dHBSZXNwb25zZVR5cGU8TW9kZWw+ID0ge2RhdGE/OiBBcnJheTxNb2RlbD47IHRvdGFsQ291bnQ/OiBudW1iZXJ9IHwgSHR0cFJlc3BvbnNlPHtkYXRhPzogQXJyYXk8TW9kZWw+OyB0b3RhbENvdW50PzogbnVtYmVyfT47XG5cbmV4cG9ydCB0eXBlIEFwaVNlcnZpY2VHZXRBbGxGaWx0ZXJUeXBlPFxuICAgIFNlcnZpY2UsXG4gICAgTW9kZWwsXG4gICAgRm4gZXh0ZW5kcyBDbGFzc0Z1bmN0aW9uS2V5c1dpdGhBbnlBcmdzQW5kUmV0dXJuVHlwZTxTZXJ2aWNlLCBPYnNlcnZhYmxlPEdldEFsbEh0dHBSZXNwb25zZVR5cGU8TW9kZWw+Pj5cbj4gPSBTZXJ2aWNlW0ZuXSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gTm9uTnVsbGFibGU8UGFyYW1ldGVyczxTZXJ2aWNlW0ZuXT5bMF0+IDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RTZXJ2aWNlR2V0QWxsRGF0YVR5cGU8U2VydmljZSwgRm4gZXh0ZW5kcyBrZXlvZiBTZXJ2aWNlPiA9IFNlcnZpY2VbRm5dIGV4dGVuZHMgKFxuICAgIC4uLmFyZ3M6IGFueVtdXG4pID0+IE9ic2VydmFibGU8e2RhdGE/OiBBcnJheTxpbmZlciBNb2RlbD59IHwgSHR0cFJlc3BvbnNlPHtkYXRhPzogQXJyYXk8aW5mZXIgTW9kZWw+fT4+XG4gICAgPyBNb2RlbFxuICAgIDogbmV2ZXI7XG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLWRhdGEtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lZGl1c2luYy1tbmctY29tbW9ucy1kYXRhLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { toObservable, valueToDefined } from '@mediusinc/mng-commons/core';
|
|
3
|
-
import { FilterTypeEnum } from '@mediusinc/mng-commons/filter';
|
|
4
|
-
import { lookupDataProvider } from '@mediusinc/mng-commons/form/api';
|
|
5
|
-
/**
|
|
6
|
-
* Maps a property type to its corresponding filter type enum and applies default
|
|
7
|
-
* filter options if no custom options are provided. If the property type is not recognized,
|
|
8
|
-
* it returns a filter type value of null.
|
|
9
|
-
*
|
|
10
|
-
* @param propertyType - The property type to convert.
|
|
11
|
-
* @param [opts] - The custom options to use for conversion.
|
|
12
|
-
*/
|
|
13
|
-
export function convertPropertyTypeToFilterType(propertyType, opts) {
|
|
14
|
-
let filterType;
|
|
15
|
-
let returnOpts;
|
|
16
|
-
switch (propertyType?.toLowerCase()) {
|
|
17
|
-
case 'date':
|
|
18
|
-
filterType = FilterTypeEnum.Date;
|
|
19
|
-
returnOpts = opts?.dateOpts
|
|
20
|
-
? opts.dateOpts
|
|
21
|
-
: {
|
|
22
|
-
displayFormat: 'dd.MM.YYYY',
|
|
23
|
-
applyFromDisplayFormat: true
|
|
24
|
-
};
|
|
25
|
-
break;
|
|
26
|
-
case 'datetime':
|
|
27
|
-
case 'date_time':
|
|
28
|
-
case 'date-time':
|
|
29
|
-
filterType = FilterTypeEnum.Date;
|
|
30
|
-
returnOpts = opts?.dateOpts ? opts.dateOpts : { displayFormat: 'dd.MM.YYYY HH:mm', applyFromDisplayFormat: true };
|
|
31
|
-
break;
|
|
32
|
-
case 'string':
|
|
33
|
-
case 'text':
|
|
34
|
-
filterType = FilterTypeEnum.String;
|
|
35
|
-
break;
|
|
36
|
-
case 'enum':
|
|
37
|
-
filterType = FilterTypeEnum.LookupEnum;
|
|
38
|
-
break;
|
|
39
|
-
case 'boolean':
|
|
40
|
-
case 'bool':
|
|
41
|
-
filterType = FilterTypeEnum.Boolean;
|
|
42
|
-
break;
|
|
43
|
-
case 'float':
|
|
44
|
-
case 'double':
|
|
45
|
-
case 'decimal':
|
|
46
|
-
filterType = FilterTypeEnum.Number;
|
|
47
|
-
returnOpts = opts?.numberOpts ? opts.numberOpts : { displayFormat: '1.1-30' };
|
|
48
|
-
break;
|
|
49
|
-
case 'integer':
|
|
50
|
-
case 'int':
|
|
51
|
-
case 'long':
|
|
52
|
-
filterType = FilterTypeEnum.Number;
|
|
53
|
-
returnOpts = opts?.numberOpts;
|
|
54
|
-
break;
|
|
55
|
-
default:
|
|
56
|
-
filterType = null;
|
|
57
|
-
}
|
|
58
|
-
return { filterType, opts: returnOpts };
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Converts an object of properties and types into an array of filterable properties with the corresponding filter types and options.
|
|
62
|
-
* @param properties - The object containing the properties.
|
|
63
|
-
* @param [opts] - Custom filter options.
|
|
64
|
-
*/
|
|
65
|
-
export function convertPropertyToFilterGenericProperties(properties, opts) {
|
|
66
|
-
return Object.keys(properties).reduce((filterableProperties, key) => {
|
|
67
|
-
const { filterType, opts: filterOpts } = convertPropertyTypeToFilterType(properties[key], opts);
|
|
68
|
-
if (filterType !== null) {
|
|
69
|
-
filterableProperties.push({
|
|
70
|
-
property: key,
|
|
71
|
-
type: filterType,
|
|
72
|
-
opts: filterOpts
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
return filterableProperties;
|
|
76
|
-
}, []);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Maps an Observable of properties to filter generic properties.
|
|
80
|
-
*/
|
|
81
|
-
export function mapToFilterGenericProperties(opts) {
|
|
82
|
-
return function (source) {
|
|
83
|
-
return new Observable(subscriber => {
|
|
84
|
-
return source.subscribe({
|
|
85
|
-
next(value) {
|
|
86
|
-
subscriber.next(convertPropertyToFilterGenericProperties(value, opts));
|
|
87
|
-
},
|
|
88
|
-
error: err => {
|
|
89
|
-
subscriber.error(err);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Creates a data provider for generic filter properties that can be used with the TableDescriptor's generic filter functionality.
|
|
97
|
-
*
|
|
98
|
-
* @param serviceType - The service to fetch the properties from.
|
|
99
|
-
* @param lookupFn - The name of the service function to call for properties or function impl returning properties.
|
|
100
|
-
* @param [opts] - Optional custom options for filter descriptors, such as date and number formatting.
|
|
101
|
-
*/
|
|
102
|
-
export function filterPropertyLookupProvider(serviceType, lookupFn, opts) {
|
|
103
|
-
if (typeof lookupFn === 'function') {
|
|
104
|
-
return lookupDataProvider({ service: serviceType }).withLookup((_, service) => toObservable(lookupFn(service)).pipe(mapToFilterGenericProperties(opts)));
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
return lookupDataProvider({ service: serviceType }).withLookup((_, service) => service[lookupFn]().pipe(mapToFilterGenericProperties(opts)));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Creates a data provider for generic filter value suggestions that can be used with the TableDescriptor's generic filter functionality.
|
|
112
|
-
*
|
|
113
|
-
* @param service - The service to use for suggesting filter values.
|
|
114
|
-
* @param lookupFn - The function name of the service to call for suggestion or function impl returning suggestions.
|
|
115
|
-
*/
|
|
116
|
-
export function filterValueSuggestionLookupProvider(service, lookupFn) {
|
|
117
|
-
if (typeof lookupFn === 'function') {
|
|
118
|
-
return lookupDataProvider({ service }).withLookup((params, service, search) => lookupFn(service, valueToDefined(params?.filters?.['field']?.value), search));
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
return lookupDataProvider({ service }).withLookup((params, service, search) => service[lookupFn]({
|
|
122
|
-
field: valueToDefined(params?.filters?.['field']?.value).toString(),
|
|
123
|
-
text: search
|
|
124
|
-
}));
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9maWx0ZXIvZ2VuZXJpYy1maWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBNkYsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JLLE9BQU8sRUFBa0UsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDOUgsT0FBTyxFQUF5QixrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBTzNGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQzNDLFlBQXFCLEVBQ3JCLElBQW9DO0lBRXBDLElBQUksVUFBaUMsQ0FBQztJQUN0QyxJQUFJLFVBQWlFLENBQUM7SUFFdEUsUUFBUSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU07WUFDUCxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUNqQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFFBQVE7Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDZixDQUFDLENBQUM7b0JBQ0ksYUFBYSxFQUFFLFlBQVk7b0JBQzNCLHNCQUFzQixFQUFFLElBQUk7aUJBQy9CLENBQUM7WUFDUixNQUFNO1FBQ1YsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxXQUFXO1lBQ1osVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDakMsVUFBVSxHQUFHLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBQyxDQUFDO1lBQ2hILE1BQU07UUFDVixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssTUFBTTtZQUNQLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ25DLE1BQU07UUFDVixLQUFLLE1BQU07WUFDUCxVQUFVLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxNQUFNO1FBQ1YsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLE1BQU07WUFDUCxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztZQUNwQyxNQUFNO1FBQ1YsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssU0FBUztZQUNWLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ25DLFVBQVUsR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsQ0FBQztZQUM1RSxNQUFNO1FBQ1YsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTTtZQUNQLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ25DLFVBQVUsR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDO1lBQzlCLE1BQU07UUFDVjtZQUNJLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELE9BQU8sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDO0FBQzFDLENBQUM7QUFJRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLFVBQStDLEVBQUUsSUFBb0M7SUFDMUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBK0IsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUM5RixNQUFNLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsR0FBRywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUYsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEIsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUN0QixRQUFRLEVBQUUsR0FBRztnQkFDYixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLFVBQVU7YUFDbkIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU8sb0JBQW9CLENBQUM7SUFDaEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLElBQW9DO0lBQzdFLE9BQU8sVUFBVSxNQUF1RDtRQUNwRSxPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEtBQUs7b0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsQ0FBQzthQUNKLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUlEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FDeEMsV0FBMEIsRUFDMUIsUUFBeUksRUFDekksSUFBb0M7SUFFcEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGtCQUFrQixDQUFpQyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUN4RyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQzNFLENBQUM7SUFDTixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sa0JBQWtCLENBQWlDLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQ3ZHLE9BQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN4RSxDQUFDO0lBQ04sQ0FBQztBQUNMLENBQUM7QUFJRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQ0FBbUMsQ0FDL0MsT0FBc0IsRUFDdEIsUUFBNko7SUFFN0osSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGtCQUFrQixDQUFtQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFPLEVBQUUsRUFBRSxDQUMzRyxRQUFRLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFXLEVBQUUsTUFBTSxDQUFDLENBQ3pGLENBQUM7SUFDTixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sa0JBQWtCLENBQW1DLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU8sRUFBRSxFQUFFLENBQzFHLE9BQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QixLQUFLLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDbkUsSUFBSSxFQUFFLE1BQU07U0FDZixDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDbGFzc0Z1bmN0aW9uS2V5c1dpdGhQYXJhbUFuZFJldHVyblR5cGUsIENsYXNzRnVuY3Rpb25LZXlzV2l0aFJldHVyblR5cGUsIEl0ZW1Pck9ic2VydmFibGUsIHRvT2JzZXJ2YWJsZSwgdmFsdWVUb0RlZmluZWR9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRhdGVPcHRzVHlwZSwgRmlsdGVyR2VuZXJpY1Byb3BlcnR5LCBGaWx0ZXJOdW1iZXJPcHRzVHlwZSwgRmlsdGVyVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVySW5zdCwgbG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHZW5lcmljUHJvcGVydHlPcHRzVHlwZSB7XG4gICAgbnVtYmVyT3B0cz86IEZpbHRlck51bWJlck9wdHNUeXBlO1xuICAgIGRhdGVPcHRzPzogRmlsdGVyRGF0ZU9wdHNUeXBlO1xufVxuXG4vKipcbiAqIE1hcHMgYSBwcm9wZXJ0eSB0eXBlIHRvIGl0cyBjb3JyZXNwb25kaW5nIGZpbHRlciB0eXBlIGVudW0gYW5kIGFwcGxpZXMgZGVmYXVsdFxuICogZmlsdGVyIG9wdGlvbnMgaWYgbm8gY3VzdG9tIG9wdGlvbnMgYXJlIHByb3ZpZGVkLiBJZiB0aGUgcHJvcGVydHkgdHlwZSBpcyBub3QgcmVjb2duaXplZCxcbiAqIGl0IHJldHVybnMgYSBmaWx0ZXIgdHlwZSB2YWx1ZSBvZiBudWxsLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVR5cGUgLSBUaGUgcHJvcGVydHkgdHlwZSB0byBjb252ZXJ0LlxuICogQHBhcmFtIFtvcHRzXSAtIFRoZSBjdXN0b20gb3B0aW9ucyB0byB1c2UgZm9yIGNvbnZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlUeXBlVG9GaWx0ZXJUeXBlKFxuICAgIHByb3BlcnR5VHlwZT86IHN0cmluZyxcbiAgICBvcHRzPzogRmlsdGVyR2VuZXJpY1Byb3BlcnR5T3B0c1R5cGVcbik6IHtmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlRW51bSB8IG51bGw7IG9wdHM/OiBGaWx0ZXJEYXRlT3B0c1R5cGUgfCBGaWx0ZXJOdW1iZXJPcHRzVHlwZX0ge1xuICAgIGxldCBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlRW51bSB8IG51bGw7XG4gICAgbGV0IHJldHVybk9wdHM6IEZpbHRlckRhdGVPcHRzVHlwZSB8IEZpbHRlck51bWJlck9wdHNUeXBlIHwgdW5kZWZpbmVkO1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgIHJldHVybk9wdHMgPSBvcHRzPy5kYXRlT3B0c1xuICAgICAgICAgICAgICAgID8gb3B0cy5kYXRlT3B0c1xuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6ICdkZC5NTS5ZWVlZJyxcbiAgICAgICAgICAgICAgICAgICAgICBhcHBseUZyb21EaXNwbGF5Rm9ybWF0OiB0cnVlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgICAgY2FzZSAnZGF0ZV90aW1lJzpcbiAgICAgICAgY2FzZSAnZGF0ZS10aW1lJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5EYXRlO1xuICAgICAgICAgICAgcmV0dXJuT3B0cyA9IG9wdHM/LmRhdGVPcHRzID8gb3B0cy5kYXRlT3B0cyA6IHtkaXNwbGF5Rm9ybWF0OiAnZGQuTU0uWVlZWSBISDptbScsIGFwcGx5RnJvbURpc3BsYXlGb3JtYXQ6IHRydWV9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XG4gICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICAgICAgcmV0dXJuT3B0cyA9IG9wdHM/Lm51bWJlck9wdHMgPyBvcHRzLm51bWJlck9wdHMgOiB7ZGlzcGxheUZvcm1hdDogJzEuMS0zMCd9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdsb25nJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICByZXR1cm5PcHRzID0gb3B0cz8ubnVtYmVyT3B0cztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZmlsdGVyVHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtmaWx0ZXJUeXBlLCBvcHRzOiByZXR1cm5PcHRzfTtcbn1cblxudHlwZSBGaWx0ZXJHZW5lcmljUHJvcGVydGllc01ldGFkYXRhVHlwZSA9IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWR9O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzIGFuZCB0eXBlcyBpbnRvIGFuIGFycmF5IG9mIGZpbHRlcmFibGUgcHJvcGVydGllcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciB0eXBlcyBhbmQgb3B0aW9ucy5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtvcHRzXSAtIEN1c3RvbSBmaWx0ZXIgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQcm9wZXJ0eVRvRmlsdGVyR2VuZXJpY1Byb3BlcnRpZXMocHJvcGVydGllczogRmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGUsIG9wdHM/OiBGaWx0ZXJHZW5lcmljUHJvcGVydHlPcHRzVHlwZSk6IEZpbHRlckdlbmVyaWNQcm9wZXJ0eVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlPEFycmF5PEZpbHRlckdlbmVyaWNQcm9wZXJ0eT4+KChmaWx0ZXJhYmxlUHJvcGVydGllcywga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHtmaWx0ZXJUeXBlLCBvcHRzOiBmaWx0ZXJPcHRzfSA9IGNvbnZlcnRQcm9wZXJ0eVR5cGVUb0ZpbHRlclR5cGUocHJvcGVydGllc1trZXldLCBvcHRzKTtcbiAgICAgICAgaWYgKGZpbHRlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZpbHRlcmFibGVQcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXksXG4gICAgICAgICAgICAgICAgdHlwZTogZmlsdGVyVHlwZSxcbiAgICAgICAgICAgICAgICBvcHRzOiBmaWx0ZXJPcHRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyYWJsZVByb3BlcnRpZXM7XG4gICAgfSwgW10pO1xufVxuXG4vKipcbiAqIE1hcHMgYW4gT2JzZXJ2YWJsZSBvZiBwcm9wZXJ0aWVzIHRvIGZpbHRlciBnZW5lcmljIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb0ZpbHRlckdlbmVyaWNQcm9wZXJ0aWVzKG9wdHM/OiBGaWx0ZXJHZW5lcmljUHJvcGVydHlPcHRzVHlwZSk6IE9wZXJhdG9yRnVuY3Rpb248RmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGUsIEZpbHRlckdlbmVyaWNQcm9wZXJ0eVtdPiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2U6IE9ic2VydmFibGU8RmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGU+KTogT2JzZXJ2YWJsZTxGaWx0ZXJHZW5lcmljUHJvcGVydHlbXT4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29udmVydFByb3BlcnR5VG9GaWx0ZXJHZW5lcmljUHJvcGVydGllcyh2YWx1ZSwgb3B0cykpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxudHlwZSBGaWx0ZXJQcm9wZXJ0eUxvb2t1cEZuVHlwZTxTZXJ2aWNlPiA9IChzZXJ2aWNlOiBTZXJ2aWNlKSA9PiBJdGVtT3JPYnNlcnZhYmxlPEZpbHRlckdlbmVyaWNQcm9wZXJ0aWVzTWV0YWRhdGFUeXBlPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGF0YSBwcm92aWRlciBmb3IgZ2VuZXJpYyBmaWx0ZXIgcHJvcGVydGllcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIFRhYmxlRGVzY3JpcHRvcidzIGdlbmVyaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHBhcmFtIHNlcnZpY2VUeXBlIC0gVGhlIHNlcnZpY2UgdG8gZmV0Y2ggdGhlIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBsb29rdXBGbiAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIHByb3BlcnRpZXMgb3IgZnVuY3Rpb24gaW1wbCByZXR1cm5pbmcgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbb3B0c10gLSBPcHRpb25hbCBjdXN0b20gb3B0aW9ucyBmb3IgZmlsdGVyIGRlc2NyaXB0b3JzLCBzdWNoIGFzIGRhdGUgYW5kIG51bWJlciBmb3JtYXR0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUHJvcGVydHlMb29rdXBQcm92aWRlcjxTZXJ2aWNlPihcbiAgICBzZXJ2aWNlVHlwZTogVHlwZTxTZXJ2aWNlPixcbiAgICBsb29rdXBGbjogRmlsdGVyUHJvcGVydHlMb29rdXBGblR5cGU8U2VydmljZT4gfCBDbGFzc0Z1bmN0aW9uS2V5c1dpdGhSZXR1cm5UeXBlPFNlcnZpY2UsIE9ic2VydmFibGU8RmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGU+PixcbiAgICBvcHRzPzogRmlsdGVyR2VuZXJpY1Byb3BlcnR5T3B0c1R5cGVcbikge1xuICAgIGlmICh0eXBlb2YgbG9va3VwRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJHZW5lcmljUHJvcGVydHksIFNlcnZpY2U+KHtzZXJ2aWNlOiBzZXJ2aWNlVHlwZX0pLndpdGhMb29rdXAoKF8sIHNlcnZpY2UpID0+XG4gICAgICAgICAgICB0b09ic2VydmFibGUobG9va3VwRm4oc2VydmljZSkpLnBpcGUobWFwVG9GaWx0ZXJHZW5lcmljUHJvcGVydGllcyhvcHRzKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlckdlbmVyaWNQcm9wZXJ0eSwgU2VydmljZT4oe3NlcnZpY2U6IHNlcnZpY2VUeXBlfSkud2l0aExvb2t1cCgoXywgc2VydmljZSkgPT5cbiAgICAgICAgICAgIChzZXJ2aWNlIGFzIGFueSlbbG9va3VwRm5dKCkucGlwZShtYXBUb0ZpbHRlckdlbmVyaWNQcm9wZXJ0aWVzKG9wdHMpKVxuICAgICAgICApO1xuICAgIH1cbn1cblxudHlwZSBGaWx0ZXJWYWx1ZVN1Z2dlc3Rpb25Mb29rdXBGblR5cGU8U2VydmljZT4gPSAoc2VydmljZTogU2VydmljZSwgZmllbGQ6IHN0cmluZywgc2VhcmNoPzogc3RyaW5nKSA9PiBJdGVtT3JPYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGF0YSBwcm92aWRlciBmb3IgZ2VuZXJpYyBmaWx0ZXIgdmFsdWUgc3VnZ2VzdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBUYWJsZURlc2NyaXB0b3IncyBnZW5lcmljIGZpbHRlciBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdG8gdXNlIGZvciBzdWdnZXN0aW5nIGZpbHRlciB2YWx1ZXMuXG4gKiBAcGFyYW0gbG9va3VwRm4gLSBUaGUgZnVuY3Rpb24gbmFtZSBvZiB0aGUgc2VydmljZSB0byBjYWxsIGZvciBzdWdnZXN0aW9uIG9yIGZ1bmN0aW9uIGltcGwgcmV0dXJuaW5nIHN1Z2dlc3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyVmFsdWVTdWdnZXN0aW9uTG9va3VwUHJvdmlkZXI8U2VydmljZT4oXG4gICAgc2VydmljZTogVHlwZTxTZXJ2aWNlPixcbiAgICBsb29rdXBGbjogRmlsdGVyVmFsdWVTdWdnZXN0aW9uTG9va3VwRm5UeXBlPFNlcnZpY2U+IHwgQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlPFNlcnZpY2UsIHtmaWVsZDogc3RyaW5nOyB0ZXh0Pzogc3RyaW5nfSwgT2JzZXJ2YWJsZTxzdHJpbmdbXT4+XG4pOiBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgU2VydmljZSwgc3RyaW5nLCAnZmllbGQnPiB7XG4gICAgaWYgKHR5cGVvZiBsb29rdXBGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbG9va3VwRGF0YVByb3ZpZGVyPHN0cmluZywgU2VydmljZSwgc3RyaW5nLCAnZmllbGQnPih7c2VydmljZX0pLndpdGhMb29rdXAoKHBhcmFtcywgc2VydmljZSwgc2VhcmNoPykgPT5cbiAgICAgICAgICAgIGxvb2t1cEZuKHNlcnZpY2UsIHZhbHVlVG9EZWZpbmVkKHBhcmFtcz8uZmlsdGVycz8uWydmaWVsZCddPy52YWx1ZSkgYXMgc3RyaW5nLCBzZWFyY2gpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cERhdGFQcm92aWRlcjxzdHJpbmcsIFNlcnZpY2UsIHN0cmluZywgJ2ZpZWxkJz4oe3NlcnZpY2V9KS53aXRoTG9va3VwKChwYXJhbXMsIHNlcnZpY2UsIHNlYXJjaD8pID0+XG4gICAgICAgICAgICAoc2VydmljZSBhcyBhbnkpW2xvb2t1cEZuXSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6IHZhbHVlVG9EZWZpbmVkKHBhcmFtcz8uZmlsdGVycz8uWydmaWVsZCddPy52YWx1ZSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|