@sd-angular/core 1.3.104 → 1.3.106
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/bundles/sd-angular-core-grid-material.umd.js +332 -393
- package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
- package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
- package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-setting.umd.js +21 -25
- package/bundles/sd-angular-core-setting.umd.js.map +1 -1
- package/bundles/sd-angular-core-setting.umd.min.js +1 -1
- package/bundles/sd-angular-core-setting.umd.min.js.map +1 -1
- package/esm2015/grid-material/src/lib/components/grid-filter/grid-filter.component.js +21 -15
- package/esm2015/grid-material/src/lib/components/popup-filter/popup-filter.component.js +17 -26
- package/esm2015/grid-material/src/lib/grid-material.component.js +175 -203
- package/esm2015/grid-material/src/lib/services/grid-filter/grid-filter.service.js +99 -127
- package/esm2015/setting/src/lib/setting.service.js +22 -26
- package/fesm2015/sd-angular-core-grid-material.js +299 -358
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/fesm2015/sd-angular-core-setting.js +21 -25
- package/fesm2015/sd-angular-core-setting.js.map +1 -1
- package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
- package/grid-material/src/lib/components/popup-filter/popup-filter.component.d.ts +6 -12
- package/grid-material/src/lib/grid-material.component.d.ts +28 -28
- package/grid-material/src/lib/services/grid-filter/grid-filter.service.d.ts +4 -4
- package/package.json +1 -1
- package/{sd-angular-core-1.3.104.tgz → sd-angular-core-1.3.106.tgz} +0 -0
- package/setting/sd-angular-core-setting.metadata.json +1 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
var _filterConfiguration, _filterValue, _cache,
|
|
1
|
+
var _filterConfiguration, _filterValue, _cache, _defaultConfiguration, _defaultValue, _initConfiguration, _initValue;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
|
-
import { Injectable } from
|
|
4
|
-
import hash from
|
|
5
|
-
import { SdSettingService } from
|
|
6
|
-
import { map } from
|
|
3
|
+
import { Injectable } from '@angular/core';
|
|
4
|
+
import hash from 'object-hash';
|
|
5
|
+
import { SdSettingService } from '@sd-angular/core/setting';
|
|
6
|
+
import { debounceTime, map, startWith } from 'rxjs/operators';
|
|
7
7
|
export class SdGridFilterService {
|
|
8
8
|
constructor(settingService) {
|
|
9
9
|
this.settingService = settingService;
|
|
10
|
-
_filterConfiguration.set(this,
|
|
11
|
-
_filterValue.set(this,
|
|
10
|
+
_filterConfiguration.set(this, 'GRID-FILTER-CONFIGURATION');
|
|
11
|
+
_filterValue.set(this, 'GRID-FILTER-VALUE');
|
|
12
12
|
_cache.set(this, {});
|
|
13
13
|
this.register = (key, args) => {
|
|
14
14
|
let cacheSession = false;
|
|
@@ -21,150 +21,66 @@ export class SdGridFilterService {
|
|
|
21
21
|
cacheSession = true; // Nếu không có key thì chỉ lưu theo session
|
|
22
22
|
}
|
|
23
23
|
if (!__classPrivateFieldGet(this, _cache)[key]) {
|
|
24
|
-
|
|
25
|
-
prefix: __classPrivateFieldGet(this, _filterConfiguration),
|
|
26
|
-
key,
|
|
27
|
-
}, {
|
|
28
|
-
type: cacheSession ? "session" : undefined,
|
|
29
|
-
});
|
|
30
|
-
const defaultConfiguration = __classPrivateFieldGet(this, _loadDefaultConfiguration).call(this, args, t1.get());
|
|
31
|
-
const t2 = this.settingService.create({
|
|
32
|
-
prefix: __classPrivateFieldGet(this, _filterValue),
|
|
33
|
-
key,
|
|
34
|
-
}, {
|
|
35
|
-
type: cacheSession ? "session" : undefined,
|
|
36
|
-
});
|
|
37
|
-
const defaultValue = __classPrivateFieldGet(this, _loadDefaultValue).call(this, args, t2.get());
|
|
24
|
+
// Setting của filter configuration
|
|
38
25
|
const filterConfiguration = this.settingService.create({
|
|
39
26
|
prefix: __classPrivateFieldGet(this, _filterConfiguration),
|
|
40
27
|
key,
|
|
41
28
|
}, {
|
|
42
|
-
default:
|
|
43
|
-
type: cacheSession ?
|
|
29
|
+
default: __classPrivateFieldGet(this, _defaultConfiguration).call(this, args),
|
|
30
|
+
type: cacheSession ? 'session' : undefined,
|
|
44
31
|
});
|
|
32
|
+
// Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi
|
|
33
|
+
filterConfiguration.set(__classPrivateFieldGet(this, _initConfiguration).call(this, args, filterConfiguration.get()));
|
|
34
|
+
// Setting của filter value
|
|
45
35
|
const filterValue = this.settingService.create({
|
|
46
36
|
prefix: __classPrivateFieldGet(this, _filterValue),
|
|
47
37
|
key,
|
|
48
38
|
}, {
|
|
49
|
-
default:
|
|
50
|
-
type: cacheSession ?
|
|
39
|
+
default: __classPrivateFieldGet(this, _defaultValue).call(this, args),
|
|
40
|
+
type: cacheSession ? 'session' : undefined,
|
|
51
41
|
});
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const { columns, externalFilters, filterDefs } = args;
|
|
55
|
-
const inlineColumn = {};
|
|
56
|
-
const inlineExternal = {};
|
|
57
|
-
const inlineFilterDef = {};
|
|
58
|
-
// Filter column
|
|
59
|
-
for (const item of columns || []) {
|
|
60
|
-
inlineColumn[item.field] = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.inlineColumn) === null || _a === void 0 ? void 0 : _a[item.field];
|
|
61
|
-
}
|
|
62
|
-
// Filter external
|
|
63
|
-
for (const item of externalFilters || []) {
|
|
64
|
-
inlineExternal[item.field] = (_b = configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) === null || _b === void 0 ? void 0 : _b[item.field];
|
|
65
|
-
}
|
|
66
|
-
// Filter def
|
|
67
|
-
for (const item of filterDefs || []) {
|
|
68
|
-
inlineFilterDef[item.sdMaterialFilterDef] = (_c = configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) === null || _c === void 0 ? void 0 : _c[item.sdMaterialFilterDef];
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
// Filter column
|
|
72
|
-
inlineColumn,
|
|
73
|
-
// Filter external
|
|
74
|
-
inlineExternal,
|
|
75
|
-
// Filter def
|
|
76
|
-
inlineFilterDef,
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
const valueGet = (value) => {
|
|
80
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
81
|
-
const columnFilter = {};
|
|
82
|
-
const externalFilter = {};
|
|
83
|
-
const filterDef = {};
|
|
84
|
-
const { columns, externalFilters, filterDefs } = args;
|
|
85
|
-
// Filter column
|
|
86
|
-
for (const item of columns || []) {
|
|
87
|
-
columnFilter[item.field] = (_a = value === null || value === void 0 ? void 0 : value.columnFilter) === null || _a === void 0 ? void 0 : _a[item.field];
|
|
88
|
-
}
|
|
89
|
-
// Filter external
|
|
90
|
-
for (const item of externalFilters || []) {
|
|
91
|
-
if (item.type === "daterange") {
|
|
92
|
-
externalFilter[item.field] = {
|
|
93
|
-
from: (_c = (_b = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _b === void 0 ? void 0 : _b[item.field]) === null || _c === void 0 ? void 0 : _c.from,
|
|
94
|
-
to: (_e = (_d = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _d === void 0 ? void 0 : _d[item.field]) === null || _e === void 0 ? void 0 : _e.to,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
externalFilter[item.field] = (_f = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _f === void 0 ? void 0 : _f[item.field];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Filter def
|
|
102
|
-
for (const item of filterDefs || []) {
|
|
103
|
-
filterDef[item.sdMaterialFilterDef] = (_g = value === null || value === void 0 ? void 0 : value.filterDef) === null || _g === void 0 ? void 0 : _g[item.sdMaterialFilterDef];
|
|
104
|
-
}
|
|
105
|
-
return {
|
|
106
|
-
// Filter column
|
|
107
|
-
columnFilter,
|
|
108
|
-
// Filter external
|
|
109
|
-
externalFilter,
|
|
110
|
-
// Filter def
|
|
111
|
-
filterDef,
|
|
112
|
-
};
|
|
113
|
-
};
|
|
42
|
+
// Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi
|
|
43
|
+
filterValue.set(__classPrivateFieldGet(this, _initValue).call(this, args, filterValue.get()));
|
|
114
44
|
__classPrivateFieldGet(this, _cache)[key] = {
|
|
115
45
|
configuration: {
|
|
116
46
|
get: () => {
|
|
117
|
-
|
|
118
|
-
return configurationGet(configuration);
|
|
47
|
+
return filterConfiguration.get();
|
|
119
48
|
},
|
|
120
49
|
set: (configuration) => {
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
? (configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) || {}
|
|
132
|
-
: inlineExternal,
|
|
133
|
-
// Filter def
|
|
134
|
-
inlineFilterDef: keys.includes("inlineFilterDef")
|
|
135
|
-
? (configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) || {}
|
|
136
|
-
: inlineFilterDef,
|
|
50
|
+
const { inlineColumn, inlineExternal, inlineFilterDef } = configuration;
|
|
51
|
+
filterConfiguration.set({
|
|
52
|
+
inlineColumn,
|
|
53
|
+
inlineExternal,
|
|
54
|
+
inlineFilterDef,
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
inlineColumn,
|
|
58
|
+
inlineExternal,
|
|
59
|
+
inlineFilterDef,
|
|
137
60
|
};
|
|
138
|
-
filterConfiguration.set(updatedConfiguration);
|
|
139
|
-
return updatedConfiguration;
|
|
140
61
|
},
|
|
141
62
|
remove: () => {
|
|
142
63
|
filterConfiguration.remove();
|
|
143
64
|
},
|
|
144
|
-
observer: filterConfiguration.observer.pipe(
|
|
65
|
+
observer: filterConfiguration.observer.pipe(startWith(filterConfiguration.get()),
|
|
66
|
+
// Sử dụng mặc định nếu bị reset
|
|
67
|
+
map(configuration => configuration || __classPrivateFieldGet(this, _defaultConfiguration).call(this, args))),
|
|
145
68
|
},
|
|
146
69
|
value: {
|
|
147
70
|
get: () => {
|
|
148
|
-
|
|
149
|
-
return valueGet(configuration);
|
|
71
|
+
return filterValue.get();
|
|
150
72
|
},
|
|
151
|
-
set: (
|
|
152
|
-
const keys = Object.keys(
|
|
73
|
+
set: (value) => {
|
|
74
|
+
const keys = Object.keys(value || {});
|
|
153
75
|
const current = filterValue.get();
|
|
154
76
|
const { columnFilter, externalFilter, filterDef } = current;
|
|
155
77
|
const updatedConfiguration = {
|
|
156
78
|
// Filter column
|
|
157
|
-
columnFilter: keys.includes(
|
|
158
|
-
? (configuration === null || configuration === void 0 ? void 0 : configuration.columnFilter) || {}
|
|
159
|
-
: columnFilter,
|
|
79
|
+
columnFilter: keys.includes('columnFilter') ? (value === null || value === void 0 ? void 0 : value.columnFilter) || {} : columnFilter,
|
|
160
80
|
// Filter external
|
|
161
|
-
externalFilter: keys.includes(
|
|
162
|
-
? (configuration === null || configuration === void 0 ? void 0 : configuration.externalFilter) || {}
|
|
163
|
-
: externalFilter,
|
|
81
|
+
externalFilter: keys.includes('externalFilter') ? (value === null || value === void 0 ? void 0 : value.externalFilter) || {} : externalFilter,
|
|
164
82
|
// Filter def
|
|
165
|
-
filterDef: keys.includes(
|
|
166
|
-
? (configuration === null || configuration === void 0 ? void 0 : configuration.filterDef) || {}
|
|
167
|
-
: filterDef,
|
|
83
|
+
filterDef: keys.includes('filterDef') ? (value === null || value === void 0 ? void 0 : value.filterDef) || {} : filterDef,
|
|
168
84
|
};
|
|
169
85
|
filterValue.set(updatedConfiguration);
|
|
170
86
|
return updatedConfiguration;
|
|
@@ -172,13 +88,69 @@ export class SdGridFilterService {
|
|
|
172
88
|
remove: () => {
|
|
173
89
|
filterValue.remove();
|
|
174
90
|
},
|
|
175
|
-
observer: filterValue.observer.pipe(
|
|
91
|
+
observer: filterValue.observer.pipe(debounceTime(200), startWith(filterValue.get()),
|
|
92
|
+
// Sử dụng mặc định nếu bị reset
|
|
93
|
+
map(value => value || __classPrivateFieldGet(this, _defaultValue).call(this, args))),
|
|
176
94
|
},
|
|
177
95
|
};
|
|
178
96
|
}
|
|
179
97
|
return __classPrivateFieldGet(this, _cache)[key];
|
|
180
98
|
};
|
|
181
|
-
|
|
99
|
+
_defaultConfiguration.set(this, (args) => {
|
|
100
|
+
var _a;
|
|
101
|
+
const { columns, externalFilters, filterDefs } = args;
|
|
102
|
+
const inlineColumn = {};
|
|
103
|
+
const inlineExternal = {};
|
|
104
|
+
const inlineFilterDef = {};
|
|
105
|
+
// Filter column
|
|
106
|
+
for (const item of columns || []) {
|
|
107
|
+
inlineColumn[item.field] = (_a = item === null || item === void 0 ? void 0 : item.filter) === null || _a === void 0 ? void 0 : _a.defaultShowing;
|
|
108
|
+
}
|
|
109
|
+
// Filter external
|
|
110
|
+
for (const item of externalFilters || []) {
|
|
111
|
+
inlineExternal[item.field] = item === null || item === void 0 ? void 0 : item.defaultShowing;
|
|
112
|
+
}
|
|
113
|
+
// Filter def
|
|
114
|
+
for (const item of filterDefs || []) {
|
|
115
|
+
inlineFilterDef[item.sdMaterialFilterDef] = item === null || item === void 0 ? void 0 : item.defaultShowing;
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
// Filter column
|
|
119
|
+
inlineColumn,
|
|
120
|
+
// Filter external
|
|
121
|
+
inlineExternal,
|
|
122
|
+
// Filter def
|
|
123
|
+
inlineFilterDef,
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
_defaultValue.set(this, (args) => {
|
|
127
|
+
var _a;
|
|
128
|
+
const columnFilter = {};
|
|
129
|
+
const externalFilter = {};
|
|
130
|
+
const filterDef = {};
|
|
131
|
+
const { columns, externalFilters, filterDefs } = args;
|
|
132
|
+
// Filter column
|
|
133
|
+
for (const item of columns || []) {
|
|
134
|
+
columnFilter[item.field] = (_a = item === null || item === void 0 ? void 0 : item.filter) === null || _a === void 0 ? void 0 : _a.default;
|
|
135
|
+
}
|
|
136
|
+
// Filter external
|
|
137
|
+
for (const item of externalFilters || []) {
|
|
138
|
+
externalFilter[item.field] = item === null || item === void 0 ? void 0 : item.default;
|
|
139
|
+
}
|
|
140
|
+
// Filter def
|
|
141
|
+
for (const item of filterDefs || []) {
|
|
142
|
+
filterDef[item.sdMaterialFilterDef] = undefined;
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
// Filter column
|
|
146
|
+
columnFilter,
|
|
147
|
+
// Filter external
|
|
148
|
+
externalFilter,
|
|
149
|
+
// Filter def
|
|
150
|
+
filterDef,
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
_initConfiguration.set(this, (args, configuration) => {
|
|
182
154
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
183
155
|
const { columns, externalFilters, filterDefs } = args;
|
|
184
156
|
const inlineColumn = {};
|
|
@@ -205,7 +177,7 @@ export class SdGridFilterService {
|
|
|
205
177
|
inlineFilterDef,
|
|
206
178
|
};
|
|
207
179
|
});
|
|
208
|
-
|
|
180
|
+
_initValue.set(this, (args, value) => {
|
|
209
181
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
210
182
|
const columnFilter = {};
|
|
211
183
|
const externalFilter = {};
|
|
@@ -217,7 +189,7 @@ export class SdGridFilterService {
|
|
|
217
189
|
}
|
|
218
190
|
// Filter external
|
|
219
191
|
for (const item of externalFilters || []) {
|
|
220
|
-
if (item.type ===
|
|
192
|
+
if (item.type === 'daterange') {
|
|
221
193
|
externalFilter[item.field] = {
|
|
222
194
|
from: (_f = (_e = (_d = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _d === void 0 ? void 0 : _d[item.field]) === null || _e === void 0 ? void 0 : _e.from) !== null && _f !== void 0 ? _f : (_g = item.default) === null || _g === void 0 ? void 0 : _g.from,
|
|
223
195
|
to: (_k = (_j = (_h = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _h === void 0 ? void 0 : _h[item.field]) === null || _j === void 0 ? void 0 : _j.to) !== null && _k !== void 0 ? _k : (_l = item.default) === null || _l === void 0 ? void 0 : _l.to,
|
|
@@ -242,11 +214,11 @@ export class SdGridFilterService {
|
|
|
242
214
|
});
|
|
243
215
|
}
|
|
244
216
|
}
|
|
245
|
-
_filterConfiguration = new WeakMap(), _filterValue = new WeakMap(), _cache = new WeakMap(),
|
|
217
|
+
_filterConfiguration = new WeakMap(), _filterValue = new WeakMap(), _cache = new WeakMap(), _defaultConfiguration = new WeakMap(), _defaultValue = new WeakMap(), _initConfiguration = new WeakMap(), _initValue = new WeakMap();
|
|
246
218
|
SdGridFilterService.decorators = [
|
|
247
219
|
{ type: Injectable }
|
|
248
220
|
];
|
|
249
221
|
SdGridFilterService.ctorParameters = () => [
|
|
250
222
|
{ type: SdSettingService }
|
|
251
223
|
];
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvc2VydmljZXMvZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQW9CLGNBQWdDO1FBQWhDLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUhwRCwrQkFBdUIsMkJBQTJCLEVBQUM7UUFDbkQsdUJBQWUsbUJBQW1CLEVBQUM7UUFDbkMsaUJBQXVELEVBQUUsRUFBQztRQUUxRCxhQUFRLEdBQUcsQ0FDVCxHQUFXLEVBQ1gsSUFJQyxFQUNELEVBQUU7WUFDRixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDMUMsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDVCxPQUFPO29CQUNQLGVBQWU7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsNENBQTRDO2FBQ2xFO1lBQ0QsSUFBSSxDQUFDLHFDQUFZLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDbkM7b0JBQ0UsTUFBTSxvREFB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WTtnQkFDWixrQkFBa0I7Z0JBQ2xCLGNBQWM7Z0JBQ2QsYUFBYTtnQkFDYixTQUFTO2FBQ1YsQ0FBQztRQUNKLENBQUMsRUFBQztJQXpScUQsQ0FBQzs7OztZQUx6RCxVQUFVOzs7WUFYRixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IGhhc2ggZnJvbSBcIm9iamVjdC1oYXNoXCI7XHJcbmltcG9ydCB7IFNkU2V0dGluZ1NlcnZpY2UgfSBmcm9tIFwiQHNkLWFuZ3VsYXIvY29yZS9zZXR0aW5nXCI7XHJcbmltcG9ydCB7XHJcbiAgU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcixcclxuICBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24sXHJcbiAgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJSZWdpc3RlcixcclxuICBTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlLFxyXG59IGZyb20gXCIuL2dyaWQtZmlsdGVyLm1vZGVsXCI7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsQ29sdW1uIH0gZnJvbSBcIi4uLy4uL21vZGVscy9ncmlkLWNvbHVtbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvc2QtbWF0ZXJpYWwtZmlsdGVyLWRlZi5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZEdyaWRGaWx0ZXJTZXJ2aWNlIHtcclxuICAjZmlsdGVyQ29uZmlndXJhdGlvbiA9IFwiR1JJRC1GSUxURVItQ09ORklHVVJBVElPTlwiO1xyXG4gICNmaWx0ZXJWYWx1ZSA9IFwiR1JJRC1GSUxURVItVkFMVUVcIjtcclxuICAjY2FjaGU6IFJlY29yZDxzdHJpbmcsIFNkR3JpZE1hdGVyaWFsRmlsdGVyUmVnaXN0ZXI+ID0ge307XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXR0aW5nU2VydmljZTogU2RTZXR0aW5nU2VydmljZSkge31cclxuICByZWdpc3RlciA9IChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgYXJnczoge1xyXG4gICAgICBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdO1xyXG4gICAgICBleHRlcm5hbEZpbHRlcnM6IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXJbXTtcclxuICAgICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdO1xyXG4gICAgfVxyXG4gICkgPT4ge1xyXG4gICAgbGV0IGNhY2hlU2Vzc2lvbiA9IGZhbHNlO1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMgfSA9IGFyZ3M7XHJcbiAgICAgIGtleSA9IGhhc2goe1xyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJzLFxyXG4gICAgICB9KTtcclxuICAgICAgY2FjaGVTZXNzaW9uID0gdHJ1ZTsgLy8gTuG6v3Uga2jDtG5nIGPDsyBrZXkgdGjDrCBjaOG7iSBsxrB1IHRoZW8gc2Vzc2lvblxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLiNjYWNoZVtrZXldKSB7XHJcbiAgICAgIGNvbnN0IHQxID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uPihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcmVmaXg6IHRoaXMuI2ZpbHRlckNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0eXBlOiBjYWNoZVNlc3Npb24gPyBcInNlc3Npb25cIiA6IHVuZGVmaW5lZCxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRlZmF1bHRDb25maWd1cmF0aW9uID0gdGhpcy4jbG9hZERlZmF1bHRDb25maWd1cmF0aW9uKFxyXG4gICAgICAgIGFyZ3MsXHJcbiAgICAgICAgdDEuZ2V0KClcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgdDIgPSB0aGlzLnNldHRpbmdTZXJ2aWNlLmNyZWF0ZTxTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlPihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcmVmaXg6IHRoaXMuI2ZpbHRlclZhbHVlLFxyXG4gICAgICAgICAga2V5LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZTogY2FjaGVTZXNzaW9uID8gXCJzZXNzaW9uXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLiNsb2FkRGVmYXVsdFZhbHVlKGFyZ3MsIHQyLmdldCgpKTtcclxuICAgICAgY29uc3QgZmlsdGVyQ29uZmlndXJhdGlvbiA9XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uPihcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcHJlZml4OiB0aGlzLiNmaWx0ZXJDb25maWd1cmF0aW9uLFxyXG4gICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICAgICAgdHlwZTogY2FjaGVTZXNzaW9uID8gXCJzZXNzaW9uXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLnNldHRpbmdTZXJ2aWNlLmNyZWF0ZTxTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlPihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcmVmaXg6IHRoaXMuI2ZpbHRlclZhbHVlLFxyXG4gICAgICAgICAga2V5LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxyXG4gICAgICAgICAgdHlwZTogY2FjaGVTZXNzaW9uID8gXCJzZXNzaW9uXCIgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uR2V0ID0gKFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvblxyXG4gICAgICApID0+IHtcclxuICAgICAgICBjb25zdCB7IGNvbHVtbnMsIGV4dGVybmFsRmlsdGVycywgZmlsdGVyRGVmcyB9ID0gYXJncztcclxuICAgICAgICBjb25zdCBpbmxpbmVDb2x1bW46IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICAgICAgY29uc3QgaW5saW5lRXh0ZXJuYWw6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICAgICAgY29uc3QgaW5saW5lRmlsdGVyRGVmOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sdW1ucyB8fCBbXSkge1xyXG4gICAgICAgICAgaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID0gY29uZmlndXJhdGlvbj8uaW5saW5lQ29sdW1uPy5baXRlbS5maWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHRlcm5hbEZpbHRlcnMgfHwgW10pIHtcclxuICAgICAgICAgIGlubGluZUV4dGVybmFsW2l0ZW0uZmllbGRdID1cclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbj8uaW5saW5lRXh0ZXJuYWw/LltpdGVtLmZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJEZWZzIHx8IFtdKSB7XHJcbiAgICAgICAgICBpbmxpbmVGaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24/LmlubGluZUZpbHRlckRlZj8uW2l0ZW0uc2RNYXRlcmlhbEZpbHRlckRlZl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgICAgICBpbmxpbmVDb2x1bW4sXHJcbiAgICAgICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgICAgIGlubGluZUV4dGVybmFsLFxyXG4gICAgICAgICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgICAgICAgaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZUdldCA9ICh2YWx1ZTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkZpbHRlcjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRGVmOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMsIGZpbHRlckRlZnMgfSA9IGFyZ3M7XHJcbiAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgICAgICBjb2x1bW5GaWx0ZXJbaXRlbS5maWVsZF0gPSB2YWx1ZT8uY29sdW1uRmlsdGVyPy5baXRlbS5maWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHRlcm5hbEZpbHRlcnMgfHwgW10pIHtcclxuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwiZGF0ZXJhbmdlXCIpIHtcclxuICAgICAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgZnJvbTogdmFsdWU/LmV4dGVybmFsRmlsdGVyPy5baXRlbS5maWVsZF0/LmZyb20sXHJcbiAgICAgICAgICAgICAgdG86IHZhbHVlPy5leHRlcm5hbEZpbHRlcj8uW2l0ZW0uZmllbGRdPy50byxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4dGVybmFsRmlsdGVyW2l0ZW0uZmllbGRdID0gdmFsdWU/LmV4dGVybmFsRmlsdGVyPy5baXRlbS5maWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyRGVmcyB8fCBbXSkge1xyXG4gICAgICAgICAgZmlsdGVyRGVmW2l0ZW0uc2RNYXRlcmlhbEZpbHRlckRlZl0gPVxyXG4gICAgICAgICAgICB2YWx1ZT8uZmlsdGVyRGVmPy5baXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgICAgIGNvbHVtbkZpbHRlcixcclxuICAgICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgICAgZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICBmaWx0ZXJEZWYsXHJcbiAgICAgICAgfTtcclxuICAgICAgfTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XHJcbiAgICAgICAgICBnZXQ6ICgpOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZmlsdGVyQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25HZXQoY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2V0OiAoXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IFBhcnRpYWw8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZ3VyYXRpb24gfHwge30pO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gZmlsdGVyQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuICAgICAgICAgICAgY29uc3QgeyBpbmxpbmVDb2x1bW4sIGlubGluZUV4dGVybmFsLCBpbmxpbmVGaWx0ZXJEZWYgfSA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWd1cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgICAgICAgICBpbmxpbmVDb2x1bW46IGtleXMuaW5jbHVkZXMoXCJpbmxpbmVDb2x1bW5cIilcclxuICAgICAgICAgICAgICAgID8gY29uZmlndXJhdGlvbj8uaW5saW5lQ29sdW1uIHx8IHt9XHJcbiAgICAgICAgICAgICAgICA6IGlubGluZUNvbHVtbixcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgICAgICAgICBpbmxpbmVFeHRlcm5hbDoga2V5cy5pbmNsdWRlcyhcImlubGluZUV4dGVybmFsXCIpXHJcbiAgICAgICAgICAgICAgICA/IGNvbmZpZ3VyYXRpb24/LmlubGluZUV4dGVybmFsIHx8IHt9XHJcbiAgICAgICAgICAgICAgICA6IGlubGluZUV4dGVybmFsLFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgICAgICAgICBpbmxpbmVGaWx0ZXJEZWY6IGtleXMuaW5jbHVkZXMoXCJpbmxpbmVGaWx0ZXJEZWZcIilcclxuICAgICAgICAgICAgICAgID8gY29uZmlndXJhdGlvbj8uaW5saW5lRmlsdGVyRGVmIHx8IHt9XHJcbiAgICAgICAgICAgICAgICA6IGlubGluZUZpbHRlckRlZixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZmlsdGVyQ29uZmlndXJhdGlvbi5zZXQodXBkYXRlZENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZENvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlckNvbmZpZ3VyYXRpb24ucmVtb3ZlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb2JzZXJ2ZXI6IGZpbHRlckNvbmZpZ3VyYXRpb24ub2JzZXJ2ZXIucGlwZShtYXAoY29uZmlndXJhdGlvbkdldCkpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgIGdldDogKCk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZmlsdGVyVmFsdWUuZ2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZUdldChjb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzZXQ6IChcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogUGFydGlhbDxTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlPlxyXG4gICAgICAgICAgKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjb25maWd1cmF0aW9uIHx8IHt9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGZpbHRlclZhbHVlLmdldCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpbHRlcjoga2V5cy5pbmNsdWRlcyhcImNvbHVtbkZpbHRlclwiKVxyXG4gICAgICAgICAgICAgICAgPyBjb25maWd1cmF0aW9uPy5jb2x1bW5GaWx0ZXIgfHwge31cclxuICAgICAgICAgICAgICAgIDogY29sdW1uRmlsdGVyLFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgICAgICAgIGV4dGVybmFsRmlsdGVyOiBrZXlzLmluY2x1ZGVzKFwiZXh0ZXJuYWxGaWx0ZXJcIilcclxuICAgICAgICAgICAgICAgID8gY29uZmlndXJhdGlvbj8uZXh0ZXJuYWxGaWx0ZXIgfHwge31cclxuICAgICAgICAgICAgICAgIDogZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgICAgICAgICAgIGZpbHRlckRlZjoga2V5cy5pbmNsdWRlcyhcImZpbHRlckRlZlwiKVxyXG4gICAgICAgICAgICAgICAgPyBjb25maWd1cmF0aW9uPy5maWx0ZXJEZWYgfHwge31cclxuICAgICAgICAgICAgICAgIDogZmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZS5zZXQodXBkYXRlZENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZENvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlclZhbHVlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9ic2VydmVyOiBmaWx0ZXJWYWx1ZS5vYnNlcnZlci5waXBlKG1hcCh2YWx1ZUdldCkpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVba2V5XTtcclxuICB9O1xyXG5cclxuICAjbG9hZERlZmF1bHRDb25maWd1cmF0aW9uID0gKFxyXG4gICAgYXJnczoge1xyXG4gICAgICBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdO1xyXG4gICAgICBleHRlcm5hbEZpbHRlcnM6IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXJbXTtcclxuICAgICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdO1xyXG4gICAgfSxcclxuICAgIGNvbmZpZ3VyYXRpb246IFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvblxyXG4gICk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGV4dGVybmFsRmlsdGVycywgZmlsdGVyRGVmcyB9ID0gYXJncztcclxuICAgIGNvbnN0IGlubGluZUNvbHVtbjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIGNvbnN0IGlubGluZUV4dGVybmFsOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgY29uc3QgaW5saW5lRmlsdGVyRGVmOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbHVtbnMgfHwgW10pIHtcclxuICAgICAgaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID1cclxuICAgICAgICBjb25maWd1cmF0aW9uPy5pbmxpbmVDb2x1bW4/LltpdGVtLmZpZWxkXSA/P1xyXG4gICAgICAgIGl0ZW0/LmZpbHRlcj8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHRlcm5hbEZpbHRlcnMgfHwgW10pIHtcclxuICAgICAgaW5saW5lRXh0ZXJuYWxbaXRlbS5maWVsZF0gPVxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24/LmlubGluZUV4dGVybmFsPy5baXRlbS5maWVsZF0gPz8gaXRlbT8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyRGVmcyB8fCBbXSkge1xyXG4gICAgICBpbmxpbmVGaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9XHJcbiAgICAgICAgY29uZmlndXJhdGlvbj8uaW5saW5lRmlsdGVyRGVmPy5baXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA/P1xyXG4gICAgICAgIGl0ZW0/LmRlZmF1bHRTaG93aW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICBpbmxpbmVDb2x1bW4sXHJcbiAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICBpbmxpbmVFeHRlcm5hbCxcclxuICAgICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgICBpbmxpbmVGaWx0ZXJEZWYsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNsb2FkRGVmYXVsdFZhbHVlID0gKFxyXG4gICAgYXJnczoge1xyXG4gICAgICBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdO1xyXG4gICAgICBleHRlcm5hbEZpbHRlcnM6IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXJbXTtcclxuICAgICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdO1xyXG4gICAgfSxcclxuICAgIHZhbHVlOiBTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlXHJcbiAgKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGNvbnN0IGV4dGVybmFsRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBmaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgZXh0ZXJuYWxGaWx0ZXJzLCBmaWx0ZXJEZWZzIH0gPSBhcmdzO1xyXG4gICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbHVtbnMgfHwgW10pIHtcclxuICAgICAgY29sdW1uRmlsdGVyW2l0ZW0uZmllbGRdID1cclxuICAgICAgICB2YWx1ZT8uY29sdW1uRmlsdGVyPy5baXRlbS5maWVsZF0gPz8gaXRlbT8uZmlsdGVyPy5kZWZhdWx0O1xyXG4gICAgfVxyXG4gICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXh0ZXJuYWxGaWx0ZXJzIHx8IFtdKSB7XHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwiZGF0ZXJhbmdlXCIpIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXSA9IHtcclxuICAgICAgICAgIGZyb206IHZhbHVlPy5leHRlcm5hbEZpbHRlcj8uW2l0ZW0uZmllbGRdPy5mcm9tID8/IGl0ZW0uZGVmYXVsdD8uZnJvbSxcclxuICAgICAgICAgIHRvOiB2YWx1ZT8uZXh0ZXJuYWxGaWx0ZXI/LltpdGVtLmZpZWxkXT8udG8gPz8gaXRlbS5kZWZhdWx0Py50byxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2l0ZW0uZmllbGRdID1cclxuICAgICAgICAgIHZhbHVlPy5leHRlcm5hbEZpbHRlcj8uW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmRlZmF1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBkZWZcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJEZWZzIHx8IFtdKSB7XHJcbiAgICAgIGZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID1cclxuICAgICAgICB2YWx1ZT8uZmlsdGVyRGVmPy5baXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA/PyB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgIGNvbHVtbkZpbHRlcixcclxuICAgICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICAgIGV4dGVybmFsRmlsdGVyLFxyXG4gICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgIGZpbHRlckRlZixcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvc2VydmljZXMvZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBb0IsY0FBZ0M7UUFBaEMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBSHBELCtCQUF1QiwyQkFBMkIsRUFBQztRQUNuRCx1QkFBZSxtQkFBbUIsRUFBQztRQUNuQyxpQkFBdUQsRUFBRSxFQUFDO1FBRTFELGFBQVEsR0FBRyxDQUNULEdBQVcsRUFDWCxJQUlDLEVBQ0QsRUFBRTtZQUNGLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNSLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUMxQyxHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUNULE9BQU87b0JBQ1AsZUFBZTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUNILFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyw0Q0FBNEM7YUFDbEU7WUFDRCxJQUFJLENBQUMscUNBQVksR0FBRyxDQUFDLEVBQUU7Z0JBQ3JCLG1DQUFtQztnQkFDbkMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMs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QUFFO29CQUM3QixjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO3dCQUMzQixJQUFJLG9CQUFFLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxjQUFjLDBDQUFHLElBQUksQ0FBQyxLQUFLLDJDQUFHLElBQUkseUNBQUksSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSTt3QkFDckUsRUFBRSxvQkFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsY0FBYywwQ0FBRyxJQUFJLENBQUMsS0FBSywyQ0FBRyxFQUFFLHlDQUFJLElBQUksQ0FBQyxPQUFPLDBDQUFFLEVBQUU7cUJBQ2hFLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsY0FBYywwQ0FBRyxJQUFJLENBQUMsS0FBSyxvQ0FBSyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTyxDQUFDO2lCQUNuRjthQUNGO1lBQ0QsYUFBYTtZQUNiLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtnQkFDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxTQUFTLDBDQUFHLElBQUksQ0FBQyxtQkFBbUIsb0NBQUssU0FBUyxDQUFDO2FBQ2pHO1lBQ0QsT0FBTztnQkFDTCxnQkFBZ0I7Z0JBQ2hCLFlBQVk7Z0JBQ1osa0JBQWtCO2dCQUNsQixjQUFjO2dCQUNkLGFBQWE7Z0JBQ2IsU0FBUzthQUNWLENBQUM7UUFDSixDQUFDLEVBQUM7SUFqUHFELENBQUM7Ozs7WUFMekQsVUFBVTs7O1lBWEYsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IFNkU2V0dGluZ1NlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3NldHRpbmcnO1xyXG5pbXBvcnQge1xyXG4gIFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXIsXHJcbiAgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uLFxyXG4gIFNkR3JpZE1hdGVyaWFsRmlsdGVyUmVnaXN0ZXIsXHJcbiAgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSxcclxufSBmcm9tICcuL2dyaWQtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zZC1tYXRlcmlhbC1maWx0ZXItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZEdyaWRGaWx0ZXJTZXJ2aWNlIHtcclxuICAjZmlsdGVyQ29uZmlndXJhdGlvbiA9ICdHUklELUZJTFRFUi1DT05GSUdVUkFUSU9OJztcclxuICAjZmlsdGVyVmFsdWUgPSAnR1JJRC1GSUxURVItVkFMVUUnO1xyXG4gICNjYWNoZTogUmVjb3JkPHN0cmluZywgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJSZWdpc3Rlcj4gPSB7fTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNldHRpbmdTZXJ2aWNlOiBTZFNldHRpbmdTZXJ2aWNlKSB7fVxyXG4gIHJlZ2lzdGVyID0gKFxyXG4gICAga2V5OiBzdHJpbmcsXHJcbiAgICBhcmdzOiB7XHJcbiAgICAgIGNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW107XHJcbiAgICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdO1xyXG4gICAgICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW107XHJcbiAgICB9XHJcbiAgKSA9PiB7XHJcbiAgICBsZXQgY2FjaGVTZXNzaW9uID0gZmFsc2U7XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICBjb25zdCB7IGNvbHVtbnMsIGV4dGVybmFsRmlsdGVycyB9ID0gYXJncztcclxuICAgICAga2V5ID0gaGFzaCh7XHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBleHRlcm5hbEZpbHRlcnMsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjYWNoZVNlc3Npb24gPSB0cnVlOyAvLyBO4bq/dSBraMO0bmcgY8OzIGtleSB0aMOsIGNo4buJIGzGsHUgdGhlbyBzZXNzaW9uXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuI2NhY2hlW2tleV0pIHtcclxuICAgICAgLy8gU2V0dGluZyBj4bunYSBmaWx0ZXIgY29uZmlndXJhdGlvblxyXG4gICAgICBjb25zdCBmaWx0ZXJDb25maWd1cmF0aW9uID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uPihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcmVmaXg6IHRoaXMuI2ZpbHRlckNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkZWZhdWx0OiB0aGlzLiNkZWZhdWx0Q29uZmlndXJhdGlvbihhcmdzKSxcclxuICAgICAgICAgIHR5cGU6IGNhY2hlU2Vzc2lvbiA/ICdzZXNzaW9uJyA6IHVuZGVmaW5lZCxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIC8vIEzhuqV5IGdpw6EgdHLhu4sgY29uZmlndXJhdGlvbiBtZXJnZSB24bubaSBnacOhIHRy4buLIGRlZmF1bHRTaG93aW5nIGPhu6dhIGFyZ3MgbuG6v3UgbmjGsCBhcmdzIGPDsyB0aGF5IMSR4buVaVxyXG4gICAgICBmaWx0ZXJDb25maWd1cmF0aW9uLnNldCh0aGlzLiNpbml0Q29uZmlndXJhdGlvbihhcmdzLCBmaWx0ZXJDb25maWd1cmF0aW9uLmdldCgpKSk7XHJcbiAgICAgIC8vIFNldHRpbmcgY+G7p2EgZmlsdGVyIHZhbHVlXHJcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJlZml4OiB0aGlzLiNmaWx0ZXJWYWx1ZSxcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRlZmF1bHQ6IHRoaXMuI2RlZmF1bHRWYWx1ZShhcmdzKSxcclxuICAgICAgICAgIHR5cGU6IGNhY2hlU2Vzc2lvbiA/ICdzZXNzaW9uJyA6IHVuZGVmaW5lZCxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIC8vIEzhuqV5IGdpw6EgdHLhu4sgdmFsdWUgbWVyZ2UgduG7m2kgZ2nDoSB0cuG7iyBkZWZhdWx0IGPhu6dhIGFyZ3MgbuG6v3UgbmjGsCBhcmdzIGPDsyB0aGF5IMSR4buVaVxyXG4gICAgICBmaWx0ZXJWYWx1ZS5zZXQodGhpcy4jaW5pdFZhbHVlKGFyZ3MsIGZpbHRlclZhbHVlLmdldCgpKSk7XHJcbiAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xyXG4gICAgICAgICAgZ2V0OiAoKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlckNvbmZpZ3VyYXRpb24uZ2V0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2V0OiAoY29uZmlndXJhdGlvbjogUGFydGlhbDxTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24+KTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBpbmxpbmVDb2x1bW4sIGlubGluZUV4dGVybmFsLCBpbmxpbmVGaWx0ZXJEZWYgfSA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgICAgIGZpbHRlckNvbmZpZ3VyYXRpb24uc2V0KHtcclxuICAgICAgICAgICAgICBpbmxpbmVDb2x1bW4sXHJcbiAgICAgICAgICAgICAgaW5saW5lRXh0ZXJuYWwsXHJcbiAgICAgICAgICAgICAgaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBpbmxpbmVDb2x1bW4sXHJcbiAgICAgICAgICAgICAgaW5saW5lRXh0ZXJuYWwsXHJcbiAgICAgICAgICAgICAgaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJlbW92ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICBmaWx0ZXJDb25maWd1cmF0aW9uLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9ic2VydmVyOiBmaWx0ZXJDb25maWd1cmF0aW9uLm9ic2VydmVyLnBpcGUoXHJcbiAgICAgICAgICAgIHN0YXJ0V2l0aChmaWx0ZXJDb25maWd1cmF0aW9uLmdldCgpKSxcclxuICAgICAgICAgICAgLy8gU+G7rSBk4bulbmcgbeG6t2MgxJHhu4tuaCBu4bq/dSBi4buLIHJlc2V0XHJcbiAgICAgICAgICAgIG1hcChjb25maWd1cmF0aW9uID0+IGNvbmZpZ3VyYXRpb24gfHwgdGhpcy4jZGVmYXVsdENvbmZpZ3VyYXRpb24oYXJncykpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgIGdldDogKCk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWUuZ2V0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2V0OiAodmFsdWU6IFBhcnRpYWw8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZT4pOiBTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlIHx8IHt9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGZpbHRlclZhbHVlLmdldCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpbHRlcjoga2V5cy5pbmNsdWRlcygnY29sdW1uRmlsdGVyJykgPyB2YWx1ZT8uY29sdW1uRmlsdGVyIHx8IHt9IDogY29sdW1uRmlsdGVyLFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgICAgICAgIGV4dGVybmFsRmlsdGVyOiBrZXlzLmluY2x1ZGVzKCdleHRlcm5hbEZpbHRlcicpID8gdmFsdWU/LmV4dGVybmFsRmlsdGVyIHx8IHt9IDogZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgICAgICAgICAgIGZpbHRlckRlZjoga2V5cy5pbmNsdWRlcygnZmlsdGVyRGVmJykgPyB2YWx1ZT8uZmlsdGVyRGVmIHx8IHt9IDogZmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZS5zZXQodXBkYXRlZENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZENvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlclZhbHVlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9ic2VydmVyOiBmaWx0ZXJWYWx1ZS5vYnNlcnZlci5waXBlKFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICAgICAgc3RhcnRXaXRoKGZpbHRlclZhbHVlLmdldCgpKSxcclxuICAgICAgICAgICAgLy8gU+G7rSBk4bulbmcgbeG6t2MgxJHhu4tuaCBu4bq/dSBi4buLIHJlc2V0XHJcbiAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZSB8fCB0aGlzLiNkZWZhdWx0VmFsdWUoYXJncykpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVba2V5XTtcclxuICB9O1xyXG5cclxuICAjZGVmYXVsdENvbmZpZ3VyYXRpb24gPSAoYXJnczoge1xyXG4gICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXTtcclxuICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdO1xyXG4gICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdO1xyXG4gIH0pOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMsIGZpbHRlckRlZnMgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCBpbmxpbmVDb2x1bW46IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVFeHRlcm5hbDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIGNvbnN0IGlubGluZUZpbHRlckRlZjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgIGlubGluZUNvbHVtbltpdGVtLmZpZWxkXSA9IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHRlcm5hbEZpbHRlcnMgfHwgW10pIHtcclxuICAgICAgaW5saW5lRXh0ZXJuYWxbaXRlbS5maWVsZF0gPSBpdGVtPy5kZWZhdWx0U2hvd2luZztcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBkZWZcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJEZWZzIHx8IFtdKSB7XHJcbiAgICAgIGlubGluZUZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID0gaXRlbT8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgIGlubGluZUNvbHVtbixcclxuICAgICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICAgIGlubGluZUV4dGVybmFsLFxyXG4gICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgIGlubGluZUZpbHRlckRlZixcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2RlZmF1bHRWYWx1ZSA9IChhcmdzOiB7XHJcbiAgICBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdO1xyXG4gICAgZXh0ZXJuYWxGaWx0ZXJzOiBTZEdyaWRNYXRlcmlhbEV4dGVybmFsRmlsdGVyW107XHJcbiAgICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW107XHJcbiAgfSk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgY29uc3QgY29sdW1uRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBleHRlcm5hbEZpbHRlcjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG4gICAgY29uc3QgZmlsdGVyRGVmOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGV4dGVybmFsRmlsdGVycywgZmlsdGVyRGVmcyB9ID0gYXJncztcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgIGNvbHVtbkZpbHRlcltpdGVtLmZpZWxkXSA9IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdDtcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGV4dGVybmFsRmlsdGVycyB8fCBbXSkge1xyXG4gICAgICBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXSA9IGl0ZW0/LmRlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyRGVmcyB8fCBbXSkge1xyXG4gICAgICBmaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgY29sdW1uRmlsdGVyLFxyXG4gICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgZmlsdGVyRGVmLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjaW5pdENvbmZpZ3VyYXRpb24gPSAoXHJcbiAgICBhcmdzOiB7XHJcbiAgICAgIGNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW107XHJcbiAgICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdO1xyXG4gICAgICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW107XHJcbiAgICB9LFxyXG4gICAgY29uZmlndXJhdGlvbjogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uXHJcbiAgKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgZXh0ZXJuYWxGaWx0ZXJzLCBmaWx0ZXJEZWZzIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgaW5saW5lQ29sdW1uOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgY29uc3QgaW5saW5lRXh0ZXJuYWw6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVGaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sdW1ucyB8fCBbXSkge1xyXG4gICAgICBpbmxpbmVDb2x1bW5baXRlbS5maWVsZF0gPSBjb25maWd1cmF0aW9uPy5pbmxpbmVDb2x1bW4/LltpdGVtLmZpZWxkXSA/PyBpdGVtPy5maWx0ZXI/LmRlZmF1bHRTaG93aW5nO1xyXG4gICAgfVxyXG4gICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXh0ZXJuYWxGaWx0ZXJzIHx8IFtdKSB7XHJcbiAgICAgIGlubGluZUV4dGVybmFsW2l0ZW0uZmllbGRdID0gY29uZmlndXJhdGlvbj8uaW5saW5lRXh0ZXJuYWw/LltpdGVtLmZpZWxkXSA/PyBpdGVtPy5kZWZhdWx0U2hvd2luZztcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBkZWZcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJEZWZzIHx8IFtdKSB7XHJcbiAgICAgIGlubGluZUZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID0gY29uZmlndXJhdGlvbj8uaW5saW5lRmlsdGVyRGVmPy5baXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA/PyBpdGVtPy5kZWZhdWx0U2hvd2luZztcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgaW5saW5lQ29sdW1uLFxyXG4gICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgaW5saW5lRXh0ZXJuYWwsXHJcbiAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjaW5pdFZhbHVlID0gKFxyXG4gICAgYXJnczoge1xyXG4gICAgICBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdO1xyXG4gICAgICBleHRlcm5hbEZpbHRlcnM6IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXJbXTtcclxuICAgICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdO1xyXG4gICAgfSxcclxuICAgIHZhbHVlOiBTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlXHJcbiAgKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGNvbnN0IGV4dGVybmFsRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBmaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgZXh0ZXJuYWxGaWx0ZXJzLCBmaWx0ZXJEZWZzIH0gPSBhcmdzO1xyXG4gICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbHVtbnMgfHwgW10pIHtcclxuICAgICAgY29sdW1uRmlsdGVyW2l0ZW0uZmllbGRdID0gdmFsdWU/LmNvbHVtbkZpbHRlcj8uW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdDtcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGV4dGVybmFsRmlsdGVycyB8fCBbXSkge1xyXG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnZGF0ZXJhbmdlJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2l0ZW0uZmllbGRdID0ge1xyXG4gICAgICAgICAgZnJvbTogdmFsdWU/LmV4dGVybmFsRmlsdGVyPy5baXRlbS5maWVsZF0/LmZyb20gPz8gaXRlbS5kZWZhdWx0Py5mcm9tLFxyXG4gICAgICAgICAgdG86IHZhbHVlPy5leHRlcm5hbEZpbHRlcj8uW2l0ZW0uZmllbGRdPy50byA/PyBpdGVtLmRlZmF1bHQ/LnRvLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPSB2YWx1ZT8uZXh0ZXJuYWxGaWx0ZXI/LltpdGVtLmZpZWxkXSA/PyBpdGVtPy5kZWZhdWx0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyRGVmcyB8fCBbXSkge1xyXG4gICAgICBmaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9IHZhbHVlPy5maWx0ZXJEZWY/LltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID8/IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgY29sdW1uRmlsdGVyLFxyXG4gICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgZmlsdGVyRGVmLFxyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbiJdfQ==
|