@sd-angular/core 1.3.99 → 1.3.101
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 +218 -249
- 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/esm2015/grid-material/src/lib/components/grid-filter/grid-filter.component.js +13 -53
- package/esm2015/grid-material/src/lib/components/popup-filter/popup-filter.component.js +14 -31
- package/esm2015/grid-material/src/lib/grid-material.component.js +21 -20
- package/esm2015/grid-material/src/lib/services/grid-filter/grid-filter.model.js +1 -1
- package/esm2015/grid-material/src/lib/services/grid-filter/grid-filter.service.js +123 -121
- package/fesm2015/sd-angular-core-grid-material.js +187 -239
- package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
- package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
- package/grid-material/src/lib/components/grid-filter/grid-filter.component.d.ts +0 -1
- package/grid-material/src/lib/services/grid-filter/grid-filter.model.d.ts +17 -10
- package/grid-material/src/lib/services/grid-filter/grid-filter.service.d.ts +1 -3
- package/package.json +1 -1
- package/{sd-angular-core-1.3.99.tgz → sd-angular-core-1.3.101.tgz} +0 -0
|
@@ -1,166 +1,168 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _filterConfiguration, _filterValue, _cache, _loadDefaultConfiguration, _loadDefaultValue;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { Injectable } from '@angular/core';
|
|
4
4
|
import hash from 'object-hash';
|
|
5
5
|
import { SdSettingService } from '@sd-angular/core/setting';
|
|
6
|
-
import * as uuid from 'uuid';
|
|
7
6
|
export class SdGridFilterService {
|
|
8
7
|
constructor(settingService) {
|
|
9
8
|
this.settingService = settingService;
|
|
10
|
-
|
|
9
|
+
_filterConfiguration.set(this, 'GRID-FILTER-CONFIGURATION');
|
|
10
|
+
_filterValue.set(this, 'GRID-FILTER-VALUE');
|
|
11
|
+
_cache.set(this, {});
|
|
11
12
|
this.register = (key, args) => {
|
|
12
13
|
let cacheSession = false;
|
|
13
14
|
if (!key) {
|
|
14
|
-
|
|
15
|
+
const { columns, externalFilters } = args;
|
|
16
|
+
key = hash({
|
|
17
|
+
columns,
|
|
18
|
+
externalFilters
|
|
19
|
+
});
|
|
15
20
|
cacheSession = true; // Nếu không có key thì chỉ lưu theo session
|
|
16
21
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
22
|
+
if (!__classPrivateFieldGet(this, _cache)[key]) {
|
|
23
|
+
const filterConfiguration = this.settingService.create({
|
|
24
|
+
prefix: __classPrivateFieldGet(this, _filterConfiguration),
|
|
25
|
+
key
|
|
26
|
+
}, {
|
|
27
|
+
default: __classPrivateFieldGet(this, _loadDefaultConfiguration).call(this, args),
|
|
28
|
+
type: cacheSession ? 'session' : undefined
|
|
29
|
+
});
|
|
30
|
+
const filterValue = this.settingService.create({
|
|
31
|
+
prefix: __classPrivateFieldGet(this, _filterValue),
|
|
32
|
+
key
|
|
33
|
+
}, {
|
|
34
|
+
default: __classPrivateFieldGet(this, _loadDefaultValue).call(this, args),
|
|
35
|
+
type: cacheSession ? 'session' : undefined
|
|
36
|
+
});
|
|
37
|
+
__classPrivateFieldGet(this, _cache)[key] = {
|
|
38
|
+
configuration: {
|
|
39
|
+
get: () => {
|
|
40
|
+
const configuration = filterConfiguration.get();
|
|
41
|
+
return {
|
|
42
|
+
// Filter column
|
|
43
|
+
inlineColumn: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineColumn) || {},
|
|
44
|
+
// Filter external
|
|
45
|
+
inlineExternal: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) || {},
|
|
46
|
+
// Filter def
|
|
47
|
+
inlineFilterDef: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) || {},
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
set: (configuration) => {
|
|
51
|
+
const keys = Object.keys(configuration || {});
|
|
52
|
+
const current = filterConfiguration.get();
|
|
53
|
+
const { inlineColumn, inlineExternal, inlineFilterDef } = current;
|
|
54
|
+
const updatedConfiguration = {
|
|
55
|
+
// Filter column
|
|
56
|
+
inlineColumn: keys.includes('inlineColumn') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.inlineColumn) || {}) : inlineColumn,
|
|
57
|
+
// Filter external
|
|
58
|
+
inlineExternal: keys.includes('inlineExternal') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) || {}) : inlineExternal,
|
|
59
|
+
// Filter def
|
|
60
|
+
inlineFilterDef: keys.includes('inlineFilterDef') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) || {}) : inlineFilterDef,
|
|
61
|
+
};
|
|
62
|
+
filterConfiguration.set(updatedConfiguration);
|
|
63
|
+
return updatedConfiguration;
|
|
64
|
+
},
|
|
65
|
+
remove: () => {
|
|
66
|
+
filterConfiguration.remove();
|
|
67
|
+
},
|
|
68
|
+
observer: filterConfiguration.observer
|
|
69
|
+
},
|
|
70
|
+
value: {
|
|
71
|
+
get: () => {
|
|
72
|
+
const configuration = filterValue.get();
|
|
73
|
+
return {
|
|
74
|
+
// Filter column
|
|
75
|
+
columnFilter: (configuration === null || configuration === void 0 ? void 0 : configuration.columnFilter) || {},
|
|
76
|
+
// Filter external
|
|
77
|
+
externalFilter: (configuration === null || configuration === void 0 ? void 0 : configuration.externalFilter) || {},
|
|
78
|
+
// Filter def
|
|
79
|
+
filterDef: (configuration === null || configuration === void 0 ? void 0 : configuration.filterDef) || {}
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
set: (configuration) => {
|
|
83
|
+
const keys = Object.keys(configuration || {});
|
|
84
|
+
const current = filterValue.get();
|
|
85
|
+
const { columnFilter, externalFilter, filterDef } = current;
|
|
86
|
+
const updatedConfiguration = {
|
|
87
|
+
// Filter column
|
|
88
|
+
columnFilter: keys.includes('columnFilter') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.columnFilter) || {}) : columnFilter,
|
|
89
|
+
// Filter external
|
|
90
|
+
externalFilter: keys.includes('externalFilter') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.externalFilter) || {}) : externalFilter,
|
|
91
|
+
// Filter def
|
|
92
|
+
filterDef: keys.includes('filterDef') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.filterDef) || {}) : filterDef,
|
|
93
|
+
};
|
|
94
|
+
filterValue.set(updatedConfiguration);
|
|
95
|
+
return updatedConfiguration;
|
|
96
|
+
},
|
|
97
|
+
remove: () => {
|
|
98
|
+
filterValue.remove();
|
|
99
|
+
},
|
|
100
|
+
observer: filterValue.observer
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return __classPrivateFieldGet(this, _cache)[key];
|
|
68
105
|
};
|
|
69
|
-
|
|
70
|
-
var _a, _b, _c, _d
|
|
106
|
+
_loadDefaultConfiguration.set(this, (args) => {
|
|
107
|
+
var _a, _b, _c, _d;
|
|
71
108
|
const { columns, externalFilters, filterDefs } = args;
|
|
72
109
|
const inlineColumn = {};
|
|
73
|
-
const columnFilter = {};
|
|
74
110
|
const inlineExternal = {};
|
|
75
|
-
const externalFilter = {};
|
|
76
111
|
const inlineFilterDef = {};
|
|
77
|
-
const filterDef = {};
|
|
78
112
|
// Filter column
|
|
79
113
|
for (const item of (columns || [])) {
|
|
80
114
|
inlineColumn[item.field] = (_a = inlineColumn[item.field]) !== null && _a !== void 0 ? _a : (_b = item === null || item === void 0 ? void 0 : item.filter) === null || _b === void 0 ? void 0 : _b.defaultShowing;
|
|
81
|
-
columnFilter[item.field] = (_c = columnFilter[item.field]) !== null && _c !== void 0 ? _c : (_d = item === null || item === void 0 ? void 0 : item.filter) === null || _d === void 0 ? void 0 : _d.default;
|
|
82
115
|
}
|
|
83
116
|
// Filter external
|
|
84
117
|
for (const item of (externalFilters || [])) {
|
|
85
|
-
inlineExternal[item.field] = (
|
|
118
|
+
inlineExternal[item.field] = (_c = inlineExternal[item.field]) !== null && _c !== void 0 ? _c : item === null || item === void 0 ? void 0 : item.defaultShowing;
|
|
119
|
+
}
|
|
120
|
+
// Filter def
|
|
121
|
+
for (const item of (filterDefs || [])) {
|
|
122
|
+
inlineFilterDef[item.sdMaterialFilterDef] = (_d = inlineFilterDef[item.sdMaterialFilterDef]) !== null && _d !== void 0 ? _d : item === null || item === void 0 ? void 0 : item.defaultShowing;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
inlineColumn,
|
|
126
|
+
inlineExternal,
|
|
127
|
+
inlineFilterDef,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
_loadDefaultValue.set(this, (args) => {
|
|
131
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
132
|
+
const { columns, externalFilters, filterDefs } = args;
|
|
133
|
+
const columnFilter = {};
|
|
134
|
+
const externalFilter = {};
|
|
135
|
+
const filterDef = {};
|
|
136
|
+
// Filter column
|
|
137
|
+
for (const item of (columns || [])) {
|
|
138
|
+
columnFilter[item.field] = (_a = columnFilter[item.field]) !== null && _a !== void 0 ? _a : (_b = item === null || item === void 0 ? void 0 : item.filter) === null || _b === void 0 ? void 0 : _b.default;
|
|
139
|
+
}
|
|
140
|
+
// Filter external
|
|
141
|
+
for (const item of (externalFilters || [])) {
|
|
86
142
|
if (item.type === 'daterange') {
|
|
87
143
|
externalFilter[item.field] = {
|
|
88
|
-
from: (
|
|
89
|
-
to: (
|
|
144
|
+
from: (_f = (_d = (_c = externalFilter[item.field]) === null || _c === void 0 ? void 0 : _c.from) !== null && _d !== void 0 ? _d : (_e = item.default) === null || _e === void 0 ? void 0 : _e.from) !== null && _f !== void 0 ? _f : undefined,
|
|
145
|
+
to: (_k = (_h = (_g = externalFilter[item.field]) === null || _g === void 0 ? void 0 : _g.to) !== null && _h !== void 0 ? _h : (_j = item.default) === null || _j === void 0 ? void 0 : _j.to) !== null && _k !== void 0 ? _k : undefined
|
|
90
146
|
};
|
|
91
147
|
}
|
|
92
148
|
else {
|
|
93
|
-
externalFilter[item.field] = (
|
|
149
|
+
externalFilter[item.field] = (_l = externalFilter[item.field]) !== null && _l !== void 0 ? _l : item.default;
|
|
94
150
|
}
|
|
95
151
|
}
|
|
96
152
|
// Filter def
|
|
97
|
-
for (const item of (filterDefs || [])) {
|
|
98
|
-
inlineFilterDef[item.sdMaterialFilterDef] = (_q = inlineFilterDef[item.sdMaterialFilterDef]) !== null && _q !== void 0 ? _q : item === null || item === void 0 ? void 0 : item.defaultShowing;
|
|
99
|
-
}
|
|
100
153
|
return {
|
|
101
|
-
quickFilters: [],
|
|
102
|
-
selectedQuickFilter: null,
|
|
103
|
-
inlineColumn,
|
|
104
154
|
columnFilter,
|
|
105
|
-
inlineExternal,
|
|
106
155
|
externalFilter,
|
|
107
|
-
inlineFilterDef,
|
|
108
156
|
filterDef,
|
|
109
157
|
};
|
|
110
158
|
});
|
|
111
|
-
this.get = (key) => {
|
|
112
|
-
var _a;
|
|
113
|
-
if (!key) {
|
|
114
|
-
return {
|
|
115
|
-
selectedQuickFilter: null,
|
|
116
|
-
quickFilters: [],
|
|
117
|
-
inlineExternal: {},
|
|
118
|
-
inlineColumn: {},
|
|
119
|
-
inlineFilterDef: {}
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
const { get } = this.settingService.create({
|
|
123
|
-
prefix: __classPrivateFieldGet(this, _prefix),
|
|
124
|
-
key
|
|
125
|
-
});
|
|
126
|
-
const configuration = get();
|
|
127
|
-
return {
|
|
128
|
-
selectedQuickFilter: (_a = configuration === null || configuration === void 0 ? void 0 : configuration.selectedQuickFilter) !== null && _a !== void 0 ? _a : null,
|
|
129
|
-
quickFilters: (configuration === null || configuration === void 0 ? void 0 : configuration.quickFilters) || [],
|
|
130
|
-
inlineExternal: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) || {},
|
|
131
|
-
inlineColumn: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineColumn) || {},
|
|
132
|
-
inlineFilterDef: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) || {},
|
|
133
|
-
};
|
|
134
|
-
};
|
|
135
|
-
this.set = (key, configuration) => {
|
|
136
|
-
configuration = {
|
|
137
|
-
selectedQuickFilter: (configuration === null || configuration === void 0 ? void 0 : configuration.selectedQuickFilter) || null,
|
|
138
|
-
quickFilters: (configuration === null || configuration === void 0 ? void 0 : configuration.quickFilters) || [],
|
|
139
|
-
inlineExternal: configuration.inlineExternal || {},
|
|
140
|
-
inlineColumn: configuration.inlineColumn || {},
|
|
141
|
-
inlineFilterDef: configuration.inlineFilterDef || {}
|
|
142
|
-
};
|
|
143
|
-
if (!key) {
|
|
144
|
-
return configuration;
|
|
145
|
-
}
|
|
146
|
-
const { set } = this.settingService.create({
|
|
147
|
-
prefix: __classPrivateFieldGet(this, _prefix),
|
|
148
|
-
key
|
|
149
|
-
});
|
|
150
|
-
key = hash({
|
|
151
|
-
prefix: __classPrivateFieldGet(this, _prefix),
|
|
152
|
-
key
|
|
153
|
-
});
|
|
154
|
-
set(configuration);
|
|
155
|
-
return configuration;
|
|
156
|
-
};
|
|
157
159
|
}
|
|
158
160
|
}
|
|
159
|
-
|
|
161
|
+
_filterConfiguration = new WeakMap(), _filterValue = new WeakMap(), _cache = new WeakMap(), _loadDefaultConfiguration = new WeakMap(), _loadDefaultValue = new WeakMap();
|
|
160
162
|
SdGridFilterService.decorators = [
|
|
161
163
|
{ type: Injectable }
|
|
162
164
|
];
|
|
163
165
|
SdGridFilterService.ctorParameters = () => [
|
|
164
166
|
{ type: SdSettingService }
|
|
165
167
|
];
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvc2VydmljZXMvZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVELE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBSzdCLE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsWUFBb0IsY0FBZ0M7UUFBaEMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBRHBELGtCQUFVLGFBQWEsRUFBQztRQUd4QixhQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFJeEIsRUFBZ0MsRUFBRTtZQUNqQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUixHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNoQixZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsNENBQTRDO2FBQ2xFO1lBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBb0M7Z0JBQzVHLE1BQU0sdUNBQWM7Z0JBQ3BCLEdBQUc7YUFDSixFQUFFO2dCQUNELE9BQU8sRUFBRSxnREFBQSxJQUFJLEVBQWMsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FB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Y29yZSc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IHsgU2RTZXR0aW5nU2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvc2V0dGluZyc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXIsIFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbiwgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJSZWdpc3RlciB9IGZyb20gJy4vZ3JpZC1maWx0ZXIubW9kZWwnO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbENvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NkLW1hdGVyaWFsLWZpbHRlci1kZWYuZGlyZWN0aXZlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFNkR3JpZEZpbHRlclNlcnZpY2Uge1xyXG4gICNwcmVmaXggPSAnR1JJRC1GSUxURVInO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2V0dGluZ1NlcnZpY2U6IFNkU2V0dGluZ1NlcnZpY2UpIHtcclxuICB9XHJcbiAgcmVnaXN0ZXIgPSAoa2V5OiBzdHJpbmcsIGFyZ3M6IHtcclxuICAgIGNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW10sXHJcbiAgICBleHRlcm5hbEZpbHRlcnM6IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXJbXSxcclxuICAgIGZpbHRlckRlZnM6IFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmVbXVxyXG4gIH0pOiBTZEdyaWRNYXRlcmlhbEZpbHRlclJlZ2lzdGVyID0+IHtcclxuICAgIGxldCBjYWNoZVNlc3Npb24gPSBmYWxzZTtcclxuICAgIGlmICgha2V5KSB7XHJcbiAgICAgIGtleSA9IHV1aWQudjQoKTtcclxuICAgICAgY2FjaGVTZXNzaW9uID0gdHJ1ZTsgLy8gTuG6v3Uga2jDtG5nIGPDsyBrZXkgdGjDrCBjaOG7iSBsxrB1IHRoZW8gc2Vzc2lvblxyXG4gICAgfVxyXG4gICAgY29uc3QgeyBnZXQsIHNldCwgcmVtb3ZlLCBzdWJqZWN0LCBvYnNlcnZlciB9ID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uPih7XHJcbiAgICAgIHByZWZpeDogdGhpcy4jcHJlZml4LFxyXG4gICAgICBrZXlcclxuICAgIH0sIHtcclxuICAgICAgZGVmYXVsdDogdGhpcy4jbG9hZERlZmF1bHQoYXJncyksXHJcbiAgICAgIHR5cGU6IGNhY2hlU2Vzc2lvbiA/ICdzZXNzaW9uJyA6IHVuZGVmaW5lZFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBnZXQ6ICgpOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBnZXQoKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc2VsZWN0ZWRRdWlja0ZpbHRlcjogY29uZmlndXJhdGlvbj8uc2VsZWN0ZWRRdWlja0ZpbHRlciA/PyBudWxsLFxyXG4gICAgICAgICAgcXVpY2tGaWx0ZXJzOiBjb25maWd1cmF0aW9uPy5xdWlja0ZpbHRlcnMgfHwgW10sXHJcbiAgICAgICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgICAgICBpbmxpbmVDb2x1bW46IGNvbmZpZ3VyYXRpb24/LmlubGluZUNvbHVtbiB8fCB7fSxcclxuICAgICAgICAgIGNvbHVtbkZpbHRlcjogY29uZmlndXJhdGlvbj8uY29sdW1uRmlsdGVyIHx8IHt9LFxyXG4gICAgICAgICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICAgICAgICBpbmxpbmVFeHRlcm5hbDogY29uZmlndXJhdGlvbj8uaW5saW5lRXh0ZXJuYWwgfHwge30sXHJcbiAgICAgICAgICBleHRlcm5hbEZpbHRlcjogY29uZmlndXJhdGlvbj8uZXh0ZXJuYWxGaWx0ZXIgfHwge30sXHJcbiAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICBpbmxpbmVGaWx0ZXJEZWY6IGNvbmZpZ3VyYXRpb24/LmlubGluZUZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgICAgIGZpbHRlckRlZjogY29uZmlndXJhdGlvbj8uZmlsdGVyRGVmIHx8IHt9XHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuICAgICAgc2V0OiAoY29uZmlndXJhdGlvbjogUGFydGlhbDxTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24+KTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlndXJhdGlvbiB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWRRdWlja0ZpbHRlciwgcXVpY2tGaWx0ZXJzLCBpbmxpbmVDb2x1bW4sIGNvbHVtbkZpbHRlciwgaW5saW5lRXh0ZXJuYWwsIGV4dGVybmFsRmlsdGVyLCBpbmxpbmVGaWx0ZXJEZWYsIGZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICBjb25zdCB1cGRhdGVkQ29uZmlndXJhdGlvbiA9IHtcclxuICAgICAgICAgIHNlbGVjdGVkUXVpY2tGaWx0ZXI6IGtleXMuaW5jbHVkZXMoJ3NlbGVjdGVkUXVpY2tGaWx0ZXInKSA/IChjb25maWd1cmF0aW9uPy5zZWxlY3RlZFF1aWNrRmlsdGVyIHx8IG51bGwpIDogc2VsZWN0ZWRRdWlja0ZpbHRlcixcclxuICAgICAgICAgIHF1aWNrRmlsdGVyczoga2V5cy5pbmNsdWRlcygncXVpY2tGaWx0ZXJzJykgPyAoY29uZmlndXJhdGlvbj8ucXVpY2tGaWx0ZXJzIHx8IFtdKSA6IHF1aWNrRmlsdGVycyxcclxuICAgICAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgICAgIGlubGluZUNvbHVtbjoga2V5cy5pbmNsdWRlcygnaW5saW5lQ29sdW1uJykgPyAoY29uZmlndXJhdGlvbj8uaW5saW5lQ29sdW1uIHx8IHt9KSA6IGlubGluZUNvbHVtbixcclxuICAgICAgICAgIGNvbHVtbkZpbHRlcjoga2V5cy5pbmNsdWRlcygnY29sdW1uRmlsdGVyJykgPyAoY29uZmlndXJhdGlvbj8uY29sdW1uRmlsdGVyIHx8IHt9KSA6IGNvbHVtbkZpbHRlcixcclxuICAgICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgICAgaW5saW5lRXh0ZXJuYWw6IGtleXMuaW5jbHVkZXMoJ2lubGluZUV4dGVybmFsJykgPyAoY29uZmlndXJhdGlvbj8uaW5saW5lRXh0ZXJuYWwgfHwge30pIDogaW5saW5lRXh0ZXJuYWwsXHJcbiAgICAgICAgICBleHRlcm5hbEZpbHRlcjoga2V5cy5pbmNsdWRlcygnZXh0ZXJuYWxGaWx0ZXInKSA/IChjb25maWd1cmF0aW9uPy5leHRlcm5hbEZpbHRlciB8fCB7fSkgOiBleHRlcm5hbEZpbHRlcixcclxuICAgICAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgICAgIGlubGluZUZpbHRlckRlZjoga2V5cy5pbmNsdWRlcygnaW5saW5lRmlsdGVyRGVmJykgPyAoY29uZmlndXJhdGlvbj8uaW5saW5lRmlsdGVyRGVmIHx8IHt9KSA6IGlubGluZUZpbHRlckRlZixcclxuICAgICAgICAgIGZpbHRlckRlZjoga2V5cy5pbmNsdWRlcygnZmlsdGVyRGVmJykgPyAoY29uZmlndXJhdGlvbj8uZmlsdGVyRGVmIHx8IHt9KSA6IGZpbHRlckRlZixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHNldCh1cGRhdGVkQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRDb25maWd1cmF0aW9uO1xyXG4gICAgICB9LFxyXG4gICAgICByZW1vdmU6ICgpID0+IHtcclxuICAgICAgICByZW1vdmUoKTtcclxuICAgICAgfSxcclxuICAgICAgc3ViamVjdCxcclxuICAgICAgb2JzZXJ2ZXJcclxuICAgIH1cclxuICB9XHJcblxyXG4gICNsb2FkRGVmYXVsdCA9IChhcmdzOiB7XHJcbiAgICBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdLFxyXG4gICAgZXh0ZXJuYWxGaWx0ZXJzOiBTZEdyaWRNYXRlcmlhbEV4dGVybmFsRmlsdGVyW10sXHJcbiAgICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW11cclxuICB9KTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgZXh0ZXJuYWxGaWx0ZXJzLCBmaWx0ZXJEZWZzIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgaW5saW5lQ29sdW1uOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgY29uc3QgY29sdW1uRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVFeHRlcm5hbDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIGNvbnN0IGV4dGVybmFsRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVGaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBjb25zdCBmaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoY29sdW1ucyB8fCBbXSkpIHtcclxuICAgICAgaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID0gaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICAgIGNvbHVtbkZpbHRlcltpdGVtLmZpZWxkXSA9IGNvbHVtbkZpbHRlcltpdGVtLmZpZWxkXSA/PyBpdGVtPy5maWx0ZXI/LmRlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoZXh0ZXJuYWxGaWx0ZXJzIHx8IFtdKSkge1xyXG4gICAgICBpbmxpbmVFeHRlcm5hbFtpdGVtLmZpZWxkXSA9IGlubGluZUV4dGVybmFsW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmRlZmF1bHRTaG93aW5nO1xyXG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnZGF0ZXJhbmdlJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2l0ZW0uZmllbGRdID0ge1xyXG4gICAgICAgICAgZnJvbTogZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0/LmZyb20gPz8gaXRlbS5kZWZhdWx0Py5mcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXT8udG8gPz8gaXRlbS5kZWZhdWx0Py50byA/PyB1bmRlZmluZWRcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2l0ZW0uZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPz8gaXRlbS5kZWZhdWx0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgKGZpbHRlckRlZnMgfHwgW10pKSB7XHJcbiAgICAgIGlubGluZUZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID0gaW5saW5lRmlsdGVyRGVmW2l0ZW0uc2RNYXRlcmlhbEZpbHRlckRlZl0gPz8gaXRlbT8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBxdWlja0ZpbHRlcnM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFF1aWNrRmlsdGVyOiBudWxsLFxyXG4gICAgICBpbmxpbmVDb2x1bW4sXHJcbiAgICAgIGNvbHVtbkZpbHRlcixcclxuICAgICAgaW5saW5lRXh0ZXJuYWwsXHJcbiAgICAgIGV4dGVybmFsRmlsdGVyLFxyXG4gICAgICBpbmxpbmVGaWx0ZXJEZWYsXHJcbiAgICAgIGZpbHRlckRlZixcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCA9IChrZXk6IHN0cmluZyk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNlbGVjdGVkUXVpY2tGaWx0ZXI6IG51bGwsXHJcbiAgICAgICAgcXVpY2tGaWx0ZXJzOiBbXSxcclxuICAgICAgICBpbmxpbmVFeHRlcm5hbDoge30sXHJcbiAgICAgICAgaW5saW5lQ29sdW1uOiB7fSxcclxuICAgICAgICBpbmxpbmVGaWx0ZXJEZWY6IHt9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGdldCB9ID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uPih7XHJcbiAgICAgIHByZWZpeDogdGhpcy4jcHJlZml4LFxyXG4gICAgICBrZXlcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGdldCgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VsZWN0ZWRRdWlja0ZpbHRlcjogY29uZmlndXJhdGlvbj8uc2VsZWN0ZWRRdWlja0ZpbHRlciA/PyBudWxsLFxyXG4gICAgICBxdWlja0ZpbHRlcnM6IGNvbmZpZ3VyYXRpb24/LnF1aWNrRmlsdGVycyB8fCBbXSxcclxuICAgICAgaW5saW5lRXh0ZXJuYWw6IGNvbmZpZ3VyYXRpb24/LmlubGluZUV4dGVybmFsIHx8IHt9LFxyXG4gICAgICBpbmxpbmVDb2x1bW46IGNvbmZpZ3VyYXRpb24/LmlubGluZUNvbHVtbiB8fCB7fSxcclxuICAgICAgaW5saW5lRmlsdGVyRGVmOiBjb25maWd1cmF0aW9uPy5pbmxpbmVGaWx0ZXJEZWYgfHwge30sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2V0ID0gKGtleTogc3RyaW5nLCBjb25maWd1cmF0aW9uOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24pOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgY29uZmlndXJhdGlvbiA9IHtcclxuICAgICAgc2VsZWN0ZWRRdWlja0ZpbHRlcjogY29uZmlndXJhdGlvbj8uc2VsZWN0ZWRRdWlja0ZpbHRlciB8fCBudWxsLFxyXG4gICAgICBxdWlja0ZpbHRlcnM6IGNvbmZpZ3VyYXRpb24/LnF1aWNrRmlsdGVycyB8fCBbXSxcclxuICAgICAgaW5saW5lRXh0ZXJuYWw6IGNvbmZpZ3VyYXRpb24uaW5saW5lRXh0ZXJuYWwgfHwge30sXHJcbiAgICAgIGlubGluZUNvbHVtbjogY29uZmlndXJhdGlvbi5pbmxpbmVDb2x1bW4gfHwge30sXHJcbiAgICAgIGlubGluZUZpbHRlckRlZjogY29uZmlndXJhdGlvbi5pbmxpbmVGaWx0ZXJEZWYgfHwge31cclxuICAgIH07XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgc2V0IH0gPSB0aGlzLnNldHRpbmdTZXJ2aWNlLmNyZWF0ZTxTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24+KHtcclxuICAgICAgcHJlZml4OiB0aGlzLiNwcmVmaXgsXHJcbiAgICAgIGtleVxyXG4gICAgfSk7XHJcbiAgICBrZXkgPSBoYXNoKHtcclxuICAgICAgcHJlZml4OiB0aGlzLiNwcmVmaXgsXHJcbiAgICAgIGtleVxyXG4gICAgfSk7XHJcbiAgICBzZXQoY29uZmlndXJhdGlvbik7XHJcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcclxuICB9XHJcbn1cclxuIl19
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvc2VydmljZXMvZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTzVELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBb0IsY0FBZ0M7UUFBaEMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBSHBELCtCQUF1QiwyQkFBMkIsRUFBQztRQUNuRCx1QkFBZSxtQkFBbUIsRUFBQztRQUNuQyxpQkFBdUQsRUFBRSxFQUFDO1FBRzFELGFBQVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUl4QixFQUFFLEVBQUU7WUFDSCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDMUMsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDVCxPQUFPO29CQUNQLGVBQWU7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsNENBQTRDO2FBQ2xFO1lBQ0QsSUFBSSxDQUFDLHFDQUFZLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFvQztvQkFDeEYsTUFBTSxvREFBMkI7b0JBQ2pDLEdBQUc7aUJBQ0osRUFBRTtvQkFDRCxPQUFPLEVB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LENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxFQUFFLHlDQUFJLElBQUksQ0FBQyxPQUFPLDBDQUFFLEVBQUUsbUNBQUksU0FBUztxQkFDcEUsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1DQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3pFO2FBQ0Y7WUFDRCxhQUFhO1lBQ2IsT0FBTztnQkFDTCxZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsU0FBUzthQUNWLENBQUE7UUFDSCxDQUFDLEVBQUE7SUE5SkQsQ0FBQzs7OztZQU5GLFVBQVU7OztZQU5GLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBTZFNldHRpbmdTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9zZXR0aW5nJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlciwgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uLCBTZEdyaWRNYXRlcmlhbEZpbHRlclJlZ2lzdGVyLCBTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlIH0gZnJvbSAnLi9ncmlkLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2QtbWF0ZXJpYWwtZmlsdGVyLWRlZi5kaXJlY3RpdmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2RHcmlkRmlsdGVyU2VydmljZSB7XHJcbiAgI2ZpbHRlckNvbmZpZ3VyYXRpb24gPSAnR1JJRC1GSUxURVItQ09ORklHVVJBVElPTic7XHJcbiAgI2ZpbHRlclZhbHVlID0gJ0dSSUQtRklMVEVSLVZBTFVFJztcclxuICAjY2FjaGU6IFJlY29yZDxzdHJpbmcsIFNkR3JpZE1hdGVyaWFsRmlsdGVyUmVnaXN0ZXI+ID0ge307XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXR0aW5nU2VydmljZTogU2RTZXR0aW5nU2VydmljZSkge1xyXG4gIH1cclxuICByZWdpc3RlciA9IChrZXk6IHN0cmluZywgYXJnczoge1xyXG4gICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXSxcclxuICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdLFxyXG4gICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdXHJcbiAgfSkgPT4ge1xyXG4gICAgbGV0IGNhY2hlU2Vzc2lvbiA9IGZhbHNlO1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMgfSA9IGFyZ3M7XHJcbiAgICAgIGtleSA9IGhhc2goe1xyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJzXHJcbiAgICAgIH0pO1xyXG4gICAgICBjYWNoZVNlc3Npb24gPSB0cnVlOyAvLyBO4bq/dSBraMO0bmcgY8OzIGtleSB0aMOsIGNo4buJIGzGsHUgdGhlbyBzZXNzaW9uXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuI2NhY2hlW2tleV0pIHtcclxuICAgICAgY29uc3QgZmlsdGVyQ29uZmlndXJhdGlvbiA9IHRoaXMuc2V0dGluZ1NlcnZpY2UuY3JlYXRlPFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbj4oe1xyXG4gICAgICAgIHByZWZpeDogdGhpcy4jZmlsdGVyQ29uZmlndXJhdGlvbixcclxuICAgICAgICBrZXlcclxuICAgICAgfSwge1xyXG4gICAgICAgIGRlZmF1bHQ6IHRoaXMuI2xvYWREZWZhdWx0Q29uZmlndXJhdGlvbihhcmdzKSxcclxuICAgICAgICB0eXBlOiBjYWNoZVNlc3Npb24gPyAnc2Vzc2lvbicgOiB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZT4oe1xyXG4gICAgICAgIHByZWZpeDogdGhpcy4jZmlsdGVyVmFsdWUsXHJcbiAgICAgICAga2V5XHJcbiAgICAgIH0sIHtcclxuICAgICAgICBkZWZhdWx0OiB0aGlzLiNsb2FkRGVmYXVsdFZhbHVlKGFyZ3MpLFxyXG4gICAgICAgIHR5cGU6IGNhY2hlU2Vzc2lvbiA/ICdzZXNzaW9uJyA6IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XHJcbiAgICAgICAgICBnZXQ6ICgpOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZmlsdGVyQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgICAgICAgICAgaW5saW5lQ29sdW1uOiBjb25maWd1cmF0aW9uPy5pbmxpbmVDb2x1bW4gfHwge30sXHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICAgICAgICAgICAgaW5saW5lRXh0ZXJuYWw6IGNvbmZpZ3VyYXRpb24/LmlubGluZUV4dGVybmFsIHx8IHt9LFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgICAgICAgICBpbmxpbmVGaWx0ZXJEZWY6IGNvbmZpZ3VyYXRpb24/LmlubGluZUZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzZXQ6IChjb25maWd1cmF0aW9uOiBQYXJ0aWFsPFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbj4pOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlndXJhdGlvbiB8fCB7fSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBmaWx0ZXJDb25maWd1cmF0aW9uLmdldCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGlubGluZUNvbHVtbiwgaW5saW5lRXh0ZXJuYWwsIGlubGluZUZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGlubGluZUNvbHVtbjoga2V5cy5pbmNsdWRlcygnaW5saW5lQ29sdW1uJykgPyAoY29uZmlndXJhdGlvbj8uaW5saW5lQ29sdW1uIHx8IHt9KSA6IGlubGluZUNvbHVtbixcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgICAgICAgICBpbmxpbmVFeHRlcm5hbDoga2V5cy5pbmNsdWRlcygnaW5saW5lRXh0ZXJuYWwnKSA/IChjb25maWd1cmF0aW9uPy5pbmxpbmVFeHRlcm5hbCB8fCB7fSkgOiBpbmxpbmVFeHRlcm5hbCxcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICAgICAgaW5saW5lRmlsdGVyRGVmOiBrZXlzLmluY2x1ZGVzKCdpbmxpbmVGaWx0ZXJEZWYnKSA/IChjb25maWd1cmF0aW9uPy5pbmxpbmVGaWx0ZXJEZWYgfHwge30pIDogaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJDb25maWd1cmF0aW9uLnNldCh1cGRhdGVkQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkQ29uZmlndXJhdGlvbjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZW1vdmU6ICgpID0+IHtcclxuICAgICAgICAgICAgZmlsdGVyQ29uZmlndXJhdGlvbi5yZW1vdmUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYnNlcnZlcjogZmlsdGVyQ29uZmlndXJhdGlvbi5vYnNlcnZlclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgIGdldDogKCk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZmlsdGVyVmFsdWUuZ2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpbHRlcjogY29uZmlndXJhdGlvbj8uY29sdW1uRmlsdGVyIHx8IHt9LFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgICAgICAgIGV4dGVybmFsRmlsdGVyOiBjb25maWd1cmF0aW9uPy5leHRlcm5hbEZpbHRlciB8fCB7fSxcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICAgICAgZmlsdGVyRGVmOiBjb25maWd1cmF0aW9uPy5maWx0ZXJEZWYgfHwge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzZXQ6IChjb25maWd1cmF0aW9uOiBQYXJ0aWFsPFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWU+KTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjb25maWd1cmF0aW9uIHx8IHt9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGZpbHRlclZhbHVlLmdldCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpbHRlcjoga2V5cy5pbmNsdWRlcygnY29sdW1uRmlsdGVyJykgPyAoY29uZmlndXJhdGlvbj8uY29sdW1uRmlsdGVyIHx8IHt9KSA6IGNvbHVtbkZpbHRlcixcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgICAgICAgICBleHRlcm5hbEZpbHRlcjoga2V5cy5pbmNsdWRlcygnZXh0ZXJuYWxGaWx0ZXInKSA/IChjb25maWd1cmF0aW9uPy5leHRlcm5hbEZpbHRlciB8fCB7fSkgOiBleHRlcm5hbEZpbHRlcixcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICAgICAgZmlsdGVyRGVmOiBrZXlzLmluY2x1ZGVzKCdmaWx0ZXJEZWYnKSA/IChjb25maWd1cmF0aW9uPy5maWx0ZXJEZWYgfHwge30pIDogZmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZS5zZXQodXBkYXRlZENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZENvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlclZhbHVlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9ic2VydmVyOiBmaWx0ZXJWYWx1ZS5vYnNlcnZlclxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlW2tleV07XHJcbiAgfVxyXG5cclxuICAjbG9hZERlZmF1bHRDb25maWd1cmF0aW9uID0gKGFyZ3M6IHtcclxuICAgIGNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW10sXHJcbiAgICBleHRlcm5hbEZpbHRlcnM6IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXJbXSxcclxuICAgIGZpbHRlckRlZnM6IFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmVbXVxyXG4gIH0pOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMsIGZpbHRlckRlZnMgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCBpbmxpbmVDb2x1bW46IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVFeHRlcm5hbDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIGNvbnN0IGlubGluZUZpbHRlckRlZjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoY29sdW1ucyB8fCBbXSkpIHtcclxuICAgICAgaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID0gaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoZXh0ZXJuYWxGaWx0ZXJzIHx8IFtdKSkge1xyXG4gICAgICBpbmxpbmVFeHRlcm5hbFtpdGVtLmZpZWxkXSA9IGlubGluZUV4dGVybmFsW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmRlZmF1bHRTaG93aW5nO1xyXG4gICAgfVxyXG4gICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChmaWx0ZXJEZWZzIHx8IFtdKSkge1xyXG4gICAgICBpbmxpbmVGaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9IGlubGluZUZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID8/IGl0ZW0/LmRlZmF1bHRTaG93aW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaW5saW5lQ29sdW1uLFxyXG4gICAgICBpbmxpbmVFeHRlcm5hbCxcclxuICAgICAgaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgI2xvYWREZWZhdWx0VmFsdWUgPSAoYXJnczoge1xyXG4gICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXSxcclxuICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdLFxyXG4gICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdXHJcbiAgfSk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMsIGZpbHRlckRlZnMgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGNvbnN0IGV4dGVybmFsRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBmaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoY29sdW1ucyB8fCBbXSkpIHtcclxuICAgICAgY29sdW1uRmlsdGVyW2l0ZW0uZmllbGRdID0gY29sdW1uRmlsdGVyW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdDtcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChleHRlcm5hbEZpbHRlcnMgfHwgW10pKSB7XHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdkYXRlcmFuZ2UnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXT8uZnJvbSA/PyBpdGVtLmRlZmF1bHQ/LmZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyW2l0ZW0uZmllbGRdPy50byA/PyBpdGVtLmRlZmF1bHQ/LnRvID8/IHVuZGVmaW5lZFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPSBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXSA/PyBpdGVtLmRlZmF1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBkZWZcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbHVtbkZpbHRlcixcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIGZpbHRlckRlZixcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|