haya-select 1.0.106 → 1.0.108
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/build/select/index.js +41 -28
- package/package.json +2 -2
package/build/select/index.js
CHANGED
|
@@ -385,25 +385,31 @@ class HayaSelect extends ShapeComponent {
|
|
|
385
385
|
getValues = () => ("values" in this.props)
|
|
386
386
|
? (Array.isArray(this.p.values) ? this.p.values : [])
|
|
387
387
|
: (Array.isArray(this.s.currentOptions) ? this.s.currentOptions : []).map((currentOption) => currentOption.value);
|
|
388
|
-
/** @returns {Array<HayaSelectOption|{value: string|number}
|
|
388
|
+
/** @returns {Array<HayaSelectOption|{value: string|number}>} */
|
|
389
389
|
getCurrentOptions = () => {
|
|
390
390
|
if ("values" in this.props && typeof this.props.values != "undefined") {
|
|
391
391
|
if (Array.isArray(this.p.values) && this.p.values.length === 0)
|
|
392
392
|
return [];
|
|
393
393
|
if (Array.isArray(this.props.options) && Array.isArray(this.p.values)) {
|
|
394
|
-
|
|
394
|
+
/** @type {Array<HayaSelectOption>} */
|
|
395
|
+
const result = [];
|
|
396
|
+
for (const value of this.p.values) {
|
|
397
|
+
const option = this.p.options.find((option) => option.value == value);
|
|
398
|
+
if (option)
|
|
399
|
+
result.push(option);
|
|
400
|
+
}
|
|
401
|
+
return result;
|
|
395
402
|
}
|
|
396
403
|
else if (this.s.loadedOptions && Array.isArray(this.p.values)) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
});
|
|
404
|
+
/** @type {Array<HayaSelectOption>} */
|
|
405
|
+
const result = [];
|
|
406
|
+
for (const value of this.p.values) {
|
|
407
|
+
const option = this.s.loadedOptions.find((option) => option.value == value) ||
|
|
408
|
+
this.s.currentOptions.find((option) => option.value == value);
|
|
409
|
+
if (option)
|
|
410
|
+
result.push(option);
|
|
411
|
+
}
|
|
412
|
+
return result;
|
|
407
413
|
}
|
|
408
414
|
else if (typeof this.props.options == "function") {
|
|
409
415
|
// Options haven't been loaded yet.
|
|
@@ -465,10 +471,11 @@ class HayaSelect extends ShapeComponent {
|
|
|
465
471
|
flexDirection: "row",
|
|
466
472
|
alignItems: "center",
|
|
467
473
|
backgroundColor: transparent ? undefined : "#fff",
|
|
468
|
-
|
|
474
|
+
borderColor: transparent ? undefined : "#999",
|
|
469
475
|
borderRadius: transparent ? undefined : 4,
|
|
476
|
+
borderWidth: transparent ? undefined : 1,
|
|
470
477
|
color: "#000",
|
|
471
|
-
cursor: "pointer",
|
|
478
|
+
cursor: Platform.OS == "web" ? "pointer" : undefined,
|
|
472
479
|
paddingTop: 5,
|
|
473
480
|
paddingBottom: 5,
|
|
474
481
|
paddingLeft: 5
|
|
@@ -503,12 +510,12 @@ class HayaSelect extends ShapeComponent {
|
|
|
503
510
|
toggles: Boolean(toggleOptions)
|
|
504
511
|
}, [this.s.loadOptionsAppliedRequestId, className, id, opened, optionsPlacement, this.s.loadOptionsRequestId, Boolean(toggleOptions)]), style: this.stylingFor("main") },
|
|
505
512
|
React.createElement(Pressable, { dataSet: this.selectContainerDataSet ||= { class: "select-container" }, onLayout: this.tt.onSelectContainerLayout, onPress: this.tt.onSelectClicked, ref: this.tt.selectContainerRef, style: selectContainerStyleActual },
|
|
506
|
-
React.createElement(View, { dataSet: this.currentSelectedDataSet ||= { class: "current-selected" }, style: this.stylingFor("currentSelected", this.currentSelectedStyle ||= {
|
|
513
|
+
React.createElement(View, { dataSet: this.currentSelectedDataSet ||= { class: "current-selected" }, style: this.stylingFor("currentSelected", this.currentSelectedStyle ||= { flex: 1, flexWrap: "wrap", overflow: "hidden" }) },
|
|
507
514
|
opened &&
|
|
508
515
|
React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, onChangeText: this.tt.onChangeSearchText, placeholder: this.translate(".search_dot_dot_dot"), ref: this.tt.searchTextInputRef, style: this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
|
|
509
516
|
width: "100%",
|
|
510
|
-
|
|
511
|
-
outline: "none",
|
|
517
|
+
borderWidth: 0,
|
|
518
|
+
outline: Platform.OS == "web" ? "none" : undefined,
|
|
512
519
|
padding: 0
|
|
513
520
|
}), defaultValue: this.searchTextValue }),
|
|
514
521
|
!opened &&
|
|
@@ -1073,15 +1080,17 @@ class HayaSelect extends ShapeComponent {
|
|
|
1073
1080
|
const prevDisabled = currentPage <= 1;
|
|
1074
1081
|
const nextDisabled = currentPage >= totalPages;
|
|
1075
1082
|
return (React.createElement(View, { dataSet: dataSets.paginationContainer ||= { class: "options-pagination" }, style: styles.paginationContainer ||= {
|
|
1076
|
-
|
|
1083
|
+
borderTopColor: "#e2e8f0",
|
|
1084
|
+
borderTopWidth: 1,
|
|
1077
1085
|
padding: 8
|
|
1078
1086
|
} },
|
|
1079
1087
|
React.createElement(View, { dataSet: dataSets.paginationHeader ||= { class: "pagination-header" }, style: styles.paginationHeader ||= { flexDirection: "row", alignItems: "center", justifyContent: "space-between" } },
|
|
1080
1088
|
React.createElement(Pressable, { dataSet: dataSets.paginationPrevButton ||= { class: "pagination-prev" }, disabled: prevDisabled, onPress: this.tt.onPaginationPrevPressed, style: styles[`paginationNavButton-${prevDisabled}`] ||= {
|
|
1081
1089
|
alignItems: "center",
|
|
1082
1090
|
backgroundColor: "#f8fafc",
|
|
1083
|
-
|
|
1091
|
+
borderColor: "#cbd5e1",
|
|
1084
1092
|
borderRadius: 8,
|
|
1093
|
+
borderWidth: 1,
|
|
1085
1094
|
height: 30,
|
|
1086
1095
|
justifyContent: "center",
|
|
1087
1096
|
opacity: prevDisabled ? 0.4 : 1,
|
|
@@ -1094,18 +1103,19 @@ class HayaSelect extends ShapeComponent {
|
|
|
1094
1103
|
}, [currentPage]), style: styles.paginationLabelButton ||= {
|
|
1095
1104
|
alignItems: "center",
|
|
1096
1105
|
backgroundColor: "#f1f5f9",
|
|
1097
|
-
|
|
1106
|
+
borderColor: "#cbd5e1",
|
|
1098
1107
|
borderRadius: 14,
|
|
1108
|
+
borderWidth: 1,
|
|
1099
1109
|
justifyContent: "center",
|
|
1100
1110
|
minWidth: 140,
|
|
1101
1111
|
paddingHorizontal: 10,
|
|
1102
1112
|
paddingVertical: 6
|
|
1103
1113
|
} },
|
|
1104
1114
|
React.createElement(TextInput, { dataSet: dataSets.paginationInput ||= { class: "pagination-input" }, keyboardType: "number-pad", onBlur: this.tt.onPaginationInputBlur, onChangeText: this.tt.onPaginationInputChange, onFocus: this.tt.onPaginationInputFocus, onPressIn: this.tt.onPaginationInputFocus, onKeyDown: this.tt.onPaginationInputKeyDown, onSubmitEditing: this.tt.onPaginationInputSubmit, ref: this.tt.pageInputRef, selectTextOnFocus: true, style: styles.paginationInputStyle ||= {
|
|
1105
|
-
|
|
1115
|
+
borderWidth: 0,
|
|
1106
1116
|
color: "#0f172a",
|
|
1107
1117
|
fontSize: 12,
|
|
1108
|
-
outline: "none",
|
|
1118
|
+
outline: Platform.OS == "web" ? "none" : undefined,
|
|
1109
1119
|
padding: 0,
|
|
1110
1120
|
textAlign: "center",
|
|
1111
1121
|
width: 120
|
|
@@ -1113,8 +1123,9 @@ class HayaSelect extends ShapeComponent {
|
|
|
1113
1123
|
React.createElement(Pressable, { dataSet: dataSets.paginationNextButton ||= { class: "pagination-next" }, disabled: nextDisabled, onPress: this.tt.onPaginationNextPressed, style: styles[`paginationNavButton-${nextDisabled}`] ||= {
|
|
1114
1124
|
alignItems: "center",
|
|
1115
1125
|
backgroundColor: "#f8fafc",
|
|
1116
|
-
|
|
1126
|
+
borderColor: "#cbd5e1",
|
|
1117
1127
|
borderRadius: 8,
|
|
1128
|
+
borderWidth: 1,
|
|
1118
1129
|
height: 30,
|
|
1119
1130
|
justifyContent: "center",
|
|
1120
1131
|
opacity: nextDisabled ? 0.4 : 1,
|
|
@@ -1149,9 +1160,10 @@ class HayaSelect extends ShapeComponent {
|
|
|
1149
1160
|
visibility: optionsVisibility,
|
|
1150
1161
|
width: this.p.optionsWidth || this.s.optionsWidth,
|
|
1151
1162
|
backgroundColor: "#fff",
|
|
1152
|
-
|
|
1163
|
+
borderColor: "#999",
|
|
1164
|
+
borderWidth: 1,
|
|
1153
1165
|
maxHeight: 300,
|
|
1154
|
-
overflowY: "auto"
|
|
1166
|
+
overflowY: Platform.OS == "web" ? "auto" : undefined
|
|
1155
1167
|
};
|
|
1156
1168
|
if (!this.p.optionsPortal) {
|
|
1157
1169
|
style.top = 0;
|
|
@@ -1318,17 +1330,18 @@ class HayaSelect extends ShapeComponent {
|
|
|
1318
1330
|
*/
|
|
1319
1331
|
stylingFor(stylingName, style = {}, caches = []) {
|
|
1320
1332
|
let customStyling = dig(this, "props", "styles", stylingName);
|
|
1333
|
+
const baseStyle = { ...style };
|
|
1321
1334
|
if (typeof customStyling == "function") {
|
|
1322
1335
|
/** @type {HayaSelectStylingContext} */
|
|
1323
1336
|
customStyling = customStyling({
|
|
1324
1337
|
opened: this.s.opened,
|
|
1325
1338
|
optionsPlacement: this.s.optionsPlacement,
|
|
1326
1339
|
state: this.state,
|
|
1327
|
-
style
|
|
1340
|
+
style: baseStyle
|
|
1328
1341
|
});
|
|
1329
1342
|
}
|
|
1330
1343
|
if (customStyling) {
|
|
1331
|
-
return Object.assign(
|
|
1344
|
+
return Object.assign({}, baseStyle, customStyling);
|
|
1332
1345
|
}
|
|
1333
1346
|
return this.cache(`stylingFor-${stylingName}`, style, caches);
|
|
1334
1347
|
}
|
|
@@ -1425,4 +1438,4 @@ class HayaSelect extends ShapeComponent {
|
|
|
1425
1438
|
}
|
|
1426
1439
|
const HayaSelectShapeComponent = shapeComponent(HayaSelect);
|
|
1427
1440
|
export default memo(HayaSelectShapeComponent);
|
|
1428
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDekUsT0FBTyxLQUFLLEVBQUMsRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNwRCxPQUFPLEVBQUMsY0FBYyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3hGLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLGVBQWUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNuRSxPQUFPLGNBQWMsTUFBTSxtREFBbUQsQ0FBQTtBQUM5RSxPQUFPLGdCQUFnQixNQUFNLHFEQUFxRCxDQUFBO0FBQ2xGLE9BQU8sSUFBSSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4QyxPQUFPLG9CQUFvQixNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLFVBQVUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sZ0JBQWdCLE1BQU0sdUJBQXVCLENBQUE7QUFDcEQsT0FBTyxlQUFlLE1BQU0s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O1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDbEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDakUsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXRGLElBQUksaUJBQWlCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3hDLENBQUM7SUFDSCxDQUFDOztBQUdILE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBRTNELGVBQWUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FueXRoaW5nRGlmZmVyZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvZGlmZi11dGlsc1wiXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuLi9jb25maWcuanNcIlxuaW1wb3J0IHtkaWcsZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQge0RpbWVuc2lvbnMsUGxhdGZvcm0sUHJlc3NhYmxlLFRleHRJbnB1dCxWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBSZWFjdCx7Y3JlYXRlUmVmLG1lbW8sdXNlRWZmZWN0fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCxTaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBGb250QXdlc29tZUljb24gZnJvbSBcInJlYWN0LW5hdGl2ZS12ZWN0b3ItaWNvbnMvRm9udEF3ZXNvbWVcIlxuaW1wb3J0IGlkRm9yQ29tcG9uZW50IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL2lucHV0cy9pZC1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBuYW1lRm9yQ29tcG9uZW50IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL2lucHV0cy9uYW1lLWZvci1jb21wb25lbnRcIlxuaW1wb3J0IFRleHQgZnJvbSBcIkBrYXNwZXJuai9hcGktbWFrZXIvYnVpbGQvdXRpbHMvdGV4dFwiXG5pbXBvcnQgT3B0aW9uIGZyb20gXCIuL29wdGlvblwiXG5pbXBvcnQgT3B0aW9uR3JvdXAgZnJvbSBcIi4vb3B0aW9uLWdyb3VwXCJcbmltcG9ydCBQYWdpbmF0aW9uUGFnZUJ1dHRvbiBmcm9tIFwiLi9wYWdpbmF0aW9uLXBhZ2UtYnV0dG9uXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCBSZW5kZXJIdG1sIGZyb20gXCJyZWFjdC1uYXRpdmUtcmVuZGVyLWh0bWxcIlxuaW1wb3J0IHtQb3J0YWx9IGZyb20gXCJjb25qb2ludG1lbnRcIlxuaW1wb3J0IHVzZUV2ZW50TGlzdGVuZXIgZnJvbSBcInlhLXVzZS1ldmVudC1saXN0ZW5lclwiXG5pbXBvcnQgdXNlUHJlc3NPdXRzaWRlIGZyb20gXCJvdXRzaWRlLWV5ZS9idWlsZC91c2UtcHJlc3Mtb3V0c2lkZVwiXG5cbmNvbnN0IHN0eWxlcyA9IHt9XG5jb25zdCBkYXRhU2V0cyA9IHt9XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFRvZ2dsZU9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGljb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IHZhbHVlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2NvbnRlbnRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2N1cnJlbnRDb250ZW50XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzYWJsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2h0bWxdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3JpZ2h0XVxuICpcbiAqIEFkZGl0aW9uYWwgb3B0aW9uIHByb3BzIGFyZSBhbGxvd2VkOyBIYXlhU2VsZWN0IG9ubHkgdXNlcyB0aGUga2V5cyBhYm92ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25zUmVzdWx0XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvdGFsQ291bnRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BhZ2VTaXplXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2F0dHJpYnV0ZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFtkZWZhdWx0VG9nZ2xlZF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gW2RlZmF1bHRWYWx1ZV1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IFtkZWZhdWx0VmFsdWVzXVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gW2RlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlYnVnXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtpZF1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbbW9kZWxdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttdWx0aXBsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbbm9PcHRpb25zVGV4dF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQmx1cl1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uQ2hhbmdlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihBcnJheTxzdHJpbmd8bnVtYmVyPj0pOiB2b2lkfSBbb25DaGFuZ2VWYWx1ZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oaW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnQ9KTogdm9pZH0gW29uRm9jdXNdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtvcHRpb25zOiBBcnJheX0pOiB2b2lkfSBbb25PcHRpb25zQ2xvc2VkXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7b3B0aW9uczogQXJyYXl9KTogdm9pZH0gW29uT3B0aW9uc0xvYWRlZF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24ob2JqZWN0KTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbb3B0aW9uQ29udGVudF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58ZnVuY3Rpb24oKTogKEFycmF5PEhheWFTZWxlY3RPcHRpb24+fEhheWFTZWxlY3RPcHRpb25zUmVzdWx0KX0gb3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9uc0Fic29sdXRlXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9uc1BvcnRhbF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb3B0aW9uc1dpZHRoXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtwbGFjZWhvbGRlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3JdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzZWFyY2hdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3N0eWxlc11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbdG9nZ2xlZF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdFRvZ2dsZU9wdGlvbj59IFt0b2dnbGVPcHRpb25zXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNwYXJlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbdmFsdWVzXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFN0YXRlXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBjdXJyZW50T3B0aW9uc1xuICogQHByb3BlcnR5IHtvYmplY3R8bnVsbH0gc2VsZWN0Q29udGFpbmVyTGF5b3V0XG4gKiBAcHJvcGVydHkge29iamVjdHxudWxsfSBlbmRPZlNlbGVjdExheW91dFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gaGVpZ2h0XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fHVuZGVmaW5lZH0gbG9hZGVkT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvYWRPcHRpb25zUmVxdWVzdElkXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGFnZVxuICogQHByb3BlcnR5IHtib29sZWFufSBwYWdlSW5wdXRGb2N1c2VkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGFnZUlucHV0VmFsdWVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IHBhZ2VTaXplXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wZW5lZFxuICogQHByb3BlcnR5IHtvYmplY3R8bnVsbH0gb3B0aW9uc0NvbnRhaW5lckxheW91dFxuICogQHByb3BlcnR5IHtcImFib3ZlXCJ8XCJiZWxvd1wifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBvcHRpb25zVG9wXG4gKiBAcHJvcGVydHkge1wiaGlkZGVuXCJ8XCJ2aXNpYmxlXCJ8dW5kZWZpbmVkfSBvcHRpb25zVmlzaWJpbGl0eVxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfG51bGx9IG9wdGlvbnNXaWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsTGVmdFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsVG9wXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSB0b3RhbENvdW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0TGF5b3V0XG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvcF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGVmdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25SZW5kZXJDb250ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGljb25cbiAqIEBwcm9wZXJ0eSB7XCJjdXJyZW50XCJ8XCJvcHRpb25cIn0gbW9kZVxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0T3B0aW9ufSBvcHRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdFRvZ2dsZU9wdGlvbnx1bmRlZmluZWR9IHRvZ2dsZU9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSB0b2dnbGVWYWx1ZVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gdG9nZ2xlZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9uQ2hhbmdlUGF5bG9hZFxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RTdHlsaW5nQ29udGV4dFxuICogQHByb3BlcnR5IHtib29sZWFufSBvcGVuZWRcbiAqIEBwcm9wZXJ0eSB7XCJhYm92ZVwifFwiYmVsb3dcInx1bmRlZmluZWR9IG9wdGlvbnNQbGFjZW1lbnRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdFN0YXRlfSBzdGF0ZVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBzdHlsZVxuICovXG5cbi8qKlxuICogQHBhcmFtIHtTaGFwZUNvbXBvbmVudDxIYXlhU2VsZWN0UHJvcHMsIEhheWFTZWxlY3RTdGF0ZT59IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSA9IChjb21wb25lbnQpID0+IHtcbiAgbGV0IG5hbWUgPSBuYW1lRm9yQ29tcG9uZW50KGNvbXBvbmVudClcblxuICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IGNvbXBvbmVudC5nZXRDdXJyZW50T3B0aW9ucygpXG4gIGNvbnN0IHZhbHVlcyA9IGNvbXBvbmVudC5nZXRWYWx1ZXMoKVxuXG4gIGNvbnN0IGhhc011bHRpcGxlVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmIHZhbHVlcy5sZW5ndGggPiAwXG5cbiAgaWYgKGNvbXBvbmVudC5wcm9wcy5tdWx0aXBsZSAmJiBuYW1lICYmIChjdXJyZW50T3B0aW9ucy5sZW5ndGggPiAwIHx8IGhhc011bHRpcGxlVmFsdWVzKSkge1xuICAgIG5hbWUgKz0gXCJbXVwiXG4gIH1cblxuICByZXR1cm4gbmFtZVxufVxuXG4vKiogQGF1Z21lbnRzIHtTaGFwZUNvbXBvbmVudDxIYXlhU2VsZWN0UHJvcHMsIEhheWFTZWxlY3RTdGF0ZT59ICovXG5jbGFzcyBIYXlhU2VsZWN0IGV4dGVuZHMgU2hhcGVDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgbm9PcHRpb25zVGV4dDogbnVsbCxcbiAgICBvbkJsdXI6IG51bGwsXG4gICAgb25Gb2N1czogbnVsbCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IHRydWUsXG4gICAgb3B0aW9uc1BvcnRhbDogdHJ1ZSxcbiAgICBvcHRpb25zV2lkdGg6IG51bGwsXG4gICAgc2VhcmNoOiBmYWxzZSxcbiAgICB0cmFuc3BhcmVudDogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0VG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBkZWZhdWx0VmFsdWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVidWc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgaWQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbm9PcHRpb25zVGV4dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2VWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25PcHRpb25zQ2xvc2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9wdGlvbnNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbkNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgY29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGN1cnJlbnRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICBodG1sOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICByaWdodDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAgIHRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWRcbiAgICAgIH0pKSxcbiAgICAgIFByb3BUeXBlcy5mdW5jXG4gICAgXSkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc1BvcnRhbDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIHNlbGVjdGVkQmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b2dnbGVkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvZ2dsZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgIH0pKSxcbiAgICB0cmFuc3BhcmVudDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZXM6IFByb3BUeXBlcy5hcnJheVxuICB9KVxuXG4gIGNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gIGVuZE9mU2VsZWN0UmVmID0gY3JlYXRlUmVmKClcbiAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSAwXG4gIG9wdGlvbnNDb250YWluZXJSZWYgPSBjcmVhdGVSZWYoKVxuICBwYWdlSW5wdXRSZWYgPSBjcmVhdGVSZWYoKVxuICBzZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gIHNlYXJjaFRleHRJbnB1dFJlZiA9IGNyZWF0ZVJlZigpXG4gIHNlbGVjdENvbnRhaW5lclJlZiA9IGNyZWF0ZVJlZigpXG4gIHQgPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKCkudFxuICB3aW5kb3dXaWR0aCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLndpZHRoXG4gIHdpbmRvd0hlaWdodCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLmhlaWdodFxuICAvKiogQHR5cGUge0hheWFTZWxlY3RTdGF0ZX0gKi9cbiAgc3RhdGUgPSB7XG4gICAgY3VycmVudE9wdGlvbnM6IHRoaXMuZGVmYXVsdEN1cnJlbnRPcHRpb25zKCksXG4gICAgc2VsZWN0Q29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgIGVuZE9mU2VsZWN0TGF5b3V0OiBudWxsLFxuICAgIGhlaWdodDogbnVsbCxcbiAgICBsb2FkZWRPcHRpb25zOiB0aGlzLmRlZmF1bHRMb2FkZWRPcHRpb25zKCksXG4gICAgbG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkOiAwLFxuICAgIGxvYWRPcHRpb25zUmVxdWVzdElkOiAwLFxuICAgIHBhZ2U6IDEsXG4gICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgIHBhZ2VTaXplOiBudWxsLFxuICAgIG9wZW5lZDogZmFsc2UsXG4gICAgb3B0aW9uc0NvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICBvcHRpb25zUGxhY2VtZW50OiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1RvcDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNWaXNpYmlsaXR5OiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1dpZHRoOiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICBzY3JvbGxUb3A6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbCxcbiAgICB0b3RhbENvdW50OiBudWxsLFxuICAgIHRvZ2dsZWQ6IHRoaXMuZGVmYXVsdFRvZ2dsZWQoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0RlYnVnRW5hYmxlZCA9ICgpID0+IEJvb2xlYW4odGhpcy5wLmRlYnVnKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2RldGFpbHNdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZGVidWdMb2cgPSAoZnVuY3Rpb25OYW1lLCBkZXRhaWxzID0gdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzRGVidWdFbmFibGVkKCkpIHJldHVyblxuXG4gICAgY29uc3QgYmFzZURldGFpbHMgPSB7XG4gICAgICBpZDogdGhpcy5wLmlkLFxuICAgICAgbmFtZTogdGhpcy5wLm5hbWVcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZWREZXRhaWxzID0gZGV0YWlscyA/IE9iamVjdC5hc3NpZ24oe30sIGJhc2VEZXRhaWxzLCBkZXRhaWxzKSA6IGJhc2VEZXRhaWxzXG5cbiAgICBpZiAobWVyZ2VkRGV0YWlscyAmJiBPYmplY3Qua2V5cyhtZXJnZWREZXRhaWxzKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0hheWFTZWxlY3RdICR7ZnVuY3Rpb25OYW1lfWAsIG1lcmdlZERldGFpbHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbSGF5YVNlbGVjdF0gJHtmdW5jdGlvbk5hbWV9YClcbiAgICB9XG4gIH1cblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKClcblxuICAgIHRoaXMudCA9IHRcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMudmFsdWVzKSkge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnByb3BzLnZhbHVlcykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIYXlhU2VsZWN0OiBVbmRlZmluZWQgZ2l2ZW4gYXMgdmFsdWVcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd1RhcmdldCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgJiYgdHlwZW9mIHdpbmRvdyAhPSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogbnVsbFxuXG4gICAgdXNlRXZlbnRMaXN0ZW5lcihEaW1lbnNpb25zLCBcImNoYW5nZVwiLCB0aGlzLnR0Lm9uRGltZW5zaW9uc0NoYW5nZSlcbiAgICB1c2VQcmVzc091dHNpZGUodGhpcy50dC5vcHRpb25zQ29udGFpbmVyUmVmLCB0aGlzLnR0Lm9uUHJlc3NPdXRzaWRlT3B0aW9ucylcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvd1RhcmdldCwgXCJyZXNpemVcIiwgdGhpcy50dC5vbkFueXRoaW5nUmVzaXplZERlYm91bmNlZClcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvd1RhcmdldCwgXCJzY3JvbGxcIiwgdGhpcy50dC5vbkFueXRoaW5nU2Nyb2xsZWREZWJvdW5jZWQpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0dXBcIiwge1xuICAgICAgaGFzQ29udHJvbGxlZFZhbHVlczogXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzLFxuICAgICAgaGFzQ29udHJvbGxlZFRvZ2dsZWQ6IFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMsXG4gICAgICBtdWx0aXBsZTogdGhpcy5wLm11bHRpcGxlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5vcHRpb25zKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiB0aGlzLnByb3BzLm9wdGlvbnNcbiAgICB9KVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiwgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXRdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25JZHMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpICYmIGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRPcHRpb25JZHMsIHRoaXMucHJvcHMudmFsdWVzKSAmJiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnByb3BzLnZhbHVlc10pXG4gIH1cblxuICB0cmFuc2xhdGUobXNnSUQsIG9wdGlvbnMpIHtcbiAgICBpZiAobXNnSUQuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoYGhheWFfc2VsZWN0JHttc2dJRH1gLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50KG1zZ0lELCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gIGRlZmF1bHRDdXJyZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCB2YWx1ZXN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpKSByZXR1cm4gW11cbiAgICBjb25zdCBjb250cm9sbGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW11cblxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigoe3ZhbHVlfSkgPT5cbiAgICAgIChkZWZhdWx0VmFsdWUgJiYgdmFsdWUgPT0gZGVmYXVsdFZhbHVlKSB8fFxuICAgICAgICAoZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkgfHxcbiAgICAgICAgY29udHJvbGxlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fHVuZGVmaW5lZH0gKi9cbiAgZGVmYXVsdExvYWRlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIG9wdGlvbnM6ICR7dHlwZW9mIG9wdGlvbnN9YClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAqL1xuICBnZXRBY3RpdmVQYWdlID0gKCkgPT4gdGhpcy5zLnBhZ2UgfHwgMVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fEhheWFTZWxlY3RPcHRpb25zUmVzdWx0fSByZXN1bHRcbiAgICogQHJldHVybnMge0hheWFTZWxlY3RPcHRpb25zUmVzdWx0fVxuICAgKi9cbiAgcGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiB7b3B0aW9uczogcmVzdWx0fVxuXG4gICAgaWYgKHJlc3VsdCAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5vcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uczogcmVzdWx0Lm9wdGlvbnMsXG4gICAgICAgIHRvdGFsQ291bnQ6IHJlc3VsdC50b3RhbENvdW50LFxuICAgICAgICBwYWdlOiByZXN1bHQucGFnZSxcbiAgICAgICAgcGFnZVNpemU6IHJlc3VsdC5wYWdlU2l6ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcHRpb25zIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBwYXJhbXMub3B0aW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlU2l6ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMudG90YWxDb3VudF1cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgKi9cbiAgcmVzb2x2ZVBhZ2VTaXplKHtvcHRpb25zLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pIHtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHBhZ2VTaXplKSAmJiBwYWdlU2l6ZSA+IDApIHJldHVybiBwYWdlU2l6ZVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgJiYgcGFnZSAhPSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5zLnBhZ2VTaXplXG4gICAgfVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubGVuZ3RoXG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgPyB0aGlzLnMucGFnZVNpemUgOiBudWxsXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSAqL1xuICBkZWZhdWx0VG9nZ2xlZCgpIHtcbiAgICByZXR1cm4gKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpID8gdGhpcy5wLnRvZ2dsZWQgOiB0aGlzLnByb3BzLmRlZmF1bHRUb2dnbGVkIHx8IHt9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcG9ydGFsTmFtZSgpIHtcbiAgICByZXR1cm4gbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKSB8fCBgaGF5YS1zZWxlY3QtJHtTdHJpbmcoaWRGb3JDb21wb25lbnQodGhpcykpfWBcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59ICovXG4gIGdldFRvZ2dsZWQgPSAoKSA9PiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudG9nZ2xlZCA6IHRoaXMucy50b2dnbGVkXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gKi9cbiAgZ2V0VmFsdWVzID0gKCkgPT4gKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcylcbiAgICA/IChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdKVxuICAgIDogKEFycmF5LmlzQXJyYXkodGhpcy5zLmN1cnJlbnRPcHRpb25zKSA/IHRoaXMucy5jdXJyZW50T3B0aW9ucyA6IFtdKS5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9ufHt2YWx1ZTogc3RyaW5nfG51bWJlcn18dW5kZWZpbmVkPn0gKi9cbiAgZ2V0Q3VycmVudE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykgJiYgdGhpcy5wLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBbXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLm9wdGlvbnMpICYmIEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucC52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gdGhpcy5wLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT0gdmFsdWUpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnMubG9hZGVkT3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBsZXQgZm91bmRPcHRpb24gPSB0aGlzLnMubG9hZGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmICghZm91bmRPcHRpb24pIHtcbiAgICAgICAgICAgIGZvdW5kT3B0aW9uID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgICBpZiAoIWZvdW5kT3B0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkbid0IGZpbmQgb3B0aW9uOiAke3ZhbHVlfSBpbiBsb2FkZWRPcHRpb25zIG9yIHN0YXRlIGN1cnJlbnRPcHRpb25zYCxcbiAgICAgICAgICAgICAgICB7c3RhdGVMb2FkZWRPcHRpb25zOiB0aGlzLnMubG9hZGVkT3B0aW9ucywgc3RhdGVDdXJyZW50T3B0aW9uczogdGhpcy5zLmN1cnJlbnRPcHRpb25zLCBwcm9wc09wdGlvbnM6IHRoaXMucHJvcHMub3B0aW9uc31cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmb3VuZE9wdGlvblxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBPcHRpb25zIGhhdmVuJ3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+ICh7dmFsdWV9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmN1cnJlbnRPcHRpb25zXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PHN0cmluZ3xudW1iZXI+fSAqL1xuICBnZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkge1xuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcblxuICAgIGlmICghY3VycmVudE9wdGlvbnMpIHJldHVybiBbXVxuXG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25zXG4gICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbj8udmFsdWUpXG4gICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpXG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucywgbW9kZWwsIG9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNvbXBvbmVudERpZE1vdW50XCIsIHtcbiAgICAgIGhhc0F0dHJpYnV0ZU1vZGVsOiBCb29sZWFuKGF0dHJpYnV0ZSAmJiBtb2RlbCksXG4gICAgICBoYXNEZWZhdWx0VmFsdWVzOiBCb29sZWFuKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucyksXG4gICAgICBvcHRpb25zVHlwZTogdHlwZW9mIG9wdGlvbnNcbiAgICB9KVxuXG4gICAgaWYgKCgoZGVmYXVsdFZhbHVlIHx8IGRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSB8fCAoYXR0cmlidXRlICYmIG1vZGVsKSkgJiYgdHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge31cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICBjb25zdCBuZXdUb2dnbGVkID0gdGhpcy5wLnRvZ2dsZWRcblxuICAgICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KHRoaXMuc3RhdGUudG9nZ2xlZCwgbmV3VG9nZ2xlZCkpIHtcbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjb21wb25lbnREaWRVcGRhdGVcIiwge3N5bmNpbmdLZXlzOiBPYmplY3Qua2V5cyhuZXdTdGF0ZSl9KVxuICAgICAgdGhpcy5zLnRvZ2dsZWQgPSBuZXdTdGF0ZS50b2dnbGVkXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9ICovXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RSZWZ9ID0gdGhpcy50dFxuICAgIGNvbnN0IHt0cmFuc3BhcmVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lLCBwbGFjZWhvbGRlciwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykgPyB0aGlzLnByb3BzLnZhbHVlcyA6IFtdXG4gICAgY29uc3Qge29wZW5lZCwgb3B0aW9uc1BsYWNlbWVudH0gPSB0aGlzLnNcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcblxuICAgIGNvbnN0IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsID0gey4uLnRoaXMuc3R5bGluZ0ZvcihcInNlbGVjdENvbnRhaW5lclwiLCB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIjFweCBzb2xpZCAjOTk5XCIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogNCxcbiAgICAgIGNvbG9yOiBcIiMwMDBcIixcbiAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICBwYWRkaW5nVG9wOiA1LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNSxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1XG4gICAgfSwgW3RyYW5zcGFyZW50XSl9XG5cbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICAvLyBQcmV2ZW50IHNlbGVjdCBmcm9tIGNoYW5naW5nIHNpemUgb25jZSB0aGUgY29udGVudCBpcyByZXBsYWNlZCB3aXRoIHNlYXJjaCB0ZXh0IG9uY2Ugb3BlbmVkXG4gICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5oZWlnaHQgPSB0aGlzLnMuaGVpZ2h0XG5cbiAgICAgIGNvbnN0IGJhc2VCb3JkZXJSYWRpdXMgPSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcblxuICAgICAgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJiZWxvd1wiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IDBcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJyb290Vmlld0RhdGFTZXRcIiwge1xuICAgICAgICAgIGFwcGxpZWRSZXF1ZXN0SWQ6IHRoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQsXG4gICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgICBjb21wb25lbnQ6IFwiaGF5YS1zZWxlY3RcIixcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcGVuZWQsXG4gICAgICAgICAgb3B0aW9uc1BsYWNlbWVudCxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCxcbiAgICAgICAgICB0b2dnbGVzOiBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXG4gICAgICAgIH0sIFt0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkLCBjbGFzc05hbWUsIGlkLCBvcGVuZWQsIG9wdGlvbnNQbGFjZW1lbnQsIHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCwgQm9vbGVhbih0b2dnbGVPcHRpb25zKV0pfVxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibWFpblwiKX1cbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuc2VsZWN0Q29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcInNlbGVjdC1jb250YWluZXJcIn19XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25TZWxlY3RDb250YWluZXJMYXlvdXR9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblNlbGVjdENsaWNrZWR9XG4gICAgICAgICAgcmVmPXt0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZn1cbiAgICAgICAgICBzdHlsZT17c2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWx9XG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jdXJyZW50U2VsZWN0ZWREYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY3VycmVudC1zZWxlY3RlZFwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50U2VsZWN0ZWRcIiwgdGhpcy5jdXJyZW50U2VsZWN0ZWRTdHlsZSB8fD0ge3dpZHRoOiBcImNhbGMoMTAwJSAtIDI1cHgpXCIsIGZsZXhXcmFwOiBcIndyYXBcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCJ9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3BlbmVkICYmXG4gICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICBkYXRhU2V0PXt0aGlzLnNlYXJjaFRleHRJbnB1dERhdGFTZXQgfHw9IHtjbGFzczogXCJzZWFyY2gtdGV4dC1pbnB1dFwifX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RoaXMudHQub25DaGFuZ2VTZWFyY2hUZXh0fVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnRyYW5zbGF0ZShcIi5zZWFyY2hfZG90X2RvdF9kb3RcIil9XG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwic2VhcmNoVGV4dElucHV0XCIsIHRoaXMuc2VhcmNoVGV4dElucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgIGJvcmRlcjogMCxcbiAgICAgICAgICAgICAgICAgIG91dGxpbmU6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5zZWFyY2hUZXh0VmFsdWV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7IW9wZW5lZCAmJlxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICAgICAgPFRleHQgbnVtYmVyT2ZMaW5lcz17MX0gc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm5vdGhpbmdTZWxlY3RlZFwiLCB0aGlzLm5vdGhpbmdTZWxlY3RlZFN0eWxlIHx8PSB7Y29sb3I6IFwiZ3JleVwifSl9PlxuICAgICAgICAgICAgICAgICAgICB7cGxhY2Vob2xkZXIgfHwgdGhpcy50cmFuc2xhdGUoXCIubm90aGluZ19zZWxlY3RlZFwiKX1cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLmxlbmd0aCA9PSAwICYmIFBsYXRmb3JtLk9TID09IFwid2ViXCIgJiZcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnAubXVsdGlwbGUgPyB2YWx1ZXMgOiBbdmFsdWVzWzBdXSkubWFwKCh2YWx1ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgY3VycmVudC12YWx1ZS0ke3ZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAge3ZhbHVlcy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubWFwKChjdXJyZW50T3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jdXJyZW50T3B0aW9uRGF0YVNldCB8fD0ge2NsYXNzOiBcImN1cnJlbnQtb3B0aW9uXCJ9fVxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbnRPcHRpb24ua2V5IHx8IGBjdXJyZW50LXZhbHVlLSR7Y3VycmVudE9wdGlvbi52YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvblwiLCB7bWFyZ2luUmlnaHQ6IDZ9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb24udHlwZSA9PSBcImdyb3VwXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvbkdyb3VwXCIsIHRoaXMuY3VycmVudE9wdGlvbkdyb3VwU3R5bGUgfHw9IHtmb250V2VpZ2h0OiBcImJvbGRcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uR3JvdXBUZXh0XCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb24udHlwZSAhPSBcImdyb3VwXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge1BsYXRmb3JtLk9TID09IFwid2ViXCIgJiYgbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZGlnZyhjdXJyZW50T3B0aW9uLCBcInZhbHVlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucHJlc2VudE9wdGlvbihjdXJyZW50T3B0aW9uLCBcImN1cnJlbnRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY2hldnJvbkNvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJjaGV2cm9uLWNvbnRhaW5lclwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjaGV2cm9uQ29udGFpbmVyXCIsIHRoaXMuY2hldnJvbkNvbnRhaW5lclN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IDhcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gbmFtZT17b3BlbmVkID8gXCJjaGV2cm9uLXVwXCIgOiBcImNoZXZyb24tZG93blwifSBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY2hldnJvblwiLCB0aGlzLmNoZXZyb25TdHlsZSB8fD0ge2ZvbnRTaXplOiAxMn0pfSAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17dGhpcy5lbmRPZlNlbGVjdERhdGFTZXQgfHw9IHtjbGFzczogXCJlbmQtb2Ytc2VsZWN0XCJ9fVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uRW5kT2ZTZWxlY3RMYXlvdXR9XG4gICAgICAgICAgcmVmPXtlbmRPZlNlbGVjdFJlZn1cbiAgICAgICAgLz5cbiAgICAgICAge29wZW5lZCAmJiB0aGlzLnAub3B0aW9uc1BvcnRhbCAmJlxuICAgICAgICAgIDxQb3J0YWwgbmFtZT17dGhpcy5wb3J0YWxOYW1lKCl9PlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvUG9ydGFsPlxuICAgICAgICB9XG4gICAgICAgIHtvcGVuZWQgJiYgIXRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFZpZXc+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29udGFpbmVyKCl9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPnxzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgZGVmYXVsdFZhbHVlcyAoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMsIG1vZGVsfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpIHJldHVybiBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSByZXR1cm4gZGVmYXVsdFZhbHVlXG4gICAgaWYgKGRlZmF1bHRWYWx1ZXMpIHJldHVybiBkZWZhdWx0VmFsdWVzXG5cbiAgICBpZiAoYXR0cmlidXRlICYmIG1vZGVsKSB7XG4gICAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbW9kZWwpKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggYXR0cmlidXRlIG9uICR7bW9kZWwubW9kZWxDbGFzc0RhdGEoKS5uYW1lfTogJHthdHRyaWJ1dGV9YClcblxuICAgICAgcmV0dXJuIG1vZGVsW2F0dHJpYnV0ZV0oKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNBY3RpdmUoKSB7XG4gICAgaWYgKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgbG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSB0aGlzLmRlZmF1bHRWYWx1ZXMoKVxuXG4gICAgaWYgKCFkZWZhdWx0VmFsdWVzKSByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2tcIiwge2RlZmF1bHRWYWx1ZXN9KVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9wcy5vcHRpb25zKHtcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmdldFNlYXJjaFRleHQoKSxcbiAgICAgIHBhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLFxuICAgICAgdmFsdWVzOiBkZWZhdWx0VmFsdWVzXG4gICAgfSlcblxuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrLnJlc3VsdFwiLCB7bG9hZGVkT3B0aW9uc0NvdW50OiBvcHRpb25zPy5sZW5ndGggfHwgMH0pXG5cbiAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSB0aGlzLnN0YXRlLmN1cnJlbnRPcHRpb25zLmNvbmNhdChvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e3BhZ2U/OiBudW1iZXJ9fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGxvYWRPcHRpb25zID0gYXN5bmMgKHtwYWdlfSA9IHt9KSA9PiB7XG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG4gICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLmdldFNlYXJjaFRleHQoKVxuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZFxuICAgIHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCA9IHJlcXVlc3RJZFxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9uc1wiLCB7XG4gICAgICBwYWdlLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgc2VhcmNoVmFsdWUsXG4gICAgICBvcHRpb25zVHlwZTogQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiBvcHRpb25zXG4gICAgfSlcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc0Zyb21BcnJheShvcHRpb25zLCBzZWFyY2hWYWx1ZSwgcmVxdWVzdElkKVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RlZFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocGFnZSkgPyBwYWdlIDogdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcHRpb25zKHtzZWFyY2hWYWx1ZSwgcGFnZTogcmVxdWVzdGVkUGFnZX0pXG4gICAgY29uc3Qge29wdGlvbnM6IGxvYWRlZE9wdGlvbnMsIHBhZ2U6IHJlc3VsdFBhZ2UsIHBhZ2VTaXplLCB0b3RhbENvdW50fSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcblxuICAgIGlmIChyZXF1ZXN0SWQgIT0gdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZCkge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zLmlnbm9yZWRfc3RhbGVfcmVzdWx0XCIsIHtcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBsYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZDogdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdGVkUGFnZSxcbiAgICAgICAgc2VhcmNoVmFsdWVcbiAgICAgIH0pXG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkUGFnZSA9IE51bWJlci5pc0Zpbml0ZShyZXN1bHRQYWdlKSA/IHJlc3VsdFBhZ2UgOiByZXF1ZXN0ZWRQYWdlXG4gICAgY29uc3QgcmVzb2x2ZWRQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKHtvcHRpb25zOiBsb2FkZWRPcHRpb25zLCBwYWdlOiByZXNvbHZlZFBhZ2UsIHBhZ2VTaXplLCB0b3RhbENvdW50fSlcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpICYmIE51bWJlci5pc0Zpbml0ZShyZXNvbHZlZFBhZ2VTaXplKSAmJiByZXNvbHZlZFBhZ2VTaXplID4gMFxuICAgICAgPyBNYXRoLmNlaWwodG90YWxDb3VudCAvIHJlc29sdmVkUGFnZVNpemUpXG4gICAgICA6IG51bGxcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbG9hZGVkT3B0aW9ucyxcbiAgICAgIGxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgcGFnZTogcmVzb2x2ZWRQYWdlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFN0cmluZyhyZXNvbHZlZFBhZ2UpLFxuICAgICAgcGFnZVNpemU6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHJlc29sdmVkUGFnZVNpemUgOiBudWxsLFxuICAgICAgdG90YWxDb3VudDogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gdG90YWxDb3VudCA6IG51bGxcbiAgICB9LCAoKSA9PiB0aGlzLnByb3BzLm9uT3B0aW9uc0xvYWRlZD8uKHtvcHRpb25zOiBsb2FkZWRPcHRpb25zfSkpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnMucmVzdWx0XCIsIHtcbiAgICAgIGxvYWRlZE9wdGlvbnNDb3VudDogbG9hZGVkT3B0aW9ucz8ubGVuZ3RoIHx8IDAsXG4gICAgICByZXNvbHZlZFBhZ2UsXG4gICAgICByZXNvbHZlZFBhZ2VTaXplLFxuICAgICAgdG90YWxDb3VudDogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gdG90YWxDb3VudCA6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2tleTogc3RyaW5nLCBsb2FkZWRPcHRpb246IEhheWFTZWxlY3RPcHRpb259fVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgaGF5YVNlbGVjdE9wdGlvbih7a2V5LCBsb2FkZWRPcHRpb259KSB7XG4gICAgaWYgKGxvYWRlZE9wdGlvbi50eXBlID09IFwiZ3JvdXBcIikge1xuICAgICAgcmV0dXJuIDxPcHRpb25Hcm91cCBrZXk9e2tleX0gb3B0aW9uPXtsb2FkZWRPcHRpb259IC8+XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxPcHRpb25cbiAgICAgICAgY3VycmVudE9wdGlvblZhbHVlcz17dGhpcy5nZXRDdXJyZW50T3B0aW9uVmFsdWVzKCl9XG4gICAgICAgIGljb249e3RoaXMuaWNvbkZvck9wdGlvbihsb2FkZWRPcHRpb24pfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgb3B0aW9uPXtsb2FkZWRPcHRpb259XG4gICAgICAgIG9uT3B0aW9uQ2xpY2tlZD17dGhpcy50dC5vbk9wdGlvbkNsaWNrZWR9XG4gICAgICAgIHByZXNlbnRPcHRpb249e3RoaXMudHQucHJlc2VudE9wdGlvbn1cbiAgICAgICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcn1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWFyY2hWYWx1ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyZXF1ZXN0SWRdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgbG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZCA9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2FkZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKHt0ZXh0fSkgPT4gIWxvd2VyU2VhcmNoVmFsdWUgfHwgdGV4dD8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMobG93ZXJTZWFyY2hWYWx1ZSkpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zRnJvbUFycmF5XCIsIHtcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHRvdGFsT3B0aW9uc0NvdW50OiBvcHRpb25zLmxlbmd0aCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgbG9hZGVkT3B0aW9uc0NvdW50OiBsb2FkZWRPcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICB0aGlzLnMubG9hZGVkT3B0aW9ucyA9IGxvYWRlZE9wdGlvbnNcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgdGhpcy5zLnBhZ2UgPSAxXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gXCIxXCJcbiAgICB0aGlzLnMucGFnZVNpemUgPSBudWxsXG4gICAgdGhpcy5zLnRvdGFsQ291bnQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7d2luZG93OiB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9fX0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkRpbWVuc2lvbnNDaGFuZ2UgPSAoe3dpbmRvd30pID0+IHtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LndpZHRoXG4gICAgdGhpcy53aW5kb3dIZWlnaHQgPSB3aW5kb3cuaGVpZ2h0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQgPSBPYmplY3QuYXNzaWduKHt9LCBkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25FbmRPZlNlbGVjdExheW91dCA9IChlKSA9PiB7XG4gICAgY29uc3QgZW5kT2ZTZWxlY3RMYXlvdXQgPSBPYmplY3QuYXNzaWduKHt9LCBkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7ZW5kT2ZTZWxlY3RMYXlvdXR9XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGgpIHtcbiAgICAgIG5ld1N0YXRlLm9wdGlvbnNXaWR0aCA9IGVuZE9mU2VsZWN0TGF5b3V0LndpZHRoXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbnNDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblNlbGVjdENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvcGVuZWR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uU2VsZWN0Q2xpY2tlZFwiLCB7b3BlbmVkfSlcblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5sb2FkT3B0aW9ucywgMjAwKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tvcHRpb25zPzogQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlT3B0aW9ucyh7b3B0aW9uc30gPSB7fSkge1xuICAgIGNvbnN0IGNsb3NlZE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnNcIiwge2Nsb3NlZE9wdGlvbnNDb3VudDogY2xvc2VkT3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgbG9hZGVkT3B0aW9uczogdW5kZWZpbmVkLFxuICAgICAgICBvcGVuZWQ6IGZhbHNlLFxuICAgICAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICAgICAgcGFnZVNpemU6IG51bGwsXG4gICAgICAgIHRvdGFsQ291bnQ6IG51bGxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnMuZG9uZVwiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkLCBvcHRpb25zVmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5fSlcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQpIHtcbiAgICAgIHRoaXMucHJvcHMub25PcHRpb25zQ2xvc2VkKHtvcHRpb25zOiBjbG9zZWRPcHRpb25zfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wLm9uQmx1cikgdGhpcy5wLm9uQmx1cigpXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0U2VhcmNoVGV4dCA9ICgpID0+IHRoaXMuc2VhcmNoVGV4dFZhbHVlIHx8IFwiXCJcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHJlc2V0U2VhcmNoVGV4dElucHV0ID0gKCkgPT4ge1xuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy50dC5zZWFyY2hUZXh0SW5wdXRSZWYuY3VycmVudFxuXG4gICAgaWYgKGlucHV0Py5jbGVhcikge1xuICAgICAgaW5wdXQuY2xlYXIoKVxuICAgIH0gZWxzZSBpZiAoaW5wdXQ/LnNldE5hdGl2ZVByb3BzKSB7XG4gICAgICBpbnB1dC5zZXROYXRpdmVQcm9wcyh7dGV4dDogXCJcIn0pXG4gICAgfSBlbHNlIGlmIChpbnB1dCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBcIlwiXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZ25vcmUgaWYgdGhlIHJlZiBkb2Vzbid0IHN1cHBvcnQgZGlyZWN0IHZhbHVlIGFzc2lnbm1lbnQuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25DaGFuZ2VTZWFyY2hUZXh0ID0gKHNlYXJjaFRleHQpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25DaGFuZ2VTZWFyY2hUZXh0XCIsIHtzZWFyY2hUZXh0LCBjdXJyZW50UGFnZTogdGhpcy5zLnBhZ2V9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gc2VhcmNoVGV4dFxuXG4gICAgaWYgKHRoaXMucy5wYWdlICE9IDEpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2U6IDEsIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIn0sIHRoaXMudHQub25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnR0Lm9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZCgpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvcGVuT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib3Blbk9wdGlvbnNcIiwge1xuICAgICAgY3VycmVudE9wdGlvbnNDb3VudDogdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpPy5sZW5ndGggfHwgMCxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRoaXMucC5zZWFyY2hcbiAgICB9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gdHJ1ZVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGhlaWdodDogdGhpcy5zLnNlbGVjdENvbnRhaW5lckxheW91dC5oZWlnaHQsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgICAgICBzY3JvbGxMZWZ0OiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsLFxuICAgICAgICBzY3JvbGxUb3A6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaFRleHRJbnB1dCgpXG4gICAgICAgIHRoaXMuZm9jdXNUZXh0SW5wdXQoKVxuICAgICAgICB0aGlzLmxvYWRPcHRpb25zKHtwYWdlOiAxfSlcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAodGhpcy5wLm9uRm9jdXMpIHRoaXMucC5vbkZvY3VzKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgZm9jdXNUZXh0SW5wdXQgPSAoKSA9PiBkaWdnKHRoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmLCBcImN1cnJlbnRcIik/LmZvY3VzKClcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIC8vIERlYm91bmNlIGFmdGVyIHVuLW1vdW50IGhhbmRlbGluZy5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uXCIpXG4gICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSB0cnVlXG4gICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25CZWxvdygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7d2luZG93SGVpZ2h0fSA9IHRoaXMudHRcbiAgICBjb25zdCB7b3B0aW9uc0NvbnRhaW5lckxheW91dH0gPSB0aGlzLnNcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IHRoaXMucy5lbmRPZlNlbGVjdExheW91dFxuXG4gICAgaWYgKCFlbmRPZlNlbGVjdExheW91dCkge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYmVsb3dcIiwgcmVhc29uOiBcIm1pc3NpbmctZW5kLW9mLXNlbGVjdC1sYXlvdXRcIn0pXG4gICAgICB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHkgPSBcInZpc2libGVcIlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uc1RvcCA9IGVuZE9mU2VsZWN0TGF5b3V0LnRvcFxuICAgIGNvbnN0IG9wdGlvbnNUb3RhbEJvdHRvbVBvc2l0aW9uID0gb3B0aW9uc0NvbnRhaW5lckxheW91dC5oZWlnaHQgKyBvcHRpb25zVG9wXG4gICAgY29uc3Qgd2luZG93SGVpZ2h0V2l0aFNjcm9sbCA9IHdpbmRvd0hlaWdodCArIHRoaXMucy5zY3JvbGxUb3BcblxuICAgIGlmICh3aW5kb3dIZWlnaHRXaXRoU2Nyb2xsIDwgb3B0aW9uc1RvdGFsQm90dG9tUG9zaXRpb24pIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImFib3ZlXCJ9KVxuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImJlbG93XCJ9KVxuICAgICAgdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCJcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RMYXlvdXR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlXCIpXG5cbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwiYWJvdmVcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IGVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMuZm9jdXNUZXh0SW5wdXQoKVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25CZWxvd1wiKVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbkFueXRoaW5nUmVzaXplZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25Bbnl0aGluZ1Jlc2l6ZWRcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uKClcbiAgICB9XG4gIH1cblxuICBvbkFueXRoaW5nUmVzaXplZERlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWQsIDI1KVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25Bbnl0aGluZ1Njcm9sbGVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbkFueXRoaW5nU2Nyb2xsZWRcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMucy5zY3JvbGxMZWZ0ID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbFxuICAgICAgdGhpcy5zLnNjcm9sbFRvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbFxuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIG9uQW55dGhpbmdTY3JvbGxlZERlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMudHQub25Bbnl0aGluZ1Njcm9sbGVkLCAyNSlcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uUHJlc3NPdXRzaWRlT3B0aW9ucyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25QcmVzc091dHNpZGVPcHRpb25zXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIC8vIElmIG9wdGlvbnMgYXJlIG9wZW4gYW5kIGEgY2xpY2sgaXMgbWFkZSBvdXRzaWRlIG9mIHRoZSBvcHRpb25zIGNvbnRhaW5lclxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gKi9cbiAgcGFnaW5hdGlvblRvdGFsUGFnZXMoKSB7XG4gICAgY29uc3Qge3RvdGFsQ291bnR9ID0gdGhpcy5zXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSB8fCB0b3RhbENvdW50IDw9IDApIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKHtcbiAgICAgIG9wdGlvbnM6IHRoaXMucy5sb2FkZWRPcHRpb25zIHx8IFtdLFxuICAgICAgcGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksXG4gICAgICBwYWdlU2l6ZTogdGhpcy5zLnBhZ2VTaXplLFxuICAgICAgdG90YWxDb3VudFxuICAgIH0pXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgfHwgcGFnZVNpemUgPD0gMCkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBNYXRoLmNlaWwodG90YWxDb3VudCAvIHBhZ2VTaXplKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtBcnJheTx7a2V5OiBzdHJpbmcsIHR5cGU6IFwicGFnZVwifFwiZWxsaXBzaXNcIiwgdmFsdWU/OiBudW1iZXJ9Pn1cbiAgICovXG4gIHBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBpdGVtcyA9IFtdXG4gICAgY29uc3QgYWRkUGFnZSA9IChwYWdlKSA9PiBpdGVtcy5wdXNoKHtrZXk6IGBwYWdlLSR7cGFnZX1gLCB0eXBlOiBcInBhZ2VcIiwgdmFsdWU6IHBhZ2V9KVxuICAgIGNvbnN0IGFkZEVsbGlwc2lzID0gKGtleSkgPT4gaXRlbXMucHVzaCh7a2V5LCB0eXBlOiBcImVsbGlwc2lzXCJ9KVxuXG4gICAgaWYgKHRvdGFsUGFnZXMgPD0gNykge1xuICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdG90YWxQYWdlczsgcGFnZSArPSAxKSB7XG4gICAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgfVxuXG4gICAgYWRkUGFnZSgxKVxuXG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IDJcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCBjdXJyZW50UGFnZSAtIHdpbmRvd1NpemUpXG4gICAgbGV0IGVuZCA9IE1hdGgubWluKHRvdGFsUGFnZXMgLSAxLCBjdXJyZW50UGFnZSArIHdpbmRvd1NpemUpXG5cbiAgICBpZiAoY3VycmVudFBhZ2UgPD0gMykge1xuICAgICAgc3RhcnQgPSAyXG4gICAgICBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgNSlcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMgLSAyKSB7XG4gICAgICBlbmQgPSB0b3RhbFBhZ2VzIC0gMVxuICAgICAgc3RhcnQgPSBNYXRoLm1heCgyLCB0b3RhbFBhZ2VzIC0gNClcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiAyKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLXN0YXJ0XCIpXG5cbiAgICBmb3IgKGxldCBwYWdlID0gc3RhcnQ7IHBhZ2UgPD0gZW5kOyBwYWdlICs9IDEpIHtcbiAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICB9XG5cbiAgICBpZiAoZW5kIDwgdG90YWxQYWdlcyAtIDEpIGFkZEVsbGlwc2lzKFwiZWxsaXBzaXMtZW5kXCIpXG5cbiAgICBhZGRQYWdlKHRvdGFsUGFnZXMpXG5cbiAgICByZXR1cm4gaXRlbXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGFnaW5hdGlvbkRpc3BsYXlWYWx1ZSh0b3RhbFBhZ2VzKSB7XG4gICAgY29uc3QgYWN0aXZlUGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgZmFsbGJhY2tUZXh0ID0gYFBhZ2UgJHthY3RpdmVQYWdlfSBvZiAke3RvdGFsUGFnZXN9YFxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKFwiLnBhZ2luYXRpb25fcGFnZV9vZl9wYWdlc1wiLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbGxiYWNrVGV4dCxcbiAgICAgIHBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgICB0b3RhbFBhZ2VzXG4gICAgfSkgfHwgZmFsbGJhY2tUZXh0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHBhZ2luYXRpb25JbnB1dFZhbHVlKHRvdGFsUGFnZXMpIHtcbiAgICBpZiAodGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQpIHJldHVybiB0aGlzLnMucGFnZUlucHV0VmFsdWVcblxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25EaXNwbGF5VmFsdWUodG90YWxQYWdlcylcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gcGFnZSAqL1xuICBzZXRQYWdpbmF0aW9uUGFnZSA9IChwYWdlKSA9PiB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRQYWdpbmF0aW9uUGFnZVwiLCB7cmVxdWVzdGVkUGFnZTogcGFnZSwgdG90YWxQYWdlc30pXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMpIHJldHVyblxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBNYXRoLm1pbihNYXRoLm1heChNYXRoLmZsb29yKHBhZ2UpLCAxKSwgdG90YWxQYWdlcylcblxuICAgIGlmIChuZXh0UGFnZSA9PSB0aGlzLmdldEFjdGl2ZVBhZ2UoKSkge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtwYWdlOiBuZXh0UGFnZSwgcGFnZUlucHV0VmFsdWU6IFN0cmluZyhuZXh0UGFnZSl9LFxuICAgICAgKCkgPT4gdGhpcy50dC5sb2FkT3B0aW9ucyh7cGFnZTogbmV4dFBhZ2V9KVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25QcmV2UHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UodGhpcy5nZXRBY3RpdmVQYWdlKCkgLSAxKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbk5leHRQcmVzc2VkID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUGFnZSh0aGlzLmdldEFjdGl2ZVBhZ2UoKSArIDEpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uUGFnaW5hdGlvbklucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSB0cnVlXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICBvblBhZ2luYXRpb25JbnB1dENoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IHZhbHVlXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRCbHVyID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGNvbnN0IHJhd1ZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gdGhpcy5zLnBhZ2VJbnB1dFZhbHVlXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSByYXdWYWx1ZSA/IE51bWJlcihTdHJpbmcocmF3VmFsdWUpLm1hdGNoKC9cXGQrLyk/LlswXSkgOiBOYU5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWRWYWx1ZSkgPyBwYXJzZWRWYWx1ZSA6IE51bWJlcih0aGlzLnMucGFnZUlucHV0VmFsdWUpXG5cbiAgICBpZiAodG90YWxQYWdlcyAmJiBOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dFN1Ym1pdCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcykge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBOdW1iZXIodGhpcy5zLnBhZ2VJbnB1dFZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0S2V5RG93biA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudD8ua2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuXG4gICAgdGhpcy50dC5vblBhZ2luYXRpb25JbnB1dFN1Ym1pdChldmVudClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIHBhZ2luYXRpb25Db250cm9scygpIHtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMgfHwgdG90YWxQYWdlcyA8PSAxKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IHByZXZEaXNhYmxlZCA9IGN1cnJlbnRQYWdlIDw9IDFcbiAgICBjb25zdCBuZXh0RGlzYWJsZWQgPSBjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbkNvbnRhaW5lciB8fD0ge2NsYXNzOiBcIm9wdGlvbnMtcGFnaW5hdGlvblwifX1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uQ29udGFpbmVyIHx8PSB7XG4gICAgICAgICAgYm9yZGVyVG9wOiBcIjFweCBzb2xpZCAjZTJlOGYwXCIsXG4gICAgICAgICAgcGFkZGluZzogOFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25IZWFkZXIgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWhlYWRlclwifX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25IZWFkZXIgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCJ9fVxuICAgICAgICA+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvblByZXZCdXR0b24gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLXByZXZcIn19XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJldkRpc2FibGVkfVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblBhZ2luYXRpb25QcmV2UHJlc3NlZH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYHBhZ2luYXRpb25OYXZCdXR0b24tJHtwcmV2RGlzYWJsZWR9YF0gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmOGZhZmNcIixcbiAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IHByZXZEaXNhYmxlZCA/IDAuNCA6IDEsXG4gICAgICAgICAgICAgIHdpZHRoOiAzMFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLWxlZnRcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25OYXZJY29uIHx8PSB7Y29sb3I6IFwiIzMzNDE1NVwiLCBmb250U2l6ZTogMTJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInBhZ2luYXRpb25MYWJlbERhdGFTZXRcIiwge1xuICAgICAgICAgICAgICBjbGFzczogXCJwYWdpbmF0aW9uLWxhYmVsXCIsXG4gICAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlXG4gICAgICAgICAgICB9LCBbY3VycmVudFBhZ2VdKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkxhYmVsQnV0dG9uIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjFmNWY5XCIsXG4gICAgICAgICAgICAgIGJvcmRlcjogXCIxcHggc29saWQgI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE0LFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgbWluV2lkdGg6IDE0MCxcbiAgICAgICAgICAgICAgcGFkZGluZ0hvcml6b250YWw6IDEwLFxuICAgICAgICAgICAgICBwYWRkaW5nVmVydGljYWw6IDZcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uSW5wdXQgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWlucHV0XCJ9fVxuICAgICAgICAgICAgICBrZXlib2FyZFR5cGU9XCJudW1iZXItcGFkXCJcbiAgICAgICAgICAgICAgb25CbHVyPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Qmx1cn1cbiAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICBvbkZvY3VzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Rm9jdXN9XG4gICAgICAgICAgICAgIG9uUHJlc3NJbj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEZvY3VzfVxuICAgICAgICAgICAgICBvbktleURvd249e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRLZXlEb3dufVxuICAgICAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRTdWJtaXR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy50dC5wYWdlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHNlbGVjdFRleHRPbkZvY3VzXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbklucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDAsXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiIzBmMTcyYVwiLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogMTIwXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnBhZ2luYXRpb25JbnB1dFZhbHVlKHRvdGFsUGFnZXMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbk5leHRCdXR0b24gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLW5leHRcIn19XG4gICAgICAgICAgICBkaXNhYmxlZD17bmV4dERpc2FibGVkfVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblBhZ2luYXRpb25OZXh0UHJlc3NlZH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYHBhZ2luYXRpb25OYXZCdXR0b24tJHtuZXh0RGlzYWJsZWR9YF0gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmOGZhZmNcIixcbiAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IG5leHREaXNhYmxlZCA/IDAuNCA6IDEsXG4gICAgICAgICAgICAgIHdpZHRoOiAzMFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTmF2SWNvbiB8fD0ge2NvbG9yOiBcIiMzMzQxNTVcIiwgZm9udFNpemU6IDEyfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uUGFnZXMgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLXBhZ2VzXCJ9fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvblBhZ2VzIHx8PSB7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgICAgICAgZmxleFdyYXA6IFwid3JhcFwiLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICBtYXJnaW5Ub3A6IDhcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucGFnaW5hdGlvblBhZ2VJdGVtcyh0b3RhbFBhZ2VzKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJlbGxpcHNpc1wiKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzW2BwYWdpbmF0aW9uRWxsaXBzaXMtJHtpdGVtLmtleX1gXSB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tZWxsaXBzaXNcIn19XG4gICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uRWxsaXBzaXMgfHw9IHtwYWRkaW5nSG9yaXpvbnRhbDogNn19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uRWxsaXBzaXNUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzY0NzQ4YlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA2MDBcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgLi4uXG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxQYWdpbmF0aW9uUGFnZUJ1dHRvblxuICAgICAgICAgICAgICAgIGFjdGl2ZT17aXRlbS52YWx1ZSA9PSBjdXJyZW50UGFnZX1cbiAgICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxuICAgICAgICAgICAgICAgIG9uUGFnZVNlbGVjdGVkPXt0aGlzLnR0LnNldFBhZ2luYXRpb25QYWdlfVxuICAgICAgICAgICAgICAgIHBhZ2U9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZXxudWxsfSAqL1xuICBvcHRpb25zQ29udGFpbmVyKCkge1xuICAgIGNvbnN0IHtzZWxlY3RDb250YWluZXJMYXlvdXQsIGxvYWRlZE9wdGlvbnMsIGVuZE9mU2VsZWN0TGF5b3V0LCBvcHRpb25zQ29udGFpbmVyTGF5b3V0LCBvcHRpb25zUGxhY2VtZW50LCBvcHRpb25zVmlzaWJpbGl0eX0gPSB0aGlzLnNcbiAgICBsZXQgbGVmdCwgdG9wXG5cbiAgICBsZXQgc3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgekluZGV4OiA5OTk5OSxcbiAgICAgIGVsZXZhdGlvbjogOTk5OTksXG4gICAgICB2aXNpYmlsaXR5OiBvcHRpb25zVmlzaWJpbGl0eSxcbiAgICAgIHdpZHRoOiB0aGlzLnAub3B0aW9uc1dpZHRoIHx8IHRoaXMucy5vcHRpb25zV2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjOTk5XCIsXG4gICAgICBtYXhIZWlnaHQ6IDMwMCxcbiAgICAgIG92ZXJmbG93WTogXCJhdXRvXCJcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucC5vcHRpb25zUG9ydGFsKSB7XG4gICAgICBzdHlsZS50b3AgPSAwXG4gICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgIH0gZWxzZSBpZiAoIXRoaXMucC5vcHRpb25zQWJzb2x1dGUpIHtcbiAgICAgIHN0eWxlLmxlZnQgPSAwXG4gICAgICBzdHlsZS5ib3R0b20gPSAwXG4gICAgfSBlbHNlIGlmIChvcHRpb25zUGxhY2VtZW50ID09IFwiYmVsb3dcIikge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgLy8gb25MYXlvdXQgdG9wIHZhbHVlIGlzIHNvbWV0aW1lcyBuZWdhdGl2ZSBzbyB1c2UgYnJvd3NlciBKUyB0byBnZXQgaXQgaW5zdGVhZFxuICAgICAgICB0b3AgPSBkaWdnKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgMVxuXG4gICAgICAgIC8vIG9uTGF5b3V0IGxlZnQgdmFsdWVzIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSB3aGVuIGNoYW5nZWRcbiAgICAgICAgbGVmdCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHRoaXMucy5lbmRPZlNlbGVjdExheW91dC5sZWZ0XG4gICAgICAgIHRvcCA9IHNlbGVjdENvbnRhaW5lckxheW91dC50b3BcbiAgICAgIH1cblxuICAgICAgc3R5bGUubGVmdCA9IGxlZnRcbiAgICAgIHN0eWxlLnRvcCA9IHRvcCAtIDJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGVuZE9mU2VsZWN0TGF5b3V0LmxlZnRcbiAgICAgICAgdG9wID0gc2VsZWN0Q29udGFpbmVyTGF5b3V0LnRvcFxuICAgICAgfVxuXG4gICAgICBzdHlsZS5sZWZ0ID0gbGVmdFxuICAgICAgc3R5bGUudG9wID0gdG9wIC0gb3B0aW9uc0NvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rb253biBvcHRpb25zIHBsYWNlbWVudDogJHtvcHRpb25zUGxhY2VtZW50fWApXG4gICAgfVxuXG4gICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHN0eWxlLCBbbGVmdCwgdG9wLCBzdHlsZS52aXNpYmlsaXR5LCBzdHlsZS53aWR0aF0pXG5cbiAgICBjb25zdCBpZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICBcIm9wdGlvbnNDb250YWluZXJEYXRhU2V0XCIsXG4gICAgICAgICAge2NsYXNzOiBcIm9wdGlvbnMtY29udGFpbmVyXCIsIGlkLCByb2xlOiBcImRpYWxvZ1wiLCBvcHRpb25zVmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHkgfHwgXCJoaWRkZW5cIn0sXG4gICAgICAgICAgW2lkLCBvcHRpb25zVmlzaWJpbGl0eV1cbiAgICAgICAgKX1cbiAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25PcHRpb25zQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICByZWY9e3RoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubWFwKChsb2FkZWRPcHRpb24pID0+XG4gICAgICAgICAgdGhpcy5oYXlhU2VsZWN0T3B0aW9uKHtcbiAgICAgICAgICAgIGtleTogbG9hZGVkT3B0aW9uLmtleSB8fCBgbG9hZGVkLW9wdGlvbi0ke2xvYWRlZE9wdGlvbi52YWx1ZX1gLFxuICAgICAgICAgICAgbG9hZGVkT3B0aW9uXG4gICAgICAgICAgfSlcbiAgICAgICAgKX1cbiAgICAgICAge2xvYWRlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIDxWaWV3IGRhdGFTZXQ9e3RoaXMubm9PcHRpb25zQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcIm5vLW9wdGlvbnMtY29udGFpbmVyXCJ9fT5cbiAgICAgICAgICAgIDxUZXh0Pnt0aGlzLnAubm9PcHRpb25zVGV4dCA/IHRoaXMucC5ub09wdGlvbnNUZXh0KCkgOiB0aGlzLnRyYW5zbGF0ZShcIi5ub19vcHRpb25zX2ZvdW5kXCIpfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAge3RoaXMucGFnaW5hdGlvbkNvbnRyb2xzKCl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gbG9hZGVkT3B0aW9uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25PcHRpb25DbGlja2VkID0gKGV2ZW50LCBsb2FkZWRPcHRpb24pID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvbkNoYW5nZSwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge211bHRpcGxlfSA9IHRoaXMucFxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7fVxuICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9uID0gY3VycmVudE9wdGlvbnMuZmluZCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSA9PSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgY29uc3QgbmV3VG9nZ2xlZCA9IHsuLi50b2dnbGVkfVxuICAgIGxldCBuZXdDdXJyZW50T3B0aW9uc1xuICAgIGxldCBhY3Rpb25cblxuICAgIGlmIChleGlzdGluZ09wdGlvbikge1xuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRvZ2dsZSA9IHRvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0b2dnbGVPcHRpb25zLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSBjdXJyZW50VG9nZ2xlKVxuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gKHRvZ2dsZU9wdGlvbnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAvLyBObyBuZXh0IHRvZ2dsZWQgLSByZW1vdmUgdG9nZ2xlZCBhbmQgb3B0aW9uXG4gICAgICAgICAgZGVsZXRlIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlLW9wdGlvbi1hZnRlci1sYXN0LXRvZ2dsZVwiXG5cbiAgICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSB0b2dnbGVkIC0gc2V0IHRvIG5leHQgdG9nZ2xlXG4gICAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gZGlnZyh0b2dnbGVPcHRpb25zLCBjdXJyZW50SW5kZXggKyAxLCBcInZhbHVlXCIpXG4gICAgICAgICAgYWN0aW9uID0gXCJjeWNsZS10b2dnbGVcIlxuICAgICAgICB9XG5cbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICAgICAgICBhY3Rpb24gPSBcInJlbW92ZS1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBjbGlja2VkIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgICAgaWYgKGxvYWRlZE9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25PcHRpb25DbGlja2VkXCIsIHtcbiAgICAgICAgICBhY3Rpb246IFwiaWdub3JlLWRpc2FibGVkLW9wdGlvblwiLFxuICAgICAgICAgIG9wdGlvblZhbHVlOiBsb2FkZWRPcHRpb24udmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIC8vIFNldCBmcmVzaCB0b2dnbGVcbiAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gdG9nZ2xlT3B0aW9uc1swXS52YWx1ZVxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfVxuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgdG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBhY3Rpb24gPSBcImFkZC1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmNvbmNhdChbbG9hZGVkT3B0aW9uXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbiA9IFwicmVwbGFjZS1zaW5nbGUtb3B0aW9uXCJcbiAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBbbG9hZGVkT3B0aW9uXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy52YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gY3VycmVudE9wdGlvbnMgYXJlIGNvbnRyb2xsZWQgYW5kIGEgdXNlTWVtbyBjYWxsYmFjayBpcyBoYW5kZWxpbmcgc2V0dGluZyBjdXJyZW50IG9wdGlvbnMuXG4gICAgfSBlbHNlIGlmIChuZXdDdXJyZW50T3B0aW9ucykge1xuICAgICAgbmV3U3RhdGUuY3VycmVudE9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9ucyB8fCBjdXJyZW50T3B0aW9uc1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbk9wdGlvbkNsaWNrZWRcIiwge1xuICAgICAgYWN0aW9uOiBhY3Rpb24gfHwgXCJ0b2dnbGUtb25seVwiLFxuICAgICAgbXVsdGlwbGUsXG4gICAgICBvcHRpb25WYWx1ZTogbG9hZGVkT3B0aW9uLnZhbHVlLFxuICAgICAgb3B0aW9uc0NvdW50QmVmb3JlOiBjdXJyZW50T3B0aW9ucy5sZW5ndGgsXG4gICAgICBvcHRpb25zQ291bnRBZnRlcjogb3B0aW9ucy5sZW5ndGhcbiAgICB9KVxuXG4gICAgaWYgKCFtdWx0aXBsZSkgdGhpcy5jbG9zZU9wdGlvbnMoe29wdGlvbnN9KVxuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RPbkNoYW5nZVBheWxvYWR9ICovXG4gICAgICBvbkNoYW5nZSh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0b2dnbGVzOiBuZXdUb2dnbGVkXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlVmFsdWUpIHtcbiAgICAgIGxldCBvcHRpb25WYWx1ZVxuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IGRpZyhvcHRpb25zLCAwLCBcInZhbHVlXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMucC5vbkNoYW5nZVZhbHVlKG9wdGlvblZhbHVlKVxuICAgIH1cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLnRvZ2dsZWQgPSBuZXdTdGF0ZS50b2dnbGVkXG4gICAgfVxuXG4gICAgaWYgKFwiY3VycmVudE9wdGlvbnNcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gbmV3U3RhdGUuY3VycmVudE9wdGlvbnNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxpbmdOYW1lXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3N0eWxlXVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IFtjYWNoZXNdXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKi9cbiAgc3R5bGluZ0ZvcihzdHlsaW5nTmFtZSwgc3R5bGUgPSB7fSwgY2FjaGVzID0gW10pIHtcbiAgICBsZXQgY3VzdG9tU3R5bGluZyA9IGRpZyh0aGlzLCBcInByb3BzXCIsIFwic3R5bGVzXCIsIHN0eWxpbmdOYW1lKVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21TdHlsaW5nID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHR9ICovXG4gICAgICBjdXN0b21TdHlsaW5nID0gY3VzdG9tU3R5bGluZyh7XG4gICAgICAgIG9wZW5lZDogdGhpcy5zLm9wZW5lZCxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogdGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBzdHlsZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tU3R5bGluZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3R5bGUsIGN1c3RvbVN0eWxpbmcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoYHN0eWxpbmdGb3ItJHtzdHlsaW5nTmFtZX1gLCBzdHlsZSwgY2FjaGVzKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKi9cbiAgaWNvbkZvck9wdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCB7dG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzIHx8IHt9XG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG5cbiAgICBpZiAodG9nZ2xlT3B0aW9ucyAmJiAob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpKSB7XG4gICAgICBjb25zdCB0b2dnbGVkVmFsdWUgPSB0b2dnbGVkW29wdGlvbi52YWx1ZV1cbiAgICAgIGNvbnN0IHRvZ2dsZWRPcHRpb24gPSB0b2dnbGVPcHRpb25zLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQudmFsdWUgPT0gdG9nZ2xlZFZhbHVlKVxuXG4gICAgICBpZiAoIXRvZ2dsZWRPcHRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIGEgdG9nZ2xlIG9wdGlvbiBmb3IgdmFsdWU6ICR7dG9nZ2xlZFZhbHVlfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0b2dnbGVkT3B0aW9uLmljb25cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBvcHRpb25cbiAgICogQHBhcmFtIHtcImN1cnJlbnRcInxcIm9wdGlvblwifSBtb2RlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9XG4gICAqL1xuICBwcmVzZW50T3B0aW9uID0gKG9wdGlvbiwgbW9kZSkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25Db250ZW50LCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHMgfHwge31cbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcbiAgICBjb25zdCBpY29uID0gdGhpcy5pY29uRm9yT3B0aW9uKG9wdGlvbilcbiAgICBjb25zdCB0b2dnbGVWYWx1ZSA9IHRvZ2dsZWRbb3B0aW9uLnZhbHVlXVxuICAgIGNvbnN0IHRvZ2dsZU9wdGlvbiA9IHRvZ2dsZU9wdGlvbnM/LmZpbmQoKHRvZ2dsZU9wdGlvbkkpID0+IHRvZ2dsZU9wdGlvbkkudmFsdWUgPT0gdG9nZ2xlVmFsdWUpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgPT0gb3B0aW9uLnZhbHVlKVxuICAgIGxldCBzdHlsZVxuICAgIGxldCBjb250ZW50Tm9kZVxuXG4gICAgaWYgKG1vZGUgPT0gXCJjdXJyZW50XCIpIHtcbiAgICAgIHN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvblByZXNlbnRhdGlvblRleHRcIiwge2ZsZXg6IDEsIHdoaXRlU3BhY2U6IFwibm93cmFwXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcIm9wdGlvblByZXNlbnRhdGlvblRleHRcIiwge2ZsZXg6IDEsIHdoaXRlU3BhY2U6IFwibm93cmFwXCJ9KVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicHJlc2VudE9wdGlvblZpZXdEYXRhU2V0XCIsIHtcbiAgICAgICAgICB0ZXh0OiBvcHRpb24udGV4dCxcbiAgICAgICAgICB0b2dnbGVJY29uOiB0b2dnbGVPcHRpb24/Lmljb24sXG4gICAgICAgICAgdG9nZ2xlVmFsdWU6IHRvZ2dsZU9wdGlvbj8udmFsdWUsXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZVxuICAgICAgICB9LCBbb3B0aW9uLnRleHQsIG9wdGlvbi52YWx1ZSwgdG9nZ2xlT3B0aW9uPy5pY29uLCB0b2dnbGVPcHRpb24/LnZhbHVlXSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uU3R5bGVcIiwge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCJ9KX1cbiAgICAgICAgdGVzdElEPVwib3B0aW9uLXByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIHt0b2dnbGVPcHRpb25zICYmICEob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpICYmXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwidG9nZ2xlSWNvblBsYWNlaG9sZGVyU3R5bGVcIiwge3dpZHRoOiAyMH0pfVxuICAgICAgICAgICAgdGVzdElEPVwidG9nZ2xlLWljb24tcGxhY2Vob2xkZXJcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAge3RvZ2dsZU9wdGlvbnMgJiYgKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSAmJlxuICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwidG9nZ2xlSWNvbkNvbnRhaW5lclN0eWxlXCIsIHthbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiwgd2lkdGg6IDIwfSl9PlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPXtpY29ufVxuICAgICAgICAgICAgICB0ZXN0SUQ9XCJ0b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAob3B0aW9uQ29udGVudCkge1xuICAgICAgICAgICAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0T3B0aW9uUmVuZGVyQ29udGV4dH0gKi9cbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uQ29udGVudCh7aWNvbiwgbW9kZSwgb3B0aW9uLCBzZWxlY3RlZCwgdG9nZ2xlT3B0aW9uLCB0b2dnbGVWYWx1ZSwgdG9nZ2xlZH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwiY3VycmVudFwiICYmIG9wdGlvbi5jdXJyZW50Q29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb24uY3VycmVudENvbnRlbnQoKVxuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uLmNvbnRlbnQoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoXCJodG1sXCIgaW4gb3B0aW9uICYmIFBsYXRmb3JtLk9TICE9IFwid2ViXCIpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gPFJlbmRlckh0bWwgc291cmNlPXt7aHRtbDogZGlnZyhvcHRpb24sIFwiaHRtbFwiKX19IC8+XG4gICAgICAgICAgfSBlbHNlIGlmIChcImh0bWxcIiBpbiBvcHRpb24gJiYgUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBkaWdnKG9wdGlvbiwgXCJodG1sXCIpfX0gLz5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSAoXG4gICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgICAgIHRlc3RJRD1cIm9wdGlvbi1wcmVzZW50YXRpb24tdGV4dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7b3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25Db250ZW50U3R5bGVcIiwge2ZsZXg6IDF9KX0+XG4gICAgICAgICAgICAgICAge2NvbnRlbnROb2RlfVxuICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIHtvcHRpb24ucmlnaHQgJiZcbiAgICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvblJpZ2h0U3R5bGVcIiwge2FsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLCBtYXJnaW5MZWZ0OiA4fSl9PlxuICAgICAgICAgICAgICAgICAge29wdGlvbi5yaWdodH1cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgIClcbiAgICAgICAgfSkoKX1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIHNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKSB7XG4gICAgY29uc3Qge29wdGlvbnMsIHZhbHVlc30gPSB0aGlzLnBcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucyA9IFtdXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wdGlvbnMoe3BhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLCB2YWx1ZXN9KVxuICAgIGNvbnN0IHtvcHRpb25zOiBjdXJyZW50T3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IGN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG4gICAgY29uc3Qgc3RhdGVWYWx1ZXMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudChjdXJyZW50VmFsdWVzLCBzdGF0ZVZhbHVlcykpIHtcbiAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IEhheWFTZWxlY3RTaGFwZUNvbXBvbmVudCA9IHNoYXBlQ29tcG9uZW50KEhheWFTZWxlY3QpXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oSGF5YVNlbGVjdFNoYXBlQ29tcG9uZW50KVxuIl19
|
|
1441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDekUsT0FBTyxLQUFLLEVBQUMsRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNwRCxPQUFPLEVBQUMsY0FBYyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3hGLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLGVBQWUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNuRSxPQUFPLGNBQWMsTUFBTSxtREFBbUQsQ0FBQTtBQUM5RSxPQUFPLGdCQUFnQixNQUFNLHFEQUFxRCxDQUFBO0FBQ2xGLE9BQU8sSUFBSSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3ZELE9BQU8sTUFBTSxNQUFNLFVBQVUsQ0FBQTtBQUM3QixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4QyxPQUFPLG9CQUFvQixNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLFVBQVUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sZ0JBQWdCLE1BQU0sdUJBQXVCLENBQUE7QUFDcEQsT0FBTyxlQUFlLE1BQU0scUNBQXFDLENBQUE7QUFFakUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBQ2pCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtBQUVuQjs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7R0FHRztBQUNILE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUNqRCxJQUFJLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUV0QyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtJQUNwRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7SUFFcEMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBRXBFLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQ3pGLElBQUksSUFBSSxJQUFJLENBQUE7SUFDZCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxtRUFBbUU7QUFDbkUsTUFBTSxVQUFXLFNBQVEsY0FBYztJQUNyQyxNQUFNLENBQUMsWUFBWSxHQUFHO1FBQ3BCLEtBQUssRUFBRSxLQUFLO1FBQ1osUUFBUSxFQUFFLEtBQUs7UUFDZixhQUFhLEVBQUUsSUFBSTtRQUNuQixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxJQUFJO1FBQ2IsZUFBZSxFQUFFLElBQUk7UUFDckIsYUFBYSxFQUFFLElBQUk7UUFDbkIsWUFBWSxFQUFFLElBQUk7UUFDbEIsTUFBTSxFQUFFLEtBQUs7UUFDYixXQUFXLEVBQUUsS0FBSztLQUNuQixDQUFBO0lBRUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7UUFDaEMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQzNCLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUMzQixjQUFjLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDaEMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxhQUFhLEVBQUUsU0FBUyxDQUFDLEtBQUs7UUFDOUIsd0JBQXdCLEVBQUUsU0FBUyxDQUFDLEtBQUs7UUFDekMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUNoQyxFQUFFLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDbEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3ZCLFFBQVEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDbkMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3RCLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUM3QixNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDdEIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3hCLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUM3QixPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDdkIsZUFBZSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQy9CLGVBQWUsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUMvQixhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDN0IsT0FBTyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDM0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3ZCLGNBQWMsRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDOUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUN4QixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDckIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixLQUFLLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVTthQUM1RSxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsSUFBSTtTQUNmLENBQUMsQ0FBQyxVQUFVO1FBQ2IsZUFBZSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUMxQyxhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ3hDLFlBQVksRUFBRSxTQUFTLENBQUMsTUFBTTtRQUM5QixXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDM0IsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDekMsNEJBQTRCLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDOUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUNqQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDeEIsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQ3pCLGFBQWEsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDL0MsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUNqQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ2xDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUN0QyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUs7S0FDeEIsQ0FBQyxDQUFBO0lBRUYsdUNBQXVDLEdBQUcsS0FBSyxDQUFBO0lBQy9DLGNBQWMsR0FBRyxTQUFTLEVBQUUsQ0FBQTtJQUM1QiwwQkFBMEIsR0FBRyxDQUFDLENBQUE7SUFDOUIsbUJBQW1CLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDakMsWUFBWSxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBQzFCLGVBQWUsR0FBRyxFQUFFLENBQUE7SUFDcEIsa0JBQWtCLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDaEMsa0JBQWtCLEdBQUcsU0FBUyxFQUFFLENBQUE7SUFDaEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDNUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFBO0lBQzlDLDhCQUE4QjtJQUM5QixLQUFLLEdBQUc7UUFDTixjQUFjLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1FBQzVDLHFCQUFxQixFQUFFLElBQUk7UUFDM0IsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixNQUFNLEVBQUUsSUFBSTtRQUNaLGFBQWEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7UUFDMUMsMkJBQTJCLEVBQUUsQ0FBQztRQUM5QixvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxDQUFDO1FBQ1AsZ0JBQWdCLEVBQUUsS0FBSztRQUN2QixjQUFjLEVBQUUsR0FBRztRQUNuQixRQUFRLEVBQUUsSUFBSTtRQUNkLE1BQU0sRUFBRSxLQUFLO1FBQ2Isc0JBQXNCLEVBQUUsSUFBSTtRQUM1QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLGlCQUFpQixFQUFFLFNBQVM7UUFDNUIsWUFBWSxFQUFFLFNBQVM7UUFDdkIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUM3RSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQzNFLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO0tBQy9CLENBQUE7SUFFRCx5QkFBeUI7SUFDekIsY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTVDOzs7O09BSUc7SUFDSCxRQUFRLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxHQUFHLFNBQVMsRUFBRSxFQUFFO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsT0FBTTtRQUVsQyxNQUFNLFdBQVcsR0FBRztZQUNsQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNsQixDQUFBO1FBRUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQTtRQUVyRixJQUFJLGFBQWEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUM1RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLFlBQVksRUFBRSxDQUFDLENBQUE7UUFDN0MsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELEtBQUs7UUFDSCxNQUFNLEVBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUE7UUFFaEQsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFVixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxPQUFPLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO2dCQUN6RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssSUFBSSxPQUFPLE1BQU0sSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBRXpGLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2xFLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUMzRSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtRQUM1RSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUU3RSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDaEQsbUJBQW1CLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUMzQyxvQkFBb0IsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQzdDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVE7Z0JBQ3pCLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87YUFDckYsQ0FBQyxDQUFBO1FBRUYsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyx1Q0FBdUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3JGLElBQUksQ0FBQyx1Q0FBdUMsR0FBRyxLQUFLLENBQUE7Z0JBQ3BELElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFBO1lBQy9DLENBQUM7UUFDSCxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFBO1FBRXBGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBRTNGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDMUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUE7WUFDbEMsQ0FBQztRQUNILENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPO1FBQ3RCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQy9DLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxxQkFBcUI7UUFDbkIsTUFBTSxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtRQUN4RCxNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUV4QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRTVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBRSxDQUNoQyxDQUFDLFlBQVksSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDO1lBQ3JDLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNuQyxDQUFBO0lBQ0gsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxvQkFBb0I7UUFDbEIsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFeEIsSUFBSSxPQUFPLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNqQyxPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7SUFFdEM7OztPQUdHO0lBQ0gsa0JBQWtCLENBQUMsTUFBTTtRQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQTtRQUVuRCxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzdCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQzFCLENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxlQUFlLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUM7UUFDbkQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUE7UUFFOUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQ3hCLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUN2QixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ3pGLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsY0FBYztRQUNaLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFBO0lBQ3JGLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsVUFBVTtRQUNSLE9BQU8sNEJBQTRCLENBQUMsSUFBSSxDQUFDLElBQUksZUFBZSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUM1RixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUU5RSxzQ0FBc0M7SUFDdEMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRW5ILGdFQUFnRTtJQUNoRSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDdkIsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3RFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sRUFBRSxDQUFBO1lBRXpFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxzQ0FBc0M7Z0JBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtnQkFFakIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUE7b0JBRXJFLElBQUksTUFBTTt3QkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNqQyxDQUFDO2dCQUVELE9BQU8sTUFBTSxDQUFBO1lBQ2YsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNoRSxzQ0FBc0M7Z0JBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtnQkFFakIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNsQyxNQUFNLE1BQU0sR0FDVixJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO3dCQUM1RCxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUE7b0JBRS9ELElBQUksTUFBTTt3QkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNqQyxDQUFDO2dCQUVELE9BQU8sTUFBTSxDQUFBO1lBQ2YsQ0FBQztpQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ25ELG1DQUFtQztZQUNyQyxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2hELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQTtJQUM5QixDQUFDLENBQUE7SUFFRCxzQ0FBc0M7SUFDdEMsc0JBQXNCO1FBQ3BCLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMxRCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFFL0MsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUU5QixPQUFPLGNBQWM7YUFDbEIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO2FBQzlCLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksV0FBVyxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtRQUVyRyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFO2dCQUM1RCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztnQkFDOUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBSSxhQUFhLElBQUksd0JBQXdCLENBQUM7Z0JBQ3BGLFdBQVcsRUFBRSxPQUFPLE9BQU87YUFDNUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLGFBQWEsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksT0FBTyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7WUFDMUgsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUE7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBRW5CLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtZQUVqQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELFFBQVEsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFBO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLENBQUMsQ0FBQTtZQUNwRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFBO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLE1BQU07UUFDSixNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLEVBQUMsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM1QixNQUFNLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQzFELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUN4RSxNQUFNLEVBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUMvQyxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFL0IsTUFBTSwwQkFBMEIsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEUsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ2pELFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDN0MsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUNwRCxVQUFVLEVBQUUsQ0FBQztnQkFDYixhQUFhLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxFQUFFLENBQUM7YUFDZixFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFBO1FBRWxCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCw4RkFBOEY7WUFDOUYsMEJBQTBCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1lBRWpELE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUMsWUFBWSxDQUFBO1lBRWhFLElBQUksZ0JBQWdCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLDBCQUEwQixDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtnQkFDbEQsMEJBQTBCLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFBO2dCQUNuRCwwQkFBMEIsQ0FBQyx1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQTtnQkFDckUsMEJBQTBCLENBQUMsc0JBQXNCLEdBQUcsZ0JBQWdCLENBQUE7Z0JBRXBFLE9BQU8sMEJBQTBCLENBQUMsWUFBWSxDQUFBO1lBQ2hELENBQUM7aUJBQU0sSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDdkMsMEJBQTBCLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUE7Z0JBQ2pFLDBCQUEwQixDQUFDLG9CQUFvQixHQUFHLGdCQUFnQixDQUFBO2dCQUNsRSwwQkFBMEIsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUE7Z0JBQ3RELDBCQUEwQixDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQTtnQkFFckQsT0FBTywwQkFBMEIsQ0FBQyxZQUFZLENBQUE7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtnQkFDcEQsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixFQUFFO2dCQUNGLE1BQU07Z0JBQ04sZ0JBQWdCO2dCQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7Z0JBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDO2FBQ2hDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDdEksS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBRTlCLG9CQUFDLFNBQVMsSUFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixLQUFLLEVBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFDLEVBQ3BFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUN6QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQ2hDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUMvQixLQUFLLEVBQUUsMEJBQTBCO2dCQUVqQyxvQkFBQyxJQUFJLElBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxFQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBQyxFQUNwRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEtBQUssRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxDQUFDO29CQUV2SCxNQUFNO3dCQUNMLG9CQUFDLFNBQVMsSUFDUixPQUFPLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixLQUFLLEVBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFDLEVBQ3JFLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUN4QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUNsRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixLQUFLO2dDQUN0RSxLQUFLLEVBQUUsTUFBTTtnQ0FDYixXQUFXLEVBQUUsQ0FBQztnQ0FDZCxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUztnQ0FDbEQsT0FBTyxFQUFFLENBQUM7NkJBQ1gsQ0FBQyxFQUNGLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxHQUNsQztvQkFFSCxDQUFDLE1BQU07d0JBQ047NEJBQ0csY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDO2dDQUN6QixvQkFBQyxJQUFJLElBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEtBQUssRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsSUFDN0csV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FDOUM7NEJBRVIsY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLO2dDQUNqRDtvQ0FDRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7d0NBQ2hCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdEQsK0JBQ0UsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDeEIsR0FBRyxFQUFFLGlCQUFpQixLQUFLLEVBQUUsRUFDN0IsSUFBSSxFQUFFLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUN4QyxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxLQUFLLEdBQ1osQ0FDSCxDQUFDO29DQUVILE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQzt3Q0FDakIsK0JBQ0UsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDeEIsSUFBSSxFQUFFLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUN4QyxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBQyxFQUFFLEdBQ1IsQ0FFSDs0QkFFSixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FDcEMsb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLEtBQUssRUFBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUMsRUFDaEUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHLElBQUksaUJBQWlCLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFDaEUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBQyxDQUFDO2dDQUV4RCxhQUFhLENBQUMsSUFBSSxJQUFJLE9BQU87b0NBQzVCLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEtBQUssRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLENBQUM7d0NBQ3ZHLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUNuRCxhQUFhLENBQUMsSUFBSSxDQUNkLENBQ0Y7Z0NBRVIsYUFBYSxDQUFDLElBQUksSUFBSSxPQUFPO29DQUM1Qjt3Q0FDRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUM7NENBQ3pELCtCQUNFLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQ3hCLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsRUFDeEMsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsR0FDbkM7d0NBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQzVDLENBRUEsQ0FDUixDQUNBLENBRUE7Z0JBQ1Asb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCLEtBQUssRUFBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUMsRUFDdEUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixLQUFLO3dCQUN4RSxVQUFVLEVBQUUsUUFBUTt3QkFDcEIsY0FBYyxFQUFFLFFBQVE7d0JBQ3hCLE1BQU0sRUFBRSxNQUFNO3dCQUNkLFVBQVUsRUFBRSxNQUFNO3dCQUNsQixXQUFXLEVBQUUsQ0FBQztxQkFDZixDQUFDO29CQUVGLG9CQUFDLGVBQWUsSUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQyxHQUFJLENBQ3JJLENBQ0c7WUFDWixvQkFBQyxJQUFJLElBQ0gsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxFQUFDLEtBQUssRUFBRSxlQUFlLEVBQUMsRUFDN0QsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQ3JDLEdBQUcsRUFBRSxjQUFjLEdBQ25CO1lBQ0QsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDN0Isb0JBQUMsTUFBTSxJQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQzVCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUNqQjtZQUVWLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtnQkFDOUIsb0JBQUMsSUFBSSxRQUNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUNuQixDQUVKLENBQ1IsQ0FBQTtJQUNILENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsYUFBYTtRQUNYLE1BQU0sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBRTVGLElBQUksd0JBQXdCO1lBQUUsT0FBTyx3QkFBd0IsQ0FBQTtRQUM3RCxJQUFJLFlBQVk7WUFBRSxPQUFPLFlBQVksQ0FBQTtRQUNyQyxJQUFJLGFBQWE7WUFBRSxPQUFPLGFBQWEsQ0FBQTtRQUV2QyxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUUvRyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELCtCQUErQjtJQUMvQixLQUFLLENBQUMsb0NBQW9DO1FBQ3hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUUxQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU07UUFFMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFFakcsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMxQixNQUFNLEVBQUUsYUFBYTtTQUN0QixDQUFDLENBQUE7UUFFRixNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsNkNBQTZDLEVBQUUsRUFBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUE7UUFFbkksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLEdBQUcsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFBO1FBQ25ELElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFBO1FBQ3ZDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUN0RCxJQUFJO2dCQUNKLFNBQVM7Z0JBQ1QsV0FBVztnQkFDWCxXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU87YUFDL0QsQ0FBQyxDQUFBO1FBRUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNuRSxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDaEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXhHLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxFQUFFO29CQUMzRSxTQUFTO29CQUNULDBCQUEwQixFQUFFLElBQUksQ0FBQywwQkFBMEI7b0JBQzNELGFBQWE7b0JBQ2IsV0FBVztpQkFDWixDQUFDLENBQUE7WUFFRixPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFBO1FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUNqSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDO1lBQ3pHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQztZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBRVIsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLGFBQWE7WUFDYiwyQkFBMkIsRUFBRSxTQUFTO1lBQ3RDLElBQUksRUFBRSxZQUFZO1lBQ2xCLGNBQWMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUMvRCxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQzVELEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUE7UUFFaEUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDN0Qsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDO2dCQUM5QyxZQUFZO2dCQUNaLGdCQUFnQjtnQkFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUM1RCxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUM7UUFDbEMsSUFBSSxZQUFZLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE9BQU8sb0JBQUMsV0FBVyxJQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFlBQVksR0FBSSxDQUFBO1FBQ3hELENBQUM7UUFFRCxPQUFPLENBQ0wsb0JBQUMsTUFBTSxJQUNMLG1CQUFtQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFDdEMsR0FBRyxFQUFFLEdBQUcsRUFDUixNQUFNLEVBQUUsWUFBWSxFQUNwQixlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQ3hDLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFDcEMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFDM0QsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsR0FDckUsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLDBCQUEwQjtRQUNwRixNQUFNLGdCQUFnQixHQUFHLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUNuRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtRQUN0SCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFO2dCQUMvRCxTQUFTO2dCQUNULGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUNqQyxXQUFXO2dCQUNYLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxNQUFNO2FBQ3pDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7UUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCLEdBQUcsQ0FBQyxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFBO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUNuQyxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNwRixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzFCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtRQUM3RSxNQUFNLFFBQVEsR0FBRyxFQUFDLGlCQUFpQixFQUFDLENBQUE7UUFFcEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM5QyxRQUFRLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQTtRQUNqRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsQ0FBQTtZQUMvQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0IsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNyRixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUN0QixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDbEIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBRW5CLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBRXJFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDcEIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELGlDQUFpQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUV0RTs7O09BR0c7SUFDSCxZQUFZLENBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFFO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN6RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUMxRyxJQUFJLENBQUMsdUNBQXVDLEdBQUcsS0FBSyxDQUFBO1FBRXBELElBQUksQ0FBQyxRQUFRLENBQ1g7WUFDRSxNQUFNLEVBQUUsSUFBSTtZQUNaLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLE1BQU0sRUFBRSxLQUFLO1lBQ2Isc0JBQXNCLEVBQUUsSUFBSTtZQUM1QixpQkFBaUIsRUFBRSxRQUFRO1lBQzNCLElBQUksRUFBRSxDQUFDO1lBQ1AsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixjQUFjLEVBQUUsR0FBRztZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUE7UUFDckksQ0FBQyxDQUNGLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFBO0lBRWhELHNCQUFzQjtJQUN0QixvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUE7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUE7UUFFaEQsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2YsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQTtRQUNsQyxDQUFDO2FBQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUE7WUFDbEIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsNkRBQTZEO1lBQy9ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsa0JBQWtCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUNsQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEVBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdEcsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUE7UUFFakMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBQzFGLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFBO1FBQzdDLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxzQkFBc0I7SUFDdEIsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUN0RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztnQkFDMUQsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTthQUM3QixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQTtRQUN6QixJQUFJLENBQUMsdUNBQXVDLEdBQUcsSUFBSSxDQUFBO1FBQ25ELElBQUksQ0FBQyxRQUFRLENBQ1g7WUFDRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO1lBQzNDLE1BQU0sRUFBRSxJQUFJO1lBQ1osZ0JBQWdCLEVBQUUsT0FBTztZQUN6QixpQkFBaUIsRUFBRSxRQUFRO1lBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEtBQUs7WUFDN0MsSUFBSSxFQUFFLENBQUM7WUFDUCxnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGNBQWMsRUFBRSxHQUFHO1lBQ25CLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDN0UsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUM1RSxFQUNELEdBQUcsRUFBRTtZQUNILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1lBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDN0IsQ0FBQyxDQUNGLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDdEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFFM0Usc0JBQXNCO0lBQ3RCLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDckIsT0FBTSxDQUFDLHFDQUFxQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQzlELElBQUksQ0FBQyx1Q0FBdUMsR0FBRyxJQUFJLENBQUE7UUFDbkQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixzQ0FBc0M7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFMUIsTUFBTSxFQUFDLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7UUFDOUIsTUFBTSxFQUFDLHNCQUFzQixFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN2QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUE7UUFFbEQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSw4QkFBOEIsRUFBQyxDQUFDLENBQUE7WUFDaEosSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUE7WUFDcEMsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUE7UUFDeEMsTUFBTSwwQkFBMEIsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFBO1FBQzdFLE1BQU0sc0JBQXNCLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRTlELElBQUksc0JBQXNCLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztZQUN4RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1lBQ3hHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtZQUN4RyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQTtRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0Qix1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFMUIsTUFBTSxFQUFDLGlCQUFpQixFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUE7UUFFbkUsSUFBSSxDQUFDLFFBQVEsQ0FDWDtZQUNFLE1BQU0sRUFBRSxJQUFJO1lBQ1osZ0JBQWdCLEVBQUUsT0FBTztZQUN6QixpQkFBaUIsRUFBRSxTQUFTO1lBQzVCLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxLQUFLO1NBQ3ZDLEVBQ0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUM1QixDQUFBO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0Qix1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQ1g7WUFDRSxNQUFNLEVBQUUsSUFBSTtZQUNaLGdCQUFnQixFQUFFLE9BQU87WUFDekIsaUJBQWlCLEVBQUUsUUFBUTtZQUMzQixZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLO1NBQzlDLEVBQ0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUM1QixDQUFBO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDdEYsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCwwQkFBMEIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVwRSxzQkFBc0I7SUFDdEIsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZGLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUNyRixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUNuRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUMzQixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsMkJBQTJCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFdEUsc0JBQXNCO0lBQ3RCLHFCQUFxQixHQUFHLEdBQUcsRUFBRTtRQUMzQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUMxRiwyRUFBMkU7UUFDM0UsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUNyQixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsNkJBQTZCO0lBQzdCLG9CQUFvQjtRQUNsQixNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUUzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRWhFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLEVBQUU7WUFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUN6QixVQUFVO1NBQ1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUU1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxVQUFVO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7UUFDaEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3RGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBRWhFLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BCLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDZixDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRVYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQTtRQUNqRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFBO1FBRTVELElBQUksV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLEtBQUssR0FBRyxDQUFDLENBQUE7WUFDVCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ25DLENBQUM7YUFBTSxJQUFJLFdBQVcsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekMsR0FBRyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUE7WUFDcEIsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBRTVDLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQztZQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUVyRCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFbkIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQUMsVUFBVTtRQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdkMsTUFBTSxZQUFZLEdBQUcsUUFBUSxVQUFVLE9BQU8sVUFBVSxFQUFFLENBQUE7UUFFMUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLDJCQUEyQixFQUFFO1lBQ2pELFlBQVksRUFBRSxZQUFZO1lBQzFCLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVU7U0FDWCxDQUFDLElBQUksWUFBWSxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxVQUFVO1FBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO1FBRXpELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUM5QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBRWhHLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTTtRQUV2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUVwRSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7WUFDcEQsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUNYLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFDLEVBQ2xELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQzVDLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCxvREFBb0Q7SUFDcEQsdUJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQTtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQTtRQUV6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUMsQ0FBQTtJQUVELG9EQUFvRDtJQUNwRCx1QkFBdUIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRXpCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQyxDQUFBO0lBRUQsc0JBQXNCO0lBQ3RCLHNCQUFzQixHQUFHLEdBQUcsRUFBRTtRQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtRQUM5QixJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDdEQsQ0FBQyxDQUFBO0lBRUQsNEJBQTRCO0lBQzVCLHVCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO0lBQy9CLENBQUMsQ0FBQTtJQUVELG9EQUFvRDtJQUNwRCxxQkFBcUIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBRXpCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzlDLE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO1FBQzlELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUUzRixJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQ2hGLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDN0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQsb0RBQW9EO0lBQ3BELHVCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUE7UUFDeEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUE7UUFFekIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFFOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1lBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtZQUNwRCxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRTlDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7WUFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1lBQ3BELE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQ2xGLENBQUMsQ0FBQTtJQUVELG9EQUFvRDtJQUNwRCx3QkFBd0IsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25DLElBQUksS0FBSyxFQUFFLEdBQUcsS0FBSyxPQUFPO1lBQUUsT0FBTTtRQUVsQyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQTtJQUVELGdEQUFnRDtJQUNoRCxrQkFBa0I7UUFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFFOUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRS9DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLFlBQVksR0FBRyxXQUFXLElBQUksQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLFdBQVcsSUFBSSxVQUFVLENBQUE7UUFFOUMsT0FBTyxDQUNMLG9CQUFDLElBQUksSUFDSCxPQUFPLEVBQUUsUUFBUSxDQUFDLG1CQUFtQixLQUFLLEVBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFDLEVBQ3ZFLEtBQUssRUFBRSxNQUFNLENBQUMsbUJBQW1CLEtBQUs7Z0JBQ3BDLGNBQWMsRUFBRSxTQUFTO2dCQUN6QixjQUFjLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUVELG9CQUFDLElBQUksSUFDSCxPQUFPLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixLQUFLLEVBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFDLEVBQ25FLEtBQUssRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBQztnQkFFaEgsb0JBQUMsU0FBUyxJQUNSLE9BQU8sRUFBRSxRQUFRLENBQUMsb0JBQW9CLEtBQUssRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsRUFDckUsUUFBUSxFQUFFLFlBQVksRUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQ3hDLEtBQUssRUFBRSxNQUFNLENBQUMsdUJBQXVCLFlBQVksRUFBRSxDQUFDLEtBQUs7d0JBQ3ZELFVBQVUsRUFBRSxRQUFRO3dCQUNwQixlQUFlLEVBQUUsU0FBUzt3QkFDMUIsV0FBVyxFQUFFLFNBQVM7d0JBQ3RCLFlBQVksRUFBRSxDQUFDO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLE1BQU0sRUFBRSxFQUFFO3dCQUNWLGNBQWMsRUFBRSxRQUFRO3dCQUN4QixPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLEtBQUssRUFBRSxFQUFFO3FCQUNWO29CQUVELG9CQUFDLGVBQWUsSUFDZCxJQUFJLEVBQUMsY0FBYyxFQUNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixLQUFLLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDLEdBQ3BFLENBQ1E7Z0JBQ1osb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFO3dCQUM1QyxLQUFLLEVBQUUsa0JBQWtCO3dCQUN6QixJQUFJLEVBQUUsV0FBVztxQkFDbEIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMscUJBQXFCLEtBQUs7d0JBQ3RDLFVBQVUsRUFBRSxRQUFRO3dCQUNwQixlQUFlLEVBQUUsU0FBUzt3QkFDMUIsV0FBVyxFQUFFLFNBQVM7d0JBQ3RCLFlBQVksRUFBRSxFQUFFO3dCQUNoQixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxjQUFjLEVBQUUsUUFBUTt3QkFDeEIsUUFBUSxFQUFFLEdBQUc7d0JBQ2IsaUJBQWlCLEVBQUUsRUFBRTt3QkFDckIsZUFBZSxFQUFFLENBQUM7cUJBQ25CO29CQUVELG9CQUFDLFNBQVMsSUFDUixPQUFPLEVBQUUsUUFBUSxDQUFDLGVBQWUsS0FBSyxFQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBQyxFQUNqRSxZQUFZLEVBQUMsWUFBWSxFQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFDckMsWUFBWSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQzdDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUN2QyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFDekMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLEVBQzNDLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUNoRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQ3pCLGlCQUFpQixRQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLG9CQUFvQixLQUFLOzRCQUNyQyxXQUFXLEVBQUUsQ0FBQzs0QkFDZCxLQUFLLEVBQUUsU0FBUzs0QkFDaEIsUUFBUSxFQUFFLEVBQUU7NEJBQ1osT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7NEJBQ2xELE9BQU8sRUFBRSxDQUFDOzRCQUNWLFNBQVMsRUFBRSxRQUFROzRCQUNuQixLQUFLLEVBQUUsR0FBRzt5QkFDWCxFQUNELEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEdBQzVDLENBQ0c7Z0JBQ1Asb0JBQUMsU0FBUyxJQUNSLE9BQU8sRUFBRSxRQUFRLENBQUMsb0JBQW9CLEtBQUssRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsRUFDckUsUUFBUSxFQUFFLFlBQVksRUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQ3hDLEtBQUssRUFBRSxNQUFNLENBQUMsdUJBQXVCLFlBQVksRUFBRSxDQUFDLEtBQUs7d0JBQ3ZELFVBQVUsRUFBRSxRQUFRO3dCQUNwQixlQUFlLEVBQUUsU0FBUzt3QkFDMUIsV0FBVyxFQUFFLFNBQVM7d0JBQ3RCLFlBQVksRUFBRSxDQUFDO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLE1BQU0sRUFBRSxFQUFFO3dCQUNWLGNBQWMsRUFBRSxRQUFRO3dCQUN4QixPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQy9CLEtBQUssRUFBRSxFQUFFO3FCQUNWO29CQUVELG9CQUFDLGVBQWUsSUFDZCxJQUFJLEVBQUMsZUFBZSxFQUNwQixLQUFLLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixLQUFLLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDLEdBQ3BFLENBQ1EsQ0FDUDtZQUNQLG9CQUFDLElBQUksSUFDSCxPQUFPLEVBQUUsUUFBUSxDQUFDLGVBQWUsS0FBSyxFQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBQyxFQUNqRSxLQUFLLEVBQUUsTUFBTSxDQUFDLGVBQWUsS0FBSztvQkFDaEMsYUFBYSxFQUFFLEtBQUs7b0JBQ3BCLFFBQVEsRUFBRSxNQUFNO29CQUNoQixjQUFjLEVBQUUsUUFBUTtvQkFDeEIsU0FBUyxFQUFFLENBQUM7aUJBQ2IsSUFFQSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDNUIsT0FBTyxDQUNMLG9CQUFDLElBQUksSUFDSCxPQUFPLEVBQUUsUUFBUSxDQUFDLHNCQUFzQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBQyxFQUN0RixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixLQUFLLEVBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFDO3dCQUUzRCxvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsS0FBSztnQ0FDdkMsS0FBSyxFQUFFLFNBQVM7Z0NBQ2hCLFFBQVEsRUFBRSxFQUFFO2dDQUNaLFVBQVUsRUFBRSxHQUFHOzZCQUNoQixVQUdJLENBQ0YsQ0FDUixDQUFBO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxDQUNMLG9CQUFDLG9CQUFvQixJQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxXQUFXLEVBQ2pDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUNiLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FDaEIsQ0FDSCxDQUFBO1lBQ0gsQ0FBQyxDQUFDLENBQ0csQ0FDRixDQUNSLENBQUE7SUFDSCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGdCQUFnQjtRQUNkLE1BQU0sRUFBQyxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3JJLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQTtRQUViLElBQUksS0FBSyxHQUFHO1lBQ1YsUUFBUSxFQUFFLFVBQVU7WUFDcEIsTUFBTSxFQUFFLEtBQUs7WUFDYixTQUFTLEVBQUUsS0FBSztZQUNoQixVQUFVLEVBQUUsaUJBQWlCO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDakQsZUFBZSxFQUFFLE1BQU07WUFDdkIsV0FBVyxFQUFFLE1BQU07WUFDbkIsV0FBVyxFQUFFLENBQUM7WUFDZCxTQUFTLEVBQUUsR0FBRztZQUNkLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3JELENBQUE7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtZQUNiLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1FBQ2hCLENBQUM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtZQUNkLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLENBQUM7YUFBTSxJQUFJLGdCQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsK0VBQStFO2dCQUMvRSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQTtnQkFFbEgsMERBQTBEO2dCQUMxRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFBO1lBQ25ILENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUE7Z0JBQ3BDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUE7WUFDakMsQ0FBQztZQUVELEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBQ2pCLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUNyQixDQUFDO2FBQU0sSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLCtFQUErRTtnQkFDL0UsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFBO2dCQUVsSCwwREFBMEQ7Z0JBQzFELElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQTtZQUN2SCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQTtnQkFDN0IsR0FBRyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQTtZQUNqQyxDQUFDO1lBRUQsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7WUFDakIsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtRQUNuRSxDQUFDO1FBRUQsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBRTlGLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUUvQixPQUFPLENBQ0wsb0JBQUMsSUFBSSxJQUNILE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUNqQix5QkFBeUIsRUFDekIsRUFBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksUUFBUSxFQUFDLEVBQ2xHLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQ3hCLEVBQ0QsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLEVBQzFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUNoQyxLQUFLLEVBQUUsS0FBSztZQUVYLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3BCLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxJQUFJLGlCQUFpQixZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUM5RCxZQUFZO2FBQ2IsQ0FBQyxDQUNIO1lBQ0EsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO2dCQUMxQixvQkFBQyxJQUFJLElBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxFQUFDLEtBQUssRUFBRSxzQkFBc0IsRUFBQztvQkFDL0Usb0JBQUMsSUFBSSxRQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQVEsQ0FDN0Y7WUFFUixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FDckIsQ0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUU7UUFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3RCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUV2QixNQUFNLEVBQUMsUUFBUSxFQUFFLGFBQWEsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFDNUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNuQixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN4RyxNQUFNLFVBQVUsR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQUE7UUFDL0IsSUFBSSxpQkFBaUIsQ0FBQTtRQUNyQixJQUFJLE1BQU0sQ0FBQTtRQUVWLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDakQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxhQUFhLENBQUMsQ0FBQTtnQkFFekYsSUFBSSxZQUFZLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQy9DLDhDQUE4QztvQkFDOUMsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNyQyxNQUFNLEdBQUcsaUNBQWlDLENBQUE7b0JBRTFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUN6RyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sdUNBQXVDO29CQUN2QyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDL0UsTUFBTSxHQUFHLGNBQWMsQ0FBQTtnQkFDekIsQ0FBQztnQkFFRCxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQTtZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sOEJBQThCO2dCQUM5QixNQUFNLEdBQUcsZUFBZSxDQUFBO2dCQUN4QixpQkFBaUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN6RyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixzREFBc0Q7WUFDdEQsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFO3dCQUMxRCxNQUFNLEVBQUUsd0JBQXdCO3dCQUNoQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEtBQUs7cUJBQ2hDLENBQUMsQ0FBQTtnQkFDRixPQUFNO1lBQ1IsQ0FBQztZQUVELElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLG1CQUFtQjtnQkFDbkIsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO2dCQUN2RCxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQTtZQUMvQixDQUFDO1lBRUQsSUFBSSxRQUFRLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sR0FBRyxZQUFZLENBQUE7Z0JBQ3JCLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO1lBQzNELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsdUJBQXVCLENBQUE7Z0JBQ2hDLGlCQUFpQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDcEMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlELDZGQUE2RjtRQUMvRixDQUFDO2FBQU0sSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUE7UUFDN0MsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLGlCQUFpQixJQUFJLGNBQWMsQ0FBQTtRQUNuRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxRCxNQUFNLEVBQUUsTUFBTSxJQUFJLGFBQWE7Z0JBQy9CLFFBQVE7Z0JBQ1IsV0FBVyxFQUFFLFlBQVksQ0FBQyxLQUFLO2dCQUMvQixrQkFBa0IsRUFBRSxjQUFjLENBQUMsTUFBTTtnQkFDekMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLE1BQU07YUFDbEMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUUzQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2Isd0NBQXdDO1lBQ3hDLFFBQVEsQ0FBQztnQkFDUCxLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsT0FBTyxFQUFFLFVBQVU7YUFDcEIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QixJQUFJLFdBQVcsQ0FBQTtZQUVmLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNyRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3hDLENBQUM7WUFFRCxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNuQyxDQUFDO1FBRUQsSUFBSSxTQUFTLElBQUksUUFBUSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtRQUNuQyxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFBO1FBQ2pELENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRTtRQUM3QyxJQUFJLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDN0QsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLEtBQUssRUFBQyxDQUFBO1FBRTVCLElBQUksT0FBTyxhQUFhLElBQUksVUFBVSxFQUFFLENBQUM7WUFDdkMsdUNBQXVDO1lBQ3ZDLGFBQWEsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ3JCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO2dCQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3BELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxNQUFNO1FBQ2xCLE1BQU0sRUFBQyxhQUFhLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFFakMsSUFBSSxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMxQyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxDQUFBO1lBRXBGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsWUFBWSxFQUFFLENBQUMsQ0FBQTtZQUM3RSxDQUFDO1lBRUQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUMvQixNQUFNLEVBQUMsYUFBYSxFQUFFLGFBQWEsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFBO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekMsTUFBTSxZQUFZLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsQ0FBQTtRQUMvRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDckYsSUFBSSxLQUFLLENBQUE7UUFDVCxJQUFJLFdBQVcsQ0FBQTtRQUVmLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLCtCQUErQixFQUFFLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUMzRixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLEVBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQTtRQUNwRixDQUFDO1FBRUQsT0FBTyxDQUNMLG9CQUFDLElBQUksSUFDSCxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRTtnQkFDOUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUk7Z0JBQzlCLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSztnQkFDaEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2FBQ3BCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDeEUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxFQUMxRixNQUFNLEVBQUMscUJBQXFCO1lBRTNCLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7Z0JBQzFDLG9CQUFDLElBQUksSUFDSCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQyxFQUM1RCxNQUFNLEVBQUMseUJBQXlCLEdBQ2hDO1lBRUgsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7Z0JBQ3pDLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7b0JBQzlHLG9CQUFDLGVBQWUsSUFDZCxJQUFJLEVBQUUsSUFBSSxFQUNWLE1BQU0sRUFBQyxhQUFhLEdBQ3BCLENBQ0c7WUFFUixDQUFDLEdBQUcsRUFBRTtnQkFDTCxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQiw0Q0FBNEM7b0JBQzVDLFdBQVcsR0FBRyxhQUFhLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO2dCQUNqRyxDQUFDO3FCQUFNLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RELFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUE7Z0JBQ3ZDLENBQUM7cUJBQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzFCLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ2hDLENBQUM7cUJBQU0sSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ3BELFdBQVcsR0FBRyxvQkFBQyxVQUFVLElBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUMsR0FBSSxDQUFBO2dCQUNwRSxDQUFDO3FCQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNwRCxXQUFXLEdBQUcsNkJBQUssdUJBQXVCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBQyxHQUFJLENBQUE7Z0JBQ2hGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixXQUFXLEdBQUcsQ0FDWixvQkFBQyxJQUFJLElBQ0gsS0FBSyxFQUFFLEtBQUssRUFDWixNQUFNLEVBQUMsMEJBQTBCLElBRWhDLE1BQU0sQ0FBQyxJQUFJLENBQ1AsQ0FDUixDQUFBO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxDQUNMO29CQUNFLG9CQUFDLElBQUksSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFDLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUNqRSxXQUFXLENBQ1A7b0JBQ04sTUFBTSxDQUFDLEtBQUs7d0JBQ1gsb0JBQUMsSUFBSSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUNySCxNQUFNLENBQUMsS0FBSyxDQUNSLENBRVIsQ0FDSixDQUFBO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FDQyxDQUNSLENBQUE7SUFDSCxDQUFDLENBQUE7SUFFRCwrQkFBK0I7SUFDL0IsS0FBSyxDQUFDLHlCQUF5QjtRQUM3QixNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO1lBQzVCLENBQUM7WUFFRCxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2xFLE1BQU0sRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNqRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV0RixJQUFJLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQTtRQUN4QyxDQUFDO0lBQ0gsQ0FBQzs7QUFHSCxNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUUzRCxlQUFlLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbnl0aGluZ0RpZmZlcmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL2RpZmYtdXRpbHNcIlxuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi4vY29uZmlnLmpzXCJcbmltcG9ydCB7ZGlnLGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHtEaW1lbnNpb25zLFBsYXRmb3JtLFByZXNzYWJsZSxUZXh0SW5wdXQsVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgUmVhY3Qse2NyZWF0ZVJlZixtZW1vLHVzZUVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRm9udEF3ZXNvbWVJY29uIGZyb20gXCJyZWFjdC1uYXRpdmUtdmVjdG9yLWljb25zL0ZvbnRBd2Vzb21lXCJcbmltcG9ydCBpZEZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvaWQtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgbmFtZUZvckNvbXBvbmVudCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC9pbnB1dHMvbmFtZS1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBUZXh0IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL3V0aWxzL3RleHRcIlxuaW1wb3J0IE9wdGlvbiBmcm9tIFwiLi9vcHRpb25cIlxuaW1wb3J0IE9wdGlvbkdyb3VwIGZyb20gXCIuL29wdGlvbi1ncm91cFwiXG5pbXBvcnQgUGFnaW5hdGlvblBhZ2VCdXR0b24gZnJvbSBcIi4vcGFnaW5hdGlvbi1wYWdlLWJ1dHRvblwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBwcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVuZGVySHRtbCBmcm9tIFwicmVhY3QtbmF0aXZlLXJlbmRlci1odG1sXCJcbmltcG9ydCB7UG9ydGFsfSBmcm9tIFwiY29uam9pbnRtZW50XCJcbmltcG9ydCB1c2VFdmVudExpc3RlbmVyIGZyb20gXCJ5YS11c2UtZXZlbnQtbGlzdGVuZXJcIlxuaW1wb3J0IHVzZVByZXNzT3V0c2lkZSBmcm9tIFwib3V0c2lkZS1leWUvYnVpbGQvdXNlLXByZXNzLW91dHNpZGVcIlxuXG5jb25zdCBzdHlsZXMgPSB7fVxuY29uc3QgZGF0YVNldHMgPSB7fVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RUb2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpY29uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB2YWx1ZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFt0ZXh0XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjb250ZW50XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtjdXJyZW50Q29udGVudF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc2FibGVkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtodG1sXVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtyaWdodF1cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGlvbiBwcm9wcyBhcmUgYWxsb3dlZDsgSGF5YVNlbGVjdCBvbmx5IHVzZXMgdGhlIGtleXMgYWJvdmUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gb3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3RhbENvdW50XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwYWdlU2l6ZV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthdHRyaWJ1dGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV1cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbZGVmYXVsdFRvZ2dsZWRdXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IFtkZWZhdWx0VmFsdWVdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbZGVmYXVsdFZhbHVlc11cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IFtkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z11cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbaWRdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW21vZGVsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbbXVsdGlwbGVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW25vT3B0aW9uc1RleHRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkJsdXJdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkNoYW5nZV1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oQXJyYXk8c3RyaW5nfG51bWJlcj49KTogdm9pZH0gW29uQ2hhbmdlVmFsdWVdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKGltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50PSk6IHZvaWR9IFtvbkZvY3VzXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbih7b3B0aW9uczogQXJyYXl9KTogdm9pZH0gW29uT3B0aW9uc0Nsb3NlZF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe29wdGlvbnM6IEFycmF5fSk6IHZvaWR9IFtvbk9wdGlvbnNMb2FkZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG9iamVjdCk6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW29wdGlvbkNvbnRlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fGZ1bmN0aW9uKCk6IChBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdCl9IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNBYnNvbHV0ZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29wdGlvbnNQb3J0YWxdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW29wdGlvbnNXaWR0aF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbcGxhY2Vob2xkZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlbGVjdGVkQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2VhcmNoXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFtzdHlsZXNdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3RvZ2dsZWRdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RUb2dnbGVPcHRpb24+fSBbdG9nZ2xlT3B0aW9uc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50XVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gW3ZhbHVlc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RTdGF0ZVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gY3VycmVudE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fG51bGx9IHNlbGVjdENvbnRhaW5lckxheW91dFxuICogQHByb3BlcnR5IHtvYmplY3R8bnVsbH0gZW5kT2ZTZWxlY3RMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IGhlaWdodFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9IGxvYWRlZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2FkT3B0aW9uc1JlcXVlc3RJZFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBhZ2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFnZUlucHV0Rm9jdXNlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhZ2VJbnB1dFZhbHVlXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBwYWdlU2l6ZVxuICogQHByb3BlcnR5IHtib29sZWFufSBvcGVuZWRcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fG51bGx9IG9wdGlvbnNDb250YWluZXJMYXlvdXRcbiAqIEBwcm9wZXJ0eSB7XCJhYm92ZVwifFwiYmVsb3dcInx1bmRlZmluZWR9IG9wdGlvbnNQbGFjZW1lbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gb3B0aW9uc1RvcFxuICogQHByb3BlcnR5IHtcImhpZGRlblwifFwidmlzaWJsZVwifHVuZGVmaW5lZH0gb3B0aW9uc1Zpc2liaWxpdHlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZHxudWxsfSBvcHRpb25zV2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IHNjcm9sbExlZnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IHNjcm9sbFRvcFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gdG90YWxDb3VudFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gdG9nZ2xlZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdExheW91dFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3BdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xlZnRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3dpZHRoXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtoZWlnaHRdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uUmVuZGVyQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBpY29uXG4gKiBAcHJvcGVydHkge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RUb2dnbGVPcHRpb258dW5kZWZpbmVkfSB0b2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gdG9nZ2xlVmFsdWVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPbkNoYW5nZVBheWxvYWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbmVkXG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8dW5kZWZpbmVkfSBvcHRpb25zUGxhY2VtZW50XG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RTdGF0ZX0gc3RhdGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3R5bGVcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzLCBIYXlhU2VsZWN0U3RhdGU+fSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUgPSAoY29tcG9uZW50KSA9PiB7XG4gIGxldCBuYW1lID0gbmFtZUZvckNvbXBvbmVudChjb21wb25lbnQpXG5cbiAgY29uc3QgY3VycmVudE9wdGlvbnMgPSBjb21wb25lbnQuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICBjb25zdCB2YWx1ZXMgPSBjb21wb25lbnQuZ2V0VmFsdWVzKClcblxuICBjb25zdCBoYXNNdWx0aXBsZVZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiB2YWx1ZXMubGVuZ3RoID4gMFxuXG4gIGlmIChjb21wb25lbnQucHJvcHMubXVsdGlwbGUgJiYgbmFtZSAmJiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID4gMCB8fCBoYXNNdWx0aXBsZVZhbHVlcykpIHtcbiAgICBuYW1lICs9IFwiW11cIlxuICB9XG5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqIEBhdWdtZW50cyB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzLCBIYXlhU2VsZWN0U3RhdGU+fSAqL1xuY2xhc3MgSGF5YVNlbGVjdCBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgIG5vT3B0aW9uc1RleHQ6IG51bGwsXG4gICAgb25CbHVyOiBudWxsLFxuICAgIG9uRm9jdXM6IG51bGwsXG4gICAgb3B0aW9uc0Fic29sdXRlOiB0cnVlLFxuICAgIG9wdGlvbnNQb3J0YWw6IHRydWUsXG4gICAgb3B0aW9uc1dpZHRoOiBudWxsLFxuICAgIHNlYXJjaDogZmFsc2UsXG4gICAgdHJhbnNwYXJlbnQ6IGZhbHNlXG4gIH1cblxuICBzdGF0aWMgcHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICAgIGF0dHJpYnV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdFRvZ2dsZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgZGVmYXVsdFZhbHVlczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uczogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlkOiBQcm9wVHlwZXMubm9kZSxcbiAgICBtb2RlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG5vT3B0aW9uc1RleHQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uT3B0aW9uc0Nsb3NlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25PcHRpb25zTG9hZGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25Db250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjdXJyZW50Q29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgaHRtbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgcmlnaHQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgICB0ZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkXG4gICAgICB9KSksXG4gICAgICBQcm9wVHlwZXMuZnVuY1xuICAgIF0pLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc0Fic29sdXRlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNQb3J0YWw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc1dpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b2dnbGVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICB9KSksXG4gICAgdHJhbnNwYXJlbnQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmFsdWVzOiBQcm9wVHlwZXMuYXJyYXlcbiAgfSlcblxuICBjYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICBlbmRPZlNlbGVjdFJlZiA9IGNyZWF0ZVJlZigpXG4gIGxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkID0gMFxuICBvcHRpb25zQ29udGFpbmVyUmVmID0gY3JlYXRlUmVmKClcbiAgcGFnZUlucHV0UmVmID0gY3JlYXRlUmVmKClcbiAgc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICBzZWFyY2hUZXh0SW5wdXRSZWYgPSBjcmVhdGVSZWYoKVxuICBzZWxlY3RDb250YWluZXJSZWYgPSBjcmVhdGVSZWYoKVxuICB0ID0gQ29uZmlnLmN1cnJlbnQoKS5nZXRVc2VUcmFuc2xhdGUoKSgpLnRcbiAgd2luZG93V2lkdGggPSBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS53aWR0aFxuICB3aW5kb3dIZWlnaHQgPSBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS5oZWlnaHRcbiAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0U3RhdGV9ICovXG4gIHN0YXRlID0ge1xuICAgIGN1cnJlbnRPcHRpb25zOiB0aGlzLmRlZmF1bHRDdXJyZW50T3B0aW9ucygpLFxuICAgIHNlbGVjdENvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICBlbmRPZlNlbGVjdExheW91dDogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgbG9hZGVkT3B0aW9uczogdGhpcy5kZWZhdWx0TG9hZGVkT3B0aW9ucygpLFxuICAgIGxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZDogMCxcbiAgICBsb2FkT3B0aW9uc1JlcXVlc3RJZDogMCxcbiAgICBwYWdlOiAxLFxuICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICBvcGVuZWQ6IGZhbHNlLFxuICAgIG9wdGlvbnNDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgb3B0aW9uc1BsYWNlbWVudDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNUb3A6IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zVmlzaWJpbGl0eTogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNXaWR0aDogdW5kZWZpbmVkLFxuICAgIHNjcm9sbExlZnQ6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGwsXG4gICAgc2Nyb2xsVG9wOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGwsXG4gICAgdG90YWxDb3VudDogbnVsbCxcbiAgICB0b2dnbGVkOiB0aGlzLmRlZmF1bHRUb2dnbGVkKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNEZWJ1Z0VuYWJsZWQgPSAoKSA9PiBCb29sZWFuKHRoaXMucC5kZWJ1ZylcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtkZXRhaWxzXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRlYnVnTG9nID0gKGZ1bmN0aW9uTmFtZSwgZGV0YWlscyA9IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghdGhpcy5pc0RlYnVnRW5hYmxlZCgpKSByZXR1cm5cblxuICAgIGNvbnN0IGJhc2VEZXRhaWxzID0ge1xuICAgICAgaWQ6IHRoaXMucC5pZCxcbiAgICAgIG5hbWU6IHRoaXMucC5uYW1lXG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkRGV0YWlscyA9IGRldGFpbHMgPyBPYmplY3QuYXNzaWduKHt9LCBiYXNlRGV0YWlscywgZGV0YWlscykgOiBiYXNlRGV0YWlsc1xuXG4gICAgaWYgKG1lcmdlZERldGFpbHMgJiYgT2JqZWN0LmtleXMobWVyZ2VkRGV0YWlscykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coYFtIYXlhU2VsZWN0XSAke2Z1bmN0aW9uTmFtZX1gLCBtZXJnZWREZXRhaWxzKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0hheWFTZWxlY3RdICR7ZnVuY3Rpb25OYW1lfWApXG4gICAgfVxuICB9XG5cbiAgc2V0dXAoKSB7XG4gICAgY29uc3Qge3R9ID0gQ29uZmlnLmN1cnJlbnQoKS5nZXRVc2VUcmFuc2xhdGUoKSgpXG5cbiAgICB0aGlzLnQgPSB0XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykpIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wcm9wcy52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGF5YVNlbGVjdDogVW5kZWZpbmVkIGdpdmVuIGFzIHZhbHVlXCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3dUYXJnZXQgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIHR5cGVvZiB3aW5kb3cgIT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGxcblxuICAgIHVzZUV2ZW50TGlzdGVuZXIoRGltZW5zaW9ucywgXCJjaGFuZ2VcIiwgdGhpcy50dC5vbkRpbWVuc2lvbnNDaGFuZ2UpXG4gICAgdXNlUHJlc3NPdXRzaWRlKHRoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZiwgdGhpcy50dC5vblByZXNzT3V0c2lkZU9wdGlvbnMpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwicmVzaXplXCIsIHRoaXMudHQub25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQpXG4gICAgdXNlRXZlbnRMaXN0ZW5lcih3aW5kb3dUYXJnZXQsIFwic2Nyb2xsXCIsIHRoaXMudHQub25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldHVwXCIsIHtcbiAgICAgIGhhc0NvbnRyb2xsZWRWYWx1ZXM6IFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyxcbiAgICAgIGhhc0NvbnRyb2xsZWRUb2dnbGVkOiBcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzLFxuICAgICAgbXVsdGlwbGU6IHRoaXMucC5tdWx0aXBsZSxcbiAgICAgIG9wdGlvbnNUeXBlOiBBcnJheS5pc0FycmF5KHRoaXMucHJvcHMub3B0aW9ucykgPyBcImFycmF5XCIgOiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zXG4gICAgfSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50dC5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy50dC5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4sIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0XSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50T3B0aW9uSWRzID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMudmFsdWVzKSAmJiBhbnl0aGluZ0RpZmZlcmVudChjdXJyZW50T3B0aW9uSWRzLCB0aGlzLnByb3BzLnZhbHVlcykgJiYgdHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50RnJvbUdpdmVuVmFsdWVzKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wcm9wcy52YWx1ZXNdKVxuICB9XG5cbiAgdHJhbnNsYXRlKG1zZ0lELCBvcHRpb25zKSB7XG4gICAgaWYgKG1zZ0lELnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICByZXR1cm4gdGhpcy50KGBoYXlhX3NlbGVjdCR7bXNnSUR9YCwgb3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudChtc2dJRCwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICBkZWZhdWx0Q3VycmVudE9wdGlvbnMoKSB7XG4gICAgY29uc3Qge2RlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgdmFsdWVzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zKSkgcmV0dXJuIFtdXG4gICAgY29uc3QgY29udHJvbGxlZFZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFtdXG5cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKHt2YWx1ZX0pID0+XG4gICAgICAoZGVmYXVsdFZhbHVlICYmIHZhbHVlID09IGRlZmF1bHRWYWx1ZSkgfHxcbiAgICAgICAgKGRlZmF1bHRWYWx1ZXMgJiYgZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHx8XG4gICAgICAgIGNvbnRyb2xsZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnx1bmRlZmluZWR9ICovXG4gIGRlZmF1bHRMb2FkZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBvcHRpb25zOiAke3R5cGVvZiBvcHRpb25zfWApXG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcn0gKi9cbiAgZ2V0QWN0aXZlUGFnZSA9ICgpID0+IHRoaXMucy5wYWdlIHx8IDFcblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtIYXlhU2VsZWN0T3B0aW9uc1Jlc3VsdH1cbiAgICovXG4gIHBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4ge29wdGlvbnM6IHJlc3VsdH1cblxuICAgIGlmIChyZXN1bHQgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQub3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHJlc3VsdC5vcHRpb25zLFxuICAgICAgICB0b3RhbENvdW50OiByZXN1bHQudG90YWxDb3VudCxcbiAgICAgICAgcGFnZTogcmVzdWx0LnBhZ2UsXG4gICAgICAgIHBhZ2VTaXplOiByZXN1bHQucGFnZVNpemVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3B0aW9ucyByZXN1bHQ6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gcGFyYW1zLm9wdGlvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMucGFnZVNpemVdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcGFyYW1zLnRvdGFsQ291bnRdXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH1cbiAgICovXG4gIHJlc29sdmVQYWdlU2l6ZSh7b3B0aW9ucywgcGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KSB7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgJiYgcGFnZVNpemUgPiAwKSByZXR1cm4gcGFnZVNpemVcblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwICYmIHBhZ2UgIT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMucy5wYWdlU2l6ZVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmxlbmd0aFxuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodGhpcy5zLnBhZ2VTaXplKSAmJiB0aGlzLnMucGFnZVNpemUgPiAwID8gdGhpcy5zLnBhZ2VTaXplIDogbnVsbFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gKi9cbiAgZGVmYXVsdFRvZ2dsZWQoKSB7XG4gICAgcmV0dXJuIChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSA/IHRoaXMucC50b2dnbGVkIDogdGhpcy5wcm9wcy5kZWZhdWx0VG9nZ2xlZCB8fCB7fVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIHBvcnRhbE5hbWUoKSB7XG4gICAgcmV0dXJuIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgfHwgYGhheWEtc2VsZWN0LSR7U3RyaW5nKGlkRm9yQ29tcG9uZW50KHRoaXMpKX1gXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSAqL1xuICBnZXRUb2dnbGVkID0gKCkgPT4gKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpID8gdGhpcy5wLnRvZ2dsZWQgOiB0aGlzLnMudG9nZ2xlZFxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj59ICovXG4gIGdldFZhbHVlcyA9ICgpID0+IChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpXG4gICAgPyAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSA/IHRoaXMucC52YWx1ZXMgOiBbXSlcbiAgICA6IChBcnJheS5pc0FycmF5KHRoaXMucy5jdXJyZW50T3B0aW9ucykgPyB0aGlzLnMuY3VycmVudE9wdGlvbnMgOiBbXSkubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbnx7dmFsdWU6IHN0cmluZ3xudW1iZXJ9Pn0gKi9cbiAgZ2V0Q3VycmVudE9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0eXBlb2YgdGhpcy5wcm9wcy52YWx1ZXMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykgJiYgdGhpcy5wLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBbXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLm9wdGlvbnMpICYmIEFycmF5LmlzQXJyYXkodGhpcy5wLnZhbHVlcykpIHtcbiAgICAgICAgLyoqIEB0eXBlIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gKi9cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMucC52YWx1ZXMpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLnAub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmIChvcHRpb24pIHJlc3VsdC5wdXNoKG9wdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zLmxvYWRlZE9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICAvKiogQHR5cGUge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wLnZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnMubG9hZGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSkgfHxcbiAgICAgICAgICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSlcblxuICAgICAgICAgIGlmIChvcHRpb24pIHJlc3VsdC5wdXNoKG9wdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucHJvcHMub3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gT3B0aW9ucyBoYXZlbid0IGJlZW4gbG9hZGVkIHlldC5cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoe3ZhbHVlfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucy5jdXJyZW50T3B0aW9uc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gKi9cbiAgZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpIHtcbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSA/IHRoaXMucC52YWx1ZXMgOiBbXVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG5cbiAgICBpZiAoIWN1cnJlbnRPcHRpb25zKSByZXR1cm4gW11cblxuICAgIHJldHVybiBjdXJyZW50T3B0aW9uc1xuICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24/LnZhbHVlKVxuICAgICAgLmZpbHRlcigodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSAhPSBcInVuZGVmaW5lZFwiKVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMsIG1vZGVsLCBvcHRpb25zfSA9IHRoaXMucHJvcHNcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjb21wb25lbnREaWRNb3VudFwiLCB7XG4gICAgICBoYXNBdHRyaWJ1dGVNb2RlbDogQm9vbGVhbihhdHRyaWJ1dGUgJiYgbW9kZWwpLFxuICAgICAgaGFzRGVmYXVsdFZhbHVlczogQm9vbGVhbihkZWZhdWx0VmFsdWUgfHwgZGVmYXVsdFZhbHVlcyB8fCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpLFxuICAgICAgb3B0aW9uc1R5cGU6IHR5cGVvZiBvcHRpb25zXG4gICAgfSlcblxuICAgIGlmICgoKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucykgfHwgKGF0dHJpYnV0ZSAmJiBtb2RlbCkpICYmIHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5sb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9XG5cbiAgICBpZiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykge1xuICAgICAgY29uc3QgbmV3VG9nZ2xlZCA9IHRoaXMucC50b2dnbGVkXG5cbiAgICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnN0YXRlLnRvZ2dsZWQsIG5ld1RvZ2dsZWQpKSB7XG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld1N0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY29tcG9uZW50RGlkVXBkYXRlXCIsIHtzeW5jaW5nS2V5czogT2JqZWN0LmtleXMobmV3U3RhdGUpfSlcbiAgICAgIHRoaXMucy50b2dnbGVkID0gbmV3U3RhdGUudG9nZ2xlZFxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSAqL1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2VuZE9mU2VsZWN0UmVmfSA9IHRoaXMudHRcbiAgICBjb25zdCB7dHJhbnNwYXJlbnR9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NsYXNzTmFtZSwgcGxhY2Vob2xkZXIsIHRvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpID8gdGhpcy5wcm9wcy52YWx1ZXMgOiBbXVxuICAgIGNvbnN0IHtvcGVuZWQsIG9wdGlvbnNQbGFjZW1lbnR9ID0gdGhpcy5zXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcbiAgICBjb25zdCBpZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG5cbiAgICBjb25zdCBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbCA9IHsuLi50aGlzLnN0eWxpbmdGb3IoXCJzZWxlY3RDb250YWluZXJcIiwge1xuICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogXCIjZmZmXCIsXG4gICAgICBib3JkZXJDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiM5OTlcIixcbiAgICAgIGJvcmRlclJhZGl1czogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiA0LFxuICAgICAgYm9yZGVyV2lkdGg6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogMSxcbiAgICAgIGNvbG9yOiBcIiMwMDBcIixcbiAgICAgIGN1cnNvcjogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwicG9pbnRlclwiIDogdW5kZWZpbmVkLFxuICAgICAgcGFkZGluZ1RvcDogNSxcbiAgICAgIHBhZGRpbmdCb3R0b206IDUsXG4gICAgICBwYWRkaW5nTGVmdDogNVxuICAgIH0sIFt0cmFuc3BhcmVudF0pfVxuXG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgLy8gUHJldmVudCBzZWxlY3QgZnJvbSBjaGFuZ2luZyBzaXplIG9uY2UgdGhlIGNvbnRlbnQgaXMgcmVwbGFjZWQgd2l0aCBzZWFyY2ggdGV4dCBvbmNlIG9wZW5lZFxuICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuaGVpZ2h0ID0gdGhpcy5zLmhlaWdodFxuXG4gICAgICBjb25zdCBiYXNlQm9yZGVyUmFkaXVzID0gc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG5cbiAgICAgIGlmIChvcHRpb25zUGxhY2VtZW50ID09IFwiYWJvdmVcIikge1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BSaWdodFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG5cbiAgICAgICAgZGVsZXRlIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zUGxhY2VtZW50ID09IFwiYmVsb3dcIikge1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BMZWZ0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJUb3BSaWdodFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMgPSAwXG5cbiAgICAgICAgZGVsZXRlIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclJhZGl1c1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicm9vdFZpZXdEYXRhU2V0XCIsIHtcbiAgICAgICAgICBhcHBsaWVkUmVxdWVzdElkOiB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkLFxuICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgICAgY29tcG9uZW50OiBcImhheWEtc2VsZWN0XCIsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgb3BlbmVkLFxuICAgICAgICAgIG9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICAgICAgcmVxdWVzdElkOiB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQsXG4gICAgICAgICAgdG9nZ2xlczogQm9vbGVhbih0b2dnbGVPcHRpb25zKVxuICAgICAgICB9LCBbdGhpcy5zLmxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZCwgY2xhc3NOYW1lLCBpZCwgb3BlbmVkLCBvcHRpb25zUGxhY2VtZW50LCB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQsIEJvb2xlYW4odG9nZ2xlT3B0aW9ucyldKX1cbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1haW5cIil9XG4gICAgICA+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBkYXRhU2V0PXt0aGlzLnNlbGVjdENvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJzZWxlY3QtY29udGFpbmVyXCJ9fVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uU2VsZWN0Q29udGFpbmVyTGF5b3V0fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25TZWxlY3RDbGlja2VkfVxuICAgICAgICAgIHJlZj17dGhpcy50dC5zZWxlY3RDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3R5bGU9e3NlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsfVxuICAgICAgICA+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY3VycmVudFNlbGVjdGVkRGF0YVNldCB8fD0ge2NsYXNzOiBcImN1cnJlbnQtc2VsZWN0ZWRcIn19XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudFNlbGVjdGVkXCIsIHRoaXMuY3VycmVudFNlbGVjdGVkU3R5bGUgfHw9IHtmbGV4OiAxLCBmbGV4V3JhcDogXCJ3cmFwXCIsIG92ZXJmbG93OiBcImhpZGRlblwifSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wZW5lZCAmJlxuICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgZGF0YVNldD17dGhpcy5zZWFyY2hUZXh0SW5wdXREYXRhU2V0IHx8PSB7Y2xhc3M6IFwic2VhcmNoLXRleHQtaW5wdXRcIn19XG4gICAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uQ2hhbmdlU2VhcmNoVGV4dH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy50cmFuc2xhdGUoXCIuc2VhcmNoX2RvdF9kb3RfZG90XCIpfVxuICAgICAgICAgICAgICAgIHJlZj17dGhpcy50dC5zZWFyY2hUZXh0SW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcInNlYXJjaFRleHRJbnB1dFwiLCB0aGlzLnNlYXJjaFRleHRJbnB1dFN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgICAgICAgICAgICAgIG91dGxpbmU6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcIm5vbmVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3RoaXMuc2VhcmNoVGV4dFZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeyFvcGVuZWQgJiZcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIDxUZXh0IG51bWJlck9mTGluZXM9ezF9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub3RoaW5nU2VsZWN0ZWRcIiwgdGhpcy5ub3RoaW5nU2VsZWN0ZWRTdHlsZSB8fD0ge2NvbG9yOiBcImdyZXlcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyIHx8IHRoaXMudHJhbnNsYXRlKFwiLm5vdGhpbmdfc2VsZWN0ZWRcIil9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5wLm11bHRpcGxlID8gdmFsdWVzIDogW3ZhbHVlc1swXV0pLm1hcCgodmFsdWUpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGN1cnJlbnQtdmFsdWUtJHt2YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY3VycmVudE9wdGlvbkRhdGFTZXQgfHw9IHtjbGFzczogXCJjdXJyZW50LW9wdGlvblwifX1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW50T3B0aW9uLmtleSB8fCBgY3VycmVudC12YWx1ZS0ke2N1cnJlbnRPcHRpb24udmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25cIiwge21hcmdpblJpZ2h0OiA2fSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgPT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFwiLCB0aGlzLmN1cnJlbnRPcHRpb25Hcm91cFN0eWxlIHx8PSB7Zm9udFdlaWdodDogXCJib2xkXCJ9KX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvbkdyb3VwVGV4dFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgIT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RpZ2coY3VycmVudE9wdGlvbiwgXCJ2YWx1ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByZXNlbnRPcHRpb24oY3VycmVudE9wdGlvbiwgXCJjdXJyZW50XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNoZXZyb25Db250YWluZXJEYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY2hldnJvbi1jb250YWluZXJcIn19XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY2hldnJvbkNvbnRhaW5lclwiLCB0aGlzLmNoZXZyb25Db250YWluZXJTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiA4XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIG5hbWU9e29wZW5lZCA/IFwiY2hldnJvbi11cFwiIDogXCJjaGV2cm9uLWRvd25cIn0gc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25cIiwgdGhpcy5jaGV2cm9uU3R5bGUgfHw9IHtmb250U2l6ZTogMTJ9KX0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuZW5kT2ZTZWxlY3REYXRhU2V0IHx8PSB7Y2xhc3M6IFwiZW5kLW9mLXNlbGVjdFwifX1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkVuZE9mU2VsZWN0TGF5b3V0fVxuICAgICAgICAgIHJlZj17ZW5kT2ZTZWxlY3RSZWZ9XG4gICAgICAgIC8+XG4gICAgICAgIHtvcGVuZWQgJiYgdGhpcy5wLm9wdGlvbnNQb3J0YWwgJiZcbiAgICAgICAgICA8UG9ydGFsIG5hbWU9e3RoaXMucG9ydGFsTmFtZSgpfT5cbiAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb250YWluZXIoKX1cbiAgICAgICAgICA8L1BvcnRhbD5cbiAgICAgICAgfVxuICAgICAgICB7b3BlbmVkICYmICF0aGlzLnAub3B0aW9uc1BvcnRhbCAmJlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nfG51bWJlcj58c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9ICovXG4gIGRlZmF1bHRWYWx1ZXMgKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGUsIGRlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlcywgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zLCBtb2RlbH0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSByZXR1cm4gZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgIGlmIChkZWZhdWx0VmFsdWVzKSByZXR1cm4gZGVmYXVsdFZhbHVlc1xuXG4gICAgaWYgKGF0dHJpYnV0ZSAmJiBtb2RlbCkge1xuICAgICAgaWYgKCEoYXR0cmlidXRlIGluIG1vZGVsKSkgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGF0dHJpYnV0ZSBvbiAke21vZGVsLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX06ICR7YXR0cmlidXRlfWApXG5cbiAgICAgIHJldHVybiBtb2RlbFthdHRyaWJ1dGVdKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59ICovXG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIGxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5kZWZhdWx0VmFsdWVzKClcblxuICAgIGlmICghZGVmYXVsdFZhbHVlcykgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrXCIsIHtkZWZhdWx0VmFsdWVzfSlcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvcHMub3B0aW9ucyh7XG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5nZXRTZWFyY2hUZXh0KCksXG4gICAgICBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSxcbiAgICAgIHZhbHVlczogZGVmYXVsdFZhbHVlc1xuICAgIH0pXG5cbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjay5yZXN1bHRcIiwge2xvYWRlZE9wdGlvbnNDb3VudDogb3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuXG4gICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gdGhpcy5zdGF0ZS5jdXJyZW50T3B0aW9ucy5jb25jYXQob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3twYWdlPzogbnVtYmVyfX0gW3BhcmFtc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBsb2FkT3B0aW9ucyA9IGFzeW5jICh7cGFnZX0gPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5nZXRTZWFyY2hUZXh0KClcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWRcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSByZXF1ZXN0SWRcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnNcIiwge1xuICAgICAgcGFnZSxcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBcImFycmF5XCIgOiB0eXBlb2Ygb3B0aW9uc1xuICAgIH0pXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZClcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ZWRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHBhZ2UpID8gcGFnZSA6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7c2VhcmNoVmFsdWUsIHBhZ2U6IHJlcXVlc3RlZFBhZ2V9KVxuICAgIGNvbnN0IHtvcHRpb25zOiBsb2FkZWRPcHRpb25zLCBwYWdlOiByZXN1bHRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0gPSB0aGlzLnBhcnNlT3B0aW9uc1Jlc3VsdChyZXN1bHQpXG5cbiAgICBpZiAocmVxdWVzdElkICE9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9ucy5pZ25vcmVkX3N0YWxlX3Jlc3VsdFwiLCB7XG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQ6IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQsXG4gICAgICAgIHJlcXVlc3RlZFBhZ2UsXG4gICAgICAgIHNlYXJjaFZhbHVlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocmVzdWx0UGFnZSkgPyByZXN1bHRQYWdlIDogcmVxdWVzdGVkUGFnZVxuICAgIGNvbnN0IHJlc29sdmVkUGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZTogcmVzb2x2ZWRQYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBOdW1iZXIuaXNGaW5pdGUocmVzb2x2ZWRQYWdlU2l6ZSkgJiYgcmVzb2x2ZWRQYWdlU2l6ZSA+IDBcbiAgICAgID8gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyByZXNvbHZlZFBhZ2VTaXplKVxuICAgICAgOiBudWxsXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGxvYWRlZE9wdGlvbnMsXG4gICAgICBsb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIHBhZ2U6IHJlc29sdmVkUGFnZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcocmVzb2x2ZWRQYWdlKSxcbiAgICAgIHBhZ2VTaXplOiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyByZXNvbHZlZFBhZ2VTaXplIDogbnVsbCxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSwgKCkgPT4gdGhpcy5wcm9wcy5vbk9wdGlvbnNMb2FkZWQ/Lih7b3B0aW9uczogbG9hZGVkT3B0aW9uc30pKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zLnJlc3VsdFwiLCB7XG4gICAgICBsb2FkZWRPcHRpb25zQ291bnQ6IGxvYWRlZE9wdGlvbnM/Lmxlbmd0aCB8fCAwLFxuICAgICAgcmVzb2x2ZWRQYWdlLFxuICAgICAgcmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICAgIHRvdGFsQ291bnQ6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHRvdGFsQ291bnQgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3trZXk6IHN0cmluZywgbG9hZGVkT3B0aW9uOiBIYXlhU2VsZWN0T3B0aW9ufX1cbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIGhheWFTZWxlY3RPcHRpb24oe2tleSwgbG9hZGVkT3B0aW9ufSkge1xuICAgIGlmIChsb2FkZWRPcHRpb24udHlwZSA9PSBcImdyb3VwXCIpIHtcbiAgICAgIHJldHVybiA8T3B0aW9uR3JvdXAga2V5PXtrZXl9IG9wdGlvbj17bG9hZGVkT3B0aW9ufSAvPlxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8T3B0aW9uXG4gICAgICAgIGN1cnJlbnRPcHRpb25WYWx1ZXM9e3RoaXMuZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpfVxuICAgICAgICBpY29uPXt0aGlzLmljb25Gb3JPcHRpb24obG9hZGVkT3B0aW9uKX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIG9wdGlvbj17bG9hZGVkT3B0aW9ufVxuICAgICAgICBvbk9wdGlvbkNsaWNrZWQ9e3RoaXMudHQub25PcHRpb25DbGlja2VkfVxuICAgICAgICBwcmVzZW50T3B0aW9uPXt0aGlzLnR0LnByZXNlbnRPcHRpb259XG4gICAgICAgIHNlbGVjdGVkQmFja2dyb3VuZENvbG9yPXt0aGlzLnByb3BzLnNlbGVjdGVkQmFja2dyb3VuZENvbG9yfVxuICAgICAgICBzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yPXt0aGlzLnByb3BzLnNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoVmFsdWVdXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcmVxdWVzdElkXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGxvYWRPcHRpb25zRnJvbUFycmF5KG9wdGlvbnMsIHNlYXJjaFZhbHVlLCByZXF1ZXN0SWQgPSB0aGlzLmxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkKSB7XG4gICAgY29uc3QgbG93ZXJTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlPy50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgbG9hZGVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKCh7dGV4dH0pID0+ICFsb3dlclNlYXJjaFZhbHVlIHx8IHRleHQ/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGxvd2VyU2VhcmNoVmFsdWUpKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9uc0Zyb21BcnJheVwiLCB7XG4gICAgICByZXF1ZXN0SWQsXG4gICAgICB0b3RhbE9wdGlvbnNDb3VudDogb3B0aW9ucy5sZW5ndGgsXG4gICAgICBzZWFyY2hWYWx1ZSxcbiAgICAgIGxvYWRlZE9wdGlvbnNDb3VudDogbG9hZGVkT3B0aW9ucy5sZW5ndGhcbiAgICB9KVxuXG4gICAgdGhpcy5zLmxvYWRlZE9wdGlvbnMgPSBsb2FkZWRPcHRpb25zXG4gICAgdGhpcy5zLmxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZCA9IHJlcXVlc3RJZFxuICAgIHRoaXMucy5wYWdlID0gMVxuICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFwiMVwiXG4gICAgdGhpcy5zLnBhZ2VTaXplID0gbnVsbFxuICAgIHRoaXMucy50b3RhbENvdW50ID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e3dpbmRvdzoge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX19IGV2ZW50XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25EaW1lbnNpb25zQ2hhbmdlID0gKHt3aW5kb3d9KSA9PiB7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IHdpbmRvdy53aWR0aFxuICAgIHRoaXMud2luZG93SGVpZ2h0ID0gd2luZG93LmhlaWdodFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e25hdGl2ZUV2ZW50Pzoge2xheW91dD86IEhheWFTZWxlY3RMYXlvdXR9fX0gZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uU2VsZWN0Q29udGFpbmVyTGF5b3V0ID0gKGUpID0+IHtcbiAgICB0aGlzLnMuc2VsZWN0Q29udGFpbmVyTGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e25hdGl2ZUV2ZW50Pzoge2xheW91dD86IEhheWFTZWxlY3RMYXlvdXR9fX0gZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uRW5kT2ZTZWxlY3RMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IGVuZE9mU2VsZWN0TGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICAgIGNvbnN0IG5ld1N0YXRlID0ge2VuZE9mU2VsZWN0TGF5b3V0fVxuXG4gICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoKSB7XG4gICAgICBuZXdTdGF0ZS5vcHRpb25zV2lkdGggPSBlbmRPZlNlbGVjdExheW91dC53aWR0aFxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnMub3BlbmVkICYmIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0KSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25PcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gKGUpID0+IHtcbiAgICB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCA9IE9iamVjdC5hc3NpZ24oe30sIGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBjb25zdCB7b3BlbmVkfSA9IHRoaXMuc1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvblNlbGVjdENsaWNrZWRcIiwge29wZW5lZH0pXG5cbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICB0aGlzLmNsb3NlT3B0aW9ucygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Blbk9wdGlvbnMoKVxuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMudHQubG9hZE9wdGlvbnMsIDIwMClcblxuICAvKipcbiAgICogQHBhcmFtIHt7b3B0aW9ucz86IEFycmF5PEhheWFTZWxlY3RPcHRpb24+fX0gW3BhcmFtc11cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbG9zZU9wdGlvbnMoe29wdGlvbnN9ID0ge30pIHtcbiAgICBjb25zdCBjbG9zZWRPcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY2xvc2VPcHRpb25zXCIsIHtjbG9zZWRPcHRpb25zQ291bnQ6IGNsb3NlZE9wdGlvbnM/Lmxlbmd0aCB8fCAwfSlcbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG5cbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgIGxvYWRlZE9wdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgb3BlbmVkOiBmYWxzZSxcbiAgICAgICAgb3B0aW9uc0NvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICBwYWdlSW5wdXRWYWx1ZTogXCIxXCIsXG4gICAgICAgIHBhZ2VTaXplOiBudWxsLFxuICAgICAgICB0b3RhbENvdW50OiBudWxsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwiY2xvc2VPcHRpb25zLmRvbmVcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZCwgb3B0aW9uc1Zpc2liaWxpdHk6IHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eX0pXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25PcHRpb25zQ2xvc2VkKSB7XG4gICAgICB0aGlzLnByb3BzLm9uT3B0aW9uc0Nsb3NlZCh7b3B0aW9uczogY2xvc2VkT3B0aW9uc30pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucC5vbkJsdXIpIHRoaXMucC5vbkJsdXIoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIGdldFNlYXJjaFRleHQgPSAoKSA9PiB0aGlzLnNlYXJjaFRleHRWYWx1ZSB8fCBcIlwiXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICByZXNldFNlYXJjaFRleHRJbnB1dCA9ICgpID0+IHtcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMudHQuc2VhcmNoVGV4dElucHV0UmVmLmN1cnJlbnRcblxuICAgIGlmIChpbnB1dD8uY2xlYXIpIHtcbiAgICAgIGlucHV0LmNsZWFyKClcbiAgICB9IGVsc2UgaWYgKGlucHV0Py5zZXROYXRpdmVQcm9wcykge1xuICAgICAgaW5wdXQuc2V0TmF0aXZlUHJvcHMoe3RleHQ6IFwiXCJ9KVxuICAgIH0gZWxzZSBpZiAoaW5wdXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlucHV0LnZhbHVlID0gXCJcIlxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGlmIHRoZSByZWYgZG9lc24ndCBzdXBwb3J0IGRpcmVjdCB2YWx1ZSBhc3NpZ25tZW50LlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoVGV4dFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uQ2hhbmdlU2VhcmNoVGV4dCA9IChzZWFyY2hUZXh0KSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQ2hhbmdlU2VhcmNoVGV4dFwiLCB7c2VhcmNoVGV4dCwgY3VycmVudFBhZ2U6IHRoaXMucy5wYWdlfSlcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IHNlYXJjaFRleHRcblxuICAgIGlmICh0aGlzLnMucGFnZSAhPSAxKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlOiAxLCBwYWdlSW5wdXRWYWx1ZTogXCIxXCJ9LCB0aGlzLnR0Lm9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50dC5vblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQoKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb3Blbk9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9wZW5PcHRpb25zXCIsIHtcbiAgICAgIGN1cnJlbnRPcHRpb25zQ291bnQ6IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKT8ubGVuZ3RoIHx8IDAsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0aGlzLnAuc2VhcmNoXG4gICAgfSlcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IHRydWVcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQuaGVpZ2h0LFxuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwiYmVsb3dcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aCxcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICAgICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICAgICAgc2Nyb2xsVG9wOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICAgICAgdGhpcy5sb2FkT3B0aW9ucyh7cGFnZTogMX0pXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucC5vbkZvY3VzKSB0aGlzLnAub25Gb2N1cygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGZvY3VzVGV4dElucHV0ID0gKCkgPT4gZGlnZyh0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZiwgXCJjdXJyZW50XCIpPy5mb2N1cygpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgIHJldHVybiAvLyBEZWJvdW5jZSBhZnRlciB1bi1tb3VudCBoYW5kZWxpbmcuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvblwiKVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gdHJ1ZVxuICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgY29uc3Qge3dpbmRvd0hlaWdodH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge29wdGlvbnNDb250YWluZXJMYXlvdXR9ID0gdGhpcy5zXG4gICAgY29uc3QgZW5kT2ZTZWxlY3RMYXlvdXQgPSB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXRcblxuICAgIGlmICghZW5kT2ZTZWxlY3RMYXlvdXQpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImJlbG93XCIsIHJlYXNvbjogXCJtaXNzaW5nLWVuZC1vZi1zZWxlY3QtbGF5b3V0XCJ9KVxuICAgICAgdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCJcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnNUb3AgPSBlbmRPZlNlbGVjdExheW91dC50b3BcbiAgICBjb25zdCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbiA9IG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgb3B0aW9uc1RvcFxuICAgIGNvbnN0IHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPSB3aW5kb3dIZWlnaHQgKyB0aGlzLnMuc2Nyb2xsVG9wXG5cbiAgICBpZiAod2luZG93SGVpZ2h0V2l0aFNjcm9sbCA8IG9wdGlvbnNUb3RhbEJvdHRvbVBvc2l0aW9uKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW5cIiwge3BsYWNlbWVudDogXCJhYm92ZVwifSlcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW5cIiwge3BsYWNlbWVudDogXCJiZWxvd1wifSlcbiAgICAgIHRoaXMucy5vcHRpb25zVmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25BYm92ZSgpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgY29uc3Qge2VuZE9mU2VsZWN0TGF5b3V0fSA9IHRoaXMuc1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZVwiKVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBcImFib3ZlXCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGhcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkJlbG93KCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3dcIilcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwiYmVsb3dcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMuZm9jdXNUZXh0SW5wdXQoKVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25Bbnl0aGluZ1Jlc2l6ZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQW55dGhpbmdSZXNpemVkXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdSZXNpemVkLCAyNSlcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uQW55dGhpbmdTY3JvbGxlZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25Bbnl0aGluZ1Njcm9sbGVkXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnMuc2Nyb2xsTGVmdCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGxcbiAgICAgIHRoaXMucy5zY3JvbGxUb3AgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGxcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uKClcbiAgICB9XG4gIH1cblxuICBvbkFueXRoaW5nU2Nyb2xsZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdTY3JvbGxlZCwgMjUpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvblByZXNzT3V0c2lkZU9wdGlvbnMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uUHJlc3NPdXRzaWRlT3B0aW9uc1wiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkfSlcbiAgICAvLyBJZiBvcHRpb25zIGFyZSBvcGVuIGFuZCBhIGNsaWNrIGlzIG1hZGUgb3V0c2lkZSBvZiB0aGUgb3B0aW9ucyBjb250YWluZXJcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9ICovXG4gIHBhZ2luYXRpb25Ub3RhbFBhZ2VzKCkge1xuICAgIGNvbnN0IHt0b3RhbENvdW50fSA9IHRoaXMuc1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgfHwgdG90YWxDb3VudCA8PSAwKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZSh7XG4gICAgICBvcHRpb25zOiB0aGlzLnMubG9hZGVkT3B0aW9ucyB8fCBbXSxcbiAgICAgIHBhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLFxuICAgICAgcGFnZVNpemU6IHRoaXMucy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsQ291bnRcbiAgICB9KVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFnZVNpemUpIHx8IHBhZ2VTaXplIDw9IDApIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gTWF0aC5jZWlsKHRvdGFsQ291bnQgLyBwYWdlU2l6ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8e2tleTogc3RyaW5nLCB0eXBlOiBcInBhZ2VcInxcImVsbGlwc2lzXCIsIHZhbHVlPzogbnVtYmVyfT59XG4gICAqL1xuICBwYWdpbmF0aW9uUGFnZUl0ZW1zKHRvdGFsUGFnZXMpIHtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgaXRlbXMgPSBbXVxuICAgIGNvbnN0IGFkZFBhZ2UgPSAocGFnZSkgPT4gaXRlbXMucHVzaCh7a2V5OiBgcGFnZS0ke3BhZ2V9YCwgdHlwZTogXCJwYWdlXCIsIHZhbHVlOiBwYWdlfSlcbiAgICBjb25zdCBhZGRFbGxpcHNpcyA9IChrZXkpID0+IGl0ZW1zLnB1c2goe2tleSwgdHlwZTogXCJlbGxpcHNpc1wifSlcblxuICAgIGlmICh0b3RhbFBhZ2VzIDw9IDcpIHtcbiAgICAgIGZvciAobGV0IHBhZ2UgPSAxOyBwYWdlIDw9IHRvdGFsUGFnZXM7IHBhZ2UgKz0gMSkge1xuICAgICAgICBhZGRQYWdlKHBhZ2UpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtc1xuICAgIH1cblxuICAgIGFkZFBhZ2UoMSlcblxuICAgIGNvbnN0IHdpbmRvd1NpemUgPSAyXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoMiwgY3VycmVudFBhZ2UgLSB3aW5kb3dTaXplKVxuICAgIGxldCBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgY3VycmVudFBhZ2UgKyB3aW5kb3dTaXplKVxuXG4gICAgaWYgKGN1cnJlbnRQYWdlIDw9IDMpIHtcbiAgICAgIHN0YXJ0ID0gMlxuICAgICAgZW5kID0gTWF0aC5taW4odG90YWxQYWdlcyAtIDEsIDUpXG4gICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzIC0gMikge1xuICAgICAgZW5kID0gdG90YWxQYWdlcyAtIDFcbiAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMiwgdG90YWxQYWdlcyAtIDQpXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gMikgYWRkRWxsaXBzaXMoXCJlbGxpcHNpcy1zdGFydFwiKVxuXG4gICAgZm9yIChsZXQgcGFnZSA9IHN0YXJ0OyBwYWdlIDw9IGVuZDsgcGFnZSArPSAxKSB7XG4gICAgICBhZGRQYWdlKHBhZ2UpXG4gICAgfVxuXG4gICAgaWYgKGVuZCA8IHRvdGFsUGFnZXMgLSAxKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLWVuZFwiKVxuXG4gICAgYWRkUGFnZSh0b3RhbFBhZ2VzKVxuXG4gICAgcmV0dXJuIGl0ZW1zXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHBhZ2luYXRpb25EaXNwbGF5VmFsdWUodG90YWxQYWdlcykge1xuICAgIGNvbnN0IGFjdGl2ZVBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IGZhbGxiYWNrVGV4dCA9IGBQYWdlICR7YWN0aXZlUGFnZX0gb2YgJHt0b3RhbFBhZ2VzfWBcblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZShcIi5wYWdpbmF0aW9uX3BhZ2Vfb2ZfcGFnZXNcIiwge1xuICAgICAgZGVmYXVsdFZhbHVlOiBmYWxsYmFja1RleHQsXG4gICAgICBwYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgdG90YWxQYWdlc1xuICAgIH0pIHx8IGZhbGxiYWNrVGV4dFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBwYWdpbmF0aW9uSW5wdXRWYWx1ZSh0b3RhbFBhZ2VzKSB7XG4gICAgaWYgKHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkKSByZXR1cm4gdGhpcy5zLnBhZ2VJbnB1dFZhbHVlXG5cbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uRGlzcGxheVZhbHVlKHRvdGFsUGFnZXMpXG4gIH1cblxuICAvKiogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgKi9cbiAgc2V0UGFnaW5hdGlvblBhZ2UgPSAocGFnZSkgPT4ge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0UGFnaW5hdGlvblBhZ2VcIiwge3JlcXVlc3RlZFBhZ2U6IHBhZ2UsIHRvdGFsUGFnZXN9KVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzKSByZXR1cm5cblxuICAgIGNvbnN0IG5leHRQYWdlID0gTWF0aC5taW4oTWF0aC5tYXgoTWF0aC5mbG9vcihwYWdlKSwgMSksIHRvdGFsUGFnZXMpXG5cbiAgICBpZiAobmV4dFBhZ2UgPT0gdGhpcy5nZXRBY3RpdmVQYWdlKCkpIHtcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7cGFnZTogbmV4dFBhZ2UsIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcobmV4dFBhZ2UpfSxcbiAgICAgICgpID0+IHRoaXMudHQubG9hZE9wdGlvbnMoe3BhZ2U6IG5leHRQYWdlfSlcbiAgICApXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uUHJldlByZXNzZWQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25QYWdlKHRoaXMuZ2V0QWN0aXZlUGFnZSgpIC0gMSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25OZXh0UHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UodGhpcy5nZXRBY3RpdmVQYWdlKCkgKyAxKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvblBhZ2luYXRpb25JbnB1dEZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkID0gdHJ1ZVxuICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRDaGFuZ2UgPSAodmFsdWUpID0+IHtcbiAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0Qmx1ciA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcbiAgICBjb25zdCByYXdWYWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlID8/IHRoaXMucy5wYWdlSW5wdXRWYWx1ZVxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcmF3VmFsdWUgPyBOdW1iZXIoU3RyaW5nKHJhd1ZhbHVlKS5tYXRjaCgvXFxkKy8pPy5bMF0pIDogTmFOXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkVmFsdWUpID8gcGFyc2VkVmFsdWUgOiBOdW1iZXIodGhpcy5zLnBhZ2VJbnB1dFZhbHVlKVxuXG4gICAgaWYgKHRvdGFsUGFnZXMgJiYgTnVtYmVyLmlzRmluaXRlKG5leHRQYWdlKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7cGFnZUlucHV0Rm9jdXNlZDogZmFsc2V9LCAoKSA9PiB0aGlzLnNldFBhZ2luYXRpb25QYWdlKG5leHRQYWdlKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBwYWdlSW5wdXRWYWx1ZTogU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgIH0pXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRTdWJtaXQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMpIHtcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRQYWdlID0gTnVtYmVyKHRoaXMucy5wYWdlSW5wdXRWYWx1ZSlcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG5leHRQYWdlKSkge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7cGFnZUlucHV0Rm9jdXNlZDogZmFsc2V9LCAoKSA9PiB0aGlzLnNldFBhZ2luYXRpb25QYWdlKG5leHRQYWdlKSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dEtleURvd24gPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQ/LmtleSAhPT0gXCJFbnRlclwiKSByZXR1cm5cblxuICAgIHRoaXMudHQub25QYWdpbmF0aW9uSW5wdXRTdWJtaXQoZXZlbnQpXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZXxudWxsfSAqL1xuICBwYWdpbmF0aW9uQ29udHJvbHMoKSB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzIHx8IHRvdGFsUGFnZXMgPD0gMSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBwcmV2RGlzYWJsZWQgPSBjdXJyZW50UGFnZSA8PSAxXG4gICAgY29uc3QgbmV4dERpc2FibGVkID0gY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25Db250YWluZXIgfHw9IHtjbGFzczogXCJvcHRpb25zLXBhZ2luYXRpb25cIn19XG4gICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkNvbnRhaW5lciB8fD0ge1xuICAgICAgICAgIGJvcmRlclRvcENvbG9yOiBcIiNlMmU4ZjBcIixcbiAgICAgICAgICBib3JkZXJUb3BXaWR0aDogMSxcbiAgICAgICAgICBwYWRkaW5nOiA4XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbkhlYWRlciB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24taGVhZGVyXCJ9fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkhlYWRlciB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIn19XG4gICAgICAgID5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uUHJldkJ1dHRvbiB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcHJldlwifX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcmV2RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvblByZXZQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke3ByZXZEaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBwcmV2RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1sZWZ0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTmF2SWNvbiB8fD0ge2NvbG9yOiBcIiMzMzQxNTVcIiwgZm9udFNpemU6IDEyfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJwYWdpbmF0aW9uTGFiZWxEYXRhU2V0XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFwicGFnaW5hdGlvbi1sYWJlbFwiLFxuICAgICAgICAgICAgICBwYWdlOiBjdXJyZW50UGFnZVxuICAgICAgICAgICAgfSwgW2N1cnJlbnRQYWdlXSl9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25MYWJlbEJ1dHRvbiB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2YxZjVmOVwiLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTQsXG4gICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgbWluV2lkdGg6IDE0MCxcbiAgICAgICAgICAgICAgcGFkZGluZ0hvcml6b250YWw6IDEwLFxuICAgICAgICAgICAgICBwYWRkaW5nVmVydGljYWw6IDZcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uSW5wdXQgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWlucHV0XCJ9fVxuICAgICAgICAgICAgICBrZXlib2FyZFR5cGU9XCJudW1iZXItcGFkXCJcbiAgICAgICAgICAgICAgb25CbHVyPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Qmx1cn1cbiAgICAgICAgICAgICAgb25DaGFuZ2VUZXh0PXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICBvbkZvY3VzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Rm9jdXN9XG4gICAgICAgICAgICAgIG9uUHJlc3NJbj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEZvY3VzfVxuICAgICAgICAgICAgICBvbktleURvd249e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRLZXlEb3dufVxuICAgICAgICAgICAgICBvblN1Ym1pdEVkaXRpbmc9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRTdWJtaXR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy50dC5wYWdlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgIHNlbGVjdFRleHRPbkZvY3VzXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbklucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgICAgICAgICAgICBjb2xvcjogXCIjMGYxNzJhXCIsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgIG91dGxpbmU6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcIm5vbmVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogMTIwXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnBhZ2luYXRpb25JbnB1dFZhbHVlKHRvdGFsUGFnZXMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbk5leHRCdXR0b24gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLW5leHRcIn19XG4gICAgICAgICAgICBkaXNhYmxlZD17bmV4dERpc2FibGVkfVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblBhZ2luYXRpb25OZXh0UHJlc3NlZH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYHBhZ2luYXRpb25OYXZCdXR0b24tJHtuZXh0RGlzYWJsZWR9YF0gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmOGZhZmNcIixcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogbmV4dERpc2FibGVkID8gMC40IDogMSxcbiAgICAgICAgICAgICAgd2lkdGg6IDMwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25OYXZJY29uIHx8PSB7Y29sb3I6IFwiIzMzNDE1NVwiLCBmb250U2l6ZTogMTJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25QYWdlcyB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tcGFnZXNcIn19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uUGFnZXMgfHw9IHtcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICAgICAgICBmbGV4V3JhcDogXCJ3cmFwXCIsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIG1hcmdpblRvcDogOFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wYWdpbmF0aW9uUGFnZUl0ZW1zKHRvdGFsUGFnZXMpLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcImVsbGlwc2lzXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYHBhZ2luYXRpb25FbGxpcHNpcy0ke2l0ZW0ua2V5fWBdIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1lbGxpcHNpc1wifX1cbiAgICAgICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25FbGxpcHNpcyB8fD0ge3BhZGRpbmdIb3Jpem9udGFsOiA2fX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25FbGxpcHNpc1RleHQgfHw9IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCIjNjQ3NDhiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDEyLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAuLi5cbiAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFBhZ2luYXRpb25QYWdlQnV0dG9uXG4gICAgICAgICAgICAgICAgYWN0aXZlPXtpdGVtLnZhbHVlID09IGN1cnJlbnRQYWdlfVxuICAgICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XG4gICAgICAgICAgICAgICAgb25QYWdlU2VsZWN0ZWQ9e3RoaXMudHQuc2V0UGFnaW5hdGlvblBhZ2V9XG4gICAgICAgICAgICAgICAgcGFnZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIG9wdGlvbnNDb250YWluZXIoKSB7XG4gICAgY29uc3Qge3NlbGVjdENvbnRhaW5lckxheW91dCwgbG9hZGVkT3B0aW9ucywgZW5kT2ZTZWxlY3RMYXlvdXQsIG9wdGlvbnNDb250YWluZXJMYXlvdXQsIG9wdGlvbnNQbGFjZW1lbnQsIG9wdGlvbnNWaXNpYmlsaXR5fSA9IHRoaXMuc1xuICAgIGxldCBsZWZ0LCB0b3BcblxuICAgIGxldCBzdHlsZSA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IDk5OTk5LFxuICAgICAgZWxldmF0aW9uOiA5OTk5OSxcbiAgICAgIHZpc2liaWxpdHk6IG9wdGlvbnNWaXNpYmlsaXR5LFxuICAgICAgd2lkdGg6IHRoaXMucC5vcHRpb25zV2lkdGggfHwgdGhpcy5zLm9wdGlvbnNXaWR0aCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZmZmXCIsXG4gICAgICBib3JkZXJDb2xvcjogXCIjOTk5XCIsXG4gICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgIG1heEhlaWdodDogMzAwLFxuICAgICAgb3ZlcmZsb3dZOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJhdXRvXCIgOiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucC5vcHRpb25zUG9ydGFsKSB7XG4gICAgICBzdHlsZS50b3AgPSAwXG4gICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgIH0gZWxzZSBpZiAoIXRoaXMucC5vcHRpb25zQWJzb2x1dGUpIHtcbiAgICAgIHN0eWxlLmxlZnQgPSAwXG4gICAgICBzdHlsZS5ib3R0b20gPSAwXG4gICAgfSBlbHNlIGlmIChvcHRpb25zUGxhY2VtZW50ID09IFwiYmVsb3dcIikge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgLy8gb25MYXlvdXQgdG9wIHZhbHVlIGlzIHNvbWV0aW1lcyBuZWdhdGl2ZSBzbyB1c2UgYnJvd3NlciBKUyB0byBnZXQgaXQgaW5zdGVhZFxuICAgICAgICB0b3AgPSBkaWdnKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgMVxuXG4gICAgICAgIC8vIG9uTGF5b3V0IGxlZnQgdmFsdWVzIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSB3aGVuIGNoYW5nZWRcbiAgICAgICAgbGVmdCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHRoaXMucy5lbmRPZlNlbGVjdExheW91dC5sZWZ0XG4gICAgICAgIHRvcCA9IHNlbGVjdENvbnRhaW5lckxheW91dC50b3BcbiAgICAgIH1cblxuICAgICAgc3R5bGUubGVmdCA9IGxlZnRcbiAgICAgIHN0eWxlLnRvcCA9IHRvcCAtIDJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGVuZE9mU2VsZWN0TGF5b3V0LmxlZnRcbiAgICAgICAgdG9wID0gc2VsZWN0Q29udGFpbmVyTGF5b3V0LnRvcFxuICAgICAgfVxuXG4gICAgICBzdHlsZS5sZWZ0ID0gbGVmdFxuICAgICAgc3R5bGUudG9wID0gdG9wIC0gb3B0aW9uc0NvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rb253biBvcHRpb25zIHBsYWNlbWVudDogJHtvcHRpb25zUGxhY2VtZW50fWApXG4gICAgfVxuXG4gICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHN0eWxlLCBbbGVmdCwgdG9wLCBzdHlsZS52aXNpYmlsaXR5LCBzdHlsZS53aWR0aF0pXG5cbiAgICBjb25zdCBpZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICBcIm9wdGlvbnNDb250YWluZXJEYXRhU2V0XCIsXG4gICAgICAgICAge2NsYXNzOiBcIm9wdGlvbnMtY29udGFpbmVyXCIsIGlkLCByb2xlOiBcImRpYWxvZ1wiLCBvcHRpb25zVmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHkgfHwgXCJoaWRkZW5cIn0sXG4gICAgICAgICAgW2lkLCBvcHRpb25zVmlzaWJpbGl0eV1cbiAgICAgICAgKX1cbiAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25PcHRpb25zQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICByZWY9e3RoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubWFwKChsb2FkZWRPcHRpb24pID0+XG4gICAgICAgICAgdGhpcy5oYXlhU2VsZWN0T3B0aW9uKHtcbiAgICAgICAgICAgIGtleTogbG9hZGVkT3B0aW9uLmtleSB8fCBgbG9hZGVkLW9wdGlvbi0ke2xvYWRlZE9wdGlvbi52YWx1ZX1gLFxuICAgICAgICAgICAgbG9hZGVkT3B0aW9uXG4gICAgICAgICAgfSlcbiAgICAgICAgKX1cbiAgICAgICAge2xvYWRlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIDxWaWV3IGRhdGFTZXQ9e3RoaXMubm9PcHRpb25zQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcIm5vLW9wdGlvbnMtY29udGFpbmVyXCJ9fT5cbiAgICAgICAgICAgIDxUZXh0Pnt0aGlzLnAubm9PcHRpb25zVGV4dCA/IHRoaXMucC5ub09wdGlvbnNUZXh0KCkgOiB0aGlzLnRyYW5zbGF0ZShcIi5ub19vcHRpb25zX2ZvdW5kXCIpfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAge3RoaXMucGFnaW5hdGlvbkNvbnRyb2xzKCl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gbG9hZGVkT3B0aW9uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25PcHRpb25DbGlja2VkID0gKGV2ZW50LCBsb2FkZWRPcHRpb24pID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvbkNoYW5nZSwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge211bHRpcGxlfSA9IHRoaXMucFxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7fVxuICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9uID0gY3VycmVudE9wdGlvbnMuZmluZCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSA9PSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgY29uc3QgbmV3VG9nZ2xlZCA9IHsuLi50b2dnbGVkfVxuICAgIGxldCBuZXdDdXJyZW50T3B0aW9uc1xuICAgIGxldCBhY3Rpb25cblxuICAgIGlmIChleGlzdGluZ09wdGlvbikge1xuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRvZ2dsZSA9IHRvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0b2dnbGVPcHRpb25zLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSBjdXJyZW50VG9nZ2xlKVxuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gKHRvZ2dsZU9wdGlvbnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAvLyBObyBuZXh0IHRvZ2dsZWQgLSByZW1vdmUgdG9nZ2xlZCBhbmQgb3B0aW9uXG4gICAgICAgICAgZGVsZXRlIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlLW9wdGlvbi1hZnRlci1sYXN0LXRvZ2dsZVwiXG5cbiAgICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSB0b2dnbGVkIC0gc2V0IHRvIG5leHQgdG9nZ2xlXG4gICAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gZGlnZyh0b2dnbGVPcHRpb25zLCBjdXJyZW50SW5kZXggKyAxLCBcInZhbHVlXCIpXG4gICAgICAgICAgYWN0aW9uID0gXCJjeWNsZS10b2dnbGVcIlxuICAgICAgICB9XG5cbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICAgICAgICBhY3Rpb24gPSBcInJlbW92ZS1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBjbGlja2VkIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgICAgaWYgKGxvYWRlZE9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25PcHRpb25DbGlja2VkXCIsIHtcbiAgICAgICAgICBhY3Rpb246IFwiaWdub3JlLWRpc2FibGVkLW9wdGlvblwiLFxuICAgICAgICAgIG9wdGlvblZhbHVlOiBsb2FkZWRPcHRpb24udmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIC8vIFNldCBmcmVzaCB0b2dnbGVcbiAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gdG9nZ2xlT3B0aW9uc1swXS52YWx1ZVxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfVxuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgdG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBhY3Rpb24gPSBcImFkZC1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmNvbmNhdChbbG9hZGVkT3B0aW9uXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbiA9IFwicmVwbGFjZS1zaW5nbGUtb3B0aW9uXCJcbiAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBbbG9hZGVkT3B0aW9uXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy52YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gY3VycmVudE9wdGlvbnMgYXJlIGNvbnRyb2xsZWQgYW5kIGEgdXNlTWVtbyBjYWxsYmFjayBpcyBoYW5kZWxpbmcgc2V0dGluZyBjdXJyZW50IG9wdGlvbnMuXG4gICAgfSBlbHNlIGlmIChuZXdDdXJyZW50T3B0aW9ucykge1xuICAgICAgbmV3U3RhdGUuY3VycmVudE9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9ucyB8fCBjdXJyZW50T3B0aW9uc1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbk9wdGlvbkNsaWNrZWRcIiwge1xuICAgICAgYWN0aW9uOiBhY3Rpb24gfHwgXCJ0b2dnbGUtb25seVwiLFxuICAgICAgbXVsdGlwbGUsXG4gICAgICBvcHRpb25WYWx1ZTogbG9hZGVkT3B0aW9uLnZhbHVlLFxuICAgICAgb3B0aW9uc0NvdW50QmVmb3JlOiBjdXJyZW50T3B0aW9ucy5sZW5ndGgsXG4gICAgICBvcHRpb25zQ291bnRBZnRlcjogb3B0aW9ucy5sZW5ndGhcbiAgICB9KVxuXG4gICAgaWYgKCFtdWx0aXBsZSkgdGhpcy5jbG9zZU9wdGlvbnMoe29wdGlvbnN9KVxuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RPbkNoYW5nZVBheWxvYWR9ICovXG4gICAgICBvbkNoYW5nZSh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0b2dnbGVzOiBuZXdUb2dnbGVkXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlVmFsdWUpIHtcbiAgICAgIGxldCBvcHRpb25WYWx1ZVxuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IGRpZyhvcHRpb25zLCAwLCBcInZhbHVlXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMucC5vbkNoYW5nZVZhbHVlKG9wdGlvblZhbHVlKVxuICAgIH1cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLnRvZ2dsZWQgPSBuZXdTdGF0ZS50b2dnbGVkXG4gICAgfVxuXG4gICAgaWYgKFwiY3VycmVudE9wdGlvbnNcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gbmV3U3RhdGUuY3VycmVudE9wdGlvbnNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxpbmdOYW1lXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3N0eWxlXVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IFtjYWNoZXNdXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKi9cbiAgc3R5bGluZ0ZvcihzdHlsaW5nTmFtZSwgc3R5bGUgPSB7fSwgY2FjaGVzID0gW10pIHtcbiAgICBsZXQgY3VzdG9tU3R5bGluZyA9IGRpZyh0aGlzLCBcInByb3BzXCIsIFwic3R5bGVzXCIsIHN0eWxpbmdOYW1lKVxuICAgIGNvbnN0IGJhc2VTdHlsZSA9IHsuLi5zdHlsZX1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3R5bGluZyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdFN0eWxpbmdDb250ZXh0fSAqL1xuICAgICAgY3VzdG9tU3R5bGluZyA9IGN1c3RvbVN0eWxpbmcoe1xuICAgICAgICBvcGVuZWQ6IHRoaXMucy5vcGVuZWQsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IHRoaXMucy5vcHRpb25zUGxhY2VtZW50LFxuICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgc3R5bGU6IGJhc2VTdHlsZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tU3R5bGluZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2VTdHlsZSwgY3VzdG9tU3R5bGluZylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShgc3R5bGluZ0Zvci0ke3N0eWxpbmdOYW1lfWAsIHN0eWxlLCBjYWNoZXMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqL1xuICBpY29uRm9yT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IHt0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHMgfHwge31cbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcblxuICAgIGlmICh0b2dnbGVPcHRpb25zICYmIChvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkpIHtcbiAgICAgIGNvbnN0IHRvZ2dsZWRWYWx1ZSA9IHRvZ2dsZWRbb3B0aW9uLnZhbHVlXVxuICAgICAgY29uc3QgdG9nZ2xlZE9wdGlvbiA9IHRvZ2dsZU9wdGlvbnMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSB0b2dnbGVkVmFsdWUpXG5cbiAgICAgIGlmICghdG9nZ2xlZE9wdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgYSB0b2dnbGUgb3B0aW9uIGZvciB2YWx1ZTogJHt0b2dnbGVkVmFsdWV9YClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRvZ2dsZWRPcHRpb24uaWNvblxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hheWFTZWxlY3RPcHRpb259IG9wdGlvblxuICAgKiBAcGFyYW0ge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIHByZXNlbnRPcHRpb24gPSAob3B0aW9uLCBtb2RlKSA9PiB7XG4gICAgY29uc3Qge29wdGlvbkNvbnRlbnQsIHRvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wcyB8fCB7fVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuICAgIGNvbnN0IGljb24gPSB0aGlzLmljb25Gb3JPcHRpb24ob3B0aW9uKVxuICAgIGNvbnN0IHRvZ2dsZVZhbHVlID0gdG9nZ2xlZFtvcHRpb24udmFsdWVdXG4gICAgY29uc3QgdG9nZ2xlT3B0aW9uID0gdG9nZ2xlT3B0aW9ucz8uZmluZCgodG9nZ2xlT3B0aW9uSSkgPT4gdG9nZ2xlT3B0aW9uSS52YWx1ZSA9PSB0b2dnbGVWYWx1ZSlcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBvcHRpb24udmFsdWUpXG4gICAgbGV0IHN0eWxlXG4gICAgbGV0IGNvbnRlbnROb2RlXG5cbiAgICBpZiAobW9kZSA9PSBcImN1cnJlbnRcIikge1xuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uUHJlc2VudGF0aW9uVGV4dFwiLCB7ZmxleDogMSwgd2hpdGVTcGFjZTogXCJub3dyYXBcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwib3B0aW9uUHJlc2VudGF0aW9uVGV4dFwiLCB7ZmxleDogMSwgd2hpdGVTcGFjZTogXCJub3dyYXBcIn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJwcmVzZW50T3B0aW9uVmlld0RhdGFTZXRcIiwge1xuICAgICAgICAgIHRleHQ6IG9wdGlvbi50ZXh0LFxuICAgICAgICAgIHRvZ2dsZUljb246IHRvZ2dsZU9wdGlvbj8uaWNvbixcbiAgICAgICAgICB0b2dnbGVWYWx1ZTogdG9nZ2xlT3B0aW9uPy52YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlXG4gICAgICAgIH0sIFtvcHRpb24udGV4dCwgb3B0aW9uLnZhbHVlLCB0b2dnbGVPcHRpb24/Lmljb24sIHRvZ2dsZU9wdGlvbj8udmFsdWVdKX1cbiAgICAgICAgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25TdHlsZVwiLCB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIn0pfVxuICAgICAgICB0ZXN0SUQ9XCJvcHRpb24tcHJlc2VudGF0aW9uXCJcbiAgICAgID5cbiAgICAgICAge3RvZ2dsZU9wdGlvbnMgJiYgIShvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkgJiZcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3RoaXMuY2FjaGUoXCJ0b2dnbGVJY29uUGxhY2Vob2xkZXJTdHlsZVwiLCB7d2lkdGg6IDIwfSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJ0b2dnbGUtaWNvbi1wbGFjZWhvbGRlclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7dG9nZ2xlT3B0aW9ucyAmJiAob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpICYmXG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJ0b2dnbGVJY29uQ29udGFpbmVyU3R5bGVcIiwge2FsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLCB3aWR0aDogMjB9KX0+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9e2ljb259XG4gICAgICAgICAgICAgIHRlc3RJRD1cInRvZ2dsZS1pY29uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25Db250ZW50KSB7XG4gICAgICAgICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RPcHRpb25SZW5kZXJDb250ZXh0fSAqL1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb25Db250ZW50KHtpY29uLCBtb2RlLCBvcHRpb24sIHNlbGVjdGVkLCB0b2dnbGVPcHRpb24sIHRvZ2dsZVZhbHVlLCB0b2dnbGVkfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gXCJjdXJyZW50XCIgJiYgb3B0aW9uLmN1cnJlbnRDb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbi5jdXJyZW50Q29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uY29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb24uY29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChcImh0bWxcIiBpbiBvcHRpb24gJiYgUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIikge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSA8UmVuZGVySHRtbCBzb3VyY2U9e3todG1sOiBkaWdnKG9wdGlvbiwgXCJodG1sXCIpfX0gLz5cbiAgICAgICAgICB9IGVsc2UgaWYgKFwiaHRtbFwiIGluIG9wdGlvbiAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGRpZ2cob3B0aW9uLCBcImh0bWxcIil9fSAvPlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IChcbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgdGVzdElEPVwib3B0aW9uLXByZXNlbnRhdGlvbi10ZXh0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtvcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvbkNvbnRlbnRTdHlsZVwiLCB7ZmxleDogMX0pfT5cbiAgICAgICAgICAgICAgICB7Y29udGVudE5vZGV9XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAge29wdGlvbi5yaWdodCAmJlxuICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uUmlnaHRTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIG1hcmdpbkxlZnQ6IDh9KX0+XG4gICAgICAgICAgICAgICAgICB7b3B0aW9uLnJpZ2h0fVxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KSgpfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgc2V0Q3VycmVudEZyb21HaXZlblZhbHVlcygpIHtcbiAgICBjb25zdCB7b3B0aW9ucywgdmFsdWVzfSA9IHRoaXMucFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5zLmN1cnJlbnRPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gW11cbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7cGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksIHZhbHVlc30pXG4gICAgY29uc3Qge29wdGlvbnM6IGN1cnJlbnRPcHRpb25zfSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcbiAgICBjb25zdCBzdGF0ZVZhbHVlcyA9IHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRWYWx1ZXMsIHN0YXRlVmFsdWVzKSkge1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnNcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgSGF5YVNlbGVjdFNoYXBlQ29tcG9uZW50ID0gc2hhcGVDb21wb25lbnQoSGF5YVNlbGVjdClcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhIYXlhU2VsZWN0U2hhcGVDb21wb25lbnQpXG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "haya-select",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.108",
|
|
4
4
|
"description": "Just another select component for React Native + Web.",
|
|
5
5
|
"files": [
|
|
6
6
|
"build/**"
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"sqlite": "^5.1.1",
|
|
55
55
|
"sqlite3": "^6.0.1",
|
|
56
56
|
"system-testing": "^1.0.75",
|
|
57
|
-
"velocious": "^1.0.
|
|
57
|
+
"velocious": "^1.0.343"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"@kaspernj/api-maker": ">= 1.0.2100",
|