@1money/component-ui 0.0.71 → 0.0.74
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/es/components/ProForm/ProForm.d.ts +10 -2
- package/es/components/ProForm/ProForm.js +241 -55
- package/es/components/ProForm/ProFormDependency.d.ts +11 -2
- package/es/components/ProForm/ProFormDependency.js +29 -133
- package/es/components/ProForm/ProFormItem.js +146 -52
- package/es/components/ProForm/ProFormList.js +114 -62
- package/es/components/ProForm/SchemaForm.d.ts +7 -0
- package/es/components/ProForm/SchemaForm.js +103 -0
- package/es/components/ProForm/Submitter.js +26 -5
- package/es/components/ProForm/context.d.ts +30 -3
- package/es/components/ProForm/context.js +69 -10
- package/es/components/ProForm/core/constants.d.ts +12 -3
- package/es/components/ProForm/core/constants.js +18 -7
- package/es/components/ProForm/core/formStore.d.ts +24 -0
- package/es/components/ProForm/core/formStore.js +101 -0
- package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
- package/es/components/ProForm/core/hooks/useForm.js +336 -212
- package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
- package/es/components/ProForm/core/hooks/useFormCore.js +151 -93
- package/es/components/ProForm/core/interface.d.ts +33 -12
- package/es/components/ProForm/core/runRules.d.ts +20 -8
- package/es/components/ProForm/core/runRules.js +105 -50
- package/es/components/ProForm/core/useFormItem.d.ts +10 -1
- package/es/components/ProForm/core/useFormItem.js +141 -56
- package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
- package/es/components/ProForm/fields/createProFormField.js +61 -32
- package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
- package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
- package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
- package/es/components/ProForm/hooks/useUrlSync.js +170 -0
- package/es/components/ProForm/index.d.ts +12 -5
- package/es/components/ProForm/index.js +7 -2
- package/es/components/ProForm/interface.d.ts +185 -28
- package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DialogForm.js +18 -7
- package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DrawerForm.js +17 -7
- package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/es/components/ProForm/layouts/QueryFilter.js +47 -71
- package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
- package/es/components/ProForm/style/ProForm.css +4 -4
- package/es/components/ProForm/utils.d.ts +12 -1
- package/es/components/ProForm/utils.js +101 -28
- package/es/components/ProTable/ProTable.js +3 -3
- package/es/components/Tooltip/style/Tooltip.css +1 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/lib/components/ProForm/ProForm.d.ts +10 -2
- package/lib/components/ProForm/ProForm.js +239 -53
- package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
- package/lib/components/ProForm/ProFormDependency.js +30 -135
- package/lib/components/ProForm/ProFormItem.js +143 -48
- package/lib/components/ProForm/ProFormList.js +112 -60
- package/lib/components/ProForm/SchemaForm.d.ts +7 -0
- package/lib/components/ProForm/SchemaForm.js +110 -0
- package/lib/components/ProForm/Submitter.js +26 -5
- package/lib/components/ProForm/context.d.ts +30 -3
- package/lib/components/ProForm/context.js +69 -10
- package/lib/components/ProForm/core/constants.d.ts +12 -3
- package/lib/components/ProForm/core/constants.js +19 -8
- package/lib/components/ProForm/core/formStore.d.ts +24 -0
- package/lib/components/ProForm/core/formStore.js +110 -0
- package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
- package/lib/components/ProForm/core/hooks/useForm.js +336 -212
- package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
- package/lib/components/ProForm/core/hooks/useFormCore.js +150 -92
- package/lib/components/ProForm/core/interface.d.ts +33 -12
- package/lib/components/ProForm/core/runRules.d.ts +20 -8
- package/lib/components/ProForm/core/runRules.js +106 -50
- package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
- package/lib/components/ProForm/core/useFormItem.js +138 -53
- package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
- package/lib/components/ProForm/fields/createProFormField.js +61 -32
- package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
- package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
- package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
- package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
- package/lib/components/ProForm/index.d.ts +12 -5
- package/lib/components/ProForm/index.js +16 -1
- package/lib/components/ProForm/interface.d.ts +185 -28
- package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DialogForm.js +18 -7
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DrawerForm.js +17 -7
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/lib/components/ProForm/layouts/QueryFilter.js +46 -70
- package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
- package/lib/components/ProForm/style/ProForm.css +4 -4
- package/lib/components/ProForm/utils.d.ts +12 -1
- package/lib/components/ProForm/utils.js +104 -28
- package/lib/components/ProTable/ProTable.js +3 -3
- package/lib/components/Tooltip/style/Tooltip.css +1 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +13 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +90 -0
- package/scripts/mcp-server/index.generated.json +1866 -212
|
@@ -6,20 +6,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.useForm = exports["default"] = void 0;
|
|
9
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
10
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
12
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
var _useEventCallback = _interopRequireDefault(require("@1money/hooks/useEventCallback"));
|
|
16
16
|
var _useMemoizedFn = _interopRequireDefault(require("@1money/hooks/useMemoizedFn"));
|
|
17
|
-
var _useSafeState3 = _interopRequireDefault(require("@1money/hooks/useSafeState"));
|
|
18
17
|
var _useFormCore = require("./useFormCore");
|
|
19
18
|
var _pathUtils = require("../pathUtils");
|
|
20
19
|
var _runRules = require("../runRules");
|
|
20
|
+
var _formStore = require("../formStore");
|
|
21
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
22
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
23
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
24
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
25
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
23
26
|
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
24
27
|
function adopt(value) {
|
|
25
28
|
return value instanceof P ? value : new P(function (resolve) {
|
|
@@ -55,6 +58,16 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
55
58
|
}
|
|
56
59
|
return t;
|
|
57
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* Only rules with a custom `validator` can be genuinely asynchronous —
|
|
63
|
+
* builtin rules resolve within a microtask, so flipping `validating` for
|
|
64
|
+
* them would only churn subscribers without ever being visible.
|
|
65
|
+
*/
|
|
66
|
+
var hasCustomValidator = function hasCustomValidator(rules) {
|
|
67
|
+
return rules.some(function (rule) {
|
|
68
|
+
return typeof rule.validator === 'function';
|
|
69
|
+
});
|
|
70
|
+
};
|
|
58
71
|
// ---------------------------------------------------------------------------
|
|
59
72
|
// useForm
|
|
60
73
|
// ---------------------------------------------------------------------------
|
|
@@ -66,23 +79,84 @@ var useForm = exports.useForm = function useForm() {
|
|
|
66
79
|
_config$validateTrigg = config.validateTrigger,
|
|
67
80
|
validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
|
|
68
81
|
var formCore = (0, _useFormCore.useFormCore)(config);
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
var
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
82
|
+
var store = formCore.store;
|
|
83
|
+
// Mark fields as validating in ONE commit. validating / touched live in the
|
|
84
|
+
// store alongside values — flipping them (e.g. async validation around a
|
|
85
|
+
// blur) must not re-render the form root, only the fields that subscribed.
|
|
86
|
+
var markValidating = (0, _useMemoizedFn["default"])(function (names) {
|
|
87
|
+
if (names.length === 0) return;
|
|
88
|
+
var next = Object.assign({}, store.getState().validating);
|
|
89
|
+
names.forEach(function (name) {
|
|
90
|
+
next[name] = true;
|
|
91
|
+
});
|
|
92
|
+
store.setState({
|
|
93
|
+
validating: next
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
// Fold per-field rule outcomes into AT MOST one store commit: errors and
|
|
97
|
+
// warnings are merged over the current maps and the `clearValidating` flags
|
|
98
|
+
// are removed in the SAME patch. A no-op outcome commits nothing at all —
|
|
99
|
+
// per-field commits here previously made submit-time validation sweep every
|
|
100
|
+
// subscriber O(fields) times.
|
|
101
|
+
var commitRuleOutcomes = (0, _useMemoizedFn["default"])(function (outcomes, clearValidating) {
|
|
102
|
+
var state = store.getState();
|
|
103
|
+
var errorsChanged = false;
|
|
104
|
+
var warningsChanged = false;
|
|
105
|
+
var newErrors = Object.assign({}, state.errors);
|
|
106
|
+
var newWarnings = Object.assign({}, state.warnings);
|
|
107
|
+
var _iterator = _createForOfIteratorHelper(outcomes),
|
|
108
|
+
_step;
|
|
109
|
+
try {
|
|
110
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
111
|
+
var _step$value = _step.value,
|
|
112
|
+
name = _step$value.name,
|
|
113
|
+
error = _step$value.error,
|
|
114
|
+
warning = _step$value.warning;
|
|
115
|
+
if (error === null) {
|
|
116
|
+
if (name in newErrors) {
|
|
117
|
+
delete newErrors[name];
|
|
118
|
+
errorsChanged = true;
|
|
119
|
+
}
|
|
120
|
+
} else if (newErrors[name] !== error) {
|
|
121
|
+
newErrors[name] = error;
|
|
122
|
+
errorsChanged = true;
|
|
123
|
+
}
|
|
124
|
+
if (warning === null) {
|
|
125
|
+
if (name in newWarnings) {
|
|
126
|
+
delete newWarnings[name];
|
|
127
|
+
warningsChanged = true;
|
|
128
|
+
}
|
|
129
|
+
} else if (newWarnings[name] !== warning) {
|
|
130
|
+
newWarnings[name] = warning;
|
|
131
|
+
warningsChanged = true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
} catch (err) {
|
|
135
|
+
_iterator.e(err);
|
|
136
|
+
} finally {
|
|
137
|
+
_iterator.f();
|
|
138
|
+
}
|
|
139
|
+
var flagsToClear = clearValidating.filter(function (name) {
|
|
140
|
+
return name in state.validating;
|
|
141
|
+
});
|
|
142
|
+
var patch = {};
|
|
143
|
+
if (errorsChanged) patch.errors = newErrors;
|
|
144
|
+
if (warningsChanged) patch.warnings = newWarnings;
|
|
145
|
+
if (flagsToClear.length > 0) {
|
|
146
|
+
var newValidating = Object.assign({}, state.validating);
|
|
147
|
+
flagsToClear.forEach(function (name) {
|
|
148
|
+
delete newValidating[name];
|
|
149
|
+
});
|
|
150
|
+
patch.validating = newValidating;
|
|
151
|
+
}
|
|
152
|
+
if (Object.keys(patch).length > 0) store.setState(patch);
|
|
153
|
+
});
|
|
80
154
|
// ---------------------------------------------------------------------------
|
|
81
155
|
// Async field validation – each rule is processed exactly once
|
|
82
156
|
// ---------------------------------------------------------------------------
|
|
83
157
|
var validateFieldAsync = (0, _useMemoizedFn["default"])(function (name, value, rules) {
|
|
84
158
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
85
|
-
var error;
|
|
159
|
+
var flagged, outcome, _yield$runRulesAsync, error, warning;
|
|
86
160
|
return _regenerator["default"].wrap(function (_context) {
|
|
87
161
|
while (1) switch (_context.prev = _context.next) {
|
|
88
162
|
case 0:
|
|
@@ -95,44 +169,39 @@ var useForm = exports.useForm = function useForm() {
|
|
|
95
169
|
error: null
|
|
96
170
|
});
|
|
97
171
|
case 1:
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
172
|
+
flagged = hasCustomValidator(rules) ? [name] : [];
|
|
173
|
+
markValidating(flagged);
|
|
174
|
+
outcome = {
|
|
175
|
+
name: name,
|
|
176
|
+
error: null,
|
|
177
|
+
warning: null
|
|
178
|
+
};
|
|
101
179
|
_context.prev = 2;
|
|
102
180
|
_context.next = 3;
|
|
103
|
-
return (0, _runRules.runRulesAsync)(name, value, formCore.
|
|
181
|
+
return (0, _runRules.runRulesAsync)(name, value, formCore.getFieldsValue(), rules);
|
|
104
182
|
case 3:
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
error: error
|
|
114
|
-
});
|
|
183
|
+
_yield$runRulesAsync = _context.sent;
|
|
184
|
+
error = _yield$runRulesAsync.error;
|
|
185
|
+
warning = _yield$runRulesAsync.warning;
|
|
186
|
+
outcome = {
|
|
187
|
+
name: name,
|
|
188
|
+
error: error,
|
|
189
|
+
warning: warning
|
|
190
|
+
};
|
|
115
191
|
case 4:
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
return _context.abrupt("return", {
|
|
120
|
-
isValid: true,
|
|
121
|
-
error: null
|
|
122
|
-
});
|
|
192
|
+
_context.prev = 4;
|
|
193
|
+
commitRuleOutcomes([outcome], flagged);
|
|
194
|
+
return _context.finish(4);
|
|
123
195
|
case 5:
|
|
124
|
-
_context.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
delete newValidating[name];
|
|
128
|
-
return newValidating;
|
|
196
|
+
return _context.abrupt("return", {
|
|
197
|
+
isValid: outcome.error === null,
|
|
198
|
+
error: outcome.error
|
|
129
199
|
});
|
|
130
|
-
return _context.finish(5);
|
|
131
200
|
case 6:
|
|
132
201
|
case "end":
|
|
133
202
|
return _context.stop();
|
|
134
203
|
}
|
|
135
|
-
}, _callee, null, [[2,,
|
|
204
|
+
}, _callee, null, [[2,, 4, 5]]);
|
|
136
205
|
}));
|
|
137
206
|
});
|
|
138
207
|
// ---------------------------------------------------------------------------
|
|
@@ -140,20 +209,23 @@ var useForm = exports.useForm = function useForm() {
|
|
|
140
209
|
// ---------------------------------------------------------------------------
|
|
141
210
|
var handleFieldBlur = (0, _useEventCallback["default"])(function (name) {
|
|
142
211
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
143
|
-
var rules;
|
|
212
|
+
var touched, rules;
|
|
144
213
|
return _regenerator["default"].wrap(function (_context2) {
|
|
145
214
|
while (1) switch (_context2.prev = _context2.next) {
|
|
146
215
|
case 0:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
216
|
+
touched = store.getState().touched;
|
|
217
|
+
if (!touched[name]) {
|
|
218
|
+
store.setState({
|
|
219
|
+
touched: Object.assign(Object.assign({}, touched), (0, _defineProperty2["default"])({}, name, true))
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
rules = formCore.getFieldRules(name);
|
|
151
223
|
if (!(rules && validateTrigger === 'onBlur')) {
|
|
152
224
|
_context2.next = 1;
|
|
153
225
|
break;
|
|
154
226
|
}
|
|
155
227
|
_context2.next = 1;
|
|
156
|
-
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.
|
|
228
|
+
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), rules);
|
|
157
229
|
case 1:
|
|
158
230
|
case "end":
|
|
159
231
|
return _context2.stop();
|
|
@@ -166,86 +238,108 @@ var useForm = exports.useForm = function useForm() {
|
|
|
166
238
|
// ---------------------------------------------------------------------------
|
|
167
239
|
var validateFieldsAsync = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
168
240
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
169
|
-
var fieldsToValidate,
|
|
241
|
+
var fieldsToValidate, fieldErrors, flagged, outcomes, error;
|
|
170
242
|
return _regenerator["default"].wrap(function (_context4) {
|
|
171
243
|
while (1) switch (_context4.prev = _context4.next) {
|
|
172
244
|
case 0:
|
|
173
245
|
fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
246
|
+
fieldErrors = {}; // One commit to raise the validating flags (validator-bearing fields
|
|
247
|
+
// only), one commit to land every error/warning and clear the flags.
|
|
248
|
+
flagged = fieldsToValidate.filter(function (name) {
|
|
249
|
+
var rules = formCore.fieldRules[name];
|
|
250
|
+
return rules ? hasCustomValidator(rules) : false;
|
|
251
|
+
});
|
|
252
|
+
markValidating(flagged);
|
|
253
|
+
outcomes = [];
|
|
254
|
+
_context4.prev = 1;
|
|
255
|
+
_context4.next = 2;
|
|
256
|
+
return Promise.all(fieldsToValidate.map(function (name) {
|
|
177
257
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
178
|
-
var rules, _yield$
|
|
258
|
+
var rules, _yield$runRulesAsync2, error, warning;
|
|
179
259
|
return _regenerator["default"].wrap(function (_context3) {
|
|
180
260
|
while (1) switch (_context3.prev = _context3.next) {
|
|
181
261
|
case 0:
|
|
182
262
|
rules = formCore.fieldRules[name];
|
|
183
|
-
if (
|
|
184
|
-
_context3.next =
|
|
263
|
+
if (rules) {
|
|
264
|
+
_context3.next = 1;
|
|
185
265
|
break;
|
|
186
266
|
}
|
|
187
|
-
_context3.
|
|
188
|
-
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.values, name), rules);
|
|
267
|
+
return _context3.abrupt("return");
|
|
189
268
|
case 1:
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
269
|
+
_context3.next = 2;
|
|
270
|
+
return (0, _runRules.runRulesAsync)(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), formCore.getFieldsValue(), rules);
|
|
271
|
+
case 2:
|
|
272
|
+
_yield$runRulesAsync2 = _context3.sent;
|
|
273
|
+
error = _yield$runRulesAsync2.error;
|
|
274
|
+
warning = _yield$runRulesAsync2.warning;
|
|
275
|
+
outcomes.push({
|
|
276
|
+
name: name,
|
|
277
|
+
error: error,
|
|
278
|
+
warning: warning
|
|
279
|
+
});
|
|
280
|
+
if (error !== null) {
|
|
195
281
|
fieldErrors[name] = error;
|
|
196
282
|
}
|
|
197
|
-
case
|
|
283
|
+
case 3:
|
|
198
284
|
case "end":
|
|
199
285
|
return _context3.stop();
|
|
200
286
|
}
|
|
201
287
|
}, _callee3);
|
|
202
288
|
}));
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
289
|
+
}));
|
|
290
|
+
case 2:
|
|
291
|
+
_context4.prev = 2;
|
|
292
|
+
commitRuleOutcomes(outcomes, flagged);
|
|
293
|
+
return _context4.finish(2);
|
|
294
|
+
case 3:
|
|
295
|
+
if (!(Object.keys(fieldErrors).length > 0)) {
|
|
296
|
+
_context4.next = 4;
|
|
209
297
|
break;
|
|
210
298
|
}
|
|
211
299
|
error = new Error('Validation failed');
|
|
212
|
-
error.values = formCore.
|
|
300
|
+
error.values = formCore.getFieldsValue();
|
|
213
301
|
error.errors = fieldErrors;
|
|
214
302
|
throw error;
|
|
215
|
-
case
|
|
303
|
+
case 4:
|
|
216
304
|
if (!nameList) {
|
|
217
|
-
_context4.next =
|
|
305
|
+
_context4.next = 5;
|
|
218
306
|
break;
|
|
219
307
|
}
|
|
220
308
|
return _context4.abrupt("return", nameList.reduce(function (acc, name) {
|
|
221
|
-
acc[name] = (0, _pathUtils.resolveValue)(formCore.
|
|
309
|
+
acc[name] = (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name);
|
|
222
310
|
return acc;
|
|
223
311
|
}, {}));
|
|
224
|
-
case
|
|
225
|
-
return _context4.abrupt("return", formCore.
|
|
226
|
-
case
|
|
312
|
+
case 5:
|
|
313
|
+
return _context4.abrupt("return", formCore.getFieldsValue());
|
|
314
|
+
case 6:
|
|
227
315
|
case "end":
|
|
228
316
|
return _context4.stop();
|
|
229
317
|
}
|
|
230
|
-
}, _callee4);
|
|
318
|
+
}, _callee4, null, [[1,, 2, 3]]);
|
|
231
319
|
}));
|
|
232
320
|
});
|
|
233
321
|
// ---------------------------------------------------------------------------
|
|
234
322
|
// defineField – used by standalone (non-ProForm) consumers
|
|
235
323
|
// ---------------------------------------------------------------------------
|
|
236
|
-
var defineField = (0,
|
|
324
|
+
var defineField = (0, _useMemoizedFn["default"])(function (name) {
|
|
237
325
|
var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
238
326
|
var _fieldOptions$rules = fieldOptions.rules,
|
|
239
327
|
rules = _fieldOptions$rules === void 0 ? [] : _fieldOptions$rules;
|
|
240
328
|
var FieldComponent = /*#__PURE__*/(0, _react.memo)(function (_a) {
|
|
241
|
-
var _b;
|
|
242
329
|
var children = _a.children,
|
|
243
330
|
render = _a.render,
|
|
244
331
|
props = __rest(_a, ["children", "render"]);
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
var
|
|
248
|
-
|
|
332
|
+
// Per-field store subscription: this field re-renders only when its
|
|
333
|
+
// own value/error/touched/validating slice changes.
|
|
334
|
+
var _useStoreSelector = (0, _formStore.useStoreSelector)(store, function (state) {
|
|
335
|
+
var _a;
|
|
336
|
+
return [(_a = state.values[name]) !== null && _a !== void 0 ? _a : '', state.errors[name], state.touched[name], state.validating[name]];
|
|
337
|
+
}, _formStore.shallowEqualArrays),
|
|
338
|
+
_useStoreSelector2 = (0, _slicedToArray2["default"])(_useStoreSelector, 4),
|
|
339
|
+
fieldValue = _useStoreSelector2[0],
|
|
340
|
+
fieldError = _useStoreSelector2[1],
|
|
341
|
+
fieldTouched = _useStoreSelector2[2],
|
|
342
|
+
fieldValidating = _useStoreSelector2[3];
|
|
249
343
|
(0, _react.useEffect)(function () {
|
|
250
344
|
var existingRules = formCore.getFieldRules(name);
|
|
251
345
|
if (!existingRules && rules.length > 0) {
|
|
@@ -318,7 +412,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
318
412
|
});
|
|
319
413
|
FieldComponent.displayName = "Field(".concat(name, ")");
|
|
320
414
|
return FieldComponent;
|
|
321
|
-
}
|
|
415
|
+
});
|
|
322
416
|
// ---------------------------------------------------------------------------
|
|
323
417
|
// handleSubmit / handleReset – for <form> event handlers
|
|
324
418
|
// ---------------------------------------------------------------------------
|
|
@@ -355,150 +449,179 @@ var useForm = exports.useForm = function useForm() {
|
|
|
355
449
|
var handleReset = (0, _useEventCallback["default"])(function (e) {
|
|
356
450
|
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
357
451
|
formCore.resetFields();
|
|
358
|
-
setExtraTouched({});
|
|
359
|
-
setValidating({});
|
|
360
452
|
onReset === null || onReset === void 0 ? void 0 : onReset();
|
|
361
453
|
});
|
|
362
454
|
// ---------------------------------------------------------------------------
|
|
363
|
-
// FormInstance – enhanced API for consumers
|
|
455
|
+
// FormInstance – enhanced API for consumers.
|
|
456
|
+
//
|
|
457
|
+
// Every method is wrapped in useMemoizedFn (stable identity, always reads the
|
|
458
|
+
// latest store state) so the instance object itself is IDENTITY-STABLE for
|
|
459
|
+
// the lifetime of the form — this is what lets ProForm publish it through the
|
|
460
|
+
// stable context without re-rendering subscribers on each keystroke.
|
|
364
461
|
// ---------------------------------------------------------------------------
|
|
462
|
+
var getFieldError = (0, _useMemoizedFn["default"])(function (name) {
|
|
463
|
+
return store.getState().errors[name];
|
|
464
|
+
});
|
|
465
|
+
var getFieldWarning = (0, _useMemoizedFn["default"])(function (name) {
|
|
466
|
+
return store.getState().warnings[name];
|
|
467
|
+
});
|
|
468
|
+
var getFieldsError = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
469
|
+
var errors = store.getState().errors;
|
|
470
|
+
if (!nameList) return errors;
|
|
471
|
+
var result = {};
|
|
472
|
+
nameList.forEach(function (name) {
|
|
473
|
+
if (errors[name]) {
|
|
474
|
+
result[name] = errors[name];
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
return result;
|
|
478
|
+
});
|
|
479
|
+
var isFieldTouched = (0, _useMemoizedFn["default"])(function (name) {
|
|
480
|
+
return store.getState().touched[name] || false;
|
|
481
|
+
});
|
|
482
|
+
var isFieldsTouched = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
483
|
+
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
484
|
+
var touched = store.getState().touched;
|
|
485
|
+
if (!nameList) {
|
|
486
|
+
return Object.keys(touched).some(function (key) {
|
|
487
|
+
return touched[key];
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
if (allFieldsTouched) {
|
|
491
|
+
return nameList.every(function (name) {
|
|
492
|
+
return touched[name];
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
return nameList.some(function (name) {
|
|
496
|
+
return touched[name];
|
|
497
|
+
});
|
|
498
|
+
});
|
|
499
|
+
var isFieldValidating = (0, _useMemoizedFn["default"])(function (name) {
|
|
500
|
+
return store.getState().validating[name] || false;
|
|
501
|
+
});
|
|
502
|
+
var setFieldsError = (0, _useMemoizedFn["default"])(function (fieldsError) {
|
|
503
|
+
Object.entries(fieldsError).forEach(function (_ref) {
|
|
504
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
505
|
+
name = _ref2[0],
|
|
506
|
+
error = _ref2[1];
|
|
507
|
+
formCore.setFieldError(name, error);
|
|
508
|
+
});
|
|
509
|
+
});
|
|
510
|
+
var setFieldTouched = (0, _useMemoizedFn["default"])(function (name) {
|
|
511
|
+
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
512
|
+
store.setState({
|
|
513
|
+
touched: Object.assign(Object.assign({}, store.getState().touched), (0, _defineProperty2["default"])({}, name, isTouched))
|
|
514
|
+
});
|
|
515
|
+
});
|
|
516
|
+
var setFieldsTouched = (0, _useMemoizedFn["default"])(function (fieldsTouch) {
|
|
517
|
+
store.setState({
|
|
518
|
+
touched: Object.assign(Object.assign({}, store.getState().touched), fieldsTouch)
|
|
519
|
+
});
|
|
520
|
+
});
|
|
521
|
+
var resetFormFields = (0, _useMemoizedFn["default"])(function (fields) {
|
|
522
|
+
if (!fields) {
|
|
523
|
+
formCore.resetFields();
|
|
524
|
+
} else {
|
|
525
|
+
var resetValues = {};
|
|
526
|
+
fields.forEach(function (field) {
|
|
527
|
+
// Mount-frozen initialValues — consistent with the full resetFields.
|
|
528
|
+
resetValues[field] = formCore.getInitialValues()[field];
|
|
529
|
+
});
|
|
530
|
+
formCore.setFieldsValue(resetValues);
|
|
531
|
+
var _store$getState = store.getState(),
|
|
532
|
+
touched = _store$getState.touched,
|
|
533
|
+
validating = _store$getState.validating;
|
|
534
|
+
var newTouched = Object.assign({}, touched);
|
|
535
|
+
var newValidating = Object.assign({}, validating);
|
|
536
|
+
fields.forEach(function (field) {
|
|
537
|
+
delete newTouched[field];
|
|
538
|
+
delete newValidating[field];
|
|
539
|
+
});
|
|
540
|
+
store.setState({
|
|
541
|
+
touched: newTouched,
|
|
542
|
+
validating: newValidating
|
|
543
|
+
});
|
|
544
|
+
fields.forEach(function (field) {
|
|
545
|
+
formCore.setFieldError(field, null);
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
var submitWithValidation = (0, _useMemoizedFn["default"])(function (callback) {
|
|
550
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
551
|
+
var validatedValues, _t2;
|
|
552
|
+
return _regenerator["default"].wrap(function (_context6) {
|
|
553
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
554
|
+
case 0:
|
|
555
|
+
_context6.prev = 0;
|
|
556
|
+
_context6.next = 1;
|
|
557
|
+
return validateFieldsAsync();
|
|
558
|
+
case 1:
|
|
559
|
+
validatedValues = _context6.sent;
|
|
560
|
+
if (!callback) {
|
|
561
|
+
_context6.next = 2;
|
|
562
|
+
break;
|
|
563
|
+
}
|
|
564
|
+
_context6.next = 2;
|
|
565
|
+
return callback(validatedValues);
|
|
566
|
+
case 2:
|
|
567
|
+
return _context6.abrupt("return", validatedValues);
|
|
568
|
+
case 3:
|
|
569
|
+
_context6.prev = 3;
|
|
570
|
+
_t2 = _context6["catch"](0);
|
|
571
|
+
return _context6.abrupt("return", undefined);
|
|
572
|
+
case 4:
|
|
573
|
+
case "end":
|
|
574
|
+
return _context6.stop();
|
|
575
|
+
}
|
|
576
|
+
}, _callee6, null, [[0, 3]]);
|
|
577
|
+
}));
|
|
578
|
+
});
|
|
365
579
|
var formInstance = (0, _react.useMemo)(function () {
|
|
366
580
|
return Object.assign(Object.assign({}, formCore.formInstance), {
|
|
367
581
|
validateFields: validateFieldsAsync,
|
|
368
582
|
setFieldValue: formCore.setFieldValue,
|
|
369
|
-
getFieldError:
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
nameList.forEach(function (name) {
|
|
376
|
-
if (formCore.errors[name]) {
|
|
377
|
-
result[name] = formCore.errors[name];
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
return result;
|
|
381
|
-
},
|
|
382
|
-
isFieldTouched: function isFieldTouched(name) {
|
|
383
|
-
return allTouched[name] || false;
|
|
384
|
-
},
|
|
385
|
-
isFieldsTouched: function isFieldsTouched(nameList) {
|
|
386
|
-
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
387
|
-
if (!nameList) {
|
|
388
|
-
return Object.keys(allTouched).some(function (key) {
|
|
389
|
-
return allTouched[key];
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
if (allFieldsTouched) {
|
|
393
|
-
return nameList.every(function (name) {
|
|
394
|
-
return allTouched[name];
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
return nameList.some(function (name) {
|
|
398
|
-
return allTouched[name];
|
|
399
|
-
});
|
|
400
|
-
},
|
|
401
|
-
isFieldValidating: function isFieldValidating(name) {
|
|
402
|
-
return validating[name] || false;
|
|
403
|
-
},
|
|
583
|
+
getFieldError: getFieldError,
|
|
584
|
+
getFieldWarning: getFieldWarning,
|
|
585
|
+
getFieldsError: getFieldsError,
|
|
586
|
+
isFieldTouched: isFieldTouched,
|
|
587
|
+
isFieldsTouched: isFieldsTouched,
|
|
588
|
+
isFieldValidating: isFieldValidating,
|
|
404
589
|
setFieldError: formCore.setFieldError,
|
|
405
|
-
setFieldsError:
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
formCore.setFieldError(name, error);
|
|
411
|
-
});
|
|
412
|
-
},
|
|
413
|
-
setFieldTouched: function setFieldTouched(name) {
|
|
414
|
-
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
415
|
-
setExtraTouched(function (prev) {
|
|
416
|
-
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, isTouched));
|
|
417
|
-
});
|
|
418
|
-
},
|
|
419
|
-
setFieldsTouched: function setFieldsTouched(fieldsTouch) {
|
|
420
|
-
setExtraTouched(function (prev) {
|
|
421
|
-
return Object.assign(Object.assign({}, prev), fieldsTouch);
|
|
422
|
-
});
|
|
423
|
-
},
|
|
424
|
-
resetFields: function resetFields(fields) {
|
|
425
|
-
if (!fields) {
|
|
426
|
-
formCore.resetFields();
|
|
427
|
-
setExtraTouched({});
|
|
428
|
-
setValidating({});
|
|
429
|
-
} else {
|
|
430
|
-
var resetValues = {};
|
|
431
|
-
fields.forEach(function (field) {
|
|
432
|
-
var _a;
|
|
433
|
-
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
434
|
-
});
|
|
435
|
-
formCore.setFieldsValue(resetValues);
|
|
436
|
-
setExtraTouched(function (prev) {
|
|
437
|
-
var newTouched = Object.assign({}, prev);
|
|
438
|
-
fields.forEach(function (field) {
|
|
439
|
-
delete newTouched[field];
|
|
440
|
-
});
|
|
441
|
-
return newTouched;
|
|
442
|
-
});
|
|
443
|
-
setValidating(function (prev) {
|
|
444
|
-
var newValidating = Object.assign({}, prev);
|
|
445
|
-
fields.forEach(function (field) {
|
|
446
|
-
delete newValidating[field];
|
|
447
|
-
});
|
|
448
|
-
return newValidating;
|
|
449
|
-
});
|
|
450
|
-
fields.forEach(function (field) {
|
|
451
|
-
formCore.setFieldError(field, null);
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
},
|
|
455
|
-
submit: function submit(callback) {
|
|
456
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
457
|
-
var validatedValues, _t2;
|
|
458
|
-
return _regenerator["default"].wrap(function (_context6) {
|
|
459
|
-
while (1) switch (_context6.prev = _context6.next) {
|
|
460
|
-
case 0:
|
|
461
|
-
_context6.prev = 0;
|
|
462
|
-
_context6.next = 1;
|
|
463
|
-
return validateFieldsAsync();
|
|
464
|
-
case 1:
|
|
465
|
-
validatedValues = _context6.sent;
|
|
466
|
-
if (!callback) {
|
|
467
|
-
_context6.next = 2;
|
|
468
|
-
break;
|
|
469
|
-
}
|
|
470
|
-
_context6.next = 2;
|
|
471
|
-
return callback(validatedValues);
|
|
472
|
-
case 2:
|
|
473
|
-
return _context6.abrupt("return", validatedValues);
|
|
474
|
-
case 3:
|
|
475
|
-
_context6.prev = 3;
|
|
476
|
-
_t2 = _context6["catch"](0);
|
|
477
|
-
return _context6.abrupt("return", undefined);
|
|
478
|
-
case 4:
|
|
479
|
-
case "end":
|
|
480
|
-
return _context6.stop();
|
|
481
|
-
}
|
|
482
|
-
}, _callee6, null, [[0, 3]]);
|
|
483
|
-
}));
|
|
484
|
-
},
|
|
590
|
+
setFieldsError: setFieldsError,
|
|
591
|
+
setFieldTouched: setFieldTouched,
|
|
592
|
+
setFieldsTouched: setFieldsTouched,
|
|
593
|
+
resetFields: resetFormFields,
|
|
594
|
+
submit: submitWithValidation,
|
|
485
595
|
defineField: defineField,
|
|
486
596
|
registerField: formCore.registerField,
|
|
487
597
|
unregisterField: formCore.unregisterField
|
|
488
598
|
});
|
|
489
|
-
}, [formCore,
|
|
599
|
+
}, [formCore.formInstance, formCore.setFieldValue, formCore.setFieldError, formCore.registerField, formCore.unregisterField, validateFieldsAsync, getFieldError, getFieldWarning, getFieldsError, isFieldTouched, isFieldsTouched, isFieldValidating, setFieldsError, setFieldTouched, setFieldsTouched, resetFormFields, submitWithValidation, defineField]);
|
|
490
600
|
// ---------------------------------------------------------------------------
|
|
491
|
-
// Internals – exposed for ProForm integration
|
|
601
|
+
// Internals – exposed for ProForm integration. Data fields are GETTERS that
|
|
602
|
+
// read the live store, so the object is identity-stable yet never stale.
|
|
492
603
|
// ---------------------------------------------------------------------------
|
|
493
604
|
var internals = (0, _react.useMemo)(function () {
|
|
494
605
|
return {
|
|
495
|
-
values
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
606
|
+
get values() {
|
|
607
|
+
return store.getState().values;
|
|
608
|
+
},
|
|
609
|
+
get errors() {
|
|
610
|
+
return store.getState().errors;
|
|
611
|
+
},
|
|
612
|
+
get warnings() {
|
|
613
|
+
return store.getState().warnings;
|
|
614
|
+
},
|
|
615
|
+
get touched() {
|
|
616
|
+
return store.getState().touched;
|
|
617
|
+
},
|
|
618
|
+
get validating() {
|
|
619
|
+
return store.getState().validating;
|
|
620
|
+
},
|
|
499
621
|
fieldRules: formCore.fieldRules,
|
|
500
622
|
setFieldValue: formCore.setFieldValue,
|
|
501
623
|
setFieldError: formCore.setFieldError,
|
|
624
|
+
setFieldWarning: formCore.setFieldWarning,
|
|
502
625
|
validateField: formCore.validateField,
|
|
503
626
|
validateFieldAsync: validateFieldAsync,
|
|
504
627
|
registerField: formCore.registerField,
|
|
@@ -506,11 +629,12 @@ var useForm = exports.useForm = function useForm() {
|
|
|
506
629
|
handleSubmit: handleSubmit,
|
|
507
630
|
handleReset: handleReset
|
|
508
631
|
};
|
|
509
|
-
}, [
|
|
632
|
+
}, [store, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
510
633
|
return {
|
|
511
634
|
formInstance: formInstance,
|
|
512
|
-
internals: internals
|
|
635
|
+
internals: internals,
|
|
636
|
+
store: store
|
|
513
637
|
};
|
|
514
638
|
};
|
|
515
639
|
var _default = exports["default"] = useForm;
|
|
516
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZUZvcm1Db3JlIiwiX3BhdGhVdGlscyIsIl9ydW5SdWxlcyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlRm9ybSIsImV4cG9ydHMiLCJjb25maWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwidXNlRm9ybUNvcmUiLCJfdXNlU2FmZVN0YXRlIiwidXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImV4dHJhVG91Y2hlZCIsInNldEV4dHJhVG91Y2hlZCIsImFsbFRvdWNoZWQiLCJ1c2VNZW1vIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImVycm9yIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJfZGVmaW5lUHJvcGVydHkyIiwicnVuUnVsZXNBc3luYyIsInZhbHVlcyIsInNlbnQiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3JzIiwibmV3VmFsaWRhdGluZyIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJ1c2VFdmVudENhbGxiYWNrIiwiX2NhbGxlZTIiLCJfY29udGV4dDIiLCJmaWVsZFJ1bGVzIiwicmVzb2x2ZVZhbHVlIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiaGFzRXJyb3IiLCJmaWVsZEVycm9ycyIsInZhbGlkYXRpb25Qcm9taXNlcyIsIl9jb250ZXh0NCIsImtleXMiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCR2YWxpZGF0ZUZpZWxkQSIsIl9jb250ZXh0MyIsImFsbCIsIkVycm9yIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJ1c2VDYWxsYmFjayIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIm1lbW8iLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwidXNlRWZmZWN0IiwiZXhpc3RpbmdSdWxlcyIsImdldEZpZWxkUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YyIiwidGFyZ2V0IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwidHlwZWQiLCJfdCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdCIsImNhbGxiYWNrIiwiX2NhbGxlZTYiLCJfdDIiLCJfY29udGV4dDYiLCJpbnRlcm5hbHMiLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFQLE9BQUE7QUFBNEMsU0FBQVEseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFWLHdCQUFBVSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLFFBQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMs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QVEsQ0FBQ2dDLE1BQU0sRUFDZmhDLFFBQVEsQ0FBQ21DLE1BQU0sRUFDZnRCLFVBQVUsRUFDVlAsVUFBVSxFQUNWTixRQUFRLENBQUMyQyxVQUFVLEVBQ25CM0MsUUFBUSxDQUFDbUYsYUFBYSxFQUN0Qm5GLFFBQVEsQ0FBQ2tDLGFBQWEsRUFDdEJsQyxRQUFRLENBQUNvRixhQUFhLEVBQ3RCbkUsa0JBQWtCLEVBQ2xCakIsUUFBUSxDQUFDZ0YsYUFBYSxFQUN0QmhGLFFBQVEsQ0FBQ2lGLGVBQWUsRUFDeEIwQixZQUFZLEVBQ1pPLFdBQVcsQ0FDWixDQUNGO0VBRUQsT0FBTztJQUFFRSxZQUFZLEVBQVpBLFlBQVk7SUFBRStCLFNBQVMsRUFBVEE7RUFBUyxDQUFFO0FBQ3BDLENBQUM7QUFBQyxJQUFBQyxRQUFBLEdBQUE3SixPQUFBLGNBRWFELE9BQU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNBc3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB5aWVsZCBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCBmb3JtQ29yZS52YWx1ZXMsIHJ1bGVzKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIGJsdXIgaGFuZGxlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgIGlmIChydWxlcyAmJiB2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkJsdXInKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgeWllbGQgUHJvbWlzZS5hbGwodmFsaWRhdGlvblByb21pc2VzKTtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICAgIGVycm9yLnZhbHVlcyA9IGZvcm1Db3JlLnZhbHVlcztcbiAgICAgICAgICAgIGVycm9yLmVycm9ycyA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS52YWx1ZXM7XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGRlZmluZUZpZWxkIOKAkyB1c2VkIGJ5IHN0YW5kYWxvbmUgKG5vbi1Qcm9Gb3JtKSBjb25zdW1lcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBkZWZpbmVGaWVsZCA9IHVzZUNhbGxiYWNrKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKF9iID0gZm9ybUNvcmUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFRvdWNoZWQgPSBhbGxUb3VjaGVkW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWxpZGF0aW5nID0gdmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1J1bGVzICYmIHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZChuYW1lLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pOyAvLyBPbmx5IHJlZ2lzdGVyIG9uIG1vdW50XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVGaWVsZENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQ2hhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRCbHVyKG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBlcnJvcjogZmllbGRFcnJvciwgdG91Y2hlZDogZmllbGRUb3VjaGVkLCB2YWxpZGF0aW5nOiBmaWVsZFZhbGlkYXRpbmcsIG9uQ2hhbmdlOiBoYW5kbGVGaWVsZENoYW5nZSwgb25CbHVyOiBoYW5kbGVCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAndGFyZ2V0JyBpbiBlXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAmJiB0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCwgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9LCBbXG4gICAgICAgIGZvcm1Db3JlLFxuICAgICAgICBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgICAgIGhhbmRsZUZpZWxkQmx1cixcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkID0gZXJyO1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiB0eXBlZC52YWx1ZXMsIGVycm9yczogdHlwZWQuZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSksIHsgdmFsaWRhdGVGaWVsZHM6IHZhbGlkYXRlRmllbGRzQXN5bmMsIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsIGdldEZpZWxkRXJyb3I6IChuYW1lKSA9PiBmb3JtQ29yZS5lcnJvcnNbbmFtZV0sIGdldEZpZWxkc0Vycm9yOiAobmFtZUxpc3QpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Db3JlLmVycm9ycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmb3JtQ29yZS5lcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gZm9ybUNvcmUuZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgaXNGaWVsZFRvdWNoZWQ6IChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdIHx8IGZhbHNlLCBpc0ZpZWxkc1RvdWNoZWQ6IChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWVMaXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFsbFRvdWNoZWQpLnNvbWUoKGtleSkgPT4gYWxsVG91Y2hlZFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGxGaWVsZHNUb3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LmV2ZXJ5KChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5zb21lKChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdKTtcbiAgICAgICAgfSwgaXNGaWVsZFZhbGlkYXRpbmc6IChuYW1lKSA9PiB2YWxpZGF0aW5nW25hbWVdIHx8IGZhbHNlLCBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLCBzZXRGaWVsZHNFcnJvcjogKGZpZWxkc0Vycm9yKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHNldEZpZWxkVG91Y2hlZDogKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiBpc1RvdWNoZWQgfSkpKTtcbiAgICAgICAgfSwgc2V0RmllbGRzVG91Y2hlZDogKGZpZWxkc1RvdWNoKSA9PiB7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBmaWVsZHNUb3VjaCkpKTtcbiAgICAgICAgfSwgcmVzZXRGaWVsZHM6IChmaWVsZHMpID0+IHtcbiAgICAgICAgICAgIGlmICghZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoe30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzZXRWYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICByZXNldFZhbHVlc1tmaWVsZF0gPSAoKF9hID0gY29uZmlnLmluaXRpYWxWYWx1ZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KVtmaWVsZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUocmVzZXRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUb3VjaGVkID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RvdWNoZWRbZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RvdWNoZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbGlkYXRpbmc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IoZmllbGQsIG51bGwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBzdWJtaXQ6IChjYWxsYmFjaykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgY2FsbGJhY2sodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBkZWZpbmVGaWVsZCwgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCwgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQgfSkpLCBbXG4gICAgICAgIGZvcm1Db3JlLFxuICAgICAgICBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkc0FzeW5jLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICAgICAgY29uZmlnLmluaXRpYWxWYWx1ZXMsXG4gICAgICAgIHNldFZhbGlkYXRpbmcsXG4gICAgXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSW50ZXJuYWxzIOKAkyBleHBvc2VkIGZvciBQcm9Gb3JtIGludGVncmF0aW9uXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICB2YWx1ZXM6IGZvcm1Db3JlLnZhbHVlcyxcbiAgICAgICAgZXJyb3JzOiBmb3JtQ29yZS5lcnJvcnMsXG4gICAgICAgIHRvdWNoZWQ6IGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZpZWxkUnVsZXM6IGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHZhbGlkYXRlRmllbGQ6IGZvcm1Db3JlLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgfSksIFtcbiAgICAgICAgZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBmb3JtQ29yZS5lcnJvcnMsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGZvcm1JbnN0YW5jZSwgaW50ZXJuYWxzIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
640
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VGb3JtQ29yZSIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJfZm9ybVN0b3JlIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsInJlamVjdGVkIiwicmVzdWx0IiwidGhlbiIsImFwcGx5IiwiX19yZXN0IiwicCIsInByb3RvdHlwZSIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc0N1c3RvbVZhbGlkYXRvciIsInJ1bGVzIiwic29tZSIsInJ1bGUiLCJ2YWxpZGF0b3IiLCJ1c2VGb3JtIiwiZXhwb3J0cyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJ1c2VGb3JtQ29yZSIsInN0b3JlIiwibWFya1ZhbGlkYXRpbmciLCJ1c2VNZW1vaXplZEZuIiwibmFtZXMiLCJhc3NpZ24iLCJnZXRTdGF0ZSIsInZhbGlkYXRpbmciLCJmb3JFYWNoIiwic2V0U3RhdGUiLCJjb21taXRSdWxlT3V0Y29tZXMiLCJvdXRjb21lcyIsImNsZWFyVmFsaWRhdGluZyIsInN0YXRlIiwiZXJyb3JzQ2hhbmdlZCIsIndhcm5pbmdzQ2hhbmdlZCIsIm5ld0Vycm9ycyIsImVycm9ycyIsIm5ld1dhcm5pbmdzIiwid2FybmluZ3MiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl9zdGVwJHZhbHVlIiwiZXJyb3IiLCJ3YXJuaW5nIiwiZXJyIiwiZmxhZ3NUb0NsZWFyIiwiZmlsdGVyIiwicGF0Y2giLCJuZXdWYWxpZGF0aW5nIiwia2V5cyIsInZhbGlkYXRlRmllbGRBc3luYyIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiZmxhZ2dlZCIsIm91dGNvbWUiLCJfeWllbGQkcnVuUnVsZXNBc3luYyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwicnVuUnVsZXNBc3luYyIsImdldEZpZWxkc1ZhbHVlIiwic2VudCIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJ1c2VFdmVudENhbGxiYWNrIiwiX2NhbGxlZTIiLCJ0b3VjaGVkIiwiX2NvbnRleHQyIiwiX2RlZmluZVByb3BlcnR5MiIsImdldEZpZWxkUnVsZXMiLCJyZXNvbHZlVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJmaWVsZEVycm9ycyIsIl9jb250ZXh0NCIsImZpZWxkUnVsZXMiLCJhbGwiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCRydW5SdWxlc0FzeW5jMiIsIl9jb250ZXh0MyIsInB1c2giLCJFcnJvciIsInZhbHVlcyIsInJlZHVjZSIsImFjYyIsImRlZmluZUZpZWxkIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwibWVtbyIsIl9hIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsIl91c2VTdG9yZVNlbGVjdG9yIiwidXNlU3RvcmVTZWxlY3RvciIsInNoYWxsb3dFcXVhbEFycmF5cyIsIl91c2VTdG9yZVNlbGVjdG9yMiIsIl9zbGljZWRUb0FycmF5MiIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwidXNlRWZmZWN0IiwiZXhpc3RpbmdSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZjIiLCJ0YXJnZXQiLCJSZWFjdCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiRnJhZ21lbnQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90IiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkV2FybmluZyIsImdldEZpZWxkc0Vycm9yIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsInJlc2V0Rm9ybUZpZWxkcyIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJnZXRJbml0aWFsVmFsdWVzIiwic2V0RmllbGRzVmFsdWUiLCJfc3RvcmUkZ2V0U3RhdGUiLCJuZXdUb3VjaGVkIiwic3VibWl0V2l0aFZhbGlkYXRpb24iLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3QyIiwiX2NvbnRleHQ2IiwiZm9ybUluc3RhbmNlIiwidXNlTWVtbyIsInZhbGlkYXRlRmllbGRzIiwic3VibWl0IiwiaW50ZXJuYWxzIiwic2V0RmllbGRXYXJuaW5nIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sU0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQW9FLFNBQUFRLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBVix3QkFBQVUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFBLFNBQUFHLENBQUEsR0FBQVAsQ0FBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQWMsQ0FBQSxVQUFBRyxDQUFBLEtBQUFBLENBQUEsQ0FBQVYsR0FBQSxJQUFBVSxDQUFBLENBQUFDLEdBQUEsSUFBQVAsTUFBQSxDQUFBQyxjQUFBLENBQUFKLENBQUEsRUFBQU0sQ0FBQSxFQUFBRyxDQUFBLElBQUFULENBQUEsQ0FBQU0sQ0FBQSxJQUFBZCxDQUFBLENBQUFjLENBQUEsWUFBQU4sQ0FBQSxjQUFBUixDQUFBLEVBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZSxHQUFBLENBQUFsQixDQUFBLEVBQUFRLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFXLDJCQUFBakIsQ0FBQSxFQUFBRixDQUFBLFFBQUFHLENBQUEseUJBQUFpQixNQUFBLElBQUFsQixDQUFBLENBQUFrQixNQUFBLENBQUFDLFFBQUEsS0FBQW5CLENBQUEscUJBQUFDLENBQUEsUUFBQW1CLEtBQUEsQ0FBQUMsT0FBQSxDQUFBckIsQ0FBQSxNQUFBQyxDQUFBLEdBQUFxQiwyQkFBQSxDQUFBdEIsQ0FBQSxNQUFBRixDQUFBLElBQUFFLENBQUEsdUJBQUFBLENBQUEsQ0FBQXVCLE1BQUEsSUFBQXRCLENBQUEsS0FBQUQsQ0FBQSxHQUFBQyxDQUFBLE9BQUF1QixFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQW5CLENBQUEsV0FBQUEsRUFBQSxXQUFBa0IsRUFBQSxJQUFBeEIsQ0FBQSxDQUFBdUIsTUFBQSxLQUFBSSxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBNUIsQ0FBQSxDQUFBd0IsRUFBQSxVQUFBMUIsQ0FBQSxXQUFBQSxFQUFBRSxDQUFBLFVBQUFBLENBQUEsS0FBQTZCLENBQUEsRUFBQUosQ0FBQSxnQkFBQUssU0FBQSxpSkFBQUMsQ0FBQSxFQUFBdkIsQ0FBQSxPQUFBSSxDQUFBLGdCQUFBYyxDQUFBLFdBQUFBLEVBQUEsSUFBQXpCLENBQUEsR0FBQUEsQ0FBQSxDQUFBYSxJQUFBLENBQUFkLENBQUEsTUFBQU0sQ0FBQSxXQUFBQSxFQUFBLFFBQUFOLENBQUEsR0FBQUMsQ0FBQSxDQUFBK0IsSUFBQSxXQUFBeEIsQ0FBQSxHQUFBUixDQUFBLENBQUEyQixJQUFBLEVBQUEzQixDQUFBLEtBQUFGLENBQUEsV0FBQUEsRUFBQUUsQ0FBQSxJQUFBWSxDQUFBLE9BQUFtQixDQUFBLEdBQUEvQixDQUFBLEtBQUE2QixDQUFBLFdBQUFBLEVBQUEsVUFBQXJCLENBQUEsWUFBQVAsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBVyxDQUFBLFFBQUFtQixDQUFBO0FBQUEsU0FBQVQsNEJBQUF0QixDQUFBLEVBQUFRLENBQUEsUUFBQVIsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBaUMsaUJBQUEsQ0FBQWpDLENBQUEsRUFBQVEsQ0FBQSxPQUFBUCxDQUFBLE1BQUFpQyxRQUFBLENBQUFwQixJQUFBLENBQUFkLENBQUEsRUFBQW1DLEtBQUEsNkJBQUFsQyxDQUFBLElBQUFELENBQUEsQ0FBQW9DLFdBQUEsS0FBQW5DLENBQUEsR0FBQUQsQ0FBQSxDQUFBb0MsV0FBQSxDQUFBQyxJQUFBLGFBQUFwQyxDQUFBLGNBQUFBLENBQUEsR0FBQW1CLEtBQUEsQ0FBQWtCLElBQUEsQ0FBQXRDLENBQUEsb0JBQUFDLENBQUEsK0NBQUFzQyxJQUFBLENBQUF0QyxDQUFBLElBQUFnQyxpQkFBQSxDQUFBakMsQ0FBQSxFQUFBUSxDQUFBO0FBQUEsU0FBQXlCLGtCQUFBakMsQ0FBQSxFQUFBUSxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUixDQUFBLENBQUF1QixNQUFBLE1BQUFmLENBQUEsR0FBQVIsQ0FBQSxDQUFBdUIsTUFBQSxZQUFBekIsQ0FBQSxNQUFBUSxDQUFBLEdBQUFjLEtBQUEsQ0FBQVosQ0FBQSxHQUFBVixDQUFBLEdBQUFVLENBQUEsRUFBQVYsQ0FBQSxJQUFBUSxDQUFBLENBQUFSLENBQUEsSUFBQUUsQ0FBQSxDQUFBRixDQUFBLFVBQUFRLENBQUE7QUNScEUsSUFBSWtDLFNBQVMsR0FBSSxVQUFRLFNBQUtBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ2pCLEtBQUssRUFBRTtJQUFFLE9BQU9BLEtBQUssWUFBWWUsQ0FBQyxHQUFHZixLQUFLLEdBQUcsSUFBSWUsQ0FBQyxDQUFDLFVBQVVHLE9BQU8sRUFBRTtNQUFFQSxPQUFPLENBQUNsQixLQUFLLENBQUM7SUFBRSxDQUFDLENBQUM7RUFBRTtFQUMzRyxPQUFPLEtBQUtlLENBQUMsS0FBS0EsQ0FBQyxHQUFHSSxPQUFPLENBQUMsRUFBRSxVQUFVRCxPQUFPLEVBQUVFLE1BQU0sRUFBRTtJQUN2RCxTQUFTQyxTQUFTQSxDQUFDckIsS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFc0IsSUFBSSxDQUFDTixTQUFTLENBQUNaLElBQUksQ0FBQ0osS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBTzlCLENBQUMsRUFBRTtRQUFFa0QsTUFBTSxDQUFDbEQsQ0FBQyxDQUFDO01BQUU7SUFBRTtJQUMxRixTQUFTcUQsUUFBUUEsQ0FBQ3ZCLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRXNCLElBQUksQ0FBQ04sU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDaEIsS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBTzlCLENBQUMsRUFBRTtRQUFFa0QsTUFBTSxDQUFDbEQsQ0FBQyxDQUFDO01BQUU7SUFBRTtJQUM3RixTQUFTb0QsSUFBSUEsQ0FBQ0UsTUFBTSxFQUFFO01BQUVBLE1BQU0sQ0FBQ3pCLElBQUksR0FBR21CLE9BQU8sQ0FBQ00sTUFBTSxDQUFDeEIsS0FBSyxDQUFDLEdBQUdpQixLQUFLLENBQUNPLE1BQU0sQ0FBQ3hCLEtBQUssQ0FBQyxDQUFDeUIsSUFBSSxDQUFDSixTQUFTLEVBQUVFLFFBQVEsQ0FBQztJQUFFO0lBQzdHRCxJQUFJLENBQUMsQ0FBQ04sU0FBUyxHQUFHQSxTQUFTLENBQUNVLEtBQUssQ0FBQ2IsT0FBTyxFQUFFQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUVWLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDekUsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUNELElBQUl1QixNQUFNLEdBQUksVUFBUSxTQUFLQSxNQUFNLElBQUssVUFBVTdCLENBQUMsRUFBRTVCLENBQUMsRUFBRTtFQUNsRCxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsS0FBSyxJQUFJdUQsQ0FBQyxJQUFJOUIsQ0FBQyxFQUFFLElBQUlqQixNQUFNLENBQUNnRCxTQUFTLENBQUM1QyxjQUFjLENBQUNDLElBQUksQ0FBQ1ksQ0FBQyxFQUFFOEIsQ0FBQyxDQUFDLElBQUkxRCxDQUFDLENBQUM0RCxPQUFPLENBQUNGLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0V2RCxDQUFDLENBQUN1RCxDQUFDLENBQUMsR0FBRzlCLENBQUMsQ0FBQzhCLENBQUMsQ0FBQztFQUNmLElBQUk5QixDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9qQixNQUFNLENBQUNrRCxxQkFBcUIsS0FBSyxVQUFVLEVBQy9ELEtBQUssSUFBSTVDLENBQUMsR0FBRyxDQUFDLEVBQUV5QyxDQUFDLEdBQUcvQyxNQUFNLENBQUNrRCxxQkFBcUIsQ0FBQ2pDLENBQUMsQ0FBQyxFQUFFWCxDQUFDLEdBQUd5QyxDQUFDLENBQUNqQyxNQUFNLEVBQUVSLENBQUMsRUFBRSxFQUFFO0lBQ3BFLElBQUlqQixDQUFDLENBQUM0RCxPQUFPLENBQUNGLENBQUMsQ0FBQ3pDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJTixNQUFNLENBQUNnRCxTQUFTLENBQUNHLG9CQUFvQixDQUFDOUMsSUFBSSxDQUFDWSxDQUFDLEVBQUU4QixDQUFDLENBQUN6QyxDQUFDLENBQUMsQ0FBQyxFQUMxRWQsQ0FBQyxDQUFDdUQsQ0FBQyxDQUFDekMsQ0FBQyxDQUFDLENBQUMsR0FBR1csQ0FBQyxDQUFDOEIsQ0FBQyxDQUFDekMsQ0FBQyxDQUFDLENBQUM7RUFDekI7RUFDSixPQUFPZCxDQUFDO0FBQ1osQ0FBQztBRFFEO0FDRUE7QUFDQTtBQUNBO0FBQ0E7QURBQSxJQUFNNEQsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUMsS0FBYTtFQUFBLE9BQ3ZDQSxLQUFLLENBQUNDLElBQUksQ0FBQyxVQUFDQyxJQUFJO0lBQUEsT0FBSyxPQUFPQSxJQUFJLENBQUNDLFNBQVMsS0FBSyxVQUFVO0VBQUEsRUFBQztBQUFBO0FBRTVEO0FBQ0E7QUFDQTtBQUNPLElBQU1DLE9BQU8sR0FBQUMsT0FBQSxDQUFBRCxPQUFBLEdBQUcsU0FBVkEsT0FBT0EsQ0FBQSxFQUVzQjtFQUFBLElBRHhDRSxNQUFBLEdBQUFDLFNBQUEsQ0FBQTlDLE1BQUEsUUFBQThDLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQXdCLENBQUEsQ0FBRTtFQUUxQixJQUNFRSxRQUFRLEdBSU5ILE1BQU0sQ0FKUkcsUUFBUTtJQUNSQyxjQUFjLEdBR1pKLE1BQU0sQ0FIUkksY0FBYztJQUNkQyxPQUFPLEdBRUxMLE1BQU0sQ0FGUkssT0FBTztJQUFBQyxxQkFBQSxHQUVMTixNQUFNLENBRFJPLGVBQWU7SUFBZkEsZUFBZSxHQUFBRCxxQkFBQSxjQUFHLFVBQVUsR0FBQUEscUJBQUE7RUFHOUIsSUFBTUUsUUFBUSxHQUFHLElBQUFDLHdCQUFXLEVBQUNULE1BQU0sQ0FBQztFQUNwQyxJQUFRVSxLQUFLLEdBQUtGLFFBQVEsQ0FBbEJFLEtBQUs7RUFFYjtFQUNBO0VBQ0E7RUFDQSxJQUFNQyxjQUFjLEdBQUcsSUFBQUMseUJBQWEsRUFBQyxVQUFDQyxLQUFlLEVBQUk7SUFDdkQsSUFBSUEsS0FBSyxDQUFDMUQsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUN4QixJQUFNUyxJQUFJLEdBQUF2QixNQUFBLENBQUF5RSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFKLEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQ0MsVUFBVSxDQUFFO0lBQy9DSCxLQUFLLENBQUNJLE9BQU8sQ0FBQyxVQUFDaEQsSUFBSSxFQUFJO01BQ3JCTCxJQUFJLENBQUNLLElBQUksQ0FBQyxHQUFHLElBQUk7SUFDbkIsQ0FBQyxDQUFDO0lBQ0Z5QyxLQUFLLENBQUNRLFFBQVEsQ0FBQztNQUFFRixVQUFVLEVBQUVwRDtJQUFJLENBQUUsQ0FBQztFQUN0QyxDQUFDLENBQUM7RUFFRjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsSUFBTXVELGtCQUFrQixHQUFHLElBQUFQLHlCQUFhLEVBQ3RDLFVBQUNRLFFBQTRCLEVBQUVDLGVBQXlCLEVBQUk7SUFDMUQsSUFBTUMsS0FBSyxHQUFHWixLQUFLLENBQUNLLFFBQVEsQ0FBQSxDQUFFO0lBQzlCLElBQUlRLGFBQWEsR0FBRyxLQUFLO0lBQ3pCLElBQUlDLGVBQWUsR0FBRyxLQUFLO0lBQzNCLElBQU1DLFNBQVMsR0FBQXBGLE1BQUEsQ0FBQXlFLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBUVEsS0FBSyxDQUFDSSxNQUFNLENBQUU7SUFDckMsSUFBTUMsV0FBVyxHQUFBdEYsTUFBQSxDQUFBeUUsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFRUSxLQUFLLENBQUNNLFFBQVEsQ0FBRTtJQUFDLElBQUFDLFNBQUEsR0FBQWhGLDBCQUFBLENBRUh1RSxRQUFRO01BQUFVLEtBQUE7SUFBQTtNQUEvQyxLQUFBRCxTQUFBLENBQUF2RSxDQUFBLE1BQUF3RSxLQUFBLEdBQUFELFNBQUEsQ0FBQTNGLENBQUEsSUFBQXFCLElBQUEsR0FBaUQ7UUFBQSxJQUFBd0UsV0FBQSxHQUFBRCxLQUFBLENBQUF0RSxLQUFBO1VBQXBDUyxJQUFJLEdBQUE4RCxXQUFBLENBQUo5RCxJQUFJO1VBQUUrRCxLQUFLLEdBQUFELFdBQUEsQ0FBTEMsS0FBSztVQUFFQyxPQUFPLEdBQUFGLFdBQUEsQ0FBUEUsT0FBTztRQUMvQixJQUFJRCxLQUFLLEtBQUssSUFBSSxFQUFFO1VBQ2xCLElBQUkvRCxJQUFJLElBQUl3RCxTQUFTLEVBQUU7WUFDckIsT0FBT0EsU0FBUyxDQUFDeEQsSUFBSSxDQUFDO1lBQ3RCc0QsYUFBYSxHQUFHLElBQUk7VUFDdEI7UUFDRixDQUFDLE1BQU0sSUFBSUUsU0FBUyxDQUFDeEQsSUFBSSxDQUFDLEtBQUsrRCxLQUFLLEVBQUU7VUFDcENQLFNBQVMsQ0FBQ3hELElBQUksQ0FBQyxHQUFHK0QsS0FBSztVQUN2QlQsYUFBYSxHQUFHLElBQUk7UUFDdEI7UUFDQSxJQUFJVSxPQUFPLEtBQUssSUFBSSxFQUFFO1VBQ3BCLElBQUloRSxJQUFJLElBQUkwRCxXQUFXLEVBQUU7WUFDdkIsT0FBT0EsV0FBVyxDQUFDMUQsSUFBSSxDQUFDO1lBQ3hCdUQsZUFBZSxHQUFHLElBQUk7VUFDeEI7UUFDRixDQUFDLE1BQU0sSUFBSUcsV0FBVyxDQUFDMUQsSUFBSSxDQUFDLEtBQUtnRSxPQUFPLEVBQUU7VUFDeENOLFdBQVcsQ0FBQzFELElBQUksQ0FBQyxHQUFHZ0UsT0FBTztVQUMzQlQsZUFBZSxHQUFHLElBQUk7UUFDeEI7TUFDRjtJQUFDLFNBQUFVLEdBQUE7TUFBQUwsU0FBQSxDQUFBbkcsQ0FBQSxDQUFBd0csR0FBQTtJQUFBO01BQUFMLFNBQUEsQ0FBQXBFLENBQUE7SUFBQTtJQUVELElBQU0wRSxZQUFZLEdBQUdkLGVBQWUsQ0FBQ2UsTUFBTSxDQUFDLFVBQUNuRSxJQUFJO01BQUEsT0FBS0EsSUFBSSxJQUFJcUQsS0FBSyxDQUFDTixVQUFVO0lBQUEsRUFBQztJQUUvRSxJQUFNcUIsS0FBSyxHQUE0QixDQUFBLENBQUU7SUFDekMsSUFBSWQsYUFBYSxFQUFFYyxLQUFLLENBQUNYLE1BQU0sR0FBR0QsU0FBUztJQUMzQyxJQUFJRCxlQUFlLEVBQUVhLEtBQUssQ0FBQ1QsUUFBUSxHQUFHRCxXQUFXO0lBQ2pELElBQUlRLFlBQVksQ0FBQ2hGLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDM0IsSUFBTW1GLGFBQWEsR0FBQWpHLE1BQUEsQ0FBQXlFLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBUVEsS0FBSyxDQUFDTixVQUFVLENBQUU7TUFDN0NtQixZQUFZLENBQUNsQixPQUFPLENBQUMsVUFBQ2hELElBQUksRUFBSTtRQUM1QixPQUFPcUUsYUFBYSxDQUFDckUsSUFBSSxDQUFDO01BQzVCLENBQUMsQ0FBQztNQUNGb0UsS0FBSyxDQUFDckIsVUFBVSxHQUFHc0IsYUFBYTtJQUNsQztJQUNBLElBQUlqRyxNQUFNLENBQUNrRyxJQUFJLENBQUNGLEtBQUssQ0FBQyxDQUFDbEYsTUFBTSxHQUFHLENBQUMsRUFBRXVELEtBQUssQ0FBQ1EsUUFBUSxDQUFDbUIsS0FBSyxDQUFDO0VBQzFELENBQUMsQ0FDRjtFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU1HLGtCQUFrQixHQUFHLElBQUE1Qix5QkFBYSxFQUN0QyxVQUNFM0MsSUFBWSxFQUNaVCxLQUFjLEVBQ2RrQyxLQUFhO0lBQUEsT0FDMEN0QixTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUFxRSxZQUFBLFlBQUFDLElBQUEsQ0FBQSxTQUFBQyxRQUFBO01BQUEsSUFBQUMsT0FBQSxFQUFBQyxPQUFBLEVBQUFDLG9CQUFBLEVBQUFkLEtBQUEsRUFBQUMsT0FBQTtNQUFBLE9BQUFRLFlBQUEsWUFBQU0sSUFBQSxXQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFwRixJQUFBO1VBQUE7WUFBQSxNQUNuRCxDQUFDOEIsS0FBSyxJQUFJQSxLQUFLLENBQUN2QyxNQUFNLEtBQUssQ0FBQztjQUFBNkYsUUFBQSxDQUFBcEYsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBb0YsUUFBQSxDQUFBRSxNQUFBLFdBQVM7Y0FBRUMsT0FBTyxFQUFFLElBQUk7Y0FBRW5CLEtBQUssRUFBRTtZQUFJLENBQUU7VUFBQTtZQUVqRVksT0FBTyxHQUFHbkQsa0JBQWtCLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUN6QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3ZEMEMsY0FBYyxDQUFDaUMsT0FBTyxDQUFDO1lBRW5CQyxPQUFPLEdBQXFCO2NBQUU1RSxJQUFJLEVBQUpBLElBQUk7Y0FBRStELEtBQUssRUFBRSxJQUFJO2NBQUVDLE9BQU8sRUFBRTtZQUFJLENBQUU7WUFBQWUsUUFBQSxDQUFBQyxJQUFBO1lBQUFELFFBQUEsQ0FBQXBGLElBQUE7WUFFdkMsT0FBTSxJQUFBd0YsdUJBQWEsRUFBQ25GLElBQUksRUFBRVQsS0FBSyxFQUFFZ0QsUUFBUSxDQUFDNkMsY0FBYyxDQUFBLENBQUUsRUFBRTNELEtBQUssQ0FBQztVQUFBO1lBQUFvRCxvQkFBQSxHQUFBRSxRQUFBLENBQUFNLElBQUE7WUFBckZ0QixLQUFLLEdBQUFjLG9CQUFBLENBQUxkLEtBQUs7WUFBRUMsT0FBTyxHQUFBYSxvQkFBQSxDQUFQYixPQUFPO1lBQ3RCWSxPQUFPLEdBQUc7Y0FBRTVFLElBQUksRUFBSkEsSUFBSTtjQUFFK0QsS0FBSyxFQUFMQSxLQUFLO2NBQUVDLE9BQU8sRUFBUEE7WUFBTyxDQUFFO1VBQUM7WUFBQWUsUUFBQSxDQUFBQyxJQUFBO1lBRW5DOUIsa0JBQWtCLENBQUMsQ0FBQzBCLE9BQU8sQ0FBQyxFQUFFRCxPQUFPLENBQUM7WUFBQyxPQUFBSSxRQUFBLENBQUFPLE1BQUE7VUFBQTtZQUFBLE9BQUFQLFFBQUEsQ0FBQUUsTUFBQSxXQUVsQztjQUFFQyxPQUFPLEVBQUVOLE9BQU8sQ0FBQ2IsS0FBSyxLQUFLLElBQUk7Y0FBRUEsS0FBSyxFQUFFYSxPQUFPLENBQUNiO1lBQUssQ0FBRTtVQUFBO1VBQUE7WUFBQSxPQUFBZ0IsUUFBQSxDQUFBUSxJQUFBO1FBQUE7TUFBQSxHQUFBYixPQUFBO0lBQUEsQ0FDakUsRUFBQTtFQUFBLEVBQ0Y7RUFFRDtFQUNBO0VBQ0E7RUFDQSxJQUFNYyxlQUFlLEdBQUcsSUFBQUMsNEJBQWdCLEVBQUMsVUFBT3pGLElBQVk7SUFBQSxPQUFJRyxTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUFxRSxZQUFBLFlBQUFDLElBQUEsQ0FBQSxTQUFBaUIsU0FBQTtNQUFBLElBQUFDLE9BQUEsRUFBQWxFLEtBQUE7TUFBQSxPQUFBK0MsWUFBQSxZQUFBTSxJQUFBLFdBQUFjLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBWixJQUFBLEdBQUFZLFNBQUEsQ0FBQWpHLElBQUE7VUFBQTtZQUN4RGdHLE9BQU8sR0FBR2xELEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQzZDLE9BQU87WUFDeEMsSUFBSSxDQUFDQSxPQUFPLENBQUMzRixJQUFJLENBQUMsRUFBRTtjQUNsQnlDLEtBQUssQ0FBQ1EsUUFBUSxDQUFDO2dCQUFFMEMsT0FBTyxFQUFBdkgsTUFBQSxDQUFBeUUsTUFBQSxDQUFBekUsTUFBQSxDQUFBeUUsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFPOEMsT0FBTyxDQUFBLE1BQUFFLGdCQUFBLGlCQUFHN0YsSUFBSSxFQUFHLElBQUksQ0FBQTtjQUFFLENBQUUsQ0FBQztZQUMzRDtZQUVNeUIsS0FBSyxHQUFHYyxRQUFRLENBQUN1RCxhQUFhLENBQUM5RixJQUFJLENBQUM7WUFBQSxNQUN0Q3lCLEtBQUssSUFBSWEsZUFBZSxLQUFLLFFBQVE7Y0FBQXNELFNBQUEsQ0FBQWpHLElBQUE7Y0FBQTtZQUFBO1lBQUFpRyxTQUFBLENBQUFqRyxJQUFBO1lBQ3ZDLE9BQU00RSxrQkFBa0IsQ0FBQ3ZFLElBQUksRUFBRSxJQUFBK0YsdUJBQVksRUFBQ3hELFFBQVEsQ0FBQzZDLGNBQWMsQ0FBQSxDQUFFLEVBQUVwRixJQUFJLENBQUMsRUFBRXlCLEtBQUssQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBbUUsU0FBQSxDQUFBTCxJQUFBO1FBQUE7TUFBQSxHQUFBRyxRQUFBO0lBQUEsQ0FFdkYsRUFBQTtFQUFBLEVBQUM7RUFFRjtFQUNBO0VBQ0E7RUFDQSxJQUFNTSxtQkFBbUIsR0FBRyxJQUFBckQseUJBQWEsRUFDdkMsVUFBT3NELFFBQW1CO0lBQUEsT0FBc0M5RixTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUFxRSxZQUFBLFlBQUFDLElBQUEsQ0FBQSxTQUFBeUIsU0FBQTtNQUFBLElBQUFDLGdCQUFBLEVBQUFDLFdBQUEsRUFBQXpCLE9BQUEsRUFBQXhCLFFBQUEsRUFBQVksS0FBQTtNQUFBLE9BQUFTLFlBQUEsWUFBQU0sSUFBQSxXQUFBdUIsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFyQixJQUFBLEdBQUFxQixTQUFBLENBQUExRyxJQUFBO1VBQUE7WUFDeER3RyxnQkFBZ0IsR0FBR0YsUUFBUSxJQUFJN0gsTUFBTSxDQUFDa0csSUFBSSxDQUFDL0IsUUFBUSxDQUFDK0QsVUFBVSxDQUFDO1lBQy9ERixXQUFXLEdBQTJCLENBQUEsQ0FBRSxFQUU5QztZQUNBO1lBQ016QixPQUFPLEdBQUd3QixnQkFBZ0IsQ0FBQ2hDLE1BQU0sQ0FBQyxVQUFDbkUsSUFBSSxFQUFJO2NBQy9DLElBQU15QixLQUFLLEdBQUdjLFFBQVEsQ0FBQytELFVBQVUsQ0FBQ3RHLElBQUksQ0FBQztjQUN2QyxPQUFPeUIsS0FBSyxHQUFHRCxrQkFBa0IsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsS0FBSztZQUNsRCxDQUFDLENBQUM7WUFDRmlCLGNBQWMsQ0FBQ2lDLE9BQU8sQ0FBQztZQUVqQnhCLFFBQVEsR0FBdUIsRUFBRTtZQUFBa0QsU0FBQSxDQUFBckIsSUFBQTtZQUFBcUIsU0FBQSxDQUFBMUcsSUFBQTtZQUVyQyxPQUFNZSxPQUFPLENBQUM2RixHQUFHLENBQ2ZKLGdCQUFnQixDQUFDSyxHQUFHLENBQUMsVUFBT3hHLElBQUk7Y0FBQSxPQUFJRyxTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUFxRSxZQUFBLFlBQUFDLElBQUEsQ0FBQSxTQUFBZ0MsU0FBQTtnQkFBQSxJQUFBaEYsS0FBQSxFQUFBaUYscUJBQUEsRUFBQTNDLEtBQUEsRUFBQUMsT0FBQTtnQkFBQSxPQUFBUSxZQUFBLFlBQUFNLElBQUEsV0FBQTZCLFNBQUE7a0JBQUEsa0JBQUFBLFNBQUEsQ0FBQTNCLElBQUEsR0FBQTJCLFNBQUEsQ0FBQWhILElBQUE7b0JBQUE7c0JBQzVCOEIsS0FBSyxHQUFHYyxRQUFRLENBQUMrRCxVQUFVLENBQUN0RyxJQUFJLENBQUM7c0JBQUEsSUFDbEN5QixLQUFLO3dCQUFBa0YsU0FBQSxDQUFBaEgsSUFBQTt3QkFBQTtzQkFBQTtzQkFBQSxPQUFBZ0gsU0FBQSxDQUFBMUIsTUFBQTtvQkFBQTtzQkFBQTBCLFNBQUEsQ0FBQWhILElBQUE7c0JBQ2lCLE9BQU0sSUFBQXdGLHVCQUFhLEVBQzVDbkYsSUFBSSxFQUNKLElBQUErRix1QkFBWSxFQUFDeEQsUUFBUSxDQUFDNkMsY0FBYyxDQUFBLENBQUUsRUFBRXBGLElBQUksQ0FBQyxFQUM3Q3VDLFFBQVEsQ0FBQzZDLGNBQWMsQ0FBQSxDQUFFLEVBQ3pCM0QsS0FBSyxDQUNOO29CQUFBO3NCQUFBaUYscUJBQUEsR0FBQUMsU0FBQSxDQUFBdEIsSUFBQTtzQkFMT3RCLEtBQUssR0FBQTJDLHFCQUFBLENBQUwzQyxLQUFLO3NCQUFFQyxPQUFPLEdBQUEwQyxxQkFBQSxDQUFQMUMsT0FBTztzQkFNdEJiLFFBQVEsQ0FBQ3lELElBQUksQ0FBQzt3QkFBRTVHLElBQUksRUFBSkEsSUFBSTt3QkFBRStELEtBQUssRUFBTEEsS0FBSzt3QkFBRUMsT0FBTyxFQUFQQTtzQkFBTyxDQUFFLENBQUM7c0JBQ3ZDLElBQUlELEtBQUssS0FBSyxJQUFJLEVBQUU7d0JBQ2xCcUMsV0FBVyxDQUFDcEcsSUFBSSxDQUFDLEdBQUcrRCxLQUFLO3NCQUMzQjtvQkFBQztvQkFBQTtzQkFBQSxPQUFBNEMsU0FBQSxDQUFBcEIsSUFBQTtrQkFBQTtnQkFBQSxHQUFBa0IsUUFBQTtjQUFBLENBQ0YsRUFBQTtZQUFBLEVBQUMsQ0FDSDtVQUFBO1lBQUFKLFNBQUEsQ0FBQXJCLElBQUE7WUFFRDlCLGtCQUFrQixDQUFDQyxRQUFRLEVBQUV3QixPQUFPLENBQUM7WUFBQyxPQUFBMEIsU0FBQSxDQUFBZixNQUFBO1VBQUE7WUFBQSxNQUdwQ2xILE1BQU0sQ0FBQ2tHLElBQUksQ0FBQzhCLFdBQVcsQ0FBQyxDQUFDbEgsTUFBTSxHQUFHLENBQUM7Y0FBQW1ILFNBQUEsQ0FBQTFHLElBQUE7Y0FBQTtZQUFBO1lBQy9Cb0UsS0FBSyxHQUFHLElBQUk4QyxLQUFLLENBQUMsbUJBQW1CLENBRzFDO1lBQ0Q5QyxLQUFLLENBQUMrQyxNQUFNLEdBQUd2RSxRQUFRLENBQUM2QyxjQUFjLENBQUEsQ0FBRTtZQUN4Q3JCLEtBQUssQ0FBQ04sTUFBTSxHQUFHMkMsV0FBVztZQUFDLE1BQ3JCckMsS0FBSztVQUFBO1lBQUEsS0FHVGtDLFFBQVE7Y0FBQUksU0FBQSxDQUFBMUcsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBMEcsU0FBQSxDQUFBcEIsTUFBQSxXQUNIZ0IsUUFBUSxDQUFDYyxNQUFNLENBQTBCLFVBQUNDLEdBQUcsRUFBRWhILElBQUksRUFBSTtjQUM1RGdILEdBQUcsQ0FBQ2hILElBQUksQ0FBQyxHQUFHLElBQUErRix1QkFBWSxFQUFDeEQsUUFBUSxDQUFDNkMsY0FBYyxDQUFBLENBQUUsRUFBRXBGLElBQUksQ0FBQztjQUN6RCxPQUFPZ0gsR0FBRztZQUNaLENBQUMsRUFBRSxDQUFBLENBQUUsQ0FBQztVQUFBO1lBQUEsT0FBQVgsU0FBQSxDQUFBcEIsTUFBQSxXQUdEMUMsUUFBUSxDQUFDNkMsY0FBYyxDQUFBLENBQUU7VUFBQTtVQUFBO1lBQUEsT0FBQWlCLFNBQUEsQ0FBQWQsSUFBQTtRQUFBO01BQUEsR0FBQVcsUUFBQTtJQUFBLENBQ2pDLEVBQUE7RUFBQSxFQUNGO0VBRUQ7RUFDQTtFQUNBO0VBQ0EsSUFBTWUsV0FBVyxHQUFHLElBQUF0RSx5QkFBYSxFQUMvQixVQUFDM0MsSUFBWSxFQUFvRTtJQUFBLElBQWxFa0gsWUFBQSxHQUFBbEYsU0FBQSxDQUFBOUMsTUFBQSxRQUFBOEMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBNkIsQ0FBQSxDQUFFO0lBQzVDLElBQUFtRixtQkFBQSxHQUF1QkQsWUFBWSxDQUEzQnpGLEtBQUs7TUFBTEEsS0FBSyxHQUFBMEYsbUJBQUEsY0FBRyxFQUFFLEdBQUFBLG1CQUFBO0lBRWxCLElBQU1DLGNBQWMsZ0JBQWtDLElBQUFDLFdBQUksRUFDeEQsVUFBQ0MsRUFBOEIsRUFBSTtNQ3RDL0IsSURzQ0RDLFFBQVEsR0FBUUQsRUFBWSxDQUE1QkMsUUFBUTtRQUFFQyxNQUFNLEdBQUFGLEVBQVksQ0FBbEJFLE1BQU07UUFBS0MsS0FBSyxHQUFBdkcsTUFBQSxDQUFBb0csRUFBQSxFQUE1QixDQUFBLFVBQUEsRUFBQSxRQUFBLENBQThCLENBQUY7TUFDM0I7TUFDQTtNQUNBLElBQUFJLGlCQUFBLEdBQWdFLElBQUFDLDJCQUFnQixFQUM5RWxGLEtBQUssRUFDTCxVQUFDWSxLQUFLLEVBQTZFO1VDdkMvRSxJQUFJaUUsRUFBRTtVRHVDMEUsT0FBQSxDQUNsRixDQUFBQSxFQUFBLEdBQUFqRSxLQUFLLENBQUN5RCxNQUFNLENBQUM5RyxJQUFJLENBQUMsTUFBQSxJQUFBLElBQUFzSCxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxFQUFFLEVBQ3hCakUsS0FBSyxDQUFDSSxNQUFNLENBQUN6RCxJQUFJLENBQUMsRUFDbEJxRCxLQUFLLENBQUNzQyxPQUFPLENBQUMzRixJQUFJLENBQUMsRUFDbkJxRCxLQUFLLENBQUNOLFVBQVUsQ0FBQy9DLElBQUksQ0FBQyxDQUN2QjtRQ3JDRCxDRHFDQyxFQUNENEgsNkJBQWtCLENBQ25CO1FBQUFDLGtCQUFBLE9BQUFDLGVBQUEsYUFBQUosaUJBQUE7UUFUTUssVUFBVSxHQUFBRixrQkFBQTtRQUFFRyxVQUFVLEdBQUFILGtCQUFBO1FBQUVJLFlBQVksR0FBQUosa0JBQUE7UUFBRUssZUFBZSxHQUFBTCxrQkFBQTtNQVc1RCxJQUFBTSxnQkFBUyxFQUFDLFlBQUs7UUFDYixJQUFNQyxhQUFhLEdBQUc3RixRQUFRLENBQUN1RCxhQUFhLENBQUM5RixJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDb0ksYUFBYSxJQUFJM0csS0FBSyxDQUFDdkMsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN0Q3FELFFBQVEsQ0FBQzhGLGFBQWEsQ0FBQ3JJLElBQUksRUFBRXlCLEtBQUssQ0FBQztRQUNyQztRQUNBLE9BQU8sWUFBSztVQUNWYyxRQUFRLENBQUMrRixlQUFlLENBQUN0SSxJQUFJLENBQUM7UUFDaEMsQ0FBQztNQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO01BRVIsSUFBTXVJLGlCQUFpQixHQUFHLElBQUE5Qyw0QkFBZ0IsRUFBQyxVQUFDbEcsS0FBYyxFQUFJO1FBQzVEZ0QsUUFBUSxDQUFDaUcsYUFBYSxDQUFDeEksSUFBSSxFQUFFVCxLQUFLLENBQUM7UUFDbkMsSUFBSStDLGVBQWUsS0FBSyxVQUFVLEVBQUU7VUFDbENDLFFBQVEsQ0FBQ2tHLGFBQWEsQ0FBQ3pJLElBQUksRUFBRXlCLEtBQUssRUFBRWxDLEtBQUssQ0FBQztRQUM1QztNQUNGLENBQUMsQ0FBQztNQUVGLElBQU1tSixVQUFVLEdBQUcsSUFBQWpELDRCQUFnQixFQUFDLFlBQUs7UUFDdkNELGVBQWUsQ0FBQ3hGLElBQUksQ0FBQztNQUN2QixDQUFDLENBQUM7TUFFRixJQUFNMkksVUFBVSxHQUFBdkssTUFBQSxDQUFBeUUsTUFBQSxDQUFBO1FBQ2Q3QyxJQUFJLEVBQUpBLElBQUk7UUFDSlQsS0FBSyxFQUFFd0ksVUFBVTtRQUNqQmhFLEtBQUssRUFBRWlFLFVBQVU7UUFDakJyQyxPQUFPLEVBQUVzQyxZQUFZO1FBQ3JCbEYsVUFBVSxFQUFFbUYsZUFBZTtRQUMzQlUsUUFBUSxFQUFFTCxpQkFBaUI7UUFDM0JNLE1BQU0sRUFBRUg7TUFBVSxDQUFBLEVBQ2ZqQixLQUFLLENBQ1Q7TUFFRCxJQUFNcUIsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSXJMLENBQVUsRUFBSTtRQ3BEbkMsSUFBSTZKLEVBQUU7UURxRFYsSUFBTS9ILEtBQUssR0FDVDlCLENBQUMsSUFBSSxJQUFBc0wsUUFBQSxhQUFPdEwsQ0FBQyxNQUFLLFFBQVEsSUFBSSxRQUFRLElBQUlBLENBQUMsR0FDdENBLENBQXlDLENBQUN1TCxNQUFNLENBQUN6SixLQUFLLEdBQ3ZEOUIsQ0FBQztRQUNQOEssaUJBQWlCLENBQUNoSixLQUFLLENBQUM7UUFDeEIsSUFDRSxhQUFBMEosaUJBQUssQ0FBQ0MsY0FBYyxDQUFDM0IsUUFBUSxDQUFDLEtBQzlCLENBQUFELEVBQUEsR0FBQ0MsUUFBUSxDQUFDRSxLQUFpQyxNQUFBLElBQUEsSUFBQUgsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVzQixRQUFRLENBQUEsRUFDckQ7VUFDRXJCLFFBQVEsQ0FBQ0UsS0FBaUMsQ0FBQ21CLFFBQWlDLENBQUNySixLQUFLLENBQUM7UUFDdkY7TUFDRixDQUFDO01BRUQsSUFBTTRKLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQSxFQUFRO1FDdkR2QixJQUFJN0IsRUFBRTtRRHdEVm9CLFVBQVUsQ0FBQSxDQUFFO1FBQ1osSUFDRSxhQUFBTyxpQkFBSyxDQUFDQyxjQUFjLENBQUMzQixRQUFRLENBQUMsS0FDOUIsQ0FBQUQsRUFBQSxHQUFDQyxRQUFRLENBQUNFLEtBQWlDLE1BQUEsSUFBQSxJQUFBSCxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRXVCLE1BQU0sQ0FBQSxFQUNuRDtVQUNFdEIsUUFBUSxDQUFDRSxLQUFpQyxDQUFDb0IsTUFBcUIsQ0FBQSxDQUFFO1FBQ3RFO01BQ0YsQ0FBQztNQUVELElBQUlyQixNQUFNLElBQUksT0FBT0EsTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUMxQyxPQUFPQSxNQUFNLENBQUNtQixVQUFVLENBQUM7TUFDM0I7TUFFQSxJQUFJLE9BQU9wQixRQUFRLEtBQUssVUFBVSxFQUFFO1FBQ2xDLE9BQVFBLFFBQW1ELENBQUNvQixVQUFVLENBQXVCO01BQy9GO01BRUEsaUJBQUlNLGlCQUFLLENBQUNDLGNBQWMsQ0FBQzNCLFFBQVEsQ0FBQyxFQUFFO1FBQ2xDLElBQU02QixXQUFXLEdBQUFoTCxNQUFBLENBQUF5RSxNQUFBLENBQUF6RSxNQUFBLENBQUF5RSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ1o4RixVQUFVLENBQUEsRUFBQTtVQUNiQyxRQUFRLEVBQUVFLGlCQUFpQjtVQUMzQkQsTUFBTSxFQUFFTTtRQUFlLENBQUEsQ0FDeEI7UUFDRCxvQkFBT0YsaUJBQUssQ0FBQ0ksWUFBWSxDQUFDOUIsUUFBOEIsRUFBRTZCLFdBQVcsQ0FBQztNQUN4RTtNQUVBLElBQUlySyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3VJLFFBQVEsQ0FBQyxFQUFFO1FBQzNCLG9CQUFPMEIsaUJBQUssQ0FBQ0ssYUFBYSxDQUFBckksS0FBQSxDQUFuQmdJLGlCQUFLLEdBQ1ZNLGVBQVEsRUFDUixJQUFJLEVBQUFDLE1BQUEsS0FBQUMsbUJBQUEsYUFDRGxDLFFBQVEsQ0FBQ2YsR0FBRyxDQUFDLFVBQUNrRCxLQUFLLEVBQUVDLEtBQUssRUFBSTtVQUMvQixpQkFBSVYsaUJBQUssQ0FBQ0MsY0FBYyxDQUFDUSxLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFNTixZQUFXLEdBQUFoTCxNQUFBLENBQUF5RSxNQUFBLENBQUF6RSxNQUFBLENBQUF5RSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ1o4RixVQUFVLENBQUEsRUFBQTtjQUNiaUIsR0FBRyxFQUFFRixLQUFLLENBQUNFLEdBQUcsSUFBSUQsS0FBSztjQUN2QmYsUUFBUSxFQUFFRSxpQkFBaUI7Y0FDM0JELE1BQU0sRUFBRU07WUFBZSxDQUFBLENBQ3hCO1lBQ0Qsb0JBQU9GLGlCQUFLLENBQUNJLFlBQVksQ0FBQ0ssS0FBMkIsRUFBRU4sWUFBVyxDQUFDO1VBQ3JFO1VBQ0EsT0FBT00sS0FBSztRQUNkLENBQUMsQ0FBQyxHQUNIO01BQ0g7TUFFQSxPQUFPLElBQUk7SUFDYixDQUFDLENBQ0Y7SUFFRHRDLGNBQWMsQ0FBQ3lDLFdBQVcsWUFBQUwsTUFBQSxDQUFZeEosSUFBSSxNQUFHO0lBRTdDLE9BQU9vSCxjQUFjO0VBQ3ZCLENBQUMsQ0FDRjtFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU0wQyxZQUFZLEdBQUcsSUFBQXJFLDRCQUFnQixFQUFDLFVBQU9oSSxDQUFhO0lBQUEsT0FBSTBDLFNBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsZUFBQXFFLFlBQUEsWUFBQUMsSUFBQSxDQUFBLFNBQUFzRixTQUFBO01BQUEsSUFBQUMsZUFBQSxFQUFBQyxLQUFBLEVBQUFDLEVBQUE7TUFBQSxPQUFBMUYsWUFBQSxZQUFBTSxJQUFBLFdBQUFxRixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQW5GLElBQUEsR0FBQW1GLFNBQUEsQ0FBQXhLLElBQUE7VUFBQTtZQUM1RGxDLENBQUMsS0FBQSxJQUFBLElBQURBLENBQUMsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBREEsQ0FBQyxDQUFFMk0sY0FBYyxDQUFBLENBQUU7WUFBQ0QsU0FBQSxDQUFBbkYsSUFBQTtZQUFBbUYsU0FBQSxDQUFBeEssSUFBQTtZQUVNLE9BQU1xRyxtQkFBbUIsQ0FBQSxDQUFFO1VBQUE7WUFBN0NnRSxlQUFlLEdBQUFHLFNBQUEsQ0FBQTlFLElBQUE7WUFDckJuRCxRQUFRLEtBQUEsSUFBQSxJQUFSQSxRQUFRLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVJBLFFBQVEsQ0FBRzhILGVBQWUsQ0FBQztZQUFDRyxTQUFBLENBQUF4SyxJQUFBO1lBQUE7VUFBQTtZQUFBd0ssU0FBQSxDQUFBbkYsSUFBQTtZQUFBa0YsRUFBQSxHQUFBQyxTQUFBO1lBRXRCRixLQUFLLEdBQUFDLEVBQUE7WUFJWC9ILGNBQWMsS0FBQSxJQUFBLElBQWRBLGNBQWMsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBZEEsY0FBYyxDQUFHO2NBQUUyRSxNQUFNLEVBQUVtRCxLQUFLLENBQUNuRCxNQUFNO2NBQUVyRCxNQUFNLEVBQUV3RyxLQUFLLENBQUN4RztZQUFNLENBQUUsQ0FBQztVQUFDO1VBQUE7WUFBQSxPQUFBMEcsU0FBQSxDQUFBNUUsSUFBQTtRQUFBO01BQUEsR0FBQXdFLFFBQUE7SUFBQSxDQUVwRSxFQUFBO0VBQUEsRUFBQztFQUVGLElBQU1NLFdBQVcsR0FBRyxJQUFBNUUsNEJBQWdCLEVBQUMsVUFBQ2hJLENBQWEsRUFBSTtJQUNyREEsQ0FBQyxLQUFBLElBQUEsSUFBREEsQ0FBQyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFEQSxDQUFDLENBQUUyTSxjQUFjLENBQUEsQ0FBRTtJQUNuQjdILFFBQVEsQ0FBQytILFdBQVcsQ0FBQSxDQUFFO0lBQ3RCbEksT0FBTyxLQUFBLElBQUEsSUFBUEEsT0FBTyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFQQSxPQUFPLENBQUEsQ0FBSTtFQUNiLENBQUMsQ0FBQztFQUVGO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNbUksYUFBYSxHQUFHLElBQUE1SCx5QkFBYSxFQUFDLFVBQUMzQyxJQUFZO0lBQUEsT0FBS3lDLEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQ1csTUFBTSxDQUFDekQsSUFBSSxDQUFDO0VBQUEsRUFBQztFQUNwRixJQUFNd0ssZUFBZSxHQUFHLElBQUE3SCx5QkFBYSxFQUFDLFVBQUMzQyxJQUFZO0lBQUEsT0FBS3lDLEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQ2EsUUFBUSxDQUFDM0QsSUFBSSxDQUFDO0VBQUEsRUFBQztFQUN4RixJQUFNeUssY0FBYyxHQUFHLElBQUE5SCx5QkFBYSxFQUFDLFVBQUNzRCxRQUFtQixFQUFJO0lBQzNELElBQU14QyxNQUFNLEdBQUdoQixLQUFLLENBQUNLLFFBQVEsQ0FBQSxDQUFFLENBQUNXLE1BQU07SUFDdEMsSUFBSSxDQUFDd0MsUUFBUSxFQUFFLE9BQU94QyxNQUFNO0lBQzVCLElBQU0xQyxNQUFNLEdBQTJCLENBQUEsQ0FBRTtJQUN6Q2tGLFFBQVEsQ0FBQ2pELE9BQU8sQ0FBQyxVQUFDaEQsSUFBSSxFQUFJO01BQ3hCLElBQUl5RCxNQUFNLENBQUN6RCxJQUFJLENBQUMsRUFBRTtRQUNoQmUsTUFBTSxDQUFDZixJQUFJLENBQUMsR0FBR3lELE1BQU0sQ0FBQ3pELElBQUksQ0FBQztNQUM3QjtJQUNGLENBQUMsQ0FBQztJQUNGLE9BQU9lLE1BQU07RUFDZixDQUFDLENBQUM7RUFDRixJQUFNMkosY0FBYyxHQUFHLElBQUEvSCx5QkFBYSxFQUFDLFVBQUMzQyxJQUFZO0lBQUEsT0FBS3lDLEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQzZDLE9BQU8sQ0FBQzNGLElBQUksQ0FBQyxJQUFJLEtBQUs7RUFBQSxFQUFDO0VBQy9GLElBQU0ySyxlQUFlLEdBQUcsSUFBQWhJLHlCQUFhLEVBQ25DLFVBQUNzRCxRQUFtQixFQUE4QjtJQUFBLElBQTVCMkUsZ0JBQWdCLEdBQUE1SSxTQUFBLENBQUE5QyxNQUFBLFFBQUE4QyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEtBQUs7SUFDNUMsSUFBTTJELE9BQU8sR0FBR2xELEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQzZDLE9BQU87SUFDeEMsSUFBSSxDQUFDTSxRQUFRLEVBQUU7TUFDYixPQUFPN0gsTUFBTSxDQUFDa0csSUFBSSxDQUFDcUIsT0FBTyxDQUFDLENBQUNqRSxJQUFJLENBQUMsVUFBQ2tJLEdBQUc7UUFBQSxPQUFLakUsT0FBTyxDQUFDaUUsR0FBRyxDQUFDO01BQUEsRUFBQztJQUN6RDtJQUNBLElBQUlnQixnQkFBZ0IsRUFBRTtNQUNwQixPQUFPM0UsUUFBUSxDQUFDNEUsS0FBSyxDQUFDLFVBQUM3SyxJQUFJO1FBQUEsT0FBSzJGLE9BQU8sQ0FBQzNGLElBQUksQ0FBQztNQUFBLEVBQUM7SUFDaEQ7SUFDQSxPQUFPaUcsUUFBUSxDQUFDdkUsSUFBSSxDQUFDLFVBQUMxQixJQUFJO01BQUEsT0FBSzJGLE9BQU8sQ0FBQzNGLElBQUksQ0FBQztJQUFBLEVBQUM7RUFDL0MsQ0FBQyxDQUNGO0VBQ0QsSUFBTThLLGlCQUFpQixHQUFHLElBQUFuSSx5QkFBYSxFQUFDLFVBQUMzQyxJQUFZO0lBQUEsT0FBS3lDLEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQ0MsVUFBVSxDQUFDL0MsSUFBSSxDQUFDLElBQUksS0FBSztFQUFBLEVBQUM7RUFDckcsSUFBTStLLGNBQWMsR0FBRyxJQUFBcEkseUJBQWEsRUFBQyxVQUFDcUksV0FBbUMsRUFBSTtJQUMzRTVNLE1BQU0sQ0FBQzZNLE9BQU8sQ0FBQ0QsV0FBVyxDQUFDLENBQUNoSSxPQUFPLENBQUMsVUFBQWtJLElBQUEsRUFBa0I7TUFBQSxJQUFBQyxLQUFBLE9BQUFyRCxlQUFBLGFBQUFvRCxJQUFBO1FBQWhCbEwsSUFBSSxHQUFBbUwsS0FBQTtRQUFFcEgsS0FBSyxHQUFBb0gsS0FBQTtNQUMvQzVJLFFBQVEsQ0FBQzZJLGFBQWEsQ0FBQ3BMLElBQUksRUFBRStELEtBQUssQ0FBQztJQUNyQyxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFDRixJQUFNc0gsZUFBZSxHQUFHLElBQUExSSx5QkFBYSxFQUFDLFVBQUMzQyxJQUFZLEVBQStCO0lBQUEsSUFBN0JzTCxTQUFBLEdBQUF0SixTQUFBLENBQUE5QyxNQUFBLFFBQUE4QyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFxQixJQUFJO0lBQzVFUyxLQUFLLENBQUNRLFFBQVEsQ0FBQztNQUFFMEMsT0FBTyxFQUFBdkgsTUFBQSxDQUFBeUUsTUFBQSxDQUFBekUsTUFBQSxDQUFBeUUsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFPSixLQUFLLENBQUNLLFFBQVEsQ0FBQSxDQUFFLENBQUM2QyxPQUFPLENBQUEsTUFBQUUsZ0JBQUEsaUJBQUc3RixJQUFJLEVBQUdzTCxTQUFTLENBQUE7SUFBRSxDQUFFLENBQUM7RUFDakYsQ0FBQyxDQUFDO0VBQ0YsSUFBTUMsZ0JBQWdCLEdBQUcsSUFBQTVJLHlCQUFhLEVBQUMsVUFBQzZJLFdBQW9DLEVBQUk7SUFDOUUvSSxLQUFLLENBQUNRLFFBQVEsQ0FBQztNQUFFMEMsT0FBTyxFQUFBdkgsTUFBQSxDQUFBeUUsTUFBQSxDQUFBekUsTUFBQSxDQUFBeUUsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFPSixLQUFLLENBQUNLLFFBQVEsQ0FBQSxDQUFFLENBQUM2QyxPQUFPLENBQUEsRUFBSzZGLFdBQVc7SUFBRSxDQUFFLENBQUM7RUFDOUUsQ0FBQyxDQUFDO0VBQ0YsSUFBTUMsZUFBZSxHQUFHLElBQUE5SSx5QkFBYSxFQUFDLFVBQUMrSSxNQUFpQixFQUFJO0lBQzFELElBQUksQ0FBQ0EsTUFBTSxFQUFFO01BQ1huSixRQUFRLENBQUMrSCxXQUFXLENBQUEsQ0FBRTtJQUN4QixDQUFDLE1BQU07TUFDTCxJQUFNcUIsV0FBVyxHQUE0QixDQUFBLENBQUU7TUFDL0NELE1BQU0sQ0FBQzFJLE9BQU8sQ0FBQyxVQUFDNEksS0FBSyxFQUFJO1FBQ3ZCO1FBQ0FELFdBQVcsQ0FBQ0MsS0FBSyxDQUFDLEdBQUdySixRQUFRLENBQUNzSixnQkFBZ0IsQ0FBQSxDQUFFLENBQUNELEtBQUssQ0FBQztNQUN6RCxDQUFDLENBQUM7TUFDRnJKLFFBQVEsQ0FBQ3VKLGNBQWMsQ0FBQ0gsV0FBVyxDQUFDO01BRXBDLElBQUFJLGVBQUEsR0FBZ0N0SixLQUFLLENBQUNLLFFBQVEsQ0FBQSxDQUFFO1FBQXhDNkMsT0FBTyxHQUFBb0csZUFBQSxDQUFQcEcsT0FBTztRQUFFNUMsVUFBVSxHQUFBZ0osZUFBQSxDQUFWaEosVUFBVTtNQUMzQixJQUFNaUosVUFBVSxHQUFBNU4sTUFBQSxDQUFBeUUsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFROEMsT0FBTyxDQUFFO01BQ2pDLElBQU10QixhQUFhLEdBQUFqRyxNQUFBLENBQUF5RSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFFLFVBQVUsQ0FBRTtNQUN2QzJJLE1BQU0sQ0FBQzFJLE9BQU8sQ0FBQyxVQUFDNEksS0FBSyxFQUFJO1FBQ3ZCLE9BQU9JLFVBQVUsQ0FBQ0osS0FBSyxDQUFDO1FBQ3hCLE9BQU92SCxhQUFhLENBQUN1SCxLQUFLLENBQUM7TUFDN0IsQ0FBQyxDQUFDO01BQ0ZuSixLQUFLLENBQUNRLFFBQVEsQ0FBQztRQUFFMEMsT0FBTyxFQUFFcUcsVUFBVTtRQUFFakosVUFBVSxFQUFFc0I7TUFBYSxDQUFFLENBQUM7TUFFbEVxSCxNQUFNLENBQUMxSSxPQUFPLENBQUMsVUFBQzRJLEtBQUssRUFBSTtRQUN2QnJKLFFBQVEsQ0FBQzZJLGFBQWEsQ0FBQ1EsS0FBSyxFQUFFLElBQUksQ0FBQztNQUNyQyxDQUFDLENBQUM7SUFDSjtFQUNGLENBQUMsQ0FBQztFQUNGLElBQU1LLG9CQUFvQixHQUFHLElBQUF0Six5QkFBYSxFQUN4QyxVQUFPdUosUUFBb0U7SUFBQSxPQUFJL0wsU0FBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxlQUFBcUUsWUFBQSxZQUFBQyxJQUFBLENBQUEsU0FBQTBILFNBQUE7TUFBQSxJQUFBbkMsZUFBQSxFQUFBb0MsR0FBQTtNQUFBLE9BQUE1SCxZQUFBLFlBQUFNLElBQUEsV0FBQXVILFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBckgsSUFBQSxHQUFBcUgsU0FBQSxDQUFBMU0sSUFBQTtVQUFBO1lBQUEwTSxTQUFBLENBQUFySCxJQUFBO1lBQUFxSCxTQUFBLENBQUExTSxJQUFBO1lBRW5ELE9BQU1xRyxtQkFBbUIsQ0FBQSxDQUFFO1VBQUE7WUFBN0NnRSxlQUFlLEdBQUFxQyxTQUFBLENBQUFoSCxJQUFBO1lBQUEsS0FDakI2RyxRQUFRO2NBQUFHLFNBQUEsQ0FBQTFNLElBQUE7Y0FBQTtZQUFBO1lBQUEwTSxTQUFBLENBQUExTSxJQUFBO1lBQ1YsT0FBTXVNLFFBQVEsQ0FBQ2xDLGVBQWUsQ0FBQztVQUFBO1lBQUEsT0FBQXFDLFNBQUEsQ0FBQXBILE1BQUEsV0FFMUIrRSxlQUFlO1VBQUE7WUFBQXFDLFNBQUEsQ0FBQXJILElBQUE7WUFBQW9ILEdBQUEsR0FBQUMsU0FBQTtZQUFBLE9BQUFBLFNBQUEsQ0FBQXBILE1BQUEsV0FFZmhELFNBQVM7VUFBQTtVQUFBO1lBQUEsT0FBQW9LLFNBQUEsQ0FBQTlHLElBQUE7UUFBQTtNQUFBLEdBQUE0RyxRQUFBO0lBQUEsQ0FFbkIsRUFBQTtFQUFBLEVBQ0Y7RUFFRCxJQUFNRyxZQUFZLEdBQWlCLElBQUFDLGNBQU8sRUFDeEM7SUFBQSxPQUFNbk8sTUFBQSxDQUFBeUUsTUFBQSxDQUFBekUsTUFBQSxDQUFBeUUsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUNETixRQUFRLENBQUMrSixZQUFZLENBQUEsRUFBQTtNQUV4QkUsY0FBYyxFQUFFeEcsbUJBQW1CO01BQ25Dd0MsYUFBYSxFQUFFakcsUUFBUSxDQUFDaUcsYUFBYTtNQUVyQytCLGFBQWEsRUFBYkEsYUFBYTtNQUNiQyxlQUFlLEVBQWZBLGVBQWU7TUFDZkMsY0FBYyxFQUFkQSxjQUFjO01BQ2RDLGNBQWMsRUFBZEEsY0FBYztNQUNkQyxlQUFlLEVBQWZBLGVBQWU7TUFDZkcsaUJBQWlCLEVBQWpCQSxpQkFBaUI7TUFDakJNLGFBQWEsRUFBRTdJLFFBQVEsQ0FBQzZJLGFBQWE7TUFDckNMLGNBQWMsRUFBZEEsY0FBYztNQUNkTSxlQUFlLEVBQWZBLGVBQWU7TUFDZkUsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7TUFDaEJqQixXQUFXLEVBQUVtQixlQUFlO01BQzVCZ0IsTUFBTSxFQUFFUixvQkFBb0I7TUFDNUJoRixXQUFXLEVBQVhBLFdBQVc7TUFDWG9CLGFBQWEsRUFBRTlGLFFBQVEsQ0FBQzhGLGFBQWE7TUFDckNDLGVBQWUsRUFBRS9GLFFBQVEsQ0FBQytGO0lBQWUsQ0FBQSxDQUFBO0VBQUEsQ0FDekMsRUFDRixDQUNFL0YsUUFBUSxDQUFDK0osWUFBWSxFQUNyQi9KLFFBQVEsQ0FBQ2lHLGFBQWEsRUFDdEJqRyxRQUFRLENBQUM2SSxhQUFhLEVBQ3RCN0ksUUFBUSxDQUFDOEYsYUFBYSxFQUN0QjlGLFFBQVEsQ0FBQytGLGVBQWUsRUFDeEJ0QyxtQkFBbUIsRUFDbkJ1RSxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLGVBQWUsRUFDZkcsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RNLGVBQWUsRUFDZkUsZ0JBQWdCLEVBQ2hCRSxlQUFlLEVBQ2ZRLG9CQUFvQixFQUNwQmhGLFdBQVcsQ0FDWixDQUNGO0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNeUYsU0FBUyxHQUFxQixJQUFBSCxjQUFPLEVBQ3pDO0lBQUEsT0FBTztNQUNMLElBQUl6RixNQUFNQSxDQUFBLEVBQUE7UUFDUixPQUFPckUsS0FBSyxDQUFDSyxRQUFRLENBQUEsQ0FBRSxDQUFDZ0UsTUFBTTtNQUNoQyxDQUFDO01BQ0QsSUFBSXJELE1BQU1BLENBQUEsRUFBQTtRQUNSLE9BQU9oQixLQUFLLENBQUNLLFFBQVEsQ0FBQSxDQUFFLENBQUNXLE1BQU07TUFDaEMsQ0FBQztNQUNELElBQUlFLFFBQVFBLENBQUEsRUFBQTtRQUNWLE9BQU9sQixLQUFLLENBQUNLLFFBQVEsQ0FBQSxDQUFFLENBQUNhLFFBQVE7TUFDbEMsQ0FBQztNQUNELElBQUlnQyxPQUFPQSxDQUFBLEVBQUE7UUFDVCxPQUFPbEQsS0FBSyxDQUFDSyxRQUFRLENBQUEsQ0FBRSxDQUFDNkMsT0FBTztNQUNqQyxDQUFDO01BQ0QsSUFBSTVDLFVBQVVBLENBQUEsRUFBQTtRQUNaLE9BQU9OLEtBQUssQ0FBQ0ssUUFBUSxDQUFBLENBQUUsQ0FBQ0MsVUFBVTtNQUNwQyxDQUFDO01BQ0R1RCxVQUFVLEVBQUUvRCxRQUFRLENBQUMrRCxVQUFVO01BQy9Ca0MsYUFBYSxFQUFFakcsUUFBUSxDQUFDaUcsYUFBYTtNQUNyQzRDLGFBQWEsRUFBRTdJLFFBQVEsQ0FBQzZJLGFBQWE7TUFDckN1QixlQUFlLEVBQUVwSyxRQUFRLENBQUNvSyxlQUFlO01BQ3pDbEUsYUFBYSxFQUFFbEcsUUFBUSxDQUFDa0csYUFBYTtNQUNyQ2xFLGtCQUFrQixFQUFsQkEsa0JBQWtCO01BQ2xCOEQsYUFBYSxFQUFFOUYsUUFBUSxDQUFDOEYsYUFBYTtNQUNyQ0MsZUFBZSxFQUFFL0YsUUFBUSxDQUFDK0YsZUFBZTtNQUN6Q3dCLFlBQVksRUFBWkEsWUFBWTtNQUNaTyxXQUFXLEVBQVhBO0lDMUdGLENEMkdDO0VBQUEsQ0FBQyxFQUNGLENBQ0U1SCxLQUFLLEVBQ0xGLFFBQVEsQ0FBQytELFVBQVUsRUFDbkIvRCxRQUFRLENBQUNpRyxhQUFhLEVBQ3RCakcsUUFBUSxDQUFDNkksYUFBYSxFQUN0QjdJLFFBQVEsQ0FBQ29LLGVBQWUsRUFDeEJwSyxRQUFRLENBQUNrRyxhQUFhLEVBQ3RCbEUsa0JBQWtCLEVBQ2xCaEMsUUFBUSxDQUFDOEYsYUFBYSxFQUN0QjlGLFFBQVEsQ0FBQytGLGVBQWUsRUFDeEJ3QixZQUFZLEVBQ1pPLFdBQVcsQ0FDWixDQUNGO0VBRUQsT0FBTztJQUFFaUMsWUFBWSxFQUFaQSxZQUFZO0lBQUVJLFNBQVMsRUFBVEEsU0FBUztJQUFFakssS0FBSyxFQUFMQTtFQUFLLENBQUU7QUFDM0MsQ0FBQztBQUFDLElBQUFtSyxRQUFBLEdBQUE5SyxPQUFBLGNBRWFELE9BQU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VFZmZlY3QsIG1lbW8sIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc0FzeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuaW1wb3J0IHsgdXNlU3RvcmVTZWxlY3Rvciwgc2hhbGxvd0VxdWFsQXJyYXlzIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbi8qKlxuICogT25seSBydWxlcyB3aXRoIGEgY3VzdG9tIGB2YWxpZGF0b3JgIGNhbiBiZSBnZW51aW5lbHkgYXN5bmNocm9ub3VzIOKAlFxuICogYnVpbHRpbiBydWxlcyByZXNvbHZlIHdpdGhpbiBhIG1pY3JvdGFzaywgc28gZmxpcHBpbmcgYHZhbGlkYXRpbmdgIGZvclxuICogdGhlbSB3b3VsZCBvbmx5IGNodXJuIHN1YnNjcmliZXJzIHdpdGhvdXQgZXZlciBiZWluZyB2aXNpYmxlLlxuICovXG5jb25zdCBoYXNDdXN0b21WYWxpZGF0b3IgPSAocnVsZXMpID0+IHJ1bGVzLnNvbWUoKHJ1bGUpID0+IHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJyk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHVzZUZvcm1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNvbnN0IHVzZUZvcm0gPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25SZXNldCwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJywgfSA9IGNvbmZpZztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKGNvbmZpZyk7XG4gICAgY29uc3QgeyBzdG9yZSB9ID0gZm9ybUNvcmU7XG4gICAgLy8gTWFyayBmaWVsZHMgYXMgdmFsaWRhdGluZyBpbiBPTkUgY29tbWl0LiB2YWxpZGF0aW5nIC8gdG91Y2hlZCBsaXZlIGluIHRoZVxuICAgIC8vIHN0b3JlIGFsb25nc2lkZSB2YWx1ZXMg4oCUIGZsaXBwaW5nIHRoZW0gKGUuZy4gYXN5bmMgdmFsaWRhdGlvbiBhcm91bmQgYVxuICAgIC8vIGJsdXIpIG11c3Qgbm90IHJlLXJlbmRlciB0aGUgZm9ybSByb290LCBvbmx5IHRoZSBmaWVsZHMgdGhhdCBzdWJzY3JpYmVkLlxuICAgIGNvbnN0IG1hcmtWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZXMpID0+IHtcbiAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV4dCA9IE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZyk7XG4gICAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIG5leHRbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB2YWxpZGF0aW5nOiBuZXh0IH0pO1xuICAgIH0pO1xuICAgIC8vIEZvbGQgcGVyLWZpZWxkIHJ1bGUgb3V0Y29tZXMgaW50byBBVCBNT1NUIG9uZSBzdG9yZSBjb21taXQ6IGVycm9ycyBhbmRcbiAgICAvLyB3YXJuaW5ncyBhcmUgbWVyZ2VkIG92ZXIgdGhlIGN1cnJlbnQgbWFwcyBhbmQgdGhlIGBjbGVhclZhbGlkYXRpbmdgIGZsYWdzXG4gICAgLy8gYXJlIHJlbW92ZWQgaW4gdGhlIFNBTUUgcGF0Y2guIEEgbm8tb3Agb3V0Y29tZSBjb21taXRzIG5vdGhpbmcgYXQgYWxsIOKAlFxuICAgIC8vIHBlci1maWVsZCBjb21taXRzIGhlcmUgcHJldmlvdXNseSBtYWRlIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24gc3dlZXAgZXZlcnlcbiAgICAvLyBzdWJzY3JpYmVyIE8oZmllbGRzKSB0aW1lcy5cbiAgICBjb25zdCBjb21taXRSdWxlT3V0Y29tZXMgPSB1c2VNZW1vaXplZEZuKChvdXRjb21lcywgY2xlYXJWYWxpZGF0aW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IGVycm9yc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHdhcm5pbmdzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5lcnJvcnMpO1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLndhcm5pbmdzKTtcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH0gb2Ygb3V0Y29tZXMpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lIGluIG5ld0Vycm9ycykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdFcnJvcnNbbmFtZV0gIT09IGVycm9yKSB7XG4gICAgICAgICAgICAgICAgbmV3RXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgZXJyb3JzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FybmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lIGluIG5ld1dhcm5pbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdXYXJuaW5nc1tuYW1lXSAhPT0gd2FybmluZykge1xuICAgICAgICAgICAgICAgIG5ld1dhcm5pbmdzW25hbWVdID0gd2FybmluZztcbiAgICAgICAgICAgICAgICB3YXJuaW5nc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzVG9DbGVhciA9IGNsZWFyVmFsaWRhdGluZy5maWx0ZXIoKG5hbWUpID0+IG5hbWUgaW4gc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgIGNvbnN0IHBhdGNoID0ge307XG4gICAgICAgIGlmIChlcnJvcnNDaGFuZ2VkKVxuICAgICAgICAgICAgcGF0Y2guZXJyb3JzID0gbmV3RXJyb3JzO1xuICAgICAgICBpZiAod2FybmluZ3NDaGFuZ2VkKVxuICAgICAgICAgICAgcGF0Y2gud2FybmluZ3MgPSBuZXdXYXJuaW5ncztcbiAgICAgICAgaWYgKGZsYWdzVG9DbGVhci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgICAgICBmbGFnc1RvQ2xlYXIuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXRjaC52YWxpZGF0aW5nID0gbmV3VmFsaWRhdGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZShwYXRjaCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIGNvbnN0IGZsYWdnZWQgPSBoYXNDdXN0b21WYWxpZGF0b3IocnVsZXMpID8gW25hbWVdIDogW107XG4gICAgICAgIG1hcmtWYWxpZGF0aW5nKGZsYWdnZWQpO1xuICAgICAgICBsZXQgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3I6IG51bGwsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgdmFsdWUsIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIHJ1bGVzKTtcbiAgICAgICAgICAgIG91dGNvbWUgPSB7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjb21taXRSdWxlT3V0Y29tZXMoW291dGNvbWVdLCBmbGFnZ2VkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBvdXRjb21lLmVycm9yID09PSBudWxsLCBlcnJvcjogb3V0Y29tZS5lcnJvciB9O1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCBibHVyIGhhbmRsZXJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVGaWVsZEJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdG91Y2hlZCA9IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgaWYgKCF0b3VjaGVkW25hbWVdKSB7XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdG91Y2hlZCksIHsgW25hbWVdOiB0cnVlIH0pIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICAvLyBPbmUgY29tbWl0IHRvIHJhaXNlIHRoZSB2YWxpZGF0aW5nIGZsYWdzICh2YWxpZGF0b3ItYmVhcmluZyBmaWVsZHNcbiAgICAgICAgLy8gb25seSksIG9uZSBjb21taXQgdG8gbGFuZCBldmVyeSBlcnJvci93YXJuaW5nIGFuZCBjbGVhciB0aGUgZmxhZ3MuXG4gICAgICAgIGNvbnN0IGZsYWdnZWQgPSBmaWVsZHNUb1ZhbGlkYXRlLmZpbHRlcigobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzID8gaGFzQ3VzdG9tVmFsaWRhdG9yKHJ1bGVzKSA6IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgbWFya1ZhbGlkYXRpbmcoZmxhZ2dlZCk7XG4gICAgICAgIGNvbnN0IG91dGNvbWVzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5aWVsZCBQcm9taXNlLmFsbChmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghcnVsZXMpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSB5aWVsZCBydW5SdWxlc0FzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIG91dGNvbWVzLnB1c2goeyBuYW1lLCBlcnJvciwgd2FybmluZyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgY29tbWl0UnVsZU91dGNvbWVzKG91dGNvbWVzLCBmbGFnZ2VkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICAgICAgICAgIGVycm9yLmVycm9ycyA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgLy8gUGVyLWZpZWxkIHN0b3JlIHN1YnNjcmlwdGlvbjogdGhpcyBmaWVsZCByZS1yZW5kZXJzIG9ubHkgd2hlbiBpdHNcbiAgICAgICAgICAgIC8vIG93biB2YWx1ZS9lcnJvci90b3VjaGVkL3ZhbGlkYXRpbmcgc2xpY2UgY2hhbmdlcy5cbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZFZhbHVlLCBmaWVsZEVycm9yLCBmaWVsZFRvdWNoZWQsIGZpZWxkVmFsaWRhdGluZ10gPSB1c2VTdG9yZVNlbGVjdG9yKHN0b3JlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gc3RhdGUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JzW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b3VjaGVkW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YWxpZGF0aW5nW25hbWVdLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9LCBzaGFsbG93RXF1YWxBcnJheXMpO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGb3JtSW5zdGFuY2Ug4oCTIGVuaGFuY2VkIEFQSSBmb3IgY29uc3VtZXJzLlxuICAgIC8vXG4gICAgLy8gRXZlcnkgbWV0aG9kIGlzIHdyYXBwZWQgaW4gdXNlTWVtb2l6ZWRGbiAoc3RhYmxlIGlkZW50aXR5LCBhbHdheXMgcmVhZHMgdGhlXG4gICAgLy8gbGF0ZXN0IHN0b3JlIHN0YXRlKSBzbyB0aGUgaW5zdGFuY2Ugb2JqZWN0IGl0c2VsZiBpcyBJREVOVElUWS1TVEFCTEUgZm9yXG4gICAgLy8gdGhlIGxpZmV0aW1lIG9mIHRoZSBmb3JtIOKAlCB0aGlzIGlzIHdoYXQgbGV0cyBQcm9Gb3JtIHB1Ymxpc2ggaXQgdGhyb3VnaCB0aGVcbiAgICAvLyBzdGFibGUgY29udGV4dCB3aXRob3V0IHJlLXJlbmRlcmluZyBzdWJzY3JpYmVycyBvbiBlYWNoIGtleXN0cm9rZS5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBnZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnNbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkud2FybmluZ3NbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkc0Vycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWRbbmFtZV0gfHwgZmFsc2UpO1xuICAgIGNvbnN0IGlzRmllbGRzVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3QgdG91Y2hlZCA9IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRvdWNoZWQpLnNvbWUoKGtleSkgPT4gdG91Y2hlZFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsRmllbGRzVG91Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LmV2ZXJ5KChuYW1lKSA9PiB0b3VjaGVkW25hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZUxpc3Quc29tZSgobmFtZSkgPT4gdG91Y2hlZFtuYW1lXSk7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFZhbGlkYXRpbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLnZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UpO1xuICAgIGNvbnN0IHNldEZpZWxkc0Vycm9yID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3IpLmZvckVhY2goKFtuYW1lLCBlcnJvcl0pID0+IHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBpc1RvdWNoZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQpLCB7IFtuYW1lXTogaXNUb3VjaGVkIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkKSwgZmllbGRzVG91Y2gpIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlc2V0Rm9ybUZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKGZpZWxkcykgPT4ge1xuICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWVzID0ge307XG4gICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBNb3VudC1mcm96ZW4gaW5pdGlhbFZhbHVlcyDigJQgY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIHJlc2V0RmllbGRzLlxuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9IGZvcm1Db3JlLmdldEluaXRpYWxWYWx1ZXMoKVtmaWVsZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlKHJlc2V0VmFsdWVzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgdG91Y2hlZCwgdmFsaWRhdGluZyB9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCB0b3VjaGVkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB2YWxpZGF0aW5nKTtcbiAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUb3VjaGVkW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogbmV3VG91Y2hlZCwgdmFsaWRhdGluZzogbmV3VmFsaWRhdGluZyB9KTtcbiAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IoZmllbGQsIG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzdWJtaXRXaXRoVmFsaWRhdGlvbiA9IHVzZU1lbW9pemVkRm4oKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSksIHsgdmFsaWRhdGVGaWVsZHM6IHZhbGlkYXRlRmllbGRzQXN5bmMsIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLCBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLCBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLCByZXNldEZpZWxkczogcmVzZXRGb3JtRmllbGRzLCBzdWJtaXQ6IHN1Ym1pdFdpdGhWYWxpZGF0aW9uLCBkZWZpbmVGaWVsZCwgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCwgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQgfSkpLCBbXG4gICAgICAgIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkc0FzeW5jLFxuICAgICAgICBnZXRGaWVsZEVycm9yLFxuICAgICAgICBnZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIGdldEZpZWxkc0Vycm9yLFxuICAgICAgICBpc0ZpZWxkVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZHNUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkVmFsaWRhdGluZyxcbiAgICAgICAgc2V0RmllbGRzRXJyb3IsXG4gICAgICAgIHNldEZpZWxkVG91Y2hlZCxcbiAgICAgICAgc2V0RmllbGRzVG91Y2hlZCxcbiAgICAgICAgcmVzZXRGb3JtRmllbGRzLFxuICAgICAgICBzdWJtaXRXaXRoVmFsaWRhdGlvbixcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSW50ZXJuYWxzIOKAkyBleHBvc2VkIGZvciBQcm9Gb3JtIGludGVncmF0aW9uLiBEYXRhIGZpZWxkcyBhcmUgR0VUVEVSUyB0aGF0XG4gICAgLy8gcmVhZCB0aGUgbGl2ZSBzdG9yZSwgc28gdGhlIG9iamVjdCBpcyBpZGVudGl0eS1zdGFibGUgeWV0IG5ldmVyIHN0YWxlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGludGVybmFscyA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgZ2V0IHZhbHVlcygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9ycygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLmVycm9ycztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHdhcm5pbmdzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkud2FybmluZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB0b3VjaGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHZhbGlkYXRpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nO1xuICAgICAgICB9LFxuICAgICAgICBmaWVsZFJ1bGVzOiBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmc6IGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBzdG9yZSxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICBdKTtcbiAgICByZXR1cm4geyBmb3JtSW5zdGFuY2UsIGludGVybmFscywgc3RvcmUgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|