@sapui5/sap.fe.controls 1.142.0 → 1.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/controls/.library +1 -1
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +8 -8
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +7 -7
- package/src/sap/fe/controls/easyFilter/ShellHistoryProvider.js +7 -5
- package/src/sap/fe/controls/easyFilter/ShellHistoryProvider.tsx +6 -4
- package/src/sap/fe/controls/easyFilter/Token.js +5 -2
- package/src/sap/fe/controls/easyFilter/Token.tsx +5 -1
- package/src/sap/fe/controls/easyFilter/innerControls/CalendarFactory.js +4 -4
- package/src/sap/fe/controls/easyFilter/innerControls/CalendarFactory.ts +2 -3
- package/src/sap/fe/controls/easyFilter/utils.js +112 -87
- package/src/sap/fe/controls/easyFilter/utils.ts +139 -89
- package/src/sap/fe/controls/library.js +1 -1
- package/src/sap/fe/controls/messagebundle_ar.properties +3 -3
- package/src/sap/fe/controls/messagebundle_bg.properties +3 -3
- package/src/sap/fe/controls/messagebundle_ca.properties +3 -3
- package/src/sap/fe/controls/messagebundle_cnr.properties +3 -3
- package/src/sap/fe/controls/messagebundle_cs.properties +3 -3
- package/src/sap/fe/controls/messagebundle_cy.properties +3 -3
- package/src/sap/fe/controls/messagebundle_da.properties +3 -3
- package/src/sap/fe/controls/messagebundle_de.properties +3 -3
- package/src/sap/fe/controls/messagebundle_el.properties +3 -3
- package/src/sap/fe/controls/messagebundle_en.properties +3 -3
- package/src/sap/fe/controls/messagebundle_en_GB.properties +3 -3
- package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +3 -3
- package/src/sap/fe/controls/messagebundle_es.properties +3 -3
- package/src/sap/fe/controls/messagebundle_es_MX.properties +3 -3
- package/src/sap/fe/controls/messagebundle_et.properties +3 -3
- package/src/sap/fe/controls/messagebundle_fi.properties +3 -3
- package/src/sap/fe/controls/messagebundle_fr.properties +3 -3
- package/src/sap/fe/controls/messagebundle_fr_CA.properties +3 -3
- package/src/sap/fe/controls/messagebundle_hi.properties +3 -3
- package/src/sap/fe/controls/messagebundle_hr.properties +3 -3
- package/src/sap/fe/controls/messagebundle_hu.properties +3 -3
- package/src/sap/fe/controls/messagebundle_id.properties +3 -3
- package/src/sap/fe/controls/messagebundle_it.properties +3 -3
- package/src/sap/fe/controls/messagebundle_iw.properties +3 -3
- package/src/sap/fe/controls/messagebundle_ja.properties +3 -3
- package/src/sap/fe/controls/messagebundle_kk.properties +3 -3
- package/src/sap/fe/controls/messagebundle_ko.properties +2 -2
- package/src/sap/fe/controls/messagebundle_lt.properties +3 -3
- package/src/sap/fe/controls/messagebundle_lv.properties +3 -3
- package/src/sap/fe/controls/messagebundle_mk.properties +3 -3
- package/src/sap/fe/controls/messagebundle_ms.properties +3 -3
- package/src/sap/fe/controls/messagebundle_nl.properties +3 -3
- package/src/sap/fe/controls/messagebundle_no.properties +3 -3
- package/src/sap/fe/controls/messagebundle_pl.properties +3 -3
- package/src/sap/fe/controls/messagebundle_pt.properties +3 -3
- package/src/sap/fe/controls/messagebundle_pt_PT.properties +3 -3
- package/src/sap/fe/controls/messagebundle_ro.properties +3 -3
- package/src/sap/fe/controls/messagebundle_ru.properties +3 -3
- package/src/sap/fe/controls/messagebundle_sh.properties +3 -3
- package/src/sap/fe/controls/messagebundle_sk.properties +3 -3
- package/src/sap/fe/controls/messagebundle_sl.properties +3 -3
- package/src/sap/fe/controls/messagebundle_sr.properties +3 -3
- package/src/sap/fe/controls/messagebundle_sv.properties +3 -3
- package/src/sap/fe/controls/messagebundle_th.properties +3 -3
- package/src/sap/fe/controls/messagebundle_tr.properties +3 -3
- package/src/sap/fe/controls/messagebundle_uk.properties +3 -3
- package/src/sap/fe/controls/messagebundle_vi.properties +3 -3
- package/src/sap/fe/controls/messagebundle_zh_CN.properties +3 -3
- package/src/sap/fe/controls/messagebundle_zh_TW.properties +3 -3
|
@@ -11,9 +11,25 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
11
11
|
if (arr1.length !== arr2.length) {
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
+
|
|
14
15
|
// Compare elements of both arrays
|
|
15
16
|
for (let i = 0; i < arr1.length; i++) {
|
|
16
|
-
if (arr1[i].operator !== arr2[i].operator || !arr1[i].selectedValues.every((
|
|
17
|
+
if (arr1[i].operator !== arr2[i].operator || !arr1[i].selectedValues.every((firstValue, index) => {
|
|
18
|
+
const otherValue = arr2[i].selectedValues[index];
|
|
19
|
+
|
|
20
|
+
// Handle Date objects
|
|
21
|
+
if (firstValue instanceof Date || otherValue instanceof Date) {
|
|
22
|
+
return deepEqual(firstValue, otherValue);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Handle objects with deep equality
|
|
26
|
+
if (typeof firstValue === "object" && typeof otherValue === "object") {
|
|
27
|
+
return deepEqual(firstValue.value, otherValue.value) && firstValue.description === otherValue.description;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Fallback to direct comparison
|
|
31
|
+
return firstValue === otherValue;
|
|
32
|
+
})) {
|
|
17
33
|
return false;
|
|
18
34
|
}
|
|
19
35
|
}
|
|
@@ -156,7 +172,7 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
156
172
|
* @param filterValue The filter value to validate
|
|
157
173
|
* @param singleRangeTokenLabels Array to collect labels of invalid single range filters
|
|
158
174
|
* @param singleRangeUsage Record to track usage count of single range filters
|
|
159
|
-
* @returns True if processing should continue, false if it should skip
|
|
175
|
+
* @returns True if processing should continue, false if it should skip and make the existing token as empty
|
|
160
176
|
*/
|
|
161
177
|
function handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage) {
|
|
162
178
|
if (filterCriteria?.filterRestriction !== "SingleRange") {
|
|
@@ -171,11 +187,8 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
171
187
|
if (!singleRangeTokenLabels.includes(label)) {
|
|
172
188
|
singleRangeTokenLabels.push(label);
|
|
173
189
|
}
|
|
174
|
-
if (filterCriteria.type === "Calendar" || filterCriteria.type === "Time") {
|
|
175
|
-
return false;
|
|
176
|
-
}
|
|
177
190
|
filterValue.values = [];
|
|
178
|
-
return
|
|
191
|
+
return false;
|
|
179
192
|
}
|
|
180
193
|
|
|
181
194
|
// Validates if a filter value violates the SingleRange restriction.
|
|
@@ -206,89 +219,101 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
206
219
|
return true;
|
|
207
220
|
}
|
|
208
221
|
function formatData(tokens, filterValues, filterBarMetadata, setMessageStripForValidatedFilters) {
|
|
209
|
-
if (filterValues) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
continue;
|
|
222
|
-
}
|
|
223
|
-
// Only block if hiddenFilter is true
|
|
224
|
-
if (Object.prototype.hasOwnProperty.call(filterCriteria, "hiddenFilter") && filterCriteria?.hiddenFilter) {
|
|
225
|
-
hiddenFilterTokenLabels.push(filterCriteria.label || filterCriteria.name);
|
|
226
|
-
continue;
|
|
227
|
-
}
|
|
228
|
-
// Handles the single range validation and updates for a filter value
|
|
229
|
-
if (!handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage)) {
|
|
230
|
-
continue;
|
|
231
|
-
}
|
|
232
|
-
const {
|
|
233
|
-
type
|
|
234
|
-
} = filterCriteria;
|
|
235
|
-
const tokenIndex = tokens.findIndex(token => token.key === filterValue.name);
|
|
236
|
-
const {
|
|
237
|
-
operator,
|
|
238
|
-
values
|
|
239
|
-
} = filterValue;
|
|
240
|
-
let keySpecificSelectedValues;
|
|
241
|
-
if (EasyFilterUtils.isBetweenSelectedValues(operator)) {
|
|
242
|
-
keySpecificSelectedValues = {
|
|
243
|
-
operator,
|
|
244
|
-
selectedValues: values
|
|
245
|
-
};
|
|
246
|
-
} else {
|
|
247
|
-
keySpecificSelectedValues = {
|
|
248
|
-
operator: operator,
|
|
249
|
-
selectedValues: values
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
if (tokenIndex === -1) {
|
|
253
|
-
// Add new token if it doesn't exist
|
|
254
|
-
const newToken = {
|
|
255
|
-
key: filterValue.name,
|
|
256
|
-
label: filterCriteria.label,
|
|
257
|
-
keySpecificSelectedValues: [keySpecificSelectedValues],
|
|
258
|
-
type: type,
|
|
259
|
-
busy: type === "ValueHelp" ? true : false
|
|
260
|
-
};
|
|
261
|
-
tokens.push(newToken);
|
|
262
|
-
} else {
|
|
263
|
-
// Update existing token
|
|
264
|
-
const currentToken = tokens[tokenIndex];
|
|
265
|
-
//If its default value , override it
|
|
266
|
-
if ((currentToken.isRequired ?? false) && !visitedMapForMandatoryTokens[currentToken.key]) {
|
|
267
|
-
currentToken.keySpecificSelectedValues = [keySpecificSelectedValues];
|
|
268
|
-
visitedMapForMandatoryTokens[currentToken.key] = true;
|
|
269
|
-
} else {
|
|
270
|
-
currentToken.keySpecificSelectedValues.push(keySpecificSelectedValues);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
222
|
+
if (!filterValues) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const visitedMapForMandatoryTokens = {};
|
|
226
|
+
const nonFilterableTokenLabels = [];
|
|
227
|
+
const singleRangeTokenLabels = [];
|
|
228
|
+
const hiddenFilterTokenLabels = [];
|
|
229
|
+
const singleRangeUsage = {};
|
|
230
|
+
for (const filterValue of filterValues) {
|
|
231
|
+
const filterCriteria = filterBarMetadata.find(field => field.name === filterValue.name);
|
|
232
|
+
if (!filterCriteria) {
|
|
233
|
+
continue;
|
|
274
234
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
messages.push(resourceBundle.getText("M_EASY_FILTER_NON_FILTERABLE", [nonFilterableTokenLabel]));
|
|
280
|
-
}
|
|
281
|
-
if (hiddenFilterTokenLabels.length > 0) {
|
|
282
|
-
const label = `<strong>${hiddenFilterTokenLabels.join(", ")}</strong>`;
|
|
283
|
-
messages.push(resourceBundle.getText("M_EASY_FILTER_HIDDEN_FILTER", [label]));
|
|
284
|
-
}
|
|
285
|
-
if (singleRangeTokenLabels.length > 0) {
|
|
286
|
-
const label = `<strong>${singleRangeTokenLabels.join(", ")}</strong>`;
|
|
287
|
-
messages.push(resourceBundle.getText("M_EASY_FILTER_SINGLE_RANGE", [label]));
|
|
288
|
-
}
|
|
289
|
-
setMessageStripForValidatedFilters(messages.join("<br>"));
|
|
235
|
+
|
|
236
|
+
// Handle non-filterable and hidden filters
|
|
237
|
+
if (!processFilterCriteria(filterCriteria, nonFilterableTokenLabels, hiddenFilterTokenLabels)) {
|
|
238
|
+
continue;
|
|
290
239
|
}
|
|
240
|
+
|
|
241
|
+
// Validate single range filters
|
|
242
|
+
const isInvalidSingleRangeToken = !handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage);
|
|
243
|
+
|
|
244
|
+
// Update tokens
|
|
245
|
+
updateTokens(tokens, filterValue, filterCriteria, visitedMapForMandatoryTokens, isInvalidSingleRangeToken);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Handle validation messages
|
|
249
|
+
if (nonFilterableTokenLabels.length > 0 || singleRangeTokenLabels.length > 0 || hiddenFilterTokenLabels.length > 0) {
|
|
250
|
+
setMessageStripForValidatedFilters(generateValidationMessages(nonFilterableTokenLabels, singleRangeTokenLabels, hiddenFilterTokenLabels));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function processFilterCriteria(filterCriteria, nonFilterableTokenLabels, hiddenFilterTokenLabels) {
|
|
254
|
+
if (filterCriteria.filterable === false) {
|
|
255
|
+
nonFilterableTokenLabels.push(filterCriteria.label || filterCriteria.name);
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
if (filterCriteria.hiddenFilter === true) {
|
|
259
|
+
hiddenFilterTokenLabels.push(filterCriteria.label || filterCriteria.name);
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
function updateTokens(tokens, filterValue, filterCriteria, visitedMapForMandatoryTokens, isInvalidSingleRangeToken) {
|
|
265
|
+
const tokenIndex = tokens.findIndex(token => token.key === filterValue.name);
|
|
266
|
+
const keySpecificSelectedValues = createKeySpecificSelectedValues(filterValue);
|
|
267
|
+
if (tokenIndex === -1) {
|
|
268
|
+
// Add new token
|
|
269
|
+
tokens.push({
|
|
270
|
+
key: filterValue.name,
|
|
271
|
+
label: filterCriteria.label,
|
|
272
|
+
keySpecificSelectedValues: isInvalidSingleRangeToken ? [] : [keySpecificSelectedValues],
|
|
273
|
+
type: filterCriteria.type,
|
|
274
|
+
busy: filterCriteria.type === "ValueHelp"
|
|
275
|
+
});
|
|
276
|
+
} else {
|
|
277
|
+
// Update existing token
|
|
278
|
+
const currentToken = tokens[tokenIndex];
|
|
279
|
+
if (isInvalidSingleRangeToken) {
|
|
280
|
+
currentToken.keySpecificSelectedValues = [];
|
|
281
|
+
} else if ((currentToken.isRequired ?? false) && !visitedMapForMandatoryTokens[currentToken.key]) {
|
|
282
|
+
currentToken.keySpecificSelectedValues = [keySpecificSelectedValues];
|
|
283
|
+
visitedMapForMandatoryTokens[currentToken.key] = true;
|
|
284
|
+
} else {
|
|
285
|
+
currentToken.keySpecificSelectedValues.push(keySpecificSelectedValues);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function createKeySpecificSelectedValues(filterValue) {
|
|
290
|
+
const {
|
|
291
|
+
operator,
|
|
292
|
+
values
|
|
293
|
+
} = filterValue;
|
|
294
|
+
if (EasyFilterUtils.isBetweenSelectedValues(operator)) {
|
|
295
|
+
return {
|
|
296
|
+
operator,
|
|
297
|
+
selectedValues: values
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
operator: operator,
|
|
302
|
+
selectedValues: values
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function generateValidationMessages(nonFilterableTokenLabels, singleRangeTokenLabels, hiddenFilterTokenLabels) {
|
|
306
|
+
const messages = [];
|
|
307
|
+
if (nonFilterableTokenLabels.length > 0) {
|
|
308
|
+
messages.push(resourceBundle.getText("M_EASY_FILTER_NON_FILTERABLE", [`<strong>${nonFilterableTokenLabels.join(", ")}</strong>`]));
|
|
309
|
+
}
|
|
310
|
+
if (hiddenFilterTokenLabels.length > 0) {
|
|
311
|
+
messages.push(resourceBundle.getText("M_EASY_FILTER_HIDDEN_FILTER", [`<strong>${hiddenFilterTokenLabels.join(", ")}</strong>`]));
|
|
312
|
+
}
|
|
313
|
+
if (singleRangeTokenLabels.length > 0) {
|
|
314
|
+
messages.push(resourceBundle.getText("M_EASY_FILTER_SINGLE_RANGE", [`<strong>${singleRangeTokenLabels.join(", ")}</strong>`]));
|
|
291
315
|
}
|
|
316
|
+
return messages.join("<br>");
|
|
292
317
|
}
|
|
293
318
|
const EasyFilterUtils = {
|
|
294
319
|
areItemsSame,
|
|
@@ -303,4 +328,4 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
|
|
|
303
328
|
};
|
|
304
329
|
return EasyFilterUtils;
|
|
305
330
|
}, false);
|
|
306
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGF0ZVRpbWVPZmZzZXQiLCJEYXRlVGltZU9mZnNldCIsImFyZUl0ZW1zU2FtZSIsImFycjEiLCJhcnIyIiwibGVuZ3RoIiwiaSIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJldmVyeSIsInZhbHVlIiwiaW5kZXgiLCJkZWVwRXF1YWwiLCJkZXNjcmlwdGlvbiIsImFyZUFycmF5U2FtZSIsImFyZUNvZGVMaXN0c1NhbWUiLCJhcnJOZXcxIiwiZ2V0Q29kZUxpc3RBcnJheSIsImFyck5ldzIiLCJkZXNjcmlwdGlvbk5ldzEiLCJtYXAiLCJkYXRhIiwiZGVzY3JpcHRpb25OZXcyIiwidmFsdWUxIiwidmFsdWUyIiwiYXJyIiwiY29udmVydERhdGVUb1N0cmluZyIsInRva2VuVHlwZSIsImlzRGF0ZVRpbWVPZmZzZXQiLCJmb3JtYXR0ZWREYXRlVGltZSIsImZvcm1hdFZhbHVlIiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsImZvcm1hdCIsImdldFRpbWVJbnN0YW5jZSIsIm1hcE9wZXJhdG9yIiwibmV3VmFsdWUiLCJjb252ZXJ0Qm9vbFRvU3RyaW5nIiwiRGF0ZSIsIkZpbHRlck9wZXJhdG9yIiwiR1QiLCJMVCIsIkdFIiwiTEUiLCJFUSIsIkNvbnRhaW5zIiwiRW5kc1dpdGgiLCJTdGFydHNXaXRoIiwiTkUiLCJOb3RDb250YWlucyIsIk5vdEVuZHNXaXRoIiwiTm90U3RhcnRzV2l0aCIsInRvU3RyaW5nIiwibWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHAiLCJtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvciIsInZhbHVlcyIsIm5ld1ZhbHVlMSIsIm5ld1ZhbHVlMiIsIkJUIiwiaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMiLCJOQiIsImdldFRleHQiLCJoYW5kbGVTaW5nbGVSYW5nZUZpbHRlciIsImZpbHRlckNyaXRlcmlhIiwiZmlsdGVyVmFsdWUiLCJzaW5nbGVSYW5nZVRva2VuTGFiZWxzIiwic2luZ2xlUmFuZ2VVc2FnZSIsImZpbHRlclJlc3RyaWN0aW9uIiwiaXNJbnZhbGlkIiwiaXNJbnZhbGlkU2luZ2xlUmFuZ2UiLCJuYW1lIiwibGFiZWwiLCJpbmNsdWRlcyIsInB1c2giLCJ0eXBlIiwic2luZ2xlVmFsdWVPcHMiLCJyYW5nZU9wcyIsIm9wIiwidmFsQ291bnQiLCJmb3JtYXREYXRhIiwidG9rZW5zIiwiZmlsdGVyVmFsdWVzIiwiZmlsdGVyQmFyTWV0YWRhdGEiLCJzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzIiwidmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VucyIsIm5vbkZpbHRlcmFibGVUb2tlbkxhYmVscyIsImhpZGRlbkZpbHRlclRva2VuTGFiZWxzIiwiZmluZCIsImZpZWxkIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZmlsdGVyYWJsZSIsImhpZGRlbkZpbHRlciIsInRva2VuSW5kZXgiLCJmaW5kSW5kZXgiLCJ0b2tlbiIsImtleSIsImtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMiLCJFYXN5RmlsdGVyVXRpbHMiLCJuZXdUb2tlbiIsImJ1c3kiLCJjdXJyZW50VG9rZW4iLCJpc1JlcXVpcmVkIiwibWVzc2FnZXMiLCJub25GaWx0ZXJhYmxlVG9rZW5MYWJlbCIsImpvaW4iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbInV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIHsgRWFzeUZpbHRlclJlc3VsdCwgUHJvcGVydHlNZXRhZGF0YSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRDb2RlTGlzdFR5cGUsXG5cdEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhLFxuXHRUb2tlbkRlZmluaXRpb24sXG5cdFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uLFxuXHRUb2tlblR5cGUsXG5cdFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uXG59IGZyb20gXCIuL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcblxudHlwZSBjb2RlTGlzdFR5cGUgPSBQcm9wZXJ0eU1ldGFkYXRhW1wiY29kZUxpc3RcIl07XG50eXBlIGZpbmFsQ29kZUxpc3RUeXBlID0geyB2YWx1ZTogUHJpbWl0aXZlVHlwZTsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfVtdO1xuY29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuY29uc3QgZGF0ZVRpbWVPZmZzZXQgPSBuZXcgRGF0ZVRpbWVPZmZzZXQoKTtcblxuZnVuY3Rpb24gYXJlSXRlbXNTYW1lKFxuXHRhcnIxOiByZWFkb25seSBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdGFycjI6IHJlYWRvbmx5IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXVxuKTogYm9vbGVhbiB7XG5cdGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Ly8gQ29tcGFyZSBlbGVtZW50cyBvZiBib3RoIGFycmF5c1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhcnIxW2ldLm9wZXJhdG9yICE9PSBhcnIyW2ldLm9wZXJhdG9yIHx8XG5cdFx0XHQhYXJyMVtpXS5zZWxlY3RlZFZhbHVlcy5ldmVyeShcblx0XHRcdFx0KHZhbHVlLCBpbmRleCkgPT5cblx0XHRcdFx0XHR2YWx1ZSA9PT0gYXJyMltpXS5zZWxlY3RlZFZhbHVlc1tpbmRleF0gfHxcblx0XHRcdFx0XHQodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRcdFx0XHRkZWVwRXF1YWwoKHZhbHVlIGFzIENvZGVMaXN0VHlwZSkudmFsdWUsIChhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XSBhcyBDb2RlTGlzdFR5cGUpLnZhbHVlKSAmJlxuXHRcdFx0XHRcdFx0KHZhbHVlIGFzIENvZGVMaXN0VHlwZSkuZGVzY3JpcHRpb24gPT09IChhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XSBhcyBDb2RlTGlzdFR5cGUpLmRlc2NyaXB0aW9uKVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTsgLy8gQXJyYXlzIGFyZSB0aGUgc2FtZVxufVxuXG5mdW5jdGlvbiBhcmVBcnJheVNhbWUoYXJyMTogcmVhZG9ubHkgdW5rbm93bltdLCBhcnIyOiByZWFkb25seSB1bmtub3duW10pOiBib29sZWFuIHtcblx0aWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHQvLyBDb21wYXJlIGVsZW1lbnRzIG9mIGJvdGggYXJyYXlzXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlOyAvLyBBcnJheXMgYXJlIHRoZSBzYW1lXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFyZUNvZGVMaXN0c1NhbWUoYXJyMTogY29kZUxpc3RUeXBlLCBhcnIyOiBjb2RlTGlzdFR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0Y29uc3QgYXJyTmV3MTogZmluYWxDb2RlTGlzdFR5cGUgfCB1bmRlZmluZWQgPSBhd2FpdCBnZXRDb2RlTGlzdEFycmF5KGFycjEpO1xuXHRjb25zdCBhcnJOZXcyOiBmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGdldENvZGVMaXN0QXJyYXkoYXJyMik7XG5cdGNvbnN0IGRlc2NyaXB0aW9uTmV3MSA9IGFyck5ldzE/Lm1hcCgoZGF0YSkgPT4gZGF0YS5kZXNjcmlwdGlvbik7XG5cdGNvbnN0IGRlc2NyaXB0aW9uTmV3MiA9IGFyck5ldzI/Lm1hcCgoZGF0YSkgPT4gZGF0YS5kZXNjcmlwdGlvbik7XG5cblx0Y29uc3QgdmFsdWUxID0gYXJyTmV3MT8ubWFwKChkYXRhKSA9PiBkYXRhLnZhbHVlKTtcblx0Y29uc3QgdmFsdWUyID0gYXJyTmV3Mj8ubWFwKChkYXRhKSA9PiBkYXRhLnZhbHVlKTtcblx0aWYgKCFkZXNjcmlwdGlvbk5ldzEgfHwgIWRlc2NyaXB0aW9uTmV3Mikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYXJlQXJyYXlTYW1lKGRlc2NyaXB0aW9uTmV3MSwgZGVzY3JpcHRpb25OZXcyKSAmJiBhcmVBcnJheVNhbWUodmFsdWUxIGFzIFByaW1pdGl2ZVR5cGUsIHZhbHVlMiBhcyBQcmltaXRpdmVUeXBlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29kZUxpc3RBcnJheShhcnI6IGNvZGVMaXN0VHlwZSk6IFByb21pc2U8ZmluYWxDb2RlTGlzdFR5cGUgfCB1bmRlZmluZWQ+IHtcblx0aWYgKHR5cGVvZiBhcnIgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiBhcnIoKTtcblx0fVxuXHRyZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlOiBEYXRlLCB0b2tlblR5cGU6IFRva2VuVHlwZSwgaXNEYXRlVGltZU9mZnNldDogYm9vbGVhbik6IHN0cmluZyB7XG5cdGxldCBmb3JtYXR0ZWREYXRlVGltZSA9IFwiXCI7XG5cdGlmIChpc0RhdGVUaW1lT2Zmc2V0KSB7XG5cdFx0cmV0dXJuIGRhdGVUaW1lT2Zmc2V0LmZvcm1hdFZhbHVlKHZhbHVlLCBcInN0cmluZ1wiKSBhcyBzdHJpbmc7XG5cdH1cblx0c3dpdGNoICh0b2tlblR5cGUpIHtcblx0XHRjYXNlIFwiQ2FsZW5kYXJcIjpcblx0XHRcdGZvcm1hdHRlZERhdGVUaW1lID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKS5mb3JtYXQodmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRpbWVcIjpcblx0XHRcdGZvcm1hdHRlZERhdGVUaW1lID0gRGF0ZUZvcm1hdC5nZXRUaW1lSW5zdGFuY2UoKS5mb3JtYXQodmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBmb3JtYXR0ZWREYXRlVGltZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9wZXJhdG9yIGFuZCB2YWx1ZS5cbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gcmVwcmVzZW50XG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlcHJlc2VudFxuICogQHBhcmFtIHRva2VuVHlwZSBUaGUgdG9rZW4ncyB0eXBlXG4gKiBAcGFyYW0gaXNEYXRlVGltZU9mZnNldCBDaGVja3MgaWYgdGhlIGRhdGEgdHlwZSBpcyBvZiBEYXRlVGltZU9mZnNldFxuICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgYW5kIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIG1hcE9wZXJhdG9yKFxuXHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IsXG5cdHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSxcblx0dG9rZW5UeXBlOiBUb2tlblR5cGUsXG5cdGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW5cbik6IHN0cmluZyB7XG5cdGxldCBuZXdWYWx1ZTogbnVtYmVyIHwgc3RyaW5nID0gXCJcIjtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRuZXdWYWx1ZSA9IGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdG5ld1ZhbHVlID0gY29udmVydERhdGVUb1N0cmluZyh2YWx1ZSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZSA9IHZhbHVlO1xuXHR9XG5cblx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuR1Q6XG5cdFx0XHRyZXR1cm4gYD4gJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTFQ6XG5cdFx0XHRyZXR1cm4gYDwgJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuR0U6XG5cdFx0XHRyZXR1cm4gYD49ICR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLkxFOlxuXHRcdFx0cmV0dXJuIGA8PSAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5FUTpcblx0XHRcdHJldHVybiBgJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuQ29udGFpbnM6XG5cdFx0XHRyZXR1cm4gYCoke25ld1ZhbHVlfSpgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuRW5kc1dpdGg6XG5cdFx0XHRyZXR1cm4gYCoke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoOlxuXHRcdFx0cmV0dXJuIGAke25ld1ZhbHVlfSpgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTkU6XG5cdFx0XHRyZXR1cm4gYCE9KCR7bmV3VmFsdWV9KWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Ob3RDb250YWluczpcblx0XHRcdHJldHVybiBgISgqJHtuZXdWYWx1ZX0qKWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Ob3RFbmRzV2l0aDpcblx0XHRcdHJldHVybiBgISgqJHtuZXdWYWx1ZX0pYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdFN0YXJ0c1dpdGg6XG5cdFx0XHRyZXR1cm4gYCEoJHtuZXdWYWx1ZX0qKWA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBuZXdWYWx1ZT8udG9TdHJpbmcoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBtYXBPcGVyYXRvckZvclZhbHVlSGVscChvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IsIHZhbHVlOiBDb2RlTGlzdFR5cGUsIHRva2VuVHlwZTogVG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuKTogc3RyaW5nIHtcblx0cmV0dXJuIG1hcE9wZXJhdG9yKG9wZXJhdG9yLCB2YWx1ZS5kZXNjcmlwdGlvbiwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gbWFwT3BlcmF0b3JGb3JCZXR3ZWVuT3BlcmF0b3IoXG5cdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcixcblx0dmFsdWVzOiBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgfCBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMsXG5cdHRva2VuVHlwZTogVG9rZW5UeXBlLFxuXHRpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuXG4pOiBzdHJpbmcge1xuXHRsZXQgbmV3VmFsdWUxOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlID0gXCJcIjtcblx0bGV0IG5ld1ZhbHVlMjogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcImJvb2xlYW5cIikge1xuXHRcdG5ld1ZhbHVlMSA9IGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWVzWzBdKTtcblx0fSBlbHNlIGlmICh2YWx1ZXNbMF0gaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0bmV3VmFsdWUxID0gY29udmVydERhdGVUb1N0cmluZyh2YWx1ZXNbMF0sIHRva2VuVHlwZSwgaXNEYXRlVGltZU9mZnNldCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG5ld1ZhbHVlMSA9IHZhbHVlc1swXS5kZXNjcmlwdGlvbiBhcyBzdHJpbmc7XG5cdH0gZWxzZSB7XG5cdFx0bmV3VmFsdWUxID0gdmFsdWVzWzBdO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB2YWx1ZXNbMV0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0bmV3VmFsdWUyID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZXNbMV0pO1xuXHR9IGVsc2UgaWYgKHZhbHVlc1sxXSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRuZXdWYWx1ZTIgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlc1sxXSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bmV3VmFsdWUyID0gdmFsdWVzWzFdLmRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZTIgPSB2YWx1ZXNbMV07XG5cdH1cblx0aWYgKG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCkge1xuXHRcdHJldHVybiBgJHtuZXdWYWx1ZTF9Li4uJHtuZXdWYWx1ZTJ9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYCEoJHtuZXdWYWx1ZTF9Li4uJHtuZXdWYWx1ZTJ9KWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yKTogYm9vbGVhbiB7XG5cdHJldHVybiBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwgb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Qm9vbFRvU3RyaW5nKHZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcblx0cmV0dXJuIHZhbHVlXG5cdFx0PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TRUxFQ1RFRF9WQUxVRVNfVFJVRVwiKVxuXHRcdDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU0VMRUNURURfVkFMVUVTX0ZBTFNFXCIpO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgdGhlIHNpbmdsZSByYW5nZSB2YWxpZGF0aW9uIGFuZCB1cGRhdGVzIGZvciBhIGZpbHRlciB2YWx1ZS5cbiAqIEBwYXJhbSBmaWx0ZXJDcml0ZXJpYSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBmaWx0ZXJWYWx1ZSBUaGUgZmlsdGVyIHZhbHVlIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gc2luZ2xlUmFuZ2VUb2tlbkxhYmVscyBBcnJheSB0byBjb2xsZWN0IGxhYmVscyBvZiBpbnZhbGlkIHNpbmdsZSByYW5nZSBmaWx0ZXJzXG4gKiBAcGFyYW0gc2luZ2xlUmFuZ2VVc2FnZSBSZWNvcmQgdG8gdHJhY2sgdXNhZ2UgY291bnQgb2Ygc2luZ2xlIHJhbmdlIGZpbHRlcnNcbiAqIEByZXR1cm5zIFRydWUgaWYgcHJvY2Vzc2luZyBzaG91bGQgY29udGludWUsIGZhbHNlIGlmIGl0IHNob3VsZCBza2lwXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyKFxuXHRmaWx0ZXJDcml0ZXJpYTogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdGZpbHRlclZhbHVlOiBFYXN5RmlsdGVyUmVzdWx0W1wiZmlsdGVyXCJdWzBdLFxuXHRzaW5nbGVSYW5nZVRva2VuTGFiZWxzOiBzdHJpbmdbXSxcblx0c2luZ2xlUmFuZ2VVc2FnZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuKTogYm9vbGVhbiB7XG5cdGlmIChmaWx0ZXJDcml0ZXJpYT8uZmlsdGVyUmVzdHJpY3Rpb24gIT09IFwiU2luZ2xlUmFuZ2VcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgaXNJbnZhbGlkID0gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWUpIHx8IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApID4gMDtcblx0c2luZ2xlUmFuZ2VVc2FnZVtmaWx0ZXJWYWx1ZS5uYW1lXSA9IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApICsgMTtcblxuXHRpZiAoIWlzSW52YWxpZCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgbGFiZWwgPSBmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lO1xuXHRpZiAoIXNpbmdsZVJhbmdlVG9rZW5MYWJlbHMuaW5jbHVkZXMobGFiZWwpKSB7XG5cdFx0c2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5wdXNoKGxhYmVsKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJDcml0ZXJpYS50eXBlID09PSBcIkNhbGVuZGFyXCIgfHwgZmlsdGVyQ3JpdGVyaWEudHlwZSA9PT0gXCJUaW1lXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmaWx0ZXJWYWx1ZS52YWx1ZXMgPSBbXTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8vIFZhbGlkYXRlcyBpZiBhIGZpbHRlciB2YWx1ZSB2aW9sYXRlcyB0aGUgU2luZ2xlUmFuZ2UgcmVzdHJpY3Rpb24uXG4vLyBSZXR1cm5zIHRydWUgaWYgaW52YWxpZCwgZmFsc2UgaWYgdmFsaWQuXG4vLyBSdWxlcyBmb3IgU2luZ2xlUmFuZ2U6XG4vLyAtIEFsbG93ZWQgb3BlcmF0b3JzOiBFUSwgTEUsIExULCBHRSwgR1QsIEJULCBOQlxuLy8gLSBTaW5nbGUtdmFsdWUgb3BlcmF0b3JzIChFUSwgTEUsIExULCBHRSwgR1QpOiBtdXN0IGhhdmUgZXhhY3RseSAxIHZhbHVlXG4vLyAtIFJhbmdlIG9wZXJhdG9ycyAoQlQsIE5CKTogbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXMgKGxvd2VyICYgdXBwZXIgYm91bmQpXG4vLyAtIE9ubHkgb25lIGNvbmRpdGlvbi90b2tlbiBpcyBhbGxvd2VkIHBlciBwcm9wZXJ0eSAoc2hvdWxkIGJlIGVuZm9yY2VkIG91dHNpZGUpXG4vL1xuZnVuY3Rpb24gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWU6IHsgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yOyB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgYm9vbGVhbilbXSB9KTogYm9vbGVhbiB7XG5cdGNvbnN0IHNpbmdsZVZhbHVlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkVRLCBGaWx0ZXJPcGVyYXRvci5MRSwgRmlsdGVyT3BlcmF0b3IuTFQsIEZpbHRlck9wZXJhdG9yLkdFLCBGaWx0ZXJPcGVyYXRvci5HVF07XG5cdGNvbnN0IHJhbmdlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkJULCBGaWx0ZXJPcGVyYXRvci5OQl07XG5cblx0Y29uc3Qgb3AgPSBmaWx0ZXJWYWx1ZS5vcGVyYXRvcjtcblx0Y29uc3QgdmFsQ291bnQgPSBmaWx0ZXJWYWx1ZS52YWx1ZXM/Lmxlbmd0aCB8fCAwO1xuXG5cdC8vIFNpbmdsZS12YWx1ZSBvcGVyYXRvcnMg4oaSIG11c3QgaGF2ZSBleGFjdGx5IDEgdmFsdWVcblx0aWYgKHNpbmdsZVZhbHVlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMTtcblx0fVxuXG5cdC8vIFJhbmdlIG9wZXJhdG9ycyAoQmV0d2VlbiAvIE5vdCBCZXR3ZWVuKSDihpIgbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXNcblx0aWYgKHJhbmdlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMjtcblx0fVxuXG5cdC8vIEFueXRoaW5nIGVsc2UgaXMgbm90IGFsbG93ZWQgZm9yIFNpbmdsZVJhbmdlXG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZXM6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl0sXG5cdGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdLFxuXHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzOiAobXNnOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuXHRpZiAoZmlsdGVyVmFsdWVzKSB7XG5cdFx0Y29uc3QgdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VuczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRjb25zdCBub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgc2luZ2xlUmFuZ2VUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBzaW5nbGVSYW5nZVVzYWdlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGZpbHRlclZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xuXHRcdFx0Y29uc3QgZmlsdGVyQ3JpdGVyaWEgPSBmaWx0ZXJCYXJNZXRhZGF0YS5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gZmlsdGVyVmFsdWUubmFtZSk7XG5cdFx0XHRpZiAoZmlsdGVyQ3JpdGVyaWEpIHtcblx0XHRcdFx0Ly8gT25seSBibG9jayBpZiBmaWx0ZXJhYmxlIGlzIGZhbHNlXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVyQ3JpdGVyaWEsIFwiZmlsdGVyYWJsZVwiKSAmJiAhZmlsdGVyQ3JpdGVyaWE/LmZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBPbmx5IGJsb2NrIGlmIGhpZGRlbkZpbHRlciBpcyB0cnVlXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVyQ3JpdGVyaWEsIFwiaGlkZGVuRmlsdGVyXCIpICYmIGZpbHRlckNyaXRlcmlhPy5oaWRkZW5GaWx0ZXIpIHtcblx0XHRcdFx0XHRoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5wdXNoKGZpbHRlckNyaXRlcmlhLmxhYmVsIHx8IGZpbHRlckNyaXRlcmlhLm5hbWUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEhhbmRsZXMgdGhlIHNpbmdsZSByYW5nZSB2YWxpZGF0aW9uIGFuZCB1cGRhdGVzIGZvciBhIGZpbHRlciB2YWx1ZVxuXHRcdFx0XHRpZiAoIWhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyKGZpbHRlckNyaXRlcmlhLCBmaWx0ZXJWYWx1ZSwgc2luZ2xlUmFuZ2VUb2tlbkxhYmVscywgc2luZ2xlUmFuZ2VVc2FnZSkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHsgdHlwZSB9ID0gZmlsdGVyQ3JpdGVyaWE7XG5cdFx0XHRcdGNvbnN0IHRva2VuSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBmaWx0ZXJWYWx1ZS5uYW1lKTtcblx0XHRcdFx0Y29uc3QgeyBvcGVyYXRvciwgdmFsdWVzIH0gPSBmaWx0ZXJWYWx1ZTtcblx0XHRcdFx0bGV0IGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uO1xuXHRcdFx0XHRpZiAoRWFzeUZpbHRlclV0aWxzLmlzQmV0d2VlblNlbGVjdGVkVmFsdWVzKG9wZXJhdG9yKSkge1xuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSB7XG5cdFx0XHRcdFx0XHRvcGVyYXRvcixcblx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiB2YWx1ZXMgYXMgQmV0d2VlblNlbGVjdGVkVmFsdWVzXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0ge1xuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yIGFzIEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHZhbHVlcyBhcyBzdHJpbmdbXSB8IERhdGVbXSB8IG51bWJlcltdIHwgYm9vbGVhbltdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodG9rZW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHQvLyBBZGQgbmV3IHRva2VuIGlmIGl0IGRvZXNuJ3QgZXhpc3Rcblx0XHRcdFx0XHRjb25zdCBuZXdUb2tlbjogVG9rZW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRcdFx0a2V5OiBmaWx0ZXJWYWx1ZS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGZpbHRlckNyaXRlcmlhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFtrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSxcblx0XHRcdFx0XHRcdHR5cGU6IHR5cGUgYXMgRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+LFxuXHRcdFx0XHRcdFx0YnVzeTogdHlwZSA9PT0gXCJWYWx1ZUhlbHBcIiA/IHRydWUgOiBmYWxzZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2gobmV3VG9rZW4pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFVwZGF0ZSBleGlzdGluZyB0b2tlblxuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbkluZGV4XTtcblx0XHRcdFx0XHQvL0lmIGl0cyBkZWZhdWx0IHZhbHVlICwgb3ZlcnJpZGUgaXRcblx0XHRcdFx0XHRpZiAoKGN1cnJlbnRUb2tlbi5pc1JlcXVpcmVkID8/IGZhbHNlKSAmJiAhdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2Vuc1tjdXJyZW50VG9rZW4ua2V5XSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBba2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc107XG5cdFx0XHRcdFx0XHR2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zW2N1cnJlbnRUb2tlbi5rZXldID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KGN1cnJlbnRUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pLnB1c2goa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCB8fCBzaW5nbGVSYW5nZVRva2VuTGFiZWxzLmxlbmd0aCA+IDAgfHwgaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRpZiAobm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3Qgbm9uRmlsdGVyYWJsZVRva2VuTGFiZWwgPSBgPHN0cm9uZz4ke25vbkZpbHRlcmFibGVUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YDtcblx0XHRcdFx0bWVzc2FnZXMucHVzaChyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9OT05fRklMVEVSQUJMRVwiLCBbbm9uRmlsdGVyYWJsZVRva2VuTGFiZWxdKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBsYWJlbCA9IGA8c3Ryb25nPiR7aGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmA7XG5cdFx0XHRcdG1lc3NhZ2VzLnB1c2gocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfSElEREVOX0ZJTFRFUlwiLCBbbGFiZWxdKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gYDxzdHJvbmc+JHtzaW5nbGVSYW5nZVRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gO1xuXHRcdFx0XHRtZXNzYWdlcy5wdXNoKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NJTkdMRV9SQU5HRVwiLCBbbGFiZWxdKSk7XG5cdFx0XHR9XG5cdFx0XHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzKG1lc3NhZ2VzLmpvaW4oXCI8YnI+XCIpKTtcblx0XHR9XG5cdH1cbn1cblxuY29uc3QgRWFzeUZpbHRlclV0aWxzID0ge1xuXHRhcmVJdGVtc1NhbWUsXG5cdGFyZUNvZGVMaXN0c1NhbWUsXG5cdGdldENvZGVMaXN0QXJyYXksXG5cdGFyZUFycmF5U2FtZSxcblx0bWFwT3BlcmF0b3IsXG5cdG1hcE9wZXJhdG9yRm9yQmV0d2Vlbk9wZXJhdG9yLFxuXHRpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0Zm9ybWF0RGF0YSxcblx0bWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVhc3lGaWx0ZXJVdGlscztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQW9CQSxNQUFNQSxjQUFjLEdBQUdDLEdBQUcsQ0FBQ0Msb0JBQW9CLENBQUMsaUJBQWlCLENBQUU7RUFDbkUsTUFBTUMsY0FBYyxHQUFHLElBQUlDLGNBQWMsQ0FBQyxDQUFDO0VBRTNDLFNBQVNDLFlBQVlBLENBQ3BCQyxJQUFvRixFQUNwRkMsSUFBb0YsRUFDMUU7SUFDVixJQUFJRCxJQUFJLENBQUNFLE1BQU0sS0FBS0QsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDaEMsT0FBTyxLQUFLO0lBQ2I7SUFDQTtJQUNBLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSCxJQUFJLENBQUNFLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7TUFDckMsSUFDQ0gsSUFBSSxDQUFDRyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxLQUFLSCxJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDQyxRQUFRLElBQ3JDLENBQUNKLElBQUksQ0FBQ0csQ0FBQyxDQUFDLENBQUNFLGNBQWMsQ0FBQ0MsS0FBSyxDQUM1QixDQUFDQyxLQUFLLEVBQUVDLEtBQUssS0FDWkQsS0FBSyxLQUFLTixJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxjQUFjLENBQUNHLEtBQUssQ0FBQyxJQUN0QyxPQUFPRCxLQUFLLEtBQUss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
|
|
331
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGF0ZVRpbWVPZmZzZXQiLCJEYXRlVGltZU9mZnNldCIsImFyZUl0ZW1zU2FtZSIsImFycjEiLCJhcnIyIiwibGVuZ3RoIiwiaSIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJldmVyeSIsImZpcnN0VmFsdWUiLCJpbmRleCIsIm90aGVyVmFsdWUiLCJEYXRlIiwiZGVlcEVxdWFsIiwidmFsdWUiLCJkZXNjcmlwdGlvbiIsImFyZUFycmF5U2FtZSIsImFyZUNvZGVMaXN0c1NhbWUiLCJhcnJOZXcxIiwiZ2V0Q29kZUxpc3RBcnJheSIsImFyck5ldzIiLCJkZXNjcmlwdGlvbk5ldzEiLCJtYXAiLCJkYXRhIiwiZGVzY3JpcHRpb25OZXcyIiwidmFsdWUxIiwidmFsdWUyIiwiYXJyIiwiY29udmVydERhdGVUb1N0cmluZyIsInRva2VuVHlwZSIsImlzRGF0ZVRpbWVPZmZzZXQiLCJmb3JtYXR0ZWREYXRlVGltZSIsImZvcm1hdFZhbHVlIiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsImZvcm1hdCIsImdldFRpbWVJbnN0YW5jZSIsIm1hcE9wZXJhdG9yIiwibmV3VmFsdWUiLCJjb252ZXJ0Qm9vbFRvU3RyaW5nIiwiRmlsdGVyT3BlcmF0b3IiLCJHVCIsIkxUIiwiR0UiLCJMRSIsIkVRIiwiQ29udGFpbnMiLCJFbmRzV2l0aCIsIlN0YXJ0c1dpdGgiLCJORSIsIk5vdENvbnRhaW5zIiwiTm90RW5kc1dpdGgiLCJOb3RTdGFydHNXaXRoIiwidG9TdHJpbmciLCJtYXBPcGVyYXRvckZvclZhbHVlSGVscCIsIm1hcE9wZXJhdG9yRm9yQmV0d2Vlbk9wZXJhdG9yIiwidmFsdWVzIiwibmV3VmFsdWUxIiwibmV3VmFsdWUyIiwiQlQiLCJpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyIsIk5CIiwiZ2V0VGV4dCIsImhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyIiwiZmlsdGVyQ3JpdGVyaWEiLCJmaWx0ZXJWYWx1ZSIsInNpbmdsZVJhbmdlVG9rZW5MYWJlbHMiLCJzaW5nbGVSYW5nZVVzYWdlIiwiZmlsdGVyUmVzdHJpY3Rpb24iLCJpc0ludmFsaWQiLCJpc0ludmFsaWRTaW5nbGVSYW5nZSIsIm5hbWUiLCJsYWJlbCIsImluY2x1ZGVzIiwicHVzaCIsInNpbmdsZVZhbHVlT3BzIiwicmFuZ2VPcHMiLCJvcCIsInZhbENvdW50IiwiZm9ybWF0RGF0YSIsInRva2VucyIsImZpbHRlclZhbHVlcyIsImZpbHRlckJhck1ldGFkYXRhIiwic2V0TWVzc2FnZVN0cmlwRm9yVmFsaWRhdGVkRmlsdGVycyIsInZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnMiLCJub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMiLCJoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscyIsImZpbmQiLCJmaWVsZCIsInByb2Nlc3NGaWx0ZXJDcml0ZXJpYSIsImlzSW52YWxpZFNpbmdsZVJhbmdlVG9rZW4iLCJ1cGRhdGVUb2tlbnMiLCJnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlcyIsImZpbHRlcmFibGUiLCJoaWRkZW5GaWx0ZXIiLCJ0b2tlbkluZGV4IiwiZmluZEluZGV4IiwidG9rZW4iLCJrZXkiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiY3JlYXRlS2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsInR5cGUiLCJidXN5IiwiY3VycmVudFRva2VuIiwiaXNSZXF1aXJlZCIsIkVhc3lGaWx0ZXJVdGlscyIsIm1lc3NhZ2VzIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsidXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IERhdGVUaW1lT2Zmc2V0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9EYXRlVGltZU9mZnNldFwiO1xuaW1wb3J0IHR5cGUgeyBFYXN5RmlsdGVyUmVzdWx0LCBQcm9wZXJ0eU1ldGFkYXRhIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMsXG5cdENvZGVMaXN0VHlwZSxcblx0RWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdFRva2VuRGVmaW5pdGlvbixcblx0VG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24sXG5cdFRva2VuVHlwZSxcblx0VmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcIi4vRWFzeUZpbHRlckJhckNvbnRhaW5lclwiO1xuXG50eXBlIGNvZGVMaXN0VHlwZSA9IFByb3BlcnR5TWV0YWRhdGFbXCJjb2RlTGlzdFwiXTtcbnR5cGUgZmluYWxDb2RlTGlzdFR5cGUgPSB7IHZhbHVlOiBQcmltaXRpdmVUeXBlOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9W107XG5jb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb250cm9sc1wiKSE7XG5jb25zdCBkYXRlVGltZU9mZnNldCA9IG5ldyBEYXRlVGltZU9mZnNldCgpO1xuXG5mdW5jdGlvbiBhcmVJdGVtc1NhbWUoXG5cdGFycjE6IHJlYWRvbmx5IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0YXJyMjogcmVhZG9ubHkgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG4pOiBib29sZWFuIHtcblx0aWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIENvbXBhcmUgZWxlbWVudHMgb2YgYm90aCBhcnJheXNcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YXJyMVtpXS5vcGVyYXRvciAhPT0gYXJyMltpXS5vcGVyYXRvciB8fFxuXHRcdFx0IWFycjFbaV0uc2VsZWN0ZWRWYWx1ZXMuZXZlcnkoKGZpcnN0VmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG90aGVyVmFsdWUgPSBhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgRGF0ZSBvYmplY3RzXG5cdFx0XHRcdGlmIChmaXJzdFZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCBvdGhlclZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiBkZWVwRXF1YWwoZmlyc3RWYWx1ZSwgb3RoZXJWYWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgb2JqZWN0cyB3aXRoIGRlZXAgZXF1YWxpdHlcblx0XHRcdFx0aWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvdGhlclZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRlZXBFcXVhbChmaXJzdFZhbHVlLnZhbHVlLCBvdGhlclZhbHVlLnZhbHVlKSAmJiBmaXJzdFZhbHVlLmRlc2NyaXB0aW9uID09PSBvdGhlclZhbHVlLmRlc2NyaXB0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gZGlyZWN0IGNvbXBhcmlzb25cblx0XHRcdFx0cmV0dXJuIGZpcnN0VmFsdWUgPT09IG90aGVyVmFsdWU7XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0cnVlOyAvLyBBcnJheXMgYXJlIHRoZSBzYW1lXG59XG5cbmZ1bmN0aW9uIGFyZUFycmF5U2FtZShhcnIxOiByZWFkb25seSB1bmtub3duW10sIGFycjI6IHJlYWRvbmx5IHVua25vd25bXSk6IGJvb2xlYW4ge1xuXHRpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8vIENvbXBhcmUgZWxlbWVudHMgb2YgYm90aCBhcnJheXNcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7IC8vIEFycmF5cyBhcmUgdGhlIHNhbWVcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJlQ29kZUxpc3RzU2FtZShhcnIxOiBjb2RlTGlzdFR5cGUsIGFycjI6IGNvZGVMaXN0VHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRjb25zdCBhcnJOZXcxOiBmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGdldENvZGVMaXN0QXJyYXkoYXJyMSk7XG5cdGNvbnN0IGFyck5ldzI6IGZpbmFsQ29kZUxpc3RUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0Q29kZUxpc3RBcnJheShhcnIyKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcxID0gYXJyTmV3MT8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcyID0gYXJyTmV3Mj8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblxuXHRjb25zdCB2YWx1ZTEgPSBhcnJOZXcxPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRjb25zdCB2YWx1ZTIgPSBhcnJOZXcyPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRpZiAoIWRlc2NyaXB0aW9uTmV3MSB8fCAhZGVzY3JpcHRpb25OZXcyKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBhcmVBcnJheVNhbWUoZGVzY3JpcHRpb25OZXcxLCBkZXNjcmlwdGlvbk5ldzIpICYmIGFyZUFycmF5U2FtZSh2YWx1ZTEgYXMgUHJpbWl0aXZlVHlwZSwgdmFsdWUyIGFzIFByaW1pdGl2ZVR5cGUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb2RlTGlzdEFycmF5KGFycjogY29kZUxpc3RUeXBlKTogUHJvbWlzZTxmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAodHlwZW9mIGFyciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0cmV0dXJuIGFycigpO1xuXHR9XG5cdHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWU6IERhdGUsIHRva2VuVHlwZTogVG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuKTogc3RyaW5nIHtcblx0bGV0IGZvcm1hdHRlZERhdGVUaW1lID0gXCJcIjtcblx0aWYgKGlzRGF0ZVRpbWVPZmZzZXQpIHtcblx0XHRyZXR1cm4gZGF0ZVRpbWVPZmZzZXQuZm9ybWF0VmFsdWUodmFsdWUsIFwic3RyaW5nXCIpIGFzIHN0cmluZztcblx0fVxuXHRzd2l0Y2ggKHRva2VuVHlwZSkge1xuXHRcdGNhc2UgXCJDYWxlbmRhclwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGltZVwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGZvcm1hdHRlZERhdGVUaW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgYW5kIHZhbHVlLlxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byByZXByZXNlbnRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVwcmVzZW50XG4gKiBAcGFyYW0gdG9rZW5UeXBlIFRoZSB0b2tlbidzIHR5cGVcbiAqIEBwYXJhbSBpc0RhdGVUaW1lT2Zmc2V0IENoZWNrcyBpZiB0aGUgZGF0YSB0eXBlIGlzIG9mIERhdGVUaW1lT2Zmc2V0XG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvcGVyYXRvciBhbmQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbWFwT3BlcmF0b3IoXG5cdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcixcblx0dmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlLFxuXHR0b2tlblR5cGU6IFRva2VuVHlwZSxcblx0aXNEYXRlVGltZU9mZnNldDogYm9vbGVhblxuKTogc3RyaW5nIHtcblx0bGV0IG5ld1ZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSBcIlwiO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdG5ld1ZhbHVlID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0bmV3VmFsdWUgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HVDpcblx0XHRcdHJldHVybiBgPiAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5MVDpcblx0XHRcdHJldHVybiBgPCAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HRTpcblx0XHRcdHJldHVybiBgPj0gJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTEU6XG5cdFx0XHRyZXR1cm4gYDw9ICR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLkVROlxuXHRcdFx0cmV0dXJuIGAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Db250YWluczpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5FbmRzV2l0aDpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGg6XG5cdFx0XHRyZXR1cm4gYCR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5ORTpcblx0XHRcdHJldHVybiBgIT0oJHtuZXdWYWx1ZX0pYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdENvbnRhaW5zOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSopYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdEVuZHNXaXRoOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSlgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTm90U3RhcnRzV2l0aDpcblx0XHRcdHJldHVybiBgISgke25ld1ZhbHVlfSopYDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ld1ZhbHVlPy50b1N0cmluZygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG1hcE9wZXJhdG9yRm9yVmFsdWVIZWxwKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciwgdmFsdWU6IENvZGVMaXN0VHlwZSwgdG9rZW5UeXBlOiBUb2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gbWFwT3BlcmF0b3Iob3BlcmF0b3IsIHZhbHVlLmRlc2NyaXB0aW9uLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xufVxuXG5mdW5jdGlvbiBtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvcihcblx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuXHR2YWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcyB8IFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0dG9rZW5UeXBlOiBUb2tlblR5cGUsXG5cdGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW5cbik6IHN0cmluZyB7XG5cdGxldCBuZXdWYWx1ZTE6IHN0cmluZyB8IG51bWJlciB8IERhdGUgPSBcIlwiO1xuXHRsZXQgbmV3VmFsdWUyOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlID0gXCJcIjtcblx0aWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0bmV3VmFsdWUxID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZXNbMF0pO1xuXHR9IGVsc2UgaWYgKHZhbHVlc1swXSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRuZXdWYWx1ZTEgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlc1swXSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bmV3VmFsdWUxID0gdmFsdWVzWzBdLmRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZTEgPSB2YWx1ZXNbMF07XG5cdH1cblxuXHRpZiAodHlwZW9mIHZhbHVlc1sxXSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRuZXdWYWx1ZTIgPSBjb252ZXJ0Qm9vbFRvU3RyaW5nKHZhbHVlc1sxXSk7XG5cdH0gZWxzZSBpZiAodmFsdWVzWzFdIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdG5ld1ZhbHVlMiA9IGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVzWzFdLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRuZXdWYWx1ZTIgPSB2YWx1ZXNbMV0uZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlMiA9IHZhbHVlc1sxXTtcblx0fVxuXHRpZiAob3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUKSB7XG5cdFx0cmV0dXJuIGAke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgISgke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyhvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IpOiBib29sZWFuIHtcblx0cmV0dXJuIG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCB8fCBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuTkI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gdmFsdWVcblx0XHQ/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NFTEVDVEVEX1ZBTFVFU19UUlVFXCIpXG5cdFx0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TRUxFQ1RFRF9WQUxVRVNfRkFMU0VcIik7XG59XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgc2luZ2xlIHJhbmdlIHZhbGlkYXRpb24gYW5kIHVwZGF0ZXMgZm9yIGEgZmlsdGVyIHZhbHVlLlxuICogQHBhcmFtIGZpbHRlckNyaXRlcmlhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGZpbHRlclxuICogQHBhcmFtIGZpbHRlclZhbHVlIFRoZSBmaWx0ZXIgdmFsdWUgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBzaW5nbGVSYW5nZVRva2VuTGFiZWxzIEFycmF5IHRvIGNvbGxlY3QgbGFiZWxzIG9mIGludmFsaWQgc2luZ2xlIHJhbmdlIGZpbHRlcnNcbiAqIEBwYXJhbSBzaW5nbGVSYW5nZVVzYWdlIFJlY29yZCB0byB0cmFjayB1c2FnZSBjb3VudCBvZiBzaW5nbGUgcmFuZ2UgZmlsdGVyc1xuICogQHJldHVybnMgVHJ1ZSBpZiBwcm9jZXNzaW5nIHNob3VsZCBjb250aW51ZSwgZmFsc2UgaWYgaXQgc2hvdWxkIHNraXAgYW5kIG1ha2UgdGhlIGV4aXN0aW5nIHRva2VuIGFzIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyKFxuXHRmaWx0ZXJDcml0ZXJpYTogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdGZpbHRlclZhbHVlOiBFYXN5RmlsdGVyUmVzdWx0W1wiZmlsdGVyXCJdWzBdLFxuXHRzaW5nbGVSYW5nZVRva2VuTGFiZWxzOiBzdHJpbmdbXSxcblx0c2luZ2xlUmFuZ2VVc2FnZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuKTogYm9vbGVhbiB7XG5cdGlmIChmaWx0ZXJDcml0ZXJpYT8uZmlsdGVyUmVzdHJpY3Rpb24gIT09IFwiU2luZ2xlUmFuZ2VcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgaXNJbnZhbGlkID0gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWUpIHx8IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApID4gMDtcblx0c2luZ2xlUmFuZ2VVc2FnZVtmaWx0ZXJWYWx1ZS5uYW1lXSA9IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApICsgMTtcblxuXHRpZiAoIWlzSW52YWxpZCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgbGFiZWwgPSBmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lO1xuXHRpZiAoIXNpbmdsZVJhbmdlVG9rZW5MYWJlbHMuaW5jbHVkZXMobGFiZWwpKSB7XG5cdFx0c2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5wdXNoKGxhYmVsKTtcblx0fVxuXG5cdGZpbHRlclZhbHVlLnZhbHVlcyA9IFtdO1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFZhbGlkYXRlcyBpZiBhIGZpbHRlciB2YWx1ZSB2aW9sYXRlcyB0aGUgU2luZ2xlUmFuZ2UgcmVzdHJpY3Rpb24uXG4vLyBSZXR1cm5zIHRydWUgaWYgaW52YWxpZCwgZmFsc2UgaWYgdmFsaWQuXG4vLyBSdWxlcyBmb3IgU2luZ2xlUmFuZ2U6XG4vLyAtIEFsbG93ZWQgb3BlcmF0b3JzOiBFUSwgTEUsIExULCBHRSwgR1QsIEJULCBOQlxuLy8gLSBTaW5nbGUtdmFsdWUgb3BlcmF0b3JzIChFUSwgTEUsIExULCBHRSwgR1QpOiBtdXN0IGhhdmUgZXhhY3RseSAxIHZhbHVlXG4vLyAtIFJhbmdlIG9wZXJhdG9ycyAoQlQsIE5CKTogbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXMgKGxvd2VyICYgdXBwZXIgYm91bmQpXG4vLyAtIE9ubHkgb25lIGNvbmRpdGlvbi90b2tlbiBpcyBhbGxvd2VkIHBlciBwcm9wZXJ0eSAoc2hvdWxkIGJlIGVuZm9yY2VkIG91dHNpZGUpXG4vL1xuZnVuY3Rpb24gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWU6IHsgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yOyB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgYm9vbGVhbilbXSB9KTogYm9vbGVhbiB7XG5cdGNvbnN0IHNpbmdsZVZhbHVlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkVRLCBGaWx0ZXJPcGVyYXRvci5MRSwgRmlsdGVyT3BlcmF0b3IuTFQsIEZpbHRlck9wZXJhdG9yLkdFLCBGaWx0ZXJPcGVyYXRvci5HVF07XG5cdGNvbnN0IHJhbmdlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkJULCBGaWx0ZXJPcGVyYXRvci5OQl07XG5cblx0Y29uc3Qgb3AgPSBmaWx0ZXJWYWx1ZS5vcGVyYXRvcjtcblx0Y29uc3QgdmFsQ291bnQgPSBmaWx0ZXJWYWx1ZS52YWx1ZXM/Lmxlbmd0aCB8fCAwO1xuXG5cdC8vIFNpbmdsZS12YWx1ZSBvcGVyYXRvcnMg4oaSIG11c3QgaGF2ZSBleGFjdGx5IDEgdmFsdWVcblx0aWYgKHNpbmdsZVZhbHVlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMTtcblx0fVxuXG5cdC8vIFJhbmdlIG9wZXJhdG9ycyAoQmV0d2VlbiAvIE5vdCBCZXR3ZWVuKSDihpIgbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXNcblx0aWYgKHJhbmdlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMjtcblx0fVxuXG5cdC8vIEFueXRoaW5nIGVsc2UgaXMgbm90IGFsbG93ZWQgZm9yIFNpbmdsZVJhbmdlXG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZXM6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl0sXG5cdGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdLFxuXHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzOiAobXNnOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuXHRpZiAoIWZpbHRlclZhbHVlcykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IG5vbkZpbHRlcmFibGVUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3Qgc2luZ2xlUmFuZ2VUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHNpbmdsZVJhbmdlVXNhZ2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlclZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xuXHRcdGNvbnN0IGZpbHRlckNyaXRlcmlhID0gZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09IGZpbHRlclZhbHVlLm5hbWUpO1xuXHRcdGlmICghZmlsdGVyQ3JpdGVyaWEpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBub24tZmlsdGVyYWJsZSBhbmQgaGlkZGVuIGZpbHRlcnNcblx0XHRpZiAoIXByb2Nlc3NGaWx0ZXJDcml0ZXJpYShmaWx0ZXJDcml0ZXJpYSwgbm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFZhbGlkYXRlIHNpbmdsZSByYW5nZSBmaWx0ZXJzXG5cdFx0Y29uc3QgaXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbiA9ICFoYW5kbGVTaW5nbGVSYW5nZUZpbHRlcihmaWx0ZXJDcml0ZXJpYSwgZmlsdGVyVmFsdWUsIHNpbmdsZVJhbmdlVG9rZW5MYWJlbHMsIHNpbmdsZVJhbmdlVXNhZ2UpO1xuXG5cdFx0Ly8gVXBkYXRlIHRva2Vuc1xuXHRcdHVwZGF0ZVRva2Vucyh0b2tlbnMsIGZpbHRlclZhbHVlLCBmaWx0ZXJDcml0ZXJpYSwgdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VucywgaXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbik7XG5cdH1cblxuXHQvLyBIYW5kbGUgdmFsaWRhdGlvbiBtZXNzYWdlc1xuXHRpZiAobm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmxlbmd0aCA+IDAgfHwgc2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5sZW5ndGggPiAwIHx8IGhpZGRlbkZpbHRlclRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzKFxuXHRcdFx0Z2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZXMobm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLCBzaW5nbGVSYW5nZVRva2VuTGFiZWxzLCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscylcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NGaWx0ZXJDcml0ZXJpYShcblx0ZmlsdGVyQ3JpdGVyaWE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhLFxuXHRub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHM6IHN0cmluZ1tdLFxuXHRoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW11cbik6IGJvb2xlYW4ge1xuXHRpZiAoZmlsdGVyQ3JpdGVyaWEuZmlsdGVyYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoZmlsdGVyQ3JpdGVyaWEuaGlkZGVuRmlsdGVyID09PSB0cnVlKSB7XG5cdFx0aGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVG9rZW5zKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZTogRWFzeUZpbHRlclJlc3VsdFtcImZpbHRlclwiXVswXSxcblx0ZmlsdGVyQ3JpdGVyaWE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhLFxuXHR2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcblx0aXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbjogYm9vbGVhblxuKTogdm9pZCB7XG5cdGNvbnN0IHRva2VuSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBmaWx0ZXJWYWx1ZS5uYW1lKTtcblx0Y29uc3Qga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IGNyZWF0ZUtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMoZmlsdGVyVmFsdWUpO1xuXG5cdGlmICh0b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdC8vIEFkZCBuZXcgdG9rZW5cblx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRrZXk6IGZpbHRlclZhbHVlLm5hbWUsXG5cdFx0XHRsYWJlbDogZmlsdGVyQ3JpdGVyaWEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogaXNJbnZhbGlkU2luZ2xlUmFuZ2VUb2tlbiA/IFtdIDogW2tleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdLFxuXHRcdFx0dHlwZTogZmlsdGVyQ3JpdGVyaWEudHlwZSBhcyBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj4sXG5cdFx0XHRidXN5OiBmaWx0ZXJDcml0ZXJpYS50eXBlID09PSBcIlZhbHVlSGVscFwiXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVXBkYXRlIGV4aXN0aW5nIHRva2VuXG5cdFx0Y29uc3QgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuXHRcdGlmIChpc0ludmFsaWRTaW5nbGVSYW5nZVRva2VuKSB7XG5cdFx0XHRjdXJyZW50VG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IFtdO1xuXHRcdH0gZWxzZSBpZiAoKGN1cnJlbnRUb2tlbi5pc1JlcXVpcmVkID8/IGZhbHNlKSAmJiAhdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2Vuc1tjdXJyZW50VG9rZW4ua2V5XSkge1xuXHRcdFx0Y3VycmVudFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBba2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc107XG5cdFx0XHR2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zW2N1cnJlbnRUb2tlbi5rZXldID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0KGN1cnJlbnRUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pLnB1c2goa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMoZmlsdGVyVmFsdWU6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl1bMF0pOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHsgb3BlcmF0b3IsIHZhbHVlcyB9ID0gZmlsdGVyVmFsdWU7XG5cblx0aWYgKEVhc3lGaWx0ZXJVdGlscy5pc0JldHdlZW5TZWxlY3RlZFZhbHVlcyhvcGVyYXRvcikpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b3BlcmF0b3IsXG5cdFx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWVzIGFzIEJldHdlZW5TZWxlY3RlZFZhbHVlc1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG9wZXJhdG9yOiBvcGVyYXRvciBhcyBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPixcblx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWVzIGFzIHN0cmluZ1tdIHwgRGF0ZVtdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0fTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZXMoXG5cdG5vbkZpbHRlcmFibGVUb2tlbkxhYmVsczogc3RyaW5nW10sXG5cdHNpbmdsZVJhbmdlVG9rZW5MYWJlbHM6IHN0cmluZ1tdLFxuXHRoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW11cbik6IHN0cmluZyB7XG5cdGNvbnN0IG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGlmIChub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdG1lc3NhZ2VzLnB1c2gocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTk9OX0ZJTFRFUkFCTEVcIiwgW2A8c3Ryb25nPiR7bm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gXSkpO1xuXHR9XG5cblx0aWYgKGhpZGRlbkZpbHRlclRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRtZXNzYWdlcy5wdXNoKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0hJRERFTl9GSUxURVJcIiwgW2A8c3Ryb25nPiR7aGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmBdKSk7XG5cdH1cblxuXHRpZiAoc2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0bWVzc2FnZXMucHVzaChyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TSU5HTEVfUkFOR0VcIiwgW2A8c3Ryb25nPiR7c2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YF0pKTtcblx0fVxuXG5cdHJldHVybiBtZXNzYWdlcy5qb2luKFwiPGJyPlwiKTtcbn1cblxuY29uc3QgRWFzeUZpbHRlclV0aWxzID0ge1xuXHRhcmVJdGVtc1NhbWUsXG5cdGFyZUNvZGVMaXN0c1NhbWUsXG5cdGdldENvZGVMaXN0QXJyYXksXG5cdGFyZUFycmF5U2FtZSxcblx0bWFwT3BlcmF0b3IsXG5cdG1hcE9wZXJhdG9yRm9yQmV0d2Vlbk9wZXJhdG9yLFxuXHRpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0Zm9ybWF0RGF0YSxcblx0bWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVhc3lGaWx0ZXJVdGlscztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQW9CQSxNQUFNQSxjQUFjLEdBQUdDLEdBQUcsQ0FBQ0Msb0JBQW9CLENBQUMsaUJBQWlCLENBQUU7RUFDbkUsTUFBTUMsY0FBYyxHQUFHLElBQUlDLGNBQWMsQ0FBQyxDQUFDO0VBRTNDLFNBQVNDLFlBQVlBLENBQ3BCQyxJQUFvRixFQUNwRkMsSUFBb0YsRUFDMUU7SUFDVixJQUFJRCxJQUFJLENBQUNFLE1BQU0sS0FBS0QsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDaEMsT0FBTyxLQUFLO0lBQ2I7O0lBRUE7SUFDQSxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0gsSUFBSSxDQUFDRSxNQUFNLEVBQUVDLENBQUMsRUFBRSxFQUFFO01BQ3JDLElBQ0NILElBQUksQ0FBQ0csQ0FBQyxDQUFDLENBQUNDLFFBQVEsS0FBS0gsSUFBSSxDQUFDRSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxJQUNyQyxDQUFDSixJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDRSxjQUFjLENBQUNDLEtBQUssQ0FBQyxDQUFDQyxVQUFVLEVBQUVDLEtBQUssS0FBSztRQUNwRCxNQUFNQyxVQUFVLEdBQUdSLElBQUksQ0FBQ0UsQ0FBQyxDQUFDLENBQUNFLGNBQWMsQ0FBQ0csS0FBSyxDQUFDOztRQUVoRDtRQUNBLElBQUlELFVBQVUsWUFBWUcsSUFBSSxJQUFJRCxVQUFVLFlBQVlDLElBQUksRUFBRTtVQUM3RCxPQUFPQyxTQUFTLENBQUNKLFVBQVUsRUFBRUUsVUFBVSxDQUFDO1FBQ3pDOztRQUVBO1FBQ0EsSUFBSSxPQUFPRixVQUFVLEtB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
|