@1money/component-ui 0.0.27 → 0.0.28
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/Calendar/Calendar.js +2 -1
- package/es/components/Checkbox/Checkbox.js +2 -1
- package/es/components/Checkbox/CheckboxGroup.js +2 -1
- package/es/components/Checkbox/index.js +2 -1
- package/es/components/Input/Amount/Amount.d.ts +2 -2
- package/es/components/Input/Amount/Amount.js +5 -2
- package/es/components/Input/Input/Input.js +2 -1
- package/es/components/Input/Mask/Mask.d.ts +2 -2
- package/es/components/Input/Mask/Mask.js +5 -2
- package/es/components/Input/OTP/OTP.d.ts +2 -2
- package/es/components/Input/OTP/OTP.js +5 -2
- package/es/components/Input/Password/Password.d.ts +2 -2
- package/es/components/Input/Password/Password.js +5 -2
- package/es/components/Input/Search/Search.d.ts +2 -2
- package/es/components/Input/Search/Search.js +5 -2
- package/es/components/Input/TextArea/TextArea.d.ts +2 -2
- package/es/components/Input/TextArea/TextArea.js +5 -2
- package/es/components/Input/Trade/Trade.d.ts +2 -2
- package/es/components/Input/Trade/Trade.js +5 -2
- package/es/components/ProForm/ProForm.d.ts +2 -1
- package/es/components/ProForm/ProForm.js +120 -49
- package/es/components/ProForm/ProFormDependency.d.ts +2 -1
- package/es/components/ProForm/ProFormDependency.js +101 -8
- package/es/components/ProForm/Submitter.js +42 -3
- package/es/components/ProForm/core/constants.d.ts +1 -1
- package/es/components/ProForm/core/constants.js +3 -3
- package/es/components/ProForm/core/hooks/useForm.d.ts +2 -2
- package/es/components/ProForm/core/hooks/useForm.js +249 -113
- package/es/components/ProForm/core/hooks/useFormCore.js +3 -3
- package/es/components/ProForm/core/interface.d.ts +26 -0
- package/es/components/ProForm/core/useFormItem.d.ts +1 -0
- package/es/components/ProForm/core/useFormItem.js +56 -4
- package/es/components/ProForm/index.d.ts +3 -2
- package/es/components/ProForm/index.js +8 -2
- package/es/components/ProForm/interface.d.ts +11 -5
- package/es/components/Radio/RadioGroup.js +2 -1
- package/es/components/Slider/Slider.js +2 -1
- package/es/components/Switch/Switch.js +2 -1
- package/es/index.css +1 -1
- package/lib/components/Calendar/Calendar.js +2 -1
- package/lib/components/Checkbox/Checkbox.js +2 -1
- package/lib/components/Checkbox/CheckboxGroup.js +2 -1
- package/lib/components/Checkbox/index.js +2 -1
- package/lib/components/Input/Amount/Amount.d.ts +2 -2
- package/lib/components/Input/Amount/Amount.js +5 -2
- package/lib/components/Input/Input/Input.js +2 -1
- package/lib/components/Input/Mask/Mask.d.ts +2 -2
- package/lib/components/Input/Mask/Mask.js +5 -2
- package/lib/components/Input/OTP/OTP.d.ts +2 -2
- package/lib/components/Input/OTP/OTP.js +5 -2
- package/lib/components/Input/Password/Password.d.ts +2 -2
- package/lib/components/Input/Password/Password.js +5 -2
- package/lib/components/Input/Search/Search.d.ts +2 -2
- package/lib/components/Input/Search/Search.js +5 -2
- package/lib/components/Input/TextArea/TextArea.d.ts +2 -2
- package/lib/components/Input/TextArea/TextArea.js +5 -2
- package/lib/components/Input/Trade/Trade.d.ts +2 -2
- package/lib/components/Input/Trade/Trade.js +5 -2
- package/lib/components/ProForm/ProForm.d.ts +2 -1
- package/lib/components/ProForm/ProForm.js +121 -50
- package/lib/components/ProForm/ProFormDependency.d.ts +2 -1
- package/lib/components/ProForm/ProFormDependency.js +108 -11
- package/lib/components/ProForm/Submitter.js +44 -5
- package/lib/components/ProForm/core/constants.d.ts +1 -1
- package/lib/components/ProForm/core/constants.js +3 -3
- package/lib/components/ProForm/core/hooks/useForm.d.ts +2 -2
- package/lib/components/ProForm/core/hooks/useForm.js +247 -112
- package/lib/components/ProForm/core/hooks/useFormCore.js +3 -3
- package/lib/components/ProForm/core/interface.d.ts +26 -0
- package/lib/components/ProForm/core/useFormItem.d.ts +1 -0
- package/lib/components/ProForm/core/useFormItem.js +58 -6
- package/lib/components/ProForm/index.d.ts +3 -2
- package/lib/components/ProForm/index.js +8 -2
- package/lib/components/ProForm/interface.d.ts +11 -5
- package/lib/components/Radio/RadioGroup.js +2 -1
- package/lib/components/Slider/Slider.js +2 -1
- package/lib/components/Switch/Switch.js +2 -1
- package/lib/index.css +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/index.generated.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
-
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
3
2
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
3
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
4
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
5
5
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
6
|
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; } } }; }
|
|
7
7
|
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; } }
|
|
@@ -41,20 +41,43 @@ var __rest = this && this.__rest || function (s, e) {
|
|
|
41
41
|
}
|
|
42
42
|
return t;
|
|
43
43
|
};
|
|
44
|
-
import
|
|
44
|
+
import { useState, useMemo, useCallback, useEffect, memo, Fragment } from 'react';
|
|
45
|
+
import React from 'react';
|
|
45
46
|
import { useEventCallback, useMemoizedFn, useSafeState } from '@1money/hooks';
|
|
46
47
|
import { useFormCore } from './useFormCore';
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Helpers – resolve nested paths
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
function resolveValue(values, name) {
|
|
52
|
+
if (!name.includes('.')) return values[name];
|
|
53
|
+
var keys = name.split('.');
|
|
54
|
+
var current = values;
|
|
55
|
+
var _iterator = _createForOfIteratorHelper(keys),
|
|
56
|
+
_step;
|
|
57
|
+
try {
|
|
58
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
59
|
+
var key = _step.value;
|
|
60
|
+
if (current === null || current === undefined || _typeof(current) !== 'object') return undefined;
|
|
61
|
+
current = current[key];
|
|
62
|
+
}
|
|
63
|
+
} catch (err) {
|
|
64
|
+
_iterator.e(err);
|
|
65
|
+
} finally {
|
|
66
|
+
_iterator.f();
|
|
67
|
+
}
|
|
68
|
+
return current;
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// useForm
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
47
73
|
export var useForm = function useForm() {
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
onValuesChange: onValuesChange,
|
|
56
|
-
validateTrigger: validateTrigger
|
|
57
|
-
});
|
|
74
|
+
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
75
|
+
var onFinish = config.onFinish,
|
|
76
|
+
onFinishFailed = config.onFinishFailed,
|
|
77
|
+
onReset = config.onReset,
|
|
78
|
+
_config$validateTrigg = config.validateTrigger,
|
|
79
|
+
validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
|
|
80
|
+
var formCore = useFormCore(config);
|
|
58
81
|
var _useSafeState = useSafeState({}),
|
|
59
82
|
_useSafeState2 = _slicedToArray(_useSafeState, 2),
|
|
60
83
|
validating = _useSafeState2[0],
|
|
@@ -66,9 +89,12 @@ export var useForm = function useForm() {
|
|
|
66
89
|
var allTouched = useMemo(function () {
|
|
67
90
|
return Object.assign(Object.assign({}, formCore.touched), extraTouched);
|
|
68
91
|
}, [formCore.touched, extraTouched]);
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// Async field validation – each rule is processed exactly once
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
69
95
|
var validateFieldAsync = useMemoizedFn(function (name, value, rules) {
|
|
70
96
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
71
|
-
var
|
|
97
|
+
var _iterator2, _step2, rule, error, _error, _error2, _error3, _error4, _error5, emailPattern, _error6, _error7, result, _error8, errorMessage;
|
|
72
98
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
73
99
|
while (1) switch (_context.prev = _context.next) {
|
|
74
100
|
case 0:
|
|
@@ -85,135 +111,169 @@ export var useForm = function useForm() {
|
|
|
85
111
|
return Object.assign(Object.assign({}, prev), _defineProperty({}, name, true));
|
|
86
112
|
});
|
|
87
113
|
_context.prev = 3;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
114
|
+
_iterator2 = _createForOfIteratorHelper(rules);
|
|
115
|
+
_context.prev = 5;
|
|
116
|
+
_iterator2.s();
|
|
117
|
+
case 7:
|
|
118
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
119
|
+
_context.next = 69;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
rule = _step2.value;
|
|
123
|
+
if (!(rule.required && (value === undefined || value === null || value === ''))) {
|
|
124
|
+
_context.next = 13;
|
|
91
125
|
break;
|
|
92
126
|
}
|
|
127
|
+
error = rule.message || "".concat(name, " is required");
|
|
128
|
+
formCore.setFieldError(name, error);
|
|
93
129
|
return _context.abrupt("return", {
|
|
94
130
|
isValid: false,
|
|
95
|
-
error:
|
|
131
|
+
error: error
|
|
96
132
|
});
|
|
97
|
-
case
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
_iterator.s();
|
|
101
|
-
case 10:
|
|
102
|
-
if ((_step = _iterator.n()).done) {
|
|
103
|
-
_context.next = 56;
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
rule = _step.value;
|
|
107
|
-
if (!(rule.validator && typeof rule.validator === 'function')) {
|
|
108
|
-
_context.next = 28;
|
|
133
|
+
case 13:
|
|
134
|
+
if (!(rule.min && typeof value === 'string' && value.length < rule.min)) {
|
|
135
|
+
_context.next = 17;
|
|
109
136
|
break;
|
|
110
137
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
138
|
+
_error = rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
|
|
139
|
+
formCore.setFieldError(name, _error);
|
|
140
|
+
return _context.abrupt("return", {
|
|
141
|
+
isValid: false,
|
|
142
|
+
error: _error
|
|
143
|
+
});
|
|
144
|
+
case 17:
|
|
145
|
+
if (!(rule.max && typeof value === 'string' && value.length > rule.max)) {
|
|
117
146
|
_context.next = 21;
|
|
118
147
|
break;
|
|
119
148
|
}
|
|
120
|
-
|
|
121
|
-
formCore.setFieldError(name,
|
|
149
|
+
_error2 = rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
|
|
150
|
+
formCore.setFieldError(name, _error2);
|
|
122
151
|
return _context.abrupt("return", {
|
|
123
152
|
isValid: false,
|
|
124
|
-
error:
|
|
153
|
+
error: _error2
|
|
125
154
|
});
|
|
126
155
|
case 21:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
formCore.setFieldError(name, errorMessage);
|
|
156
|
+
if (!(rule.pattern && typeof value === 'string' && !rule.pattern.test(value))) {
|
|
157
|
+
_context.next = 25;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
_error3 = rule.message || "".concat(name, " format is invalid");
|
|
161
|
+
formCore.setFieldError(name, _error3);
|
|
134
162
|
return _context.abrupt("return", {
|
|
135
163
|
isValid: false,
|
|
136
|
-
error:
|
|
164
|
+
error: _error3
|
|
137
165
|
});
|
|
138
|
-
case
|
|
166
|
+
case 25:
|
|
139
167
|
if (!(rule["enum"] && Array.isArray(rule["enum"]) && value)) {
|
|
140
|
-
_context.next =
|
|
168
|
+
_context.next = 30;
|
|
141
169
|
break;
|
|
142
170
|
}
|
|
143
171
|
if (rule["enum"].includes(value)) {
|
|
144
|
-
_context.next =
|
|
172
|
+
_context.next = 30;
|
|
145
173
|
break;
|
|
146
174
|
}
|
|
147
|
-
|
|
148
|
-
formCore.setFieldError(name,
|
|
175
|
+
_error4 = rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
176
|
+
formCore.setFieldError(name, _error4);
|
|
149
177
|
return _context.abrupt("return", {
|
|
150
178
|
isValid: false,
|
|
151
|
-
error:
|
|
179
|
+
error: _error4
|
|
152
180
|
});
|
|
153
|
-
case
|
|
181
|
+
case 30:
|
|
154
182
|
if (!(rule.type === 'number' && value !== undefined && value !== null && value !== '')) {
|
|
155
|
-
_context.next =
|
|
183
|
+
_context.next = 35;
|
|
156
184
|
break;
|
|
157
185
|
}
|
|
158
186
|
if (!(typeof value !== 'number' || isNaN(value))) {
|
|
159
|
-
_context.next =
|
|
187
|
+
_context.next = 35;
|
|
160
188
|
break;
|
|
161
189
|
}
|
|
162
|
-
|
|
163
|
-
formCore.setFieldError(name,
|
|
190
|
+
_error5 = rule.message || "".concat(name, " must be a number");
|
|
191
|
+
formCore.setFieldError(name, _error5);
|
|
164
192
|
return _context.abrupt("return", {
|
|
165
193
|
isValid: false,
|
|
166
|
-
error:
|
|
194
|
+
error: _error5
|
|
167
195
|
});
|
|
168
|
-
case
|
|
196
|
+
case 35:
|
|
169
197
|
if (!(rule.type === 'email' && value)) {
|
|
170
|
-
_context.next =
|
|
198
|
+
_context.next = 41;
|
|
171
199
|
break;
|
|
172
200
|
}
|
|
173
201
|
emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
174
202
|
if (emailPattern.test(String(value))) {
|
|
175
|
-
_context.next =
|
|
203
|
+
_context.next = 41;
|
|
176
204
|
break;
|
|
177
205
|
}
|
|
178
|
-
|
|
179
|
-
formCore.setFieldError(name,
|
|
206
|
+
_error6 = rule.message || "".concat(name, " must be a valid email");
|
|
207
|
+
formCore.setFieldError(name, _error6);
|
|
180
208
|
return _context.abrupt("return", {
|
|
181
209
|
isValid: false,
|
|
182
|
-
error:
|
|
210
|
+
error: _error6
|
|
183
211
|
});
|
|
184
|
-
case
|
|
212
|
+
case 41:
|
|
185
213
|
if (!(rule.type === 'url' && value)) {
|
|
186
|
-
_context.next =
|
|
214
|
+
_context.next = 51;
|
|
187
215
|
break;
|
|
188
216
|
}
|
|
189
|
-
_context.prev =
|
|
217
|
+
_context.prev = 42;
|
|
190
218
|
new URL(String(value));
|
|
191
|
-
_context.next =
|
|
219
|
+
_context.next = 51;
|
|
192
220
|
break;
|
|
193
|
-
case
|
|
194
|
-
_context.prev =
|
|
195
|
-
_context.
|
|
196
|
-
|
|
197
|
-
formCore.setFieldError(name,
|
|
221
|
+
case 46:
|
|
222
|
+
_context.prev = 46;
|
|
223
|
+
_context.t0 = _context["catch"](42);
|
|
224
|
+
_error7 = rule.message || "".concat(name, " must be a valid URL");
|
|
225
|
+
formCore.setFieldError(name, _error7);
|
|
198
226
|
return _context.abrupt("return", {
|
|
199
227
|
isValid: false,
|
|
200
|
-
error:
|
|
228
|
+
error: _error7
|
|
201
229
|
});
|
|
202
|
-
case
|
|
203
|
-
|
|
230
|
+
case 51:
|
|
231
|
+
if (!(rule.validator && typeof rule.validator === 'function')) {
|
|
232
|
+
_context.next = 67;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
_context.prev = 52;
|
|
236
|
+
_context.next = 55;
|
|
237
|
+
return Promise.resolve(rule.validator(value, formCore.values));
|
|
238
|
+
case 55:
|
|
239
|
+
result = _context.sent;
|
|
240
|
+
if (!(result !== true && result !== undefined)) {
|
|
241
|
+
_context.next = 60;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
_error8 = typeof result === 'string' ? result : 'Validation failed';
|
|
245
|
+
formCore.setFieldError(name, _error8);
|
|
246
|
+
return _context.abrupt("return", {
|
|
247
|
+
isValid: false,
|
|
248
|
+
error: _error8
|
|
249
|
+
});
|
|
250
|
+
case 60:
|
|
251
|
+
_context.next = 67;
|
|
204
252
|
break;
|
|
205
|
-
case
|
|
206
|
-
_context.
|
|
253
|
+
case 62:
|
|
254
|
+
_context.prev = 62;
|
|
255
|
+
_context.t1 = _context["catch"](52);
|
|
256
|
+
errorMessage = _context.t1 instanceof Error ? _context.t1.message : 'Validation error';
|
|
257
|
+
formCore.setFieldError(name, errorMessage);
|
|
258
|
+
return _context.abrupt("return", {
|
|
259
|
+
isValid: false,
|
|
260
|
+
error: errorMessage
|
|
261
|
+
});
|
|
262
|
+
case 67:
|
|
263
|
+
_context.next = 7;
|
|
207
264
|
break;
|
|
208
|
-
case
|
|
209
|
-
_context.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
_context.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
265
|
+
case 69:
|
|
266
|
+
_context.next = 74;
|
|
267
|
+
break;
|
|
268
|
+
case 71:
|
|
269
|
+
_context.prev = 71;
|
|
270
|
+
_context.t2 = _context["catch"](5);
|
|
271
|
+
_iterator2.e(_context.t2);
|
|
272
|
+
case 74:
|
|
273
|
+
_context.prev = 74;
|
|
274
|
+
_iterator2.f();
|
|
275
|
+
return _context.finish(74);
|
|
276
|
+
case 77:
|
|
217
277
|
if (formCore.errors[name]) {
|
|
218
278
|
formCore.setFieldError(name, null);
|
|
219
279
|
}
|
|
@@ -221,21 +281,24 @@ export var useForm = function useForm() {
|
|
|
221
281
|
isValid: true,
|
|
222
282
|
error: null
|
|
223
283
|
});
|
|
224
|
-
case
|
|
225
|
-
_context.prev =
|
|
284
|
+
case 79:
|
|
285
|
+
_context.prev = 79;
|
|
226
286
|
setValidating(function (prev) {
|
|
227
287
|
var newValidating = Object.assign({}, prev);
|
|
228
288
|
delete newValidating[name];
|
|
229
289
|
return newValidating;
|
|
230
290
|
});
|
|
231
|
-
return _context.finish(
|
|
232
|
-
case
|
|
291
|
+
return _context.finish(79);
|
|
292
|
+
case 82:
|
|
233
293
|
case "end":
|
|
234
294
|
return _context.stop();
|
|
235
295
|
}
|
|
236
|
-
}, _callee, null, [[3,,
|
|
296
|
+
}, _callee, null, [[3,, 79, 82], [5, 71, 74, 77], [42, 46], [52, 62]]);
|
|
237
297
|
}));
|
|
238
298
|
});
|
|
299
|
+
// ---------------------------------------------------------------------------
|
|
300
|
+
// Async field blur handler
|
|
301
|
+
// ---------------------------------------------------------------------------
|
|
239
302
|
var handleFieldBlur = useEventCallback(function (name) {
|
|
240
303
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
241
304
|
var rules;
|
|
@@ -251,7 +314,7 @@ export var useForm = function useForm() {
|
|
|
251
314
|
break;
|
|
252
315
|
}
|
|
253
316
|
_context2.next = 5;
|
|
254
|
-
return validateFieldAsync(name, formCore.values
|
|
317
|
+
return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
|
|
255
318
|
case 5:
|
|
256
319
|
case "end":
|
|
257
320
|
return _context2.stop();
|
|
@@ -259,6 +322,9 @@ export var useForm = function useForm() {
|
|
|
259
322
|
}, _callee2);
|
|
260
323
|
}));
|
|
261
324
|
});
|
|
325
|
+
// ---------------------------------------------------------------------------
|
|
326
|
+
// Validate all fields async
|
|
327
|
+
// ---------------------------------------------------------------------------
|
|
262
328
|
var validateFieldsAsync = useMemoizedFn(function (nameList) {
|
|
263
329
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
264
330
|
var fieldsToValidate, hasError, fieldErrors, validationPromises, error;
|
|
@@ -280,7 +346,7 @@ export var useForm = function useForm() {
|
|
|
280
346
|
break;
|
|
281
347
|
}
|
|
282
348
|
_context3.next = 4;
|
|
283
|
-
return validateFieldAsync(name, formCore.values
|
|
349
|
+
return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
|
|
284
350
|
case 4:
|
|
285
351
|
_yield$validateFieldA = _context3.sent;
|
|
286
352
|
isValid = _yield$validateFieldA.isValid;
|
|
@@ -313,7 +379,7 @@ export var useForm = function useForm() {
|
|
|
313
379
|
break;
|
|
314
380
|
}
|
|
315
381
|
return _context4.abrupt("return", nameList.reduce(function (acc, name) {
|
|
316
|
-
acc[name] = formCore.values
|
|
382
|
+
acc[name] = resolveValue(formCore.values, name);
|
|
317
383
|
return acc;
|
|
318
384
|
}, {}));
|
|
319
385
|
case 13:
|
|
@@ -325,6 +391,9 @@ export var useForm = function useForm() {
|
|
|
325
391
|
}, _callee4);
|
|
326
392
|
}));
|
|
327
393
|
});
|
|
394
|
+
// ---------------------------------------------------------------------------
|
|
395
|
+
// defineField – used by standalone (non-ProForm) consumers
|
|
396
|
+
// ---------------------------------------------------------------------------
|
|
328
397
|
var defineField = useCallback(function (name) {
|
|
329
398
|
var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
330
399
|
var _fieldOptions$rules = fieldOptions.rules,
|
|
@@ -411,6 +480,49 @@ export var useForm = function useForm() {
|
|
|
411
480
|
FieldComponent.displayName = "Field(".concat(name, ")");
|
|
412
481
|
return FieldComponent;
|
|
413
482
|
}, [formCore, allTouched, validating, validateTrigger, handleFieldBlur]);
|
|
483
|
+
// ---------------------------------------------------------------------------
|
|
484
|
+
// handleSubmit / handleReset – for <form> event handlers
|
|
485
|
+
// ---------------------------------------------------------------------------
|
|
486
|
+
var handleSubmit = useEventCallback(function (e) {
|
|
487
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
488
|
+
var validatedValues, typed;
|
|
489
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
490
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
491
|
+
case 0:
|
|
492
|
+
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
493
|
+
_context5.prev = 1;
|
|
494
|
+
_context5.next = 4;
|
|
495
|
+
return validateFieldsAsync();
|
|
496
|
+
case 4:
|
|
497
|
+
validatedValues = _context5.sent;
|
|
498
|
+
onFinish === null || onFinish === void 0 ? void 0 : onFinish(validatedValues);
|
|
499
|
+
_context5.next = 12;
|
|
500
|
+
break;
|
|
501
|
+
case 8:
|
|
502
|
+
_context5.prev = 8;
|
|
503
|
+
_context5.t0 = _context5["catch"](1);
|
|
504
|
+
typed = _context5.t0;
|
|
505
|
+
onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
|
|
506
|
+
values: typed.values,
|
|
507
|
+
errors: typed.errors
|
|
508
|
+
});
|
|
509
|
+
case 12:
|
|
510
|
+
case "end":
|
|
511
|
+
return _context5.stop();
|
|
512
|
+
}
|
|
513
|
+
}, _callee5, null, [[1, 8]]);
|
|
514
|
+
}));
|
|
515
|
+
});
|
|
516
|
+
var handleReset = useEventCallback(function (e) {
|
|
517
|
+
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
518
|
+
formCore.resetFields();
|
|
519
|
+
setExtraTouched({});
|
|
520
|
+
setValidating({});
|
|
521
|
+
onReset === null || onReset === void 0 ? void 0 : onReset();
|
|
522
|
+
});
|
|
523
|
+
// ---------------------------------------------------------------------------
|
|
524
|
+
// FormInstance – enhanced API for consumers
|
|
525
|
+
// ---------------------------------------------------------------------------
|
|
414
526
|
var formInstance = useMemo(function () {
|
|
415
527
|
return Object.assign(Object.assign({}, formCore.formInstance), {
|
|
416
528
|
validateFields: validateFieldsAsync,
|
|
@@ -478,7 +590,8 @@ export var useForm = function useForm() {
|
|
|
478
590
|
} else {
|
|
479
591
|
var resetValues = {};
|
|
480
592
|
fields.forEach(function (field) {
|
|
481
|
-
|
|
593
|
+
var _a;
|
|
594
|
+
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
482
595
|
});
|
|
483
596
|
formCore.setFieldsValue(resetValues);
|
|
484
597
|
setExtraTouched(function (prev) {
|
|
@@ -501,41 +614,64 @@ export var useForm = function useForm() {
|
|
|
501
614
|
}
|
|
502
615
|
},
|
|
503
616
|
submit: function submit(callback) {
|
|
504
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
617
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
505
618
|
var validatedValues;
|
|
506
|
-
return _regeneratorRuntime.wrap(function
|
|
507
|
-
while (1) switch (
|
|
619
|
+
return _regeneratorRuntime.wrap(function _callee6$(_context6) {
|
|
620
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
508
621
|
case 0:
|
|
509
|
-
|
|
510
|
-
|
|
622
|
+
_context6.prev = 0;
|
|
623
|
+
_context6.next = 3;
|
|
511
624
|
return validateFieldsAsync();
|
|
512
625
|
case 3:
|
|
513
|
-
validatedValues =
|
|
626
|
+
validatedValues = _context6.sent;
|
|
514
627
|
if (!callback) {
|
|
515
|
-
|
|
628
|
+
_context6.next = 7;
|
|
516
629
|
break;
|
|
517
630
|
}
|
|
518
|
-
|
|
631
|
+
_context6.next = 7;
|
|
519
632
|
return callback(validatedValues);
|
|
520
633
|
case 7:
|
|
521
|
-
return
|
|
634
|
+
return _context6.abrupt("return", validatedValues);
|
|
522
635
|
case 10:
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
return
|
|
636
|
+
_context6.prev = 10;
|
|
637
|
+
_context6.t0 = _context6["catch"](0);
|
|
638
|
+
return _context6.abrupt("return", undefined);
|
|
526
639
|
case 13:
|
|
527
640
|
case "end":
|
|
528
|
-
return
|
|
641
|
+
return _context6.stop();
|
|
529
642
|
}
|
|
530
|
-
},
|
|
643
|
+
}, _callee6, null, [[0, 10]]);
|
|
531
644
|
}));
|
|
532
645
|
},
|
|
533
646
|
defineField: defineField,
|
|
534
647
|
registerField: formCore.registerField,
|
|
535
648
|
unregisterField: formCore.unregisterField
|
|
536
649
|
});
|
|
537
|
-
}, [formCore, allTouched, validating, validateFieldsAsync, defineField, initialValues, setValidating]);
|
|
538
|
-
|
|
650
|
+
}, [formCore, allTouched, validating, validateFieldsAsync, defineField, config.initialValues, setValidating]);
|
|
651
|
+
// ---------------------------------------------------------------------------
|
|
652
|
+
// Internals – exposed for ProForm integration
|
|
653
|
+
// ---------------------------------------------------------------------------
|
|
654
|
+
var internals = useMemo(function () {
|
|
655
|
+
return {
|
|
656
|
+
values: formCore.values,
|
|
657
|
+
errors: formCore.errors,
|
|
658
|
+
touched: allTouched,
|
|
659
|
+
validating: validating,
|
|
660
|
+
fieldRules: formCore.fieldRules,
|
|
661
|
+
setFieldValue: formCore.setFieldValue,
|
|
662
|
+
setFieldError: formCore.setFieldError,
|
|
663
|
+
validateField: formCore.validateField,
|
|
664
|
+
validateFieldAsync: validateFieldAsync,
|
|
665
|
+
registerField: formCore.registerField,
|
|
666
|
+
unregisterField: formCore.unregisterField,
|
|
667
|
+
handleSubmit: handleSubmit,
|
|
668
|
+
handleReset: handleReset
|
|
669
|
+
};
|
|
670
|
+
}, [formCore.values, formCore.errors, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
671
|
+
return {
|
|
672
|
+
formInstance: formInstance,
|
|
673
|
+
internals: internals
|
|
674
|
+
};
|
|
539
675
|
};
|
|
540
676
|
export default useForm;
|
|
541
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsIm1lbW8iLCJGcmFnbWVudCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJ1c2VGb3JtIiwiaW5pdGlhbFZhbHVlcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9wdGlvbnMiLCJvblZhbHVlc0NoYW5nZSIsIl9vcHRpb25zJHZhbGlkYXRlVHJpZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsIm5hbWUiLCJydWxlcyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImJhc2ljVmFsaWQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInJ1bGUiLCJlcnJvciIsImVycm9yTWVzc2FnZSIsIl9lcnJvciIsIl9lcnJvcjIiLCJlbWFpbFBhdHRlcm4iLCJfZXJyb3IzIiwiX2Vycm9yNCIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJ2YWxpZGF0ZUZpZWxkIiwiZXJyb3JzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJuIiwidmFsaWRhdG9yIiwidmFsdWVzIiwic2VudCIsInNldEZpZWxkRXJyb3IiLCJ0MCIsIkVycm9yIiwibWVzc2FnZSIsIkFycmF5IiwiaXNBcnJheSIsImluY2x1ZGVzIiwiY29uY2F0Iiwiam9pbiIsInR5cGUiLCJpc05hTiIsInRlc3QiLCJTdHJpbmciLCJVUkwiLCJ0MSIsInQyIiwiZiIsImZpbmlzaCIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJmaWVsZFJ1bGVzIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiaGFzRXJyb3IiLCJmaWVsZEVycm9ycyIsInZhbGlkYXRpb25Qcm9taXNlcyIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImtleXMiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCR2YWxpZGF0ZUZpZWxkQSIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImFsbCIsInJlZHVjZSIsImFjYyIsImRlZmluZUZpZWxkIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwiX2EiLCJfYiIsImNoaWxkcmVuIiwicmVuZGVyIiwicHJvcHMiLCJmaWVsZFZhbHVlIiwiZmllbGRFcnJvciIsImZpZWxkVG91Y2hlZCIsImZpZWxkVmFsaWRhdGluZyIsImV4aXN0aW5nUnVsZXMiLCJnZXRGaWVsZFJ1bGVzIiwicmVnaXN0ZXJGaWVsZCIsInVucmVnaXN0ZXJGaWVsZCIsImhhbmRsZUZpZWxkQ2hhbmdlIiwic2V0RmllbGRWYWx1ZSIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YiLCJ0YXJnZXQiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIl90b0NvbnN1bWFibGVBcnJheSIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJkaXNwbGF5TmFtZSIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJyZXNldEZpZWxkcyIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJzZXRGaWVsZHNWYWx1ZSIsIm5ld1RvdWNoZWQiLCJzdWJtaXQiLCJjYWxsYmFjayIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUlBLFNBQVMsR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxTQUFTLElBQUssVUFBVUMsT0FB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QU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV2ZW50Q2FsbGJhY2ssIHVzZU1lbW9pemVkRm4sIHVzZVNhZmVTdGF0ZSB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGluaXRpYWxWYWx1ZXMgPSB7fSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvblZhbHVlc0NoYW5nZSwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKHtcbiAgICAgICAgaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICB9KTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZEFzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUsIHJ1bGVzKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHRydWUgfSkpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2ljVmFsaWQgPSBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWJhc2ljVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3I6IGZvcm1Db3JlLmVycm9yc1tuYW1lXSB8fCBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS52YWxpZGF0b3IgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBQcm9taXNlLnJlc29sdmUocnVsZS52YWxpZGF0b3IodmFsdWUsIGZvcm1Db3JlLnZhbHVlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnVmFsaWRhdGlvbiBlcnJvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3I6IGVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLmVudW0gJiYgQXJyYXkuaXNBcnJheShydWxlLmVudW0pICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcnVsZS5lbnVtLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICdlbWFpbCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1haWxQYXR0ZXJuID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW1haWxQYXR0ZXJuLnRlc3QoU3RyaW5nKHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBlbWFpbGA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICd1cmwnICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVVJMKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIFVSTGA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgIGlmIChydWxlcyAmJiB2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkJsdXInKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgZm9ybUNvcmUudmFsdWVzW25hbWVdLCBydWxlcyk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIGZvcm1Db3JlLnZhbHVlc1tuYW1lXSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS52YWx1ZXM7XG4gICAgICAgICAgICBlcnJvci5lcnJvcnMgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW25hbWVdID0gZm9ybUNvcmUudmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VDYWxsYmFjaygobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IChfYiA9IGZvcm1Db3JlLnZhbHVlc1tuYW1lXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgICAgICAgICBjb25zdCBmaWVsZEVycm9yID0gZm9ybUNvcmUuZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRUb3VjaGVkID0gYWxsVG91Y2hlZFtuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsaWRhdGluZyA9IHZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdSdWxlcyAmJiBydWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQobmFtZSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIFtdKTsgLy8gT25seSByZWdpc3RlciBvbiBtb3VudFxuICAgICAgICAgICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQmx1cihuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSwgZXJyb3I6IGZpZWxkRXJyb3IsIHRvdWNoZWQ6IGZpZWxkVG91Y2hlZCwgdmFsaWRhdGluZzogZmllbGRWYWxpZGF0aW5nLCBvbkNoYW5nZTogaGFuZGxlRmllbGRDaGFuZ2UsIG9uQmx1cjogaGFuZGxlQmx1ciB9LCBwcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ3RhcmdldCcgaW4gZVxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZENoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQmx1cikpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIoZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAuLi5jaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsga2V5OiBjaGlsZC5rZXkgfHwgaW5kZXgsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgRmllbGRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmllbGQoJHtuYW1lfSlgO1xuICAgICAgICByZXR1cm4gRmllbGRDb21wb25lbnQ7XG4gICAgfSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgICAgICBoYW5kbGVGaWVsZEJsdXIsXG4gICAgXSk7XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS5mb3JtSW5zdGFuY2UpLCB7IHZhbGlkYXRlRmllbGRzOiB2YWxpZGF0ZUZpZWxkc0FzeW5jLCBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLCBnZXRGaWVsZEVycm9yOiAobmFtZSkgPT4gZm9ybUNvcmUuZXJyb3JzW25hbWVdLCBnZXRGaWVsZHNFcnJvcjogKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtQ29yZS5lcnJvcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIG5hbWVMaXN0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIGlzRmllbGRUb3VjaGVkOiAobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSB8fCBmYWxzZSwgaXNGaWVsZHNUb3VjaGVkOiAobmFtZUxpc3QsIGFsbEZpZWxkc1RvdWNoZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsRmllbGRzVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3Quc29tZSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH0sIGlzRmllbGRWYWxpZGF0aW5nOiAobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSwgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvciwgc2V0RmllbGRzRXJyb3I6IChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3IpLmZvckVhY2goKFtuYW1lLCBlcnJvcl0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBzZXRGaWVsZFRvdWNoZWQ6IChuYW1lLCBpc1RvdWNoZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogaXNUb3VjaGVkIH0pKSk7XG4gICAgICAgIH0sIHNldEZpZWxkc1RvdWNoZWQ6IChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgZmllbGRzVG91Y2gpKSk7XG4gICAgICAgIH0sIHJlc2V0RmllbGRzOiAoZmllbGRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9IGluaXRpYWxWYWx1ZXNbZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlKHJlc2V0VmFsdWVzKTtcbiAgICAgICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUb3VjaGVkW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb3VjaGVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKGZpZWxkLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgc3VibWl0OiAoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgZGVmaW5lRmllbGQsIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkIH0pKSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHNBc3luYyxcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgICAgIGluaXRpYWxWYWx1ZXMsXG4gICAgICAgIHNldFZhbGlkYXRpbmcsXG4gICAgXSk7XG4gICAgcmV0dXJuIFtmb3JtSW5zdGFuY2VdO1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
677
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJ2YWx1ZXMiLCJuYW1lIiwiaW5jbHVkZXMiLCJrZXlzIiwic3BsaXQiLCJjdXJyZW50IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsIm4iLCJrZXkiLCJ1bmRlZmluZWQiLCJfdHlwZW9mIiwiZXJyIiwiZiIsInVzZUZvcm0iLCJjb25maWciLCJhcmd1bWVudHMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInJ1bGUiLCJlcnJvciIsIl9lcnJvciIsIl9lcnJvcjIiLCJfZXJyb3IzIiwiX2Vycm9yNCIsIl9lcnJvcjUiLCJlbWFpbFBhdHRlcm4iLCJfZXJyb3I2IiwiX2Vycm9yNyIsIl9lcnJvcjgiLCJlcnJvck1lc3NhZ2UiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwiX2RlZmluZVByb3BlcnR5IiwicmVxdWlyZWQiLCJtZXNzYWdlIiwiY29uY2F0Iiwic2V0RmllbGRFcnJvciIsIm1pbiIsIm1heCIsInBhdHRlcm4iLCJ0ZXN0IiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInR5cGUiLCJpc05hTiIsIlN0cmluZyIsIlVSTCIsInQwIiwidmFsaWRhdG9yIiwic2VudCIsInQxIiwiRXJyb3IiLCJ0MiIsImZpbmlzaCIsImVycm9ycyIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJmaWVsZFJ1bGVzIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiaGFzRXJyb3IiLCJmaWVsZEVycm9ycyIsInZhbGlkYXRpb25Qcm9taXNlcyIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHZhbGlkYXRlRmllbGRBIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYWxsIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwiZXhpc3RpbmdSdWxlcyIsImdldEZpZWxkUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdCIsImNhbGxiYWNrIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJpbnRlcm5hbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZSCxDQUFDLEdBQUdHLEtBQUssR0FBRyxJQUFJSCxDQUFDLENBQUMsVUFBVUksT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0lBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDM0csT0FBTyxLQUFLSCxDQUFDLEtBQUtBLENBQUMsR0FBR0ssT0FBTyxDQUFDLEVBQUUsVUFBVUQsT0FBTyxFQUFFRSxNQUFNLEVBQUU7SUFDdkQsU0FBU0MsU0FBU0EsQ0FBQ0osS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDTixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzFGLFNBQVNDLFFBQVFBLENBQUNSLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUNFLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDN0YsU0FBU0YsSUFBSUEsQ0FBQ0ksTUFBTSxFQUFFO01BQUVBLE1BQU0s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QUVELGVBQWV6SyxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuLCB1c2VTYWZlU3RhdGUgfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcnMg4oCTIHJlc29sdmUgbmVzdGVkIHBhdGhzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpIHtcbiAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJy4nKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgICBjb25zdCBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gdmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gaXMgcmVxdWlyZWRgO1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1pblxuICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWF4XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVyblxuICAgICAgICAgICAgICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnVtXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHR5cGUgY2hlY2tzXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ2VtYWlsJyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbWFpbFBhdHRlcm4udGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIGVtYWlsYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ3VybCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgVVJMYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRvciAoc3luYyBvciBhc3luYykg4oCUIGV4ZWN1dGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnZhbGlkYXRvciAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIFByb21pc2UucmVzb2x2ZShydWxlLnZhbGlkYXRvcih2YWx1ZSwgZm9ybUNvcmUudmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|