@agorapulse/ui-components 18.0.9 → 18.0.11
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/agorapulse-ui-components-18.0.11.tgz +0 -0
- package/esm2022/datepicker/datepicker.component.mjs +1 -1
- package/esm2022/index.mjs +2 -1
- package/esm2022/input-search/input-search.component.mjs +5 -4
- package/esm2022/nav-selector/agorapulse-ui-components-nav-selector.mjs +5 -0
- package/esm2022/nav-selector/directives/tree-node-accessibility.directive.mjs +30 -0
- package/esm2022/nav-selector/nav-selector-category/nav-selector-category.component.mjs +81 -0
- package/esm2022/nav-selector/nav-selector-category/nav-selector-category.presenter.mjs +29 -0
- package/esm2022/nav-selector/nav-selector-group/nav-selector-group.component.mjs +142 -0
- package/esm2022/nav-selector/nav-selector-group/nav-selector-group.presenter.mjs +31 -0
- package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.component.mjs +240 -0
- package/esm2022/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.mjs +35 -0
- package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.mjs +39 -0
- package/esm2022/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.mjs +18 -0
- package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.mjs +92 -0
- package/esm2022/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.mjs +31 -0
- package/esm2022/nav-selector/nav-selector.component.mjs +123 -0
- package/esm2022/nav-selector/nav-selector.mjs +9 -0
- package/esm2022/nav-selector/nav-selector.state.mjs +173 -0
- package/esm2022/nav-selector/public_api.mjs +2 -0
- package/esm2022/nav-selector/utils/leaf.utils.mjs +10 -0
- package/esm2022/nav-selector/utils/nav-selector.accessibility.mjs +171 -0
- package/esm2022/nav-selector/utils/nav-selector.builder.mjs +263 -0
- package/esm2022/nav-selector/utils/nav-selector.filter.mjs +102 -0
- package/esm2022/nav-selector/utils/nav-selector.folding.mjs +219 -0
- package/esm2022/nav-selector/utils/nav-selector.minifying.mjs +50 -0
- package/esm2022/nav-selector/utils/nav-selector.multi-select.mjs +208 -0
- package/esm2022/nav-selector/utils/nav-selector.single-select.mjs +91 -0
- package/esm2022/nav-selector/utils/nav-selector.view-more.mjs +98 -0
- package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-input-search.mjs +4 -3
- package/fesm2022/agorapulse-ui-components-input-search.mjs.map +1 -1
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs +2198 -0
- package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -0
- package/fesm2022/agorapulse-ui-components.mjs +1 -0
- package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/input-search/input-search.component.d.ts +1 -1
- package/nav-selector/directives/tree-node-accessibility.directive.d.ts +9 -0
- package/nav-selector/index.d.ts +5 -0
- package/nav-selector/nav-selector-category/nav-selector-category.component.d.ts +16 -0
- package/nav-selector/nav-selector-category/nav-selector-category.presenter.d.ts +14 -0
- package/nav-selector/nav-selector-group/nav-selector-group.component.d.ts +29 -0
- package/nav-selector/nav-selector-group/nav-selector-group.presenter.d.ts +17 -0
- package/nav-selector/nav-selector-leaf/nav-selector-leaf.component.d.ts +51 -0
- package/nav-selector/nav-selector-leaf/nav-selector-leaf.presenter.d.ts +19 -0
- package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.component.d.ts +13 -0
- package/nav-selector/nav-selector-leaf-detail/nav-selector-leaf-detail.presenter.d.ts +10 -0
- package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.component.d.ts +24 -0
- package/nav-selector/nav-selector-leaf-details/nav-selector-leaf-details.presenter.d.ts +14 -0
- package/nav-selector/nav-selector.component.d.ts +29 -0
- package/nav-selector/nav-selector.d.ts +220 -0
- package/nav-selector/nav-selector.state.d.ts +47 -0
- package/nav-selector/public_api.d.ts +2 -0
- package/nav-selector/utils/leaf.utils.d.ts +5 -0
- package/nav-selector/utils/nav-selector.accessibility.d.ts +52 -0
- package/nav-selector/utils/nav-selector.builder.d.ts +32 -0
- package/nav-selector/utils/nav-selector.filter.d.ts +30 -0
- package/nav-selector/utils/nav-selector.folding.d.ts +47 -0
- package/nav-selector/utils/nav-selector.minifying.d.ts +27 -0
- package/nav-selector/utils/nav-selector.multi-select.d.ts +54 -0
- package/nav-selector/utils/nav-selector.single-select.d.ts +15 -0
- package/nav-selector/utils/nav-selector.view-more.d.ts +30 -0
- package/package.json +13 -7
- package/agorapulse-ui-components-18.0.9.tgz +0 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { isInternalNavSelectorEntryACategory, isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, } from '../nav-selector';
|
|
2
|
+
import { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';
|
|
3
|
+
/**
|
|
4
|
+
* Class to handle the folding and unfolding of nav selector entries.
|
|
5
|
+
*/
|
|
6
|
+
export class NavSelectorFolding {
|
|
7
|
+
/**
|
|
8
|
+
* Toggle the folding state of an entry.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link NavSelectorFolding.fold} and {@link NavSelectorFolding.unfold} for more information on folding and unfolding.
|
|
11
|
+
*
|
|
12
|
+
* @param entries nav selector entries
|
|
13
|
+
* @param entryUid the entry uid to toggle
|
|
14
|
+
* @param minified true if the nav selector is minified. Needed for leaf as they are not foldable in minified mode
|
|
15
|
+
*/
|
|
16
|
+
static toggleFolding(entries, entryUid, minified) {
|
|
17
|
+
return this.toggleEntryFolding(entries, entryUid, minified);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Fold an entry.
|
|
21
|
+
*
|
|
22
|
+
* Set unfocusable on all children of the folded entry.
|
|
23
|
+
* Compute whenever the counter and token invalid should be displayed on groups and leaves.
|
|
24
|
+
*
|
|
25
|
+
* @param entries nav selector entries
|
|
26
|
+
* @param entryUid the entry uid to fold
|
|
27
|
+
* @param minified true if the nav selector is minified. Needed for leaf as they are not foldable in minified mode
|
|
28
|
+
*/
|
|
29
|
+
static fold(entries, entryUid, minified) {
|
|
30
|
+
return this.foldEntry(entries, entryUid, minified);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Unfold an entry.
|
|
34
|
+
*
|
|
35
|
+
* Set focusable on all children of the folded entry.
|
|
36
|
+
* Compute whenever the counter and token invalid should be displayed on groups and leaves.
|
|
37
|
+
*
|
|
38
|
+
* @param entries nav selector entries
|
|
39
|
+
* @param entryUid the entry uid to unfold
|
|
40
|
+
* @param minified true if the nav selector is minified. Needed for leaf as they are not foldable in minified mode
|
|
41
|
+
*/
|
|
42
|
+
static unfold(entries, entryUid, minified) {
|
|
43
|
+
return this.unfoldEntry(entries, entryUid, minified);
|
|
44
|
+
}
|
|
45
|
+
static toggleEntryFolding(entries, entryUid, minified, parentFolded = false) {
|
|
46
|
+
return entries.map(entry => {
|
|
47
|
+
if (isInternalNavSelectorEntryACategory(entry)) {
|
|
48
|
+
if (entry.uid === entryUid) {
|
|
49
|
+
const folded = !entry.folded;
|
|
50
|
+
if (folded) {
|
|
51
|
+
return this.foldCategory(entry, minified);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
return this.unfoldCategory(entry, minified);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
...entry,
|
|
59
|
+
children: this.toggleEntryFolding(entry.children, entryUid, minified, entry.folded),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (isInternalNavSelectorEntryAGroup(entry)) {
|
|
63
|
+
if (entry.uid === entryUid) {
|
|
64
|
+
const folded = !entry.folded;
|
|
65
|
+
if (folded) {
|
|
66
|
+
return this.foldGroup(entry, minified);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return this.unfoldGroup(entry, minified);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
...entry,
|
|
74
|
+
children: this.toggleEntryFolding(entry.children, entryUid, minified, parentFolded || entry.folded),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (isInternalNavSelectorEntryALeaf(entry)) {
|
|
78
|
+
if (entry.uid === entryUid) {
|
|
79
|
+
const folded = !entry.folded;
|
|
80
|
+
if (folded) {
|
|
81
|
+
return this.foldLeaf(entry, minified);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return this.unfoldLeaf(entry, minified);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
...entry,
|
|
89
|
+
focusable: isInternalNavSelectorEntryALeafFocusable(entry, { minified, parentFolded }),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return { ...entry, focusable: !parentFolded };
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
static foldEntry(entries, entryUid, minified, parentFolded = false) {
|
|
96
|
+
return entries.map(entry => {
|
|
97
|
+
if (isInternalNavSelectorEntryACategory(entry)) {
|
|
98
|
+
if (entry.uid === entryUid) {
|
|
99
|
+
return this.foldCategory(entry, minified);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
...entry,
|
|
103
|
+
children: this.foldEntry(entry.children, entryUid, minified, entry.folded),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (isInternalNavSelectorEntryAGroup(entry)) {
|
|
107
|
+
if (entry.uid === entryUid) {
|
|
108
|
+
return this.foldGroup(entry, minified);
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
...entry,
|
|
112
|
+
focusable: !parentFolded,
|
|
113
|
+
children: this.foldEntry(entry.children, entryUid, minified, parentFolded || entry.folded),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (isInternalNavSelectorEntryALeaf(entry)) {
|
|
117
|
+
if (entry.uid === entryUid) {
|
|
118
|
+
return this.foldLeaf(entry, minified);
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
...entry,
|
|
122
|
+
focusable: isInternalNavSelectorEntryALeafFocusable(entry, { minified, parentFolded }),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return { ...entry, focusable: !parentFolded };
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
static unfoldEntry(entries, entryUid, minified, parentFolded = false) {
|
|
129
|
+
return entries.map(entry => {
|
|
130
|
+
if (isInternalNavSelectorEntryACategory(entry)) {
|
|
131
|
+
if (entry.uid === entryUid) {
|
|
132
|
+
return this.unfoldCategory(entry, minified);
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
...entry,
|
|
136
|
+
children: this.unfoldEntry(entry.children, entryUid, minified, entry.folded),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (isInternalNavSelectorEntryAGroup(entry)) {
|
|
140
|
+
if (entry.uid === entryUid) {
|
|
141
|
+
return this.unfoldGroup(entry, minified);
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
...entry,
|
|
145
|
+
children: this.unfoldEntry(entry.children, entryUid, minified, parentFolded || entry.folded),
|
|
146
|
+
focusable: !parentFolded,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (isInternalNavSelectorEntryALeaf(entry)) {
|
|
150
|
+
if (entry.uid === entryUid) {
|
|
151
|
+
return this.unfoldLeaf(entry, minified);
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...entry,
|
|
155
|
+
focusable: isInternalNavSelectorEntryALeafFocusable(entry, { minified, parentFolded }),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return { ...entry, focusable: !parentFolded };
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
static foldCategory(category, minified) {
|
|
162
|
+
return {
|
|
163
|
+
...category,
|
|
164
|
+
folded: true,
|
|
165
|
+
children: this.foldEntry(category.children, category.uid, minified, true),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
static unfoldCategory(category, minified) {
|
|
169
|
+
return {
|
|
170
|
+
...category,
|
|
171
|
+
folded: false,
|
|
172
|
+
children: this.unfoldEntry(category.children, category.uid, minified, false),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
static foldGroup(group, minified) {
|
|
176
|
+
return {
|
|
177
|
+
...group,
|
|
178
|
+
folded: true,
|
|
179
|
+
children: this.foldEntry(group.children, group.uid, minified, true),
|
|
180
|
+
displayCounter: !!group.counter,
|
|
181
|
+
displayTokenInvalid: group.children.some(({ displayTokenInvalid }) => displayTokenInvalid),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
static unfoldGroup(group, minified) {
|
|
185
|
+
return {
|
|
186
|
+
...group,
|
|
187
|
+
folded: false,
|
|
188
|
+
children: this.unfoldEntry(group.children, group.uid, minified, false),
|
|
189
|
+
displayCounter: false,
|
|
190
|
+
displayTokenInvalid: false,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
static foldLeaf(leaf, minified) {
|
|
194
|
+
if (!leaf.foldable || minified) {
|
|
195
|
+
return leaf;
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
...leaf,
|
|
199
|
+
displayCounter: true,
|
|
200
|
+
folded: true,
|
|
201
|
+
details: leaf.details.map(detail => ({ ...detail, focusable: false })),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
static unfoldLeaf(leaf, minified) {
|
|
205
|
+
if (!leaf.foldable || minified) {
|
|
206
|
+
return leaf;
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
...leaf,
|
|
210
|
+
displayCounter: false,
|
|
211
|
+
folded: false,
|
|
212
|
+
details: leaf.details.map((detail, idx) => ({
|
|
213
|
+
...detail,
|
|
214
|
+
focusable: idx < leaf.viewMoreDetailsDisplayedLimit,
|
|
215
|
+
})),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLmZvbGRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpLWNvbXBvbmVudHMvbmF2LXNlbGVjdG9yL3NyYy91dGlscy9uYXYtc2VsZWN0b3IuZm9sZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsbUNBQW1DLEVBQ25DLGdDQUFnQyxFQUNoQywrQkFBK0IsR0FDbEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRTs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0I7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUNoQixPQUFZLEVBQ1osUUFBZ0IsRUFDaEIsUUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBcUMsT0FBWSxFQUFFLFFBQWdCLEVBQUUsUUFBaUI7UUFDN0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQXFDLE9BQVksRUFBRSxRQUFnQixFQUFFLFFBQWlCO1FBQy9GLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQzdCLE9BQVksRUFDWixRQUFnQixFQUNoQixRQUFpQixFQUNqQixZQUFZLEdBQUcsS0FBSztRQUVwQixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7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QkFBNkI7YUFDdEQsQ0FBQyxDQUFDO1NBQ04sQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5LFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeSxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAsXG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnksXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAsXG4gICAgaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZixcbn0gZnJvbSAnLi4vbmF2LXNlbGVjdG9yJztcbmltcG9ydCB7IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUgfSBmcm9tICcuLi91dGlscy9sZWFmLnV0aWxzJztcblxuLyoqXG4gKiBDbGFzcyB0byBoYW5kbGUgdGhlIGZvbGRpbmcgYW5kIHVuZm9sZGluZyBvZiBuYXYgc2VsZWN0b3IgZW50cmllcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdlNlbGVjdG9yRm9sZGluZyB7XG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHRoZSBmb2xkaW5nIHN0YXRlIG9mIGFuIGVudHJ5LlxuICAgICAqXG4gICAgICogQHNlZSB7QGxpbmsgTmF2U2VsZWN0b3JGb2xkaW5nLmZvbGR9IGFuZCB7QGxpbmsgTmF2U2VsZWN0b3JGb2xkaW5nLnVuZm9sZH0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZm9sZGluZyBhbmQgdW5mb2xkaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cnlVaWQgdGhlIGVudHJ5IHVpZCB0byB0b2dnbGVcbiAgICAgKiBAcGFyYW0gbWluaWZpZWQgdHJ1ZSBpZiB0aGUgbmF2IHNlbGVjdG9yIGlzIG1pbmlmaWVkLiBOZWVkZWQgZm9yIGxlYWYgYXMgdGhleSBhcmUgbm90IGZvbGRhYmxlIGluIG1pbmlmaWVkIG1vZGVcbiAgICAgKi9cbiAgICBzdGF0aWMgdG9nZ2xlRm9sZGluZzxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihcbiAgICAgICAgZW50cmllczogVFtdLFxuICAgICAgICBlbnRyeVVpZDogc3RyaW5nLFxuICAgICAgICBtaW5pZmllZDogYm9vbGVhblxuICAgICk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlRW50cnlGb2xkaW5nKGVudHJpZXMsIGVudHJ5VWlkLCBtaW5pZmllZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9sZCBhbiBlbnRyeS5cbiAgICAgKlxuICAgICAqIFNldCB1bmZvY3VzYWJsZSBvbiBhbGwgY2hpbGRyZW4gb2YgdGhlIGZvbGRlZCBlbnRyeS5cbiAgICAgKiBDb21wdXRlIHdoZW5ldmVyIHRoZSBjb3VudGVyIGFuZCB0b2tlbiBpbnZhbGlkIHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gZ3JvdXBzIGFuZCBsZWF2ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqIEBwYXJhbSBlbnRyeVVpZCB0aGUgZW50cnkgdWlkIHRvIGZvbGRcbiAgICAgKiBAcGFyYW0gbWluaWZpZWQgdHJ1ZSBpZiB0aGUgbmF2IHNlbGVjdG9yIGlzIG1pbmlmaWVkLiBOZWVkZWQgZm9yIGxlYWYgYXMgdGhleSBhcmUgbm90IGZvbGRhYmxlIGluIG1pbmlmaWVkIG1vZGVcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9sZDxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyaWVzOiBUW10sIGVudHJ5VWlkOiBzdHJpbmcsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2xkRW50cnkoZW50cmllcywgZW50cnlVaWQsIG1pbmlmaWVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmZvbGQgYW4gZW50cnkuXG4gICAgICpcbiAgICAgKiBTZXQgZm9jdXNhYmxlIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGUgZm9sZGVkIGVudHJ5LlxuICAgICAqIENvbXB1dGUgd2hlbmV2ZXIgdGhlIGNvdW50ZXIgYW5kIHRva2VuIGludmFsaWQgc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBncm91cHMgYW5kIGxlYXZlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRyaWVzIG5hdiBzZWxlY3RvciBlbnRyaWVzXG4gICAgICogQHBhcmFtIGVudHJ5VWlkIHRoZSBlbnRyeSB1aWQgdG8gdW5mb2xkXG4gICAgICogQHBhcmFtIG1pbmlmaWVkIHRydWUgaWYgdGhlIG5hdiBzZWxlY3RvciBpcyBtaW5pZmllZC4gTmVlZGVkIGZvciBsZWFmIGFzIHRoZXkgYXJlIG5vdCBmb2xkYWJsZSBpbiBtaW5pZmllZCBtb2RlXG4gICAgICovXG4gICAgc3RhdGljIHVuZm9sZDxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyaWVzOiBUW10sIGVudHJ5VWlkOiBzdHJpbmcsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRFbnRyeShlbnRyaWVzLCBlbnRyeVVpZCwgbWluaWZpZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHRvZ2dsZUVudHJ5Rm9sZGluZzxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihcbiAgICAgICAgZW50cmllczogVFtdLFxuICAgICAgICBlbnRyeVVpZDogc3RyaW5nLFxuICAgICAgICBtaW5pZmllZDogYm9vbGVhbixcbiAgICAgICAgcGFyZW50Rm9sZGVkID0gZmFsc2VcbiAgICApOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9sZGVkID0gIWVudHJ5LmZvbGRlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9sZENhdGVnb3J5KGVudHJ5LCBtaW5pZmllZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51bmZvbGRDYXRlZ29yeShlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy50b2dnbGVFbnRyeUZvbGRpbmcoZW50cnkuY2hpbGRyZW4sIGVudHJ5VWlkLCBtaW5pZmllZCwgZW50cnkuZm9sZGVkKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlZCA9ICFlbnRyeS5mb2xkZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbGRHcm91cChlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkR3JvdXAoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudG9nZ2xlRW50cnlGb2xkaW5nKGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB8fCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2xkZWQgPSAhZW50cnkuZm9sZGVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkTGVhZihlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkTGVhZihlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU6IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUoZW50cnksIHsgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZW50cnksIGZvY3VzYWJsZTogIXBhcmVudEZvbGRlZCB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBmb2xkRW50cnk8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZW50cnlVaWQ6IHN0cmluZyxcbiAgICAgICAgbWluaWZpZWQ6IGJvb2xlYW4sXG4gICAgICAgIHBhcmVudEZvbGRlZCA9IGZhbHNlXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvbGRDYXRlZ29yeShlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuZm9sZEVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIGVudHJ5LmZvbGRlZCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cChlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkR3JvdXAoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogIXBhcmVudEZvbGRlZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuZm9sZEVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB8fCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkTGVhZihlbnRyeSwgbWluaWZpZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlOiBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmRm9jdXNhYmxlKGVudHJ5LCB7IG1pbmlmaWVkLCBwYXJlbnRGb2xkZWQgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmVudHJ5LCBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdW5mb2xkRW50cnk8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oXG4gICAgICAgIGVudHJpZXM6IFRbXSxcbiAgICAgICAgZW50cnlVaWQ6IHN0cmluZyxcbiAgICAgICAgbWluaWZpZWQ6IGJvb2xlYW4sXG4gICAgICAgIHBhcmVudEZvbGRlZCA9IGZhbHNlXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVuZm9sZENhdGVnb3J5KGVudHJ5LCBtaW5pZmllZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy51bmZvbGRFbnRyeShlbnRyeS5jaGlsZHJlbiwgZW50cnlVaWQsIG1pbmlmaWVkLCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnVpZCA9PT0gZW50cnlVaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5mb2xkR3JvdXAoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLnVuZm9sZEVudHJ5KGVudHJ5LmNoaWxkcmVuLCBlbnRyeVVpZCwgbWluaWZpZWQsIHBhcmVudEZvbGRlZCB8fCBlbnRyeS5mb2xkZWQpLFxuICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU6ICFwYXJlbnRGb2xkZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS51aWQgPT09IGVudHJ5VWlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVuZm9sZExlYWYoZW50cnksIG1pbmlmaWVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZTogaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZkZvY3VzYWJsZShlbnRyeSwgeyBtaW5pZmllZCwgcGFyZW50Rm9sZGVkIH0pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyAuLi5lbnRyeSwgZm9jdXNhYmxlOiAhcGFyZW50Rm9sZGVkIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvbGRDYXRlZ29yeShjYXRlZ29yeTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5LCBtaW5pZmllZDogYm9vbGVhbik6IEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jYXRlZ29yeSxcbiAgICAgICAgICAgIGZvbGRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmZvbGRFbnRyeShjYXRlZ29yeS5jaGlsZHJlbiwgY2F0ZWdvcnkudWlkLCBtaW5pZmllZCwgdHJ1ZSkgYXMgKFxuICAgICAgICAgICAgICAgIHwgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZcbiAgICAgICAgICAgICAgICB8IEludGVybmFsTmF2U2VsZWN0b3JHcm91cFxuICAgICAgICAgICAgKVtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHVuZm9sZENhdGVnb3J5KGNhdGVnb3J5OiBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNhdGVnb3J5LFxuICAgICAgICAgICAgZm9sZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLnVuZm9sZEVudHJ5KGNhdGVnb3J5LmNoaWxkcmVuLCBjYXRlZ29yeS51aWQsIG1pbmlmaWVkLCBmYWxzZSkgYXMgKFxuICAgICAgICAgICAgICAgIHwgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZcbiAgICAgICAgICAgICAgICB8IEludGVybmFsTmF2U2VsZWN0b3JHcm91cFxuICAgICAgICAgICAgKVtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZvbGRHcm91cChncm91cDogSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwLCBtaW5pZmllZDogYm9vbGVhbik6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIGZvbGRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmZvbGRFbnRyeShncm91cC5jaGlsZHJlbiwgZ3JvdXAudWlkLCBtaW5pZmllZCwgdHJ1ZSkgYXMgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXSxcbiAgICAgICAgICAgIGRpc3BsYXlDb3VudGVyOiAhIWdyb3VwLmNvdW50ZXIsXG4gICAgICAgICAgICBkaXNwbGF5VG9rZW5JbnZhbGlkOiBncm91cC5jaGlsZHJlbi5zb21lKCh7IGRpc3BsYXlUb2tlbkludmFsaWQgfSkgPT4gZGlzcGxheVRva2VuSW52YWxpZCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdW5mb2xkR3JvdXAoZ3JvdXA6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCwgbWluaWZpZWQ6IGJvb2xlYW4pOiBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBmb2xkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5mb2xkRW50cnkoZ3JvdXAuY2hpbGRyZW4sIGdyb3VwLnVpZCwgbWluaWZpZWQsIGZhbHNlKSBhcyBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZltdLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheVRva2VuSW52YWxpZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9sZExlYWYobGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYge1xuICAgICAgICBpZiAoIWxlYWYuZm9sZGFibGUgfHwgbWluaWZpZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5sZWFmLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IHRydWUsXG4gICAgICAgICAgICBmb2xkZWQ6IHRydWUsXG4gICAgICAgICAgICBkZXRhaWxzOiBsZWFmLmRldGFpbHMubWFwKGRldGFpbCA9PiAoeyAuLi5kZXRhaWwsIGZvY3VzYWJsZTogZmFsc2UgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHVuZm9sZExlYWYobGVhZjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYsIG1pbmlmaWVkOiBib29sZWFuKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYge1xuICAgICAgICBpZiAoIWxlYWYuZm9sZGFibGUgfHwgbWluaWZpZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5sZWFmLFxuICAgICAgICAgICAgZGlzcGxheUNvdW50ZXI6IGZhbHNlLFxuICAgICAgICAgICAgZm9sZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbHM6IGxlYWYuZGV0YWlscy5tYXAoKGRldGFpbCwgaWR4KSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmRldGFpbCxcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU6IGlkeCA8IGxlYWYudmlld01vcmVEZXRhaWxzRGlzcGxheWVkTGltaXQsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { isInternalNavSelectorEntryALeafDetails, isInternalNavSelectorEntryANode, } from '../nav-selector';
|
|
2
|
+
import { isInternalNavSelectorEntryALeafFocusable } from '../utils/leaf.utils';
|
|
3
|
+
/**
|
|
4
|
+
* NavSelectorMinifying is a utility class that provides methods to apply rules on entries when minifying or expanded nav selector.
|
|
5
|
+
*/
|
|
6
|
+
export class NavSelectorMinifying {
|
|
7
|
+
/**
|
|
8
|
+
* When minifying the nav selector, compute the focusable state of the entries.
|
|
9
|
+
*
|
|
10
|
+
* Leaf are not focusable in any error state when minified.
|
|
11
|
+
* Detail are not focusable when minified.
|
|
12
|
+
*
|
|
13
|
+
* @param entries The entries to minify.
|
|
14
|
+
* @returns The modified entries.
|
|
15
|
+
*/
|
|
16
|
+
static minify(entries) {
|
|
17
|
+
return this.compute(entries, true);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* When expanding the nav selector, compute the focusable state of the entries.
|
|
21
|
+
*
|
|
22
|
+
* Leaf are not focusable in disabled state when expanded.
|
|
23
|
+
* Detail are focusable when expanded.
|
|
24
|
+
*
|
|
25
|
+
* @param entries The entries to minify.
|
|
26
|
+
* @returns The modified entries.
|
|
27
|
+
*/
|
|
28
|
+
static expand(entries) {
|
|
29
|
+
return this.compute(entries, false);
|
|
30
|
+
}
|
|
31
|
+
static compute(entries, minified, parent = null) {
|
|
32
|
+
return entries.map(entry => {
|
|
33
|
+
if (isInternalNavSelectorEntryALeafDetails(entry)) {
|
|
34
|
+
return { ...entry, focusable: !minified };
|
|
35
|
+
}
|
|
36
|
+
if (isInternalNavSelectorEntryANode(entry)) {
|
|
37
|
+
return {
|
|
38
|
+
...entry,
|
|
39
|
+
children: this.compute(entry.children, minified, entry),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
...entry,
|
|
44
|
+
focusable: isInternalNavSelectorEntryALeafFocusable(entry, { parentFolded: parent?.folded === true, minified: minified }),
|
|
45
|
+
details: this.compute(entry.details, minified),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLm1pbmlmeWluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3V0aWxzL25hdi1zZWxlY3Rvci5taW5pZnlpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHNDQUFzQyxFQUN0QywrQkFBK0IsR0FDbEMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRTs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFDN0I7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFxQyxPQUFZO1FBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBcUMsT0FBWTtRQUMxRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxNQUFNLENBQUMsT0FBTyxDQUNsQixPQUFZLEVBQ1osUUFBaUIsRUFDakIsU0FBd0UsSUFBSTtRQUU1RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxzQ0FBc0MsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELElBQUksK0JBQStCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsT0FBTztvQkFDSCxHQUFHLEtBQUs7b0JBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDO2lCQUMxRCxDQUFDO1lBQ04sQ0FBQztZQUVELE9BQU87Z0JBQ0gsR0FBRyxLQUFLO2dCQUNSLFNBQVMsRUFBRSx3Q0FBd0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUN6SCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQzthQUNqRCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnksXG4gICAgSW50ZXJuYWxOYXZTZWxlY3Rvckdyb3VwLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZEZXRhaWxzLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUsXG59IGZyb20gJy4uL25hdi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmRm9jdXNhYmxlIH0gZnJvbSAnLi4vdXRpbHMvbGVhZi51dGlscyc7XG5cbi8qKlxuICogTmF2U2VsZWN0b3JNaW5pZnlpbmcgaXMgYSB1dGlsaXR5IGNsYXNzIHRoYXQgcHJvdmlkZXMgbWV0aG9kcyB0byBhcHBseSBydWxlcyBvbiBlbnRyaWVzIHdoZW4gbWluaWZ5aW5nIG9yIGV4cGFuZGVkIG5hdiBzZWxlY3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdlNlbGVjdG9yTWluaWZ5aW5nIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIG1pbmlmeWluZyB0aGUgbmF2IHNlbGVjdG9yLCBjb21wdXRlIHRoZSBmb2N1c2FibGUgc3RhdGUgb2YgdGhlIGVudHJpZXMuXG4gICAgICpcbiAgICAgKiBMZWFmIGFyZSBub3QgZm9jdXNhYmxlIGluIGFueSBlcnJvciBzdGF0ZSB3aGVuIG1pbmlmaWVkLlxuICAgICAqIERldGFpbCBhcmUgbm90IGZvY3VzYWJsZSB3aGVuIG1pbmlmaWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgVGhlIGVudHJpZXMgdG8gbWluaWZ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIHN0YXRpYyBtaW5pZnk8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlKGVudHJpZXMsIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gZXhwYW5kaW5nIHRoZSBuYXYgc2VsZWN0b3IsIGNvbXB1dGUgdGhlIGZvY3VzYWJsZSBzdGF0ZSBvZiB0aGUgZW50cmllcy5cbiAgICAgKlxuICAgICAqIExlYWYgYXJlIG5vdCBmb2N1c2FibGUgaW4gZGlzYWJsZWQgc3RhdGUgd2hlbiBleHBhbmRlZC5cbiAgICAgKiBEZXRhaWwgYXJlIGZvY3VzYWJsZSB3aGVuIGV4cGFuZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJpZXMgVGhlIGVudHJpZXMgdG8gbWluaWZ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBlbnRyaWVzLlxuICAgICAqL1xuICAgIHN0YXRpYyBleHBhbmQ8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlKGVudHJpZXMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb21wdXRlPFQgZXh0ZW5kcyBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnk+KFxuICAgICAgICBlbnRyaWVzOiBUW10sXG4gICAgICAgIG1pbmlmaWVkOiBib29sZWFuLFxuICAgICAgICBwYXJlbnQ6IEludGVybmFsTmF2U2VsZWN0b3JHcm91cCB8IEludGVybmFsTmF2U2VsZWN0b3JDYXRlZ29yeSB8IG51bGwgPSBudWxsXG4gICAgKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZEZXRhaWxzKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmVudHJ5LCBmb2N1c2FibGU6ICFtaW5pZmllZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmNvbXB1dGUoZW50cnkuY2hpbGRyZW4sIG1pbmlmaWVkLCBlbnRyeSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU6IGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWZGb2N1c2FibGUoZW50cnksIHsgcGFyZW50Rm9sZGVkOiBwYXJlbnQ/LmZvbGRlZCA9PT0gdHJ1ZSwgbWluaWZpZWQ6IG1pbmlmaWVkIH0pLFxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuY29tcHV0ZShlbnRyeS5kZXRhaWxzLCBtaW5pZmllZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { isInternalNavSelectorEntryACategory, isInternalNavSelectorEntryAGroup, isInternalNavSelectorEntryALeaf, isInternalNavSelectorEntryANode, } from '../nav-selector';
|
|
2
|
+
/**
|
|
3
|
+
* NavSelectorMultiSelect is a utility class that provides methods to select an entry in multiple mode.
|
|
4
|
+
*/
|
|
5
|
+
export class NavSelectorMultiSelect {
|
|
6
|
+
/**
|
|
7
|
+
* Select an entry in multiple mode.
|
|
8
|
+
*
|
|
9
|
+
* Categories are not selectable.
|
|
10
|
+
*
|
|
11
|
+
* Groups and leaves are selectable.
|
|
12
|
+
*
|
|
13
|
+
* Groups may be in undetermined state if some of their children are selected and some are not.
|
|
14
|
+
* @param entries nav selector entries
|
|
15
|
+
* @param entryUid the entry uid to select
|
|
16
|
+
*/
|
|
17
|
+
static selectInMultipleMode(entries, entryUid) {
|
|
18
|
+
return entries.map(entry => {
|
|
19
|
+
if (isInternalNavSelectorEntryALeaf(entry)) {
|
|
20
|
+
return this.selectALeafInMultipleMode(entry, entryUid);
|
|
21
|
+
}
|
|
22
|
+
else if (isInternalNavSelectorEntryAGroup(entry)) {
|
|
23
|
+
return this.selectAGroupInMultipleMode(entry, entryUid);
|
|
24
|
+
}
|
|
25
|
+
else if (isInternalNavSelectorEntryACategory(entry)) {
|
|
26
|
+
return this.selectACategoryInMultipleMode(entry, entryUid);
|
|
27
|
+
}
|
|
28
|
+
return entry;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Select only a leaf in multiple mode.
|
|
33
|
+
*
|
|
34
|
+
* Categories are not selectable.
|
|
35
|
+
*
|
|
36
|
+
* Groups may be in undetermined state if some of their children are selected and some are not.
|
|
37
|
+
* @param entries nav selector entries
|
|
38
|
+
* @param entryUid the entry uid to select
|
|
39
|
+
*/
|
|
40
|
+
static selectOnlyALeafInMultipleMode(entries, entryUid) {
|
|
41
|
+
return entries.map(entry => {
|
|
42
|
+
if (isInternalNavSelectorEntryALeaf(entry)) {
|
|
43
|
+
return {
|
|
44
|
+
...entry,
|
|
45
|
+
selected: entry.uid === entryUid,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else if (isInternalNavSelectorEntryACategory(entry)) {
|
|
49
|
+
return {
|
|
50
|
+
...entry,
|
|
51
|
+
children: this.selectOnlyALeafInMultipleMode(entry.children, entryUid),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
else if (isInternalNavSelectorEntryAGroup(entry)) {
|
|
55
|
+
const children = entry.children.flatMap(child => this.selectOnlyALeafInMultipleMode([child], entryUid));
|
|
56
|
+
const selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));
|
|
57
|
+
return {
|
|
58
|
+
...entry,
|
|
59
|
+
children,
|
|
60
|
+
selected,
|
|
61
|
+
undeterminedSelection: !selected && children.some(child => child.selected),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return entry;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Select all entries in multiple mode.
|
|
69
|
+
*
|
|
70
|
+
* Categories are not selectable.
|
|
71
|
+
*
|
|
72
|
+
* Groups and leaves are selectable.
|
|
73
|
+
* @param entries nav selector entries
|
|
74
|
+
*/
|
|
75
|
+
static selectAll(entries) {
|
|
76
|
+
return this.selectChildren(entries);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Unselect all entries in multiple mode.
|
|
80
|
+
*
|
|
81
|
+
* Categories are not selectable.
|
|
82
|
+
*
|
|
83
|
+
* Groups and leaves are selectable.
|
|
84
|
+
* @param entries nav selector entries
|
|
85
|
+
*/
|
|
86
|
+
static unselectAll(entries) {
|
|
87
|
+
return this.unselectChildren(entries);
|
|
88
|
+
}
|
|
89
|
+
static selectALeafInMultipleMode(leaf, entryUid) {
|
|
90
|
+
let selected = false;
|
|
91
|
+
if (leaf.selectable) {
|
|
92
|
+
selected = leaf.uid === entryUid ? !leaf.selected : leaf.selected;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
...leaf,
|
|
96
|
+
selected,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
static selectACategoryInMultipleMode(entry, entryUid) {
|
|
100
|
+
return {
|
|
101
|
+
...entry,
|
|
102
|
+
children: entry.children.map(child => {
|
|
103
|
+
if (isInternalNavSelectorEntryALeaf(child)) {
|
|
104
|
+
return this.selectALeafInMultipleMode(child, entryUid);
|
|
105
|
+
}
|
|
106
|
+
return this.selectAGroupInMultipleMode(child, entryUid);
|
|
107
|
+
}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
static selectAGroupInMultipleMode(entry, entryUid) {
|
|
111
|
+
if (!entry.selectable) {
|
|
112
|
+
return entry;
|
|
113
|
+
}
|
|
114
|
+
let selected;
|
|
115
|
+
let children;
|
|
116
|
+
let undeterminedSelection = false;
|
|
117
|
+
if (entry.uid === entryUid) {
|
|
118
|
+
selected = !entry.selected;
|
|
119
|
+
if (selected) {
|
|
120
|
+
children = this.selectLeafs(entry.children);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
children = this.unselectLeafs(entry.children);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
children = entry.children.map(child => this.toggleSelectLeaf(child, entryUid));
|
|
128
|
+
selected = children.every(child => child.selected || (isInternalNavSelectorEntryALeaf(child) && !child.selectable));
|
|
129
|
+
undeterminedSelection = !selected && children.some(child => child.selected);
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
...entry,
|
|
133
|
+
children,
|
|
134
|
+
selected,
|
|
135
|
+
undeterminedSelection,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
static toggleSelectLeaf(leaf, uid) {
|
|
139
|
+
if (leaf.uid === uid) {
|
|
140
|
+
return {
|
|
141
|
+
...leaf,
|
|
142
|
+
selected: !leaf.selected,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return leaf;
|
|
146
|
+
}
|
|
147
|
+
static selectLeafs(leafs) {
|
|
148
|
+
return leafs.map(leaf => ({
|
|
149
|
+
...leaf,
|
|
150
|
+
selected: true,
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
static unselectLeafs(leafs) {
|
|
154
|
+
return leafs.map(leaf => ({
|
|
155
|
+
...leaf,
|
|
156
|
+
selected: false,
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
static unselectChildren(entry) {
|
|
160
|
+
return entry.map(child => {
|
|
161
|
+
if (isInternalNavSelectorEntryALeaf(child)) {
|
|
162
|
+
return {
|
|
163
|
+
...child,
|
|
164
|
+
selected: false,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
else if (isInternalNavSelectorEntryACategory(child)) {
|
|
168
|
+
return {
|
|
169
|
+
...child,
|
|
170
|
+
children: this.unselectChildren(child.children),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
else if (isInternalNavSelectorEntryANode(child)) {
|
|
174
|
+
return {
|
|
175
|
+
...child,
|
|
176
|
+
children: this.unselectChildren(child.children),
|
|
177
|
+
selected: false,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return child;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
static selectChildren(entry) {
|
|
184
|
+
return entry.map(child => {
|
|
185
|
+
if (isInternalNavSelectorEntryALeaf(child)) {
|
|
186
|
+
return {
|
|
187
|
+
...child,
|
|
188
|
+
selected: child.selectable,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
else if (isInternalNavSelectorEntryACategory(child)) {
|
|
192
|
+
return {
|
|
193
|
+
...child,
|
|
194
|
+
children: this.selectChildren(child.children),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
else if (isInternalNavSelectorEntryAGroup(child)) {
|
|
198
|
+
return {
|
|
199
|
+
...child,
|
|
200
|
+
children: this.selectChildren(child.children),
|
|
201
|
+
selected: true,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return child;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXNlbGVjdG9yLm11bHRpLXNlbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWktY29tcG9uZW50cy9uYXYtc2VsZWN0b3Ivc3JjL3V0aWxzL25hdi1zZWxlY3Rvci5tdWx0aS1zZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUtILG1DQUFtQyxFQUNuQyxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLCtCQUErQixHQUNsQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUMvQjs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQW1DLEVBQUUsUUFBZ0I7UUFDN0UsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLElBQUksK0JBQStCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNELENBQUM7aUJBQU0sSUFBSSxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLG1DQUFtQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsNkJBQTZCLENBQXFDLE9BQVksRUFBRSxRQUFnQjtRQUNuRyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMs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QUFDO29CQUMvQyxRQUFRLEVBQUUsS0FBSztpQkFDbEIsQ0FBQztZQUNOLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxNQUFNLENBQUMsY0FBYyxDQUFxQyxLQUFVO1FBQ3hFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLCtCQUErQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE9BQU87b0JBQ0gsR0FBRyxLQUFLO29CQUNSLFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVTtpQkFDN0IsQ0FBQztZQUNOLENBQUM7aUJBQU0sSUFBSSxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPO29CQUNILEdBQUcsS0FBSztvQkFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2lCQUNoRCxDQUFDO1lBQ04sQ0FBQztpQkFBTSxJQUFJLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0gsR0FBRyxLQUFLO29CQUNSLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQzdDLFFBQVEsRUFBRSxJQUFJO2lCQUNqQixDQUFDO1lBQ04sQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yQ2F0ZWdvcnksXG4gICAgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5LFxuICAgIEludGVybmFsTmF2U2VsZWN0b3JHcm91cCxcbiAgICBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZixcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeSxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFHcm91cCxcbiAgICBpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmLFxuICAgIGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QU5vZGUsXG59IGZyb20gJy4uL25hdi1zZWxlY3Rvcic7XG5cbi8qKlxuICogTmF2U2VsZWN0b3JNdWx0aVNlbGVjdCBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBwcm92aWRlcyBtZXRob2RzIHRvIHNlbGVjdCBhbiBlbnRyeSBpbiBtdWx0aXBsZSBtb2RlLlxuICovXG5leHBvcnQgY2xhc3MgTmF2U2VsZWN0b3JNdWx0aVNlbGVjdCB7XG4gICAgLyoqXG4gICAgICogU2VsZWN0IGFuIGVudHJ5IGluIG11bHRpcGxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBDYXRlZ29yaWVzIGFyZSBub3Qgc2VsZWN0YWJsZS5cbiAgICAgKlxuICAgICAqIEdyb3VwcyBhbmQgbGVhdmVzIGFyZSBzZWxlY3RhYmxlLlxuICAgICAqXG4gICAgICogR3JvdXBzIG1heSBiZSBpbiB1bmRldGVybWluZWQgc3RhdGUgaWYgc29tZSBvZiB0aGVpciBjaGlsZHJlbiBhcmUgc2VsZWN0ZWQgYW5kIHNvbWUgYXJlIG5vdC5cbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqIEBwYXJhbSBlbnRyeVVpZCB0aGUgZW50cnkgdWlkIHRvIHNlbGVjdFxuICAgICAqL1xuICAgIHN0YXRpYyBzZWxlY3RJbk11bHRpcGxlTW9kZShlbnRyaWVzOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSwgZW50cnlVaWQ6IHN0cmluZyk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIGVudHJpZXMubWFwKGVudHJ5ID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFMZWFmSW5NdWx0aXBsZU1vZGUoZW50cnksIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBR3JvdXAoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QUdyb3VwSW5NdWx0aXBsZU1vZGUoZW50cnksIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBQ2F0ZWdvcnkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QUNhdGVnb3J5SW5NdWx0aXBsZU1vZGUoZW50cnksIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IG9ubHkgYSBsZWFmIGluIG11bHRpcGxlIG1vZGUuXG4gICAgICpcbiAgICAgKiBDYXRlZ29yaWVzIGFyZSBub3Qgc2VsZWN0YWJsZS5cbiAgICAgKlxuICAgICAqIEdyb3VwcyBtYXkgYmUgaW4gdW5kZXRlcm1pbmVkIHN0YXRlIGlmIHNvbWUgb2YgdGhlaXIgY2hpbGRyZW4gYXJlIHNlbGVjdGVkIGFuZCBzb21lIGFyZSBub3QuXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKiBAcGFyYW0gZW50cnlVaWQgdGhlIGVudHJ5IHVpZCB0byBzZWxlY3RcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VsZWN0T25seUFMZWFmSW5NdWx0aXBsZU1vZGU8VCBleHRlbmRzIEludGVybmFsTmF2U2VsZWN0b3JFbnRyeT4oZW50cmllczogVFtdLCBlbnRyeVVpZDogc3RyaW5nKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBlbnRyeS51aWQgPT09IGVudHJ5VWlkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUNhdGVnb3J5KGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5zZWxlY3RPbmx5QUxlYWZJbk11bHRpcGxlTW9kZShlbnRyeS5jaGlsZHJlbiwgZW50cnlVaWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZW50cnkuY2hpbGRyZW4uZmxhdE1hcChcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPT4gdGhpcy5zZWxlY3RPbmx5QUxlYWZJbk11bHRpcGxlTW9kZShbY2hpbGRdLCBlbnRyeVVpZCkgYXMgSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCB8fCAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTGVhZihjaGlsZCkgJiYgIWNoaWxkLnNlbGVjdGFibGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICB1bmRldGVybWluZWRTZWxlY3Rpb246ICFzZWxlY3RlZCAmJiBjaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QgYWxsIGVudHJpZXMgaW4gbXVsdGlwbGUgbW9kZS5cbiAgICAgKlxuICAgICAqIENhdGVnb3JpZXMgYXJlIG5vdCBzZWxlY3RhYmxlLlxuICAgICAqXG4gICAgICogR3JvdXBzIGFuZCBsZWF2ZXMgYXJlIHNlbGVjdGFibGUuXG4gICAgICogQHBhcmFtIGVudHJpZXMgbmF2IHNlbGVjdG9yIGVudHJpZXNcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VsZWN0QWxsKGVudHJpZXM6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RDaGlsZHJlbihlbnRyaWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnNlbGVjdCBhbGwgZW50cmllcyBpbiBtdWx0aXBsZSBtb2RlLlxuICAgICAqXG4gICAgICogQ2F0ZWdvcmllcyBhcmUgbm90IHNlbGVjdGFibGUuXG4gICAgICpcbiAgICAgKiBHcm91cHMgYW5kIGxlYXZlcyBhcmUgc2VsZWN0YWJsZS5cbiAgICAgKiBAcGFyYW0gZW50cmllcyBuYXYgc2VsZWN0b3IgZW50cmllc1xuICAgICAqL1xuICAgIHN0YXRpYyB1bnNlbGVjdEFsbChlbnRyaWVzOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSk6IEludGVybmFsTmF2U2VsZWN0b3JFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5zZWxlY3RDaGlsZHJlbihlbnRyaWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZWxlY3RBTGVhZkluTXVsdGlwbGVNb2RlKGxlYWY6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmLCBlbnRyeVVpZDogc3RyaW5nKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWYge1xuICAgICAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGxlYWYuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBsZWFmLnVpZCA9PT0gZW50cnlVaWQgPyAhbGVhZi5zZWxlY3RlZCA6IGxlYWYuc2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmxlYWYsXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZWxlY3RBQ2F0ZWdvcnlJbk11bHRpcGxlTW9kZShlbnRyeTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5LCBlbnRyeVVpZDogc3RyaW5nKTogSW50ZXJuYWxOYXZTZWxlY3RvckNhdGVnb3J5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgY2hpbGRyZW46IGVudHJ5LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFMZWFmSW5NdWx0aXBsZU1vZGUoY2hpbGQsIGVudHJ5VWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QUdyb3VwSW5NdWx0aXBsZU1vZGUoY2hpbGQsIGVudHJ5VWlkKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNlbGVjdEFHcm91cEluTXVsdGlwbGVNb2RlKGVudHJ5OiBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAsIGVudHJ5VWlkOiBzdHJpbmcpOiBJbnRlcm5hbE5hdlNlbGVjdG9yR3JvdXAge1xuICAgICAgICBpZiAoIWVudHJ5LnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICAgIGxldCBjaGlsZHJlbjogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXTtcbiAgICAgICAgbGV0IHVuZGV0ZXJtaW5lZFNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZW50cnkudWlkID09PSBlbnRyeVVpZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSAhZW50cnkuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuc2VsZWN0TGVhZnMoZW50cnkuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMudW5zZWxlY3RMZWFmcyhlbnRyeS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGVudHJ5LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB0aGlzLnRvZ2dsZVNlbGVjdExlYWYoY2hpbGQsIGVudHJ5VWlkKSk7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkIHx8IChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGNoaWxkKSAmJiAhY2hpbGQuc2VsZWN0YWJsZSkpO1xuICAgICAgICAgICAgdW5kZXRlcm1pbmVkU2VsZWN0aW9uID0gIXNlbGVjdGVkICYmIGNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgIHVuZGV0ZXJtaW5lZFNlbGVjdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB0b2dnbGVTZWxlY3RMZWFmKGxlYWY6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmLCB1aWQ6IHN0cmluZyk6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmIHtcbiAgICAgICAgaWYgKGxlYWYudWlkID09PSB1aWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ubGVhZixcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogIWxlYWYuc2VsZWN0ZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZWFmO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNlbGVjdExlYWZzKGxlYWZzOiBJbnRlcm5hbE5hdlNlbGVjdG9yTGVhZltdKTogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXSB7XG4gICAgICAgIHJldHVybiBsZWFmcy5tYXAobGVhZiA9PiAoe1xuICAgICAgICAgICAgLi4ubGVhZixcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgdW5zZWxlY3RMZWFmcyhsZWFmczogSW50ZXJuYWxOYXZTZWxlY3RvckxlYWZbXSk6IEludGVybmFsTmF2U2VsZWN0b3JMZWFmW10ge1xuICAgICAgICByZXR1cm4gbGVhZnMubWFwKGxlYWYgPT4gKHtcbiAgICAgICAgICAgIC4uLmxlYWYsXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB1bnNlbGVjdENoaWxkcmVuPFQgZXh0ZW5kcyBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnk+KGVudHJ5OiBUW10pOiBJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlbXSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5tYXAoY2hpbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUxlYWYoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5zZWxlY3RDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbE5hdlNlbGVjdG9yRW50cnlBTm9kZShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMudW5zZWxlY3RDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZWxlY3RDaGlsZHJlbjxUIGV4dGVuZHMgSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5PihlbnRyeTogVFtdKTogSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5W10ge1xuICAgICAgICByZXR1cm4gZW50cnkubWFwKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFMZWFmKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogY2hpbGQuc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ludGVybmFsTmF2U2VsZWN0b3JFbnRyeUFDYXRlZ29yeShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuc2VsZWN0Q2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSW50ZXJuYWxOYXZTZWxlY3RvckVudHJ5QUdyb3VwKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5zZWxlY3RDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|