@kando-env/kando-ui 1.2.70 → 1.2.71-alpha.1
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/lib/hooks/useInitializeHeaders.js +2 -3
- package/lib/i18n/en.json +1 -2
- package/lib/i18n/he.json +1 -1
- package/lib/macros/getVersion.js +2 -2
- package/lib/pages/SamplingsPage/DownloadCSV.js +2 -2
- package/lib/pages/SamplingsPage/SamplingActionDropdown.js +7 -2
- package/lib/pages/SamplingsPage/SamplingMobileModal.js +4 -6
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +195 -106
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +9 -7
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +7 -7
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +5 -5
- package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +14 -2
- package/lib/pages/SamplingsPage/samplingsPageUtils.js +9 -9
- package/lib/ui-kit/KandoTable/KandoTable.js +5 -5
- package/lib/utilities/File.js +3 -2
- package/package.json +1 -1
|
@@ -9,8 +9,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.SamplingProperties = void 0;
|
|
11
11
|
|
|
12
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
+
|
|
12
14
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
13
15
|
|
|
16
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
17
|
+
|
|
14
18
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
15
19
|
|
|
16
20
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
@@ -19,8 +23,6 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
19
23
|
|
|
20
24
|
var _axios = _interopRequireDefault(require("axios"));
|
|
21
25
|
|
|
22
|
-
var _moment = _interopRequireDefault(require("moment"));
|
|
23
|
-
|
|
24
26
|
var _reactDeviceDetect = require("react-device-detect");
|
|
25
27
|
|
|
26
28
|
var _formik = require("formik");
|
|
@@ -56,8 +58,12 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
56
58
|
/*
|
|
57
59
|
* Properties and Cancelling forms.
|
|
58
60
|
**/
|
|
61
|
+
var isPropertiesPage = function isPropertiesPage(pageType) {
|
|
62
|
+
return pageType === 'edit';
|
|
63
|
+
};
|
|
64
|
+
|
|
59
65
|
var SamplingProperties = function SamplingProperties() {
|
|
60
|
-
var _useState = (0, _react.useState)(
|
|
66
|
+
var _useState = (0, _react.useState)(new Date()),
|
|
61
67
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
62
68
|
collectionTime = _useState2[0],
|
|
63
69
|
setCollectionTime = _useState2[1];
|
|
@@ -93,18 +99,88 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
93
99
|
return state.permissions.user_info;
|
|
94
100
|
});
|
|
95
101
|
var dateFormat = userInfo.date_time_format === 'us' ? 'MMM d, yyyy hh:mm aa' : 'd/MM/yyyy HH:mm';
|
|
102
|
+
var pageType = (0, _react.useRef)('');
|
|
96
103
|
|
|
97
104
|
var _useState13 = (0, _react.useState)(),
|
|
98
105
|
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
99
|
-
|
|
100
|
-
|
|
106
|
+
samplingProperties = _useState14[0],
|
|
107
|
+
setSamplingProperties = _useState14[1];
|
|
108
|
+
|
|
109
|
+
var _useParams = (0, _reactRouterDom.useParams)(),
|
|
110
|
+
sampleId = _useParams.sampleId;
|
|
111
|
+
|
|
112
|
+
var initFormikValues = function initFormikValues(samplingProperties, isCanceled) {
|
|
113
|
+
var pageCollectionTime = (0, _samplingPropertiesUtils.isCollectLayout)(pageType.current) ? collectionTime : samplingProperties.sampling.collection_time;
|
|
114
|
+
var sam = samplingProperties.sampling;
|
|
115
|
+
formik.setValues({
|
|
116
|
+
lab_id: sam.lab_id,
|
|
117
|
+
collection_time: pageCollectionTime,
|
|
118
|
+
pump_sampling_volume: sam.pump_sampling_volume,
|
|
119
|
+
pump_battery_level: sam.pump_battery_level,
|
|
120
|
+
description: sam.description,
|
|
121
|
+
kando_rep: sam.kando_rep,
|
|
122
|
+
sampling_plan_id: sam.sampling_plan_id,
|
|
123
|
+
cancellation_reason: sam.cancellation_reason || '',
|
|
124
|
+
is_canceled: isCanceled
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
var isCancelledLayout = function isCancelledLayout(samplingProperties) {
|
|
129
|
+
var pageType2isCancelled = {
|
|
130
|
+
cancel: true,
|
|
131
|
+
collect: false,
|
|
132
|
+
revert_cancel: false
|
|
133
|
+
};
|
|
134
|
+
var isCanceled = pageType2isCancelled[pageType.current];
|
|
135
|
+
|
|
136
|
+
if (isCanceled === null) {
|
|
137
|
+
isCanceled = samplingProperties.sampling.is_canceled || false;
|
|
138
|
+
}
|
|
101
139
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
samplingProperties = _useState16[0],
|
|
105
|
-
setSamplingProperties = _useState16[1];
|
|
140
|
+
return isCanceled;
|
|
141
|
+
};
|
|
106
142
|
|
|
107
|
-
var
|
|
143
|
+
var fetchSamplingProperties = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
144
|
+
var samplingId,
|
|
145
|
+
op,
|
|
146
|
+
response,
|
|
147
|
+
sampling,
|
|
148
|
+
samplingProperties,
|
|
149
|
+
isCanceled,
|
|
150
|
+
_args = arguments;
|
|
151
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
152
|
+
while (1) {
|
|
153
|
+
switch (_context.prev = _context.next) {
|
|
154
|
+
case 0:
|
|
155
|
+
samplingId = _args.length > 0 && _args[0] !== undefined ? _args[0] : sampleId;
|
|
156
|
+
op = _args.length > 1 ? _args[1] : undefined;
|
|
157
|
+
_context.next = 4;
|
|
158
|
+
return _axios.default.get((0, _urls.urls)({
|
|
159
|
+
samplingId: samplingId
|
|
160
|
+
}).samplingProperties.fetchSampling.url);
|
|
161
|
+
|
|
162
|
+
case 4:
|
|
163
|
+
response = _context.sent;
|
|
164
|
+
sampling = response.data;
|
|
165
|
+
samplingProperties = sampling.sampling_properties;
|
|
166
|
+
pageType.current = detectPageType(samplingProperties.sampling.is_canceled, op);
|
|
167
|
+
setCollectionTime(determineCollectionTime(samplingProperties.sampling.collection_time, op));
|
|
168
|
+
isCanceled = isCancelledLayout(samplingProperties.sampling.is_canceled);
|
|
169
|
+
initFormikValues(samplingProperties, isCanceled);
|
|
170
|
+
setSamplingProperties(samplingProperties);
|
|
171
|
+
setSamplingPlan(sampling.sampling_plan);
|
|
172
|
+
|
|
173
|
+
case 13:
|
|
174
|
+
case "end":
|
|
175
|
+
return _context.stop();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}, _callee);
|
|
179
|
+
})), []);
|
|
180
|
+
(0, _react.useEffect)(function () {
|
|
181
|
+
fetchSamplingProperties(sampleId, getUrlQueryOp());
|
|
182
|
+
}, [samplingUpdated]);
|
|
183
|
+
var validationSchema = (0, _samplingPropertiesUtils.isCollectLayout)(pageType.current) ? _samplingPropertiesUtils.propertiesValidationSchema : _samplingPropertiesUtils.cancellationValidationSchema;
|
|
108
184
|
var formik = (0, _formik.useFormik)({
|
|
109
185
|
enableReinitialize: true,
|
|
110
186
|
initialValues: _samplingPropertiesUtils.samplingProperty,
|
|
@@ -151,99 +227,116 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
151
227
|
return formData;
|
|
152
228
|
};
|
|
153
229
|
|
|
154
|
-
var updateOrCreate = function
|
|
155
|
-
var
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
230
|
+
var updateOrCreate = /*#__PURE__*/function () {
|
|
231
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(formData) {
|
|
232
|
+
var _samplingProperties$s;
|
|
233
|
+
|
|
234
|
+
var updateOrCreateSuccess, samplingID;
|
|
235
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
236
|
+
while (1) {
|
|
237
|
+
switch (_context2.prev = _context2.next) {
|
|
238
|
+
case 0:
|
|
239
|
+
updateOrCreateSuccess = function updateOrCreateSuccess(msg) {
|
|
240
|
+
setSavingMsg(_i18n.default.t(msg));
|
|
241
|
+
setSamplingUpdated(true);
|
|
242
|
+
setOriginalSaveMessageWithTimeout();
|
|
243
|
+
handleClose();
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
samplingID = samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.id;
|
|
247
|
+
|
|
248
|
+
if (!(samplingID === null)) {
|
|
249
|
+
_context2.next = 16;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// create
|
|
254
|
+
formData.append("sampling[date]", collectionTime);
|
|
255
|
+
_context2.prev = 4;
|
|
256
|
+
_context2.next = 7;
|
|
257
|
+
return _axios.default.post((0, _urls.urls)().samplingProperties.createSampling.url, formData);
|
|
258
|
+
|
|
259
|
+
case 7:
|
|
260
|
+
updateOrCreateSuccess('buttons.created');
|
|
261
|
+
_context2.next = 14;
|
|
262
|
+
break;
|
|
263
|
+
|
|
264
|
+
case 10:
|
|
265
|
+
_context2.prev = 10;
|
|
266
|
+
_context2.t0 = _context2["catch"](4);
|
|
267
|
+
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
268
|
+
setOriginalSaveMessageWithTimeout();
|
|
269
|
+
|
|
270
|
+
case 14:
|
|
271
|
+
_context2.next = 27;
|
|
272
|
+
break;
|
|
273
|
+
|
|
274
|
+
case 16:
|
|
275
|
+
if (pageType.current === 'revert_cancel') {
|
|
276
|
+
formData.append("sampling[collection_time]", collectionTime);
|
|
277
|
+
} // update
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
_context2.prev = 17;
|
|
281
|
+
_context2.next = 20;
|
|
282
|
+
return _axios.default.put((0, _urls.urls)({
|
|
283
|
+
samplingId: samplingID
|
|
284
|
+
}).samplingProperties.updateSampling.url, formData);
|
|
285
|
+
|
|
286
|
+
case 20:
|
|
287
|
+
updateOrCreateSuccess('buttons.updated');
|
|
288
|
+
_context2.next = 27;
|
|
289
|
+
break;
|
|
290
|
+
|
|
291
|
+
case 23:
|
|
292
|
+
_context2.prev = 23;
|
|
293
|
+
_context2.t1 = _context2["catch"](17);
|
|
294
|
+
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
295
|
+
setOriginalSaveMessageWithTimeout();
|
|
296
|
+
|
|
297
|
+
case 27:
|
|
298
|
+
case "end":
|
|
299
|
+
return _context2.stop();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}, _callee2, null, [[4, 10], [17, 23]]);
|
|
303
|
+
}));
|
|
304
|
+
|
|
305
|
+
return function updateOrCreate(_x) {
|
|
306
|
+
return _ref2.apply(this, arguments);
|
|
162
307
|
};
|
|
308
|
+
}();
|
|
163
309
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
formData.append("sampling[date]", collectionTime);
|
|
310
|
+
var detectPageType = function detectPageType(isSamplingCancelled, op) {
|
|
311
|
+
var editPageValue = isSamplingCancelled ? 'cancel' : 'collect';
|
|
167
312
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
313
|
+
if (op === 'edit') {
|
|
314
|
+
return editPageValue;
|
|
315
|
+
} else if (op === _samplingsPageUtils.COLLECT_SAMPLING_OP) {
|
|
316
|
+
return 'collect';
|
|
317
|
+
} else if (op === _samplingsPageUtils.CANCEL_SAMPLING_OP) {
|
|
318
|
+
return 'cancel';
|
|
319
|
+
} else if (op === _samplingsPageUtils.REVERT_CANCELLATION) {
|
|
320
|
+
return 'revert_cancel';
|
|
174
321
|
} else {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
// update
|
|
178
|
-
_axios.default.put((0, _urls.urls)({
|
|
179
|
-
samplingId: samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s2 = samplingProperties.sampling) === null || _samplingProperties$s2 === void 0 ? void 0 : _samplingProperties$s2.id
|
|
180
|
-
}).samplingProperties.updateSampling.url, formData).then(function () {
|
|
181
|
-
updateOrCreateSuccess('buttons.updated');
|
|
182
|
-
}).catch(function () {
|
|
183
|
-
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
184
|
-
setOriginalSaveMessageWithTimeout();
|
|
185
|
-
});
|
|
322
|
+
return editPageValue;
|
|
186
323
|
}
|
|
187
324
|
};
|
|
188
325
|
|
|
189
|
-
var
|
|
190
|
-
var
|
|
326
|
+
var determineCollectionTime = function determineCollectionTime(serverCollectionTime, op) {
|
|
327
|
+
var currentTime = new Date();
|
|
328
|
+
var serverTime = serverCollectionTime ? new Date(serverCollectionTime) : currentTime;
|
|
329
|
+
var editPageValue = serverCollectionTime ? serverTime : currentTime;
|
|
191
330
|
|
|
192
331
|
if (op === 'edit') {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (collectionTimeServer) {
|
|
196
|
-
setCollectionTime(new Date(collectionTimeServer));
|
|
197
|
-
} else {
|
|
198
|
-
setCollectionTime(new Date());
|
|
199
|
-
}
|
|
332
|
+
return editPageValue;
|
|
200
333
|
} else if (op === _samplingsPageUtils.COLLECT_SAMPLING_OP) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
334
|
+
return currentTime;
|
|
335
|
+
} else if ([_samplingsPageUtils.CANCEL_SAMPLING_OP, _samplingsPageUtils.REVERT_CANCELLATION].includes(op)) {
|
|
336
|
+
return serverTime;
|
|
337
|
+
} else {
|
|
338
|
+
return editPageValue;
|
|
206
339
|
}
|
|
207
|
-
|
|
208
|
-
return _pageType;
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
var isPropertiesPage = pageType === 'edit';
|
|
212
|
-
|
|
213
|
-
var _useParams = (0, _reactRouterDom.useParams)(),
|
|
214
|
-
sampleId = _useParams.sampleId;
|
|
215
|
-
|
|
216
|
-
var fetchSamplingProperties = function fetchSamplingProperties() {
|
|
217
|
-
var samplingId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sampleId;
|
|
218
|
-
var op = arguments.length > 1 ? arguments[1] : undefined;
|
|
219
|
-
|
|
220
|
-
_axios.default.get((0, _urls.urls)({
|
|
221
|
-
samplingId: samplingId
|
|
222
|
-
}).samplingProperties.fetchSampling.url).then(function (res) {
|
|
223
|
-
var samplingRes = res.data;
|
|
224
|
-
var samplingProperties = samplingRes.sampling_properties;
|
|
225
|
-
var collectionTimeServer = samplingProperties.sampling.collection_time;
|
|
226
|
-
|
|
227
|
-
var _pageType = detectPageType(samplingProperties, collectionTimeServer, op);
|
|
228
|
-
|
|
229
|
-
setPageType(_pageType);
|
|
230
|
-
var isCanceled = _pageType === 'cancel' ? true : _pageType === 'collect' ? false : samplingProperties.sampling.is_canceled || false;
|
|
231
|
-
var pageCollectionTime = _pageType === 'collect' ? collectionTime : samplingProperties.sampling.collection_time;
|
|
232
|
-
var sam = samplingProperties.sampling;
|
|
233
|
-
formik.setValues({
|
|
234
|
-
lab_id: sam.lab_id,
|
|
235
|
-
collection_time: pageCollectionTime,
|
|
236
|
-
pump_sampling_volume: sam.pump_sampling_volume,
|
|
237
|
-
pump_battery_level: sam.pump_battery_level,
|
|
238
|
-
description: sam.description,
|
|
239
|
-
kando_rep: sam.kando_rep,
|
|
240
|
-
sampling_plan_id: sam.sampling_plan_id,
|
|
241
|
-
cancellation_reason: sam.cancellation_reason || '',
|
|
242
|
-
is_canceled: isCanceled
|
|
243
|
-
});
|
|
244
|
-
setSamplingProperties(samplingProperties);
|
|
245
|
-
setSamplingPlan(samplingRes.sampling_plan);
|
|
246
|
-
});
|
|
247
340
|
};
|
|
248
341
|
|
|
249
342
|
var getUrlQueryOp = function getUrlQueryOp() {
|
|
@@ -256,10 +349,6 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
256
349
|
return op;
|
|
257
350
|
};
|
|
258
351
|
|
|
259
|
-
(0, _react.useEffect)(function () {
|
|
260
|
-
fetchSamplingProperties(sampleId, getUrlQueryOp());
|
|
261
|
-
}, [samplingUpdated]);
|
|
262
|
-
|
|
263
352
|
if (!samplingPlan || !samplingProperties) {
|
|
264
353
|
return /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, null);
|
|
265
354
|
}
|
|
@@ -270,26 +359,26 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
270
359
|
samplingProperties: samplingProperties,
|
|
271
360
|
sampling: samplingPlan,
|
|
272
361
|
formik: formik,
|
|
273
|
-
pageType: pageType,
|
|
274
|
-
|
|
275
|
-
|
|
362
|
+
pageType: pageType.current,
|
|
363
|
+
collectionTime: collectionTime,
|
|
364
|
+
setCollectionTime: setCollectionTime,
|
|
276
365
|
setSamplingUpdated: setSamplingUpdated,
|
|
277
|
-
isDatePickerDisabled: isPropertiesPage,
|
|
366
|
+
isDatePickerDisabled: isPropertiesPage(pageType),
|
|
278
367
|
dateFormat: dateFormat
|
|
279
368
|
}), _reactDeviceDetect.isMobile && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesHeadMobile.SamplingPropertiesHeadMobile, {
|
|
280
369
|
samplingProperties: samplingProperties,
|
|
281
370
|
sampling: samplingPlan,
|
|
282
371
|
formik: formik,
|
|
283
|
-
pageType: pageType,
|
|
284
|
-
|
|
285
|
-
|
|
372
|
+
pageType: pageType.current,
|
|
373
|
+
collectionTime: collectionTime,
|
|
374
|
+
setCollectionTime: setCollectionTime,
|
|
286
375
|
setSamplingUpdated: setSamplingUpdated,
|
|
287
|
-
isDatePickerDisabled: isPropertiesPage,
|
|
376
|
+
isDatePickerDisabled: isPropertiesPage(pageType),
|
|
288
377
|
dateFormat: dateFormat
|
|
289
378
|
}), samplingProperties && pageType && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesForm.SamplingPropertiesForm, {
|
|
290
379
|
samplingProperties: samplingProperties,
|
|
291
380
|
sampling: samplingPlan,
|
|
292
|
-
pageType: pageType,
|
|
381
|
+
pageType: pageType.current,
|
|
293
382
|
setSamplingUpdated: setSamplingUpdated,
|
|
294
383
|
savingMsg: savingMsg,
|
|
295
384
|
handleClose: handleClose,
|
|
@@ -306,4 +395,4 @@ var SamplingPropertiesStyle = _styledComponents.default.div.withConfig({
|
|
|
306
395
|
displayName: "SamplingProperties__SamplingPropertiesStyle",
|
|
307
396
|
componentId: "sc-opklsf-0"
|
|
308
397
|
})(["", " ", ""], !_reactDeviceDetect.isMobile ? 'width: 830px;' : '', !_reactDeviceDetect.isMobile ? 'margin: 100px auto;' : '');
|
|
309
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWdlcy9TYW1wbGluZ3NQYWdlL1NhbXBsaW5nUHJvcGVydGllcy9TYW1wbGluZ1Byb3BlcnRpZXMudHN4Il0sIm5hbWVzIjpbIlNhbXBsaW5nUHJvcGVydGllcyIsIkRhdGUiLCJub3ciLCJmb3JtYXQiLCJjb2xsZWN0aW9uVGltZSIsInNldENvbGxlY3Rpb25UaW1lIiwicGhvdG9zIiwic2V0UGhvdG9zIiwicGhvdG9zVG9EZWxldGUiLCJzZXRQaG90b3NUb0RlbGV0ZSIsImkxOG4iLCJ0Iiwic2F2aW5nTXNnIiwic2V0U2F2aW5nTXNnIiwic2FtcGxpbmdVcGRhdGVkIiwic2V0U2FtcGxpbmdVcGRhdGVkIiwidW5kZWZpbmVkIiwic2FtcGxpbmdQbGFuIiwic2V0U2FtcGxpbmdQbGFuIiwiaGlzdG9yeSIsInF1ZXJ5IiwidXNlckluZm8iLCJzdGF0ZSIsInBlcm1pc3Npb25zIiwidXNlcl9pbmZvIiwiZGF0ZUZvcm1hdCIsImRhdGVfdGltZV9mb3JtYXQiLCJwYWdlVHlwZSIsInNldFBhZ2VUeXBlIiwic2FtcGxpbmdQcm9wZXJ0aWVzIiwic2V0U2FtcGxpbmdQcm9wZXJ0aWVzIiwidmFsaWRhdGlvblNjaGVtYSIsInByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hIiwiY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSIsImZvcm1payIsImVuYWJsZVJlaW5pdGlhbGl6ZSIsImluaXRpYWxWYWx1ZXMiLCJzYW1wbGluZ1Byb3BlcnR5IiwidmFsaWRhdGVPbkNoYW5nZSIsInZhbGlkYXRlT25CbHVyIiwib25TdWJtaXQiLCJ2YWx1ZXMiLCJoYW5kbGVTdWJtaXQiLCJoYW5kbGVDbG9zZSIsImdvQmFjayIsInBpY3R1cmVzX2F0dHJpYnV0ZXMiLCJzYXZlRm9ybURhdGEiLCJmb3JtRGF0YUJ1aWxkZXIiLCJ1cGRhdGVPckNyZWF0ZSIsInNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCIsInNldFRpbWVvdXQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwia2V5IiwidmFsdWUiLCJhcHBlbmQiLCJ1bmlxdWVQaG90b3NUb0RlbGV0ZSIsIlNldCIsImxlbmd0aCIsImZvckVhY2giLCJpZCIsImluZGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyIsIm1zZyIsInNhbXBsaW5nIiwiYXhpb3MiLCJwb3N0IiwiY3JlYXRlU2FtcGxpbmciLCJ1cmwiLCJ0aGVuIiwiY2F0Y2giLCJwdXQiLCJzYW1wbGluZ0lkIiwidXBkYXRlU2FtcGxpbmciLCJkZXRlY3RQYWdlVHlwZSIsImNvbGxlY3Rpb25UaW1lU2VydmVyIiwib3AiLCJfcGFnZVR5cGUiLCJpc19jYW5jZWxlZCIsIkNPTExFQ1RfU0FNUExJTkdfT1AiLCJDQU5DRUxfU0FNUExJTkdfT1AiLCJpc1Byb3BlcnRpZXNQYWdlIiwic2FtcGxlSWQiLCJmZXRjaFNhbXBsaW5nUHJvcGVydGllcyIsImdldCIsImZldGNoU2FtcGxpbmciLCJyZXMiLCJzYW1wbGluZ1JlcyIsImRhdGEiLCJzYW1wbGluZ19wcm9wZXJ0aWVzIiwiY29sbGVjdGlvbl90aW1lIiwiaXNDYW5jZWxlZCIsInBhZ2VDb2xsZWN0aW9uVGltZSIsInNhbSIsInNldFZhbHVlcyIsImxhYl9pZCIsInB1bXBfc2FtcGxpbmdfdm9sdW1lIiwicHVtcF9iYXR0ZXJ5X2xldmVsIiwiZGVzY3JpcHRpb24iLCJrYW5kb19yZXAiLCJzYW1wbGluZ19wbGFuX2lkIiwiY2FuY2VsbGF0aW9uX3JlYXNvbiIsInNhbXBsaW5nX3BsYW4iLCJnZXRVcmxRdWVyeU9wIiwiaW5jbHVkZXMiLCJpc01vYmlsZSIsIlNhbXBsaW5nUHJvcGVydGllc1N0eWxlIiwic3R5bGVkIiwiZGl2Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUtBOztBQUNBOztB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RSxJQUFBLGtCQUFrQixFQUFFOUUsa0JBRHRCO0FBRUUsSUFBQSxRQUFRLEVBQUVaLFlBRlo7QUFHRSxJQUFBLE1BQU0sRUFBRWlCLE1BSFY7QUFJRSxJQUFBLFFBQVEsRUFBRVAsUUFKWjtBQUtFLElBQUEsY0FBYyxFQUFFdkIsY0FMbEI7QUFNRSxJQUFBLGlCQUFpQixFQUFFQyxpQkFOckI7QUFPRSxJQUFBLGtCQUFrQixFQUFFVSxrQkFQdEI7QUFRRSxJQUFBLG9CQUFvQixFQUFFb0UsZ0JBUnhCO0FBU0UsSUFBQSxVQUFVLEVBQUUxRDtBQVRkLElBaEJKLEVBNkJHSSxrQkFBa0IsSUFBSUYsUUFBdEIsaUJBQ0MsNkJBQUMsOENBQUQ7QUFDRSxJQUFBLGtCQUFrQixFQUFFRSxrQkFEdEI7QUFFRSxJQUFBLFFBQVEsRUFBRVosWUFGWjtBQUdFLElBQUEsUUFBUSxFQUFFVSxRQUhaO0FBSUUsSUFBQSxrQkFBa0IsRUFBRVosa0JBSnRCO0FBS0UsSUFBQSxTQUFTLEVBQUVILFNBTGI7QUFNRSxJQUFBLFdBQVcsRUFBRStCLFdBTmY7QUFPRSxJQUFBLGlCQUFpQixFQUFFbEMsaUJBUHJCO0FBUUUsSUFBQSxTQUFTLEVBQUVGLFNBUmI7QUFTRSxJQUFBLE1BQU0sRUFBRUQsTUFUVjtBQVVFLElBQUEsTUFBTSxFQUFFNEI7QUFWVixJQTlCSixDQURGLENBREYsQ0FERjtBQWtERCxDQS9QTTs7OztBQWlRUCxJQUFNMEUsdUJBQXVCLEdBQUdDLDBCQUFPQyxHQUFWO0FBQUE7QUFBQTtBQUFBLGtCQUN6QixDQUFDSCwyQkFBRCxHQUFZLGVBQVosR0FBOEIsRUFETCxFQUV6QixDQUFDQSwyQkFBRCxHQUFZLHFCQUFaLEdBQW9DLEVBRlgsQ0FBN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHJvcGVydGllcyBhbmQgQ2FuY2VsbGluZyBmb3Jtcy5cbiAqKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzL21hY3JvJztcbmltcG9ydCB7IEZvcm1pa0NvbmZpZyB9IGZyb20gJ2Zvcm1pay9kaXN0L3R5cGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAncmVhY3QtZGV2aWNlLWRldGVjdCc7XG5pbXBvcnQgeyB1c2VGb3JtaWsgfSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlUGFyYW1zIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IExheW91dCBmcm9tICdzcmMvdWkta2l0L0xheW91dC9MYXlvdXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB1c2VRdWVyeVVSTCBmcm9tICdzcmMvaG9va3MvdXNlUXVlcnlVUkwnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJ3NyYy9jb21wb25lbnRzL1NwaW5uZXIvU3Bpbm5lcic7XG5pbXBvcnQgeyB1cmxzIH0gZnJvbSAnc3JjL3V0aWxpdGllcy91cmxzJztcblxuaW1wb3J0IHtcbiAgQ0FOQ0VMX1NBTVBMSU5HX09QLFxuICBDT0xMRUNUX1NBTVBMSU5HX09QLFxuICBTYW1wbGluZ0ZldGNoRGF0YSxcbn0gZnJvbSAnLi4vc2FtcGxpbmdzUGFnZVV0aWxzJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0Zvcm0gfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0Zvcm0nO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlJztcbmltcG9ydCB7XG4gIGNhbmNlbGxhdGlvblZhbGlkYXRpb25TY2hlbWEsXG4gIHByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hLFxuICBUU2FtcGxpbmdQcm9wZXJ0aWVzLFxuICBzYW1wbGluZ1Byb3BlcnR5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSAnLi9zYW1wbGluZ1Byb3BlcnRpZXNVdGlscyc7XG5cbmV4cG9ydCBjb25zdCBTYW1wbGluZ1Byb3BlcnRpZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBbY29sbGVjdGlvblRpbWUsIHNldENvbGxlY3Rpb25UaW1lXSA9IHVzZVN0YXRlPHN0cmluZyB8IERhdGUgfCBudWxsPihcbiAgICBtb21lbnQoRGF0ZS5ub3coKSkuZm9ybWF0KCdERC9NTS9ZWVlZIGhoOm1tJyksXG4gICk7XG4gIGNvbnN0IFtwaG90b3MsIHNldFBob3Rvc10gPSB1c2VTdGF0ZTxzdHJpbmcgfCBCbG9iIHwgYW55PihbXSk7XG4gIGNvbnN0IFtwaG90b3NUb0RlbGV0ZSwgc2V0UGhvdG9zVG9EZWxldGVdID0gdXNlU3RhdGU8bnVtYmVyW10+KFtdKTtcbiAgY29uc3QgW3NhdmluZ01zZywgc2V0U2F2aW5nTXNnXSA9IHVzZVN0YXRlPHN0cmluZz4oaTE4bi50KCdidXR0b25zLnNhdmUnKSk7XG4gIGNvbnN0IFtzYW1wbGluZ1VwZGF0ZWQsIHNldFNhbXBsaW5nVXBkYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzYW1wbGluZ1BsYW4sIHNldFNhbXBsaW5nUGxhbl0gPSB1c2VTdGF0ZTxcbiAgICBTYW1wbGluZ0ZldGNoRGF0YSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnlVUkwoKTtcblxuICBjb25zdCB1c2VySW5mbyA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUucGVybWlzc2lvbnMudXNlcl9pbmZvKTtcbiAgY29uc3QgZGF0ZUZvcm1hdCA9XG4gICAgdXNlckluZm8uZGF0ZV90aW1lX2Zvcm1hdCA9PT0gJ3VzJ1xuICAgICAgPyAnTU1NIGQsIHl5eXkgaGg6bW0gYWEnXG4gICAgICA6ICdkL01NL3l5eXkgSEg6bW0nO1xuICBjb25zdCBbcGFnZVR5cGUsIHNldFBhZ2VUeXBlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KCk7XG4gIGNvbnN0IFtzYW1wbGluZ1Byb3BlcnRpZXMsIHNldFNhbXBsaW5nUHJvcGVydGllc10gPVxuICAgIHVzZVN0YXRlPFRTYW1wbGluZ1Byb3BlcnRpZXM+KCk7XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPVxuICAgIHBhZ2VUeXBlID09PSAnY29sbGVjdCdcbiAgICAgID8gcHJvcGVydGllc1ZhbGlkYXRpb25TY2hlbWFcbiAgICAgIDogY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYTtcblxuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWs8Rm9ybWlrQ29uZmlnPEZvcm1UeXBlPj4oe1xuICAgIGVuYWJsZVJlaW5pdGlhbGl6ZTogdHJ1ZSxcbiAgICBpbml0aWFsVmFsdWVzOiBzYW1wbGluZ1Byb3BlcnR5LFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IHZhbGlkYXRpb25TY2hlbWEsXG4gICAgdmFsaWRhdGVPbkNoYW5nZTogZmFsc2UsXG4gICAgdmFsaWRhdGVPbkJsdXI6IHRydWUsXG4gICAgb25TdWJtaXQ6ICh2YWx1ZXMpID0+IHtcbiAgICAgIGhhbmRsZVN1Ym1pdCh2YWx1ZXMpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGhpc3RvcnkuZ29CYWNrKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKHZhbHVlcykgPT4ge1xuICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuc2F2aW5nJykpO1xuICAgIHZhbHVlcy5waWN0dXJlc19hdHRyaWJ1dGVzID0gcGhvdG9zO1xuICAgIGNvbnN0IHNhdmVGb3JtRGF0YSA9IGZvcm1EYXRhQnVpbGRlcih2YWx1ZXMpO1xuICAgIHVwZGF0ZU9yQ3JlYXRlKHNhdmVGb3JtRGF0YSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0ID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5zYXZlJykpO1xuICAgIH0sIDMwMDApO1xuICB9O1xuXG4gIGNvbnN0IGZvcm1EYXRhQnVpbGRlciA9ICh2YWx1ZXMpID0+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuICAgICAgaWYgKGtleSAhPT0gJ3BpY3R1cmVzX2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2tleV0gPT09IG51bGwgPyAnJyA6IHZhbHVlc1trZXldO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYHNhbXBsaW5nWyR7a2V5fV1gLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB1bmlxdWVQaG90b3NUb0RlbGV0ZSA9IFsuLi5uZXcgU2V0KHBob3Rvc1RvRGVsZXRlKV07XG4gICAgdW5pcXVlUGhvdG9zVG9EZWxldGUubGVuZ3RoICE9PSAwICYmXG4gICAgICB1bmlxdWVQaG90b3NUb0RlbGV0ZS5mb3JFYWNoKChpZCwgaW5kZXgpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgIGBzYW1wbGluZ1twaWN0dXJlc19hdHRyaWJ1dGVzXVske2luZGV4fV1baWRdYCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShpZCksXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICBgc2FtcGxpbmdbcGljdHVyZXNfYXR0cmlidXRlc11bJHtpbmRleH1dW19kZXN0cm95XWAsXG4gICAgICAgICAgJ3RydWUnLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZU9yQ3JlYXRlID0gKGZvcm1EYXRhKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlT3JDcmVhdGVTdWNjZXNzID0gKG1zZykgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udChtc2cpKTtcbiAgICAgIHNldFNhbXBsaW5nVXBkYXRlZCh0cnVlKTtcbiAgICAgIHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCgpO1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuXG4gICAgaWYgKHNhbXBsaW5nUHJvcGVydGllcz8uc2FtcGxpbmc/LmlkID09PSBudWxsKSB7XG4gICAgICAvLyBjcmVhdGVcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChgc2FtcGxpbmdbZGF0ZV1gLCBjb2xsZWN0aW9uVGltZSk7XG4gICAgICBheGlvc1xuICAgICAgICAucG9zdCh1cmxzKCkuc2FtcGxpbmdQcm9wZXJ0aWVzLmNyZWF0ZVNhbXBsaW5nLnVybCwgZm9ybURhdGEpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MoJ2J1dHRvbnMuY3JlYXRlZCcpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuZXJyb3InKSk7XG4gICAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGVcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wdXQoXG4gICAgICAgICAgdXJscyh7IHNhbXBsaW5nSWQ6IHNhbXBsaW5nUHJvcGVydGllcz8uc2FtcGxpbmc/LmlkIH0pXG4gICAgICAgICAgICAuc2FtcGxpbmdQcm9wZXJ0aWVzLnVwZGF0ZVNhbXBsaW5nLnVybCxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlT3JDcmVhdGVTdWNjZXNzKCdidXR0b25zLnVwZGF0ZWQnKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLmVycm9yJykpO1xuICAgICAgICAgIHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGV0ZWN0UGFnZVR5cGUgPSAoc2FtcGxpbmdQcm9wZXJ0aWVzLCBjb2xsZWN0aW9uVGltZVNlcnZlciwgb3ApID0+IHtcbiAgICBsZXQgX3BhZ2VUeXBlO1xuICAgIGlmIChvcCA9PT0gJ2VkaXQnKSB7XG4gICAgICBfcGFnZVR5cGUgPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuaXNfY2FuY2VsZWRcbiAgICAgICAgPyAnY2FuY2VsJ1xuICAgICAgICA6ICdjb2xsZWN0JztcbiAgICAgIGlmIChjb2xsZWN0aW9uVGltZVNlcnZlcikge1xuICAgICAgICBzZXRDb2xsZWN0aW9uVGltZShuZXcgRGF0ZShjb2xsZWN0aW9uVGltZVNlcnZlcikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29sbGVjdGlvblRpbWUobmV3IERhdGUoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gQ09MTEVDVF9TQU1QTElOR19PUCkge1xuICAgICAgc2V0Q29sbGVjdGlvblRpbWUobmV3IERhdGUoKSk7XG4gICAgICBfcGFnZVR5cGUgPSAnY29sbGVjdCc7XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gQ0FOQ0VMX1NBTVBMSU5HX09QKSB7XG4gICAgICBzZXRDb2xsZWN0aW9uVGltZShuZXcgRGF0ZShjb2xsZWN0aW9uVGltZVNlcnZlcikpO1xuICAgICAgX3BhZ2VUeXBlID0gJ2NhbmNlbCc7XG4gICAgfVxuICAgIHJldHVybiBfcGFnZVR5cGU7XG4gIH07XG5cbiAgY29uc3QgaXNQcm9wZXJ0aWVzUGFnZSA9IHBhZ2VUeXBlID09PSAnZWRpdCc7XG5cbiAgY29uc3QgeyBzYW1wbGVJZCB9ID0gdXNlUGFyYW1zKCk7XG5cbiAgY29uc3QgZmV0Y2hTYW1wbGluZ1Byb3BlcnRpZXMgPSAoc2FtcGxpbmdJZCA9IHNhbXBsZUlkLCBvcCkgPT4ge1xuICAgIGF4aW9zXG4gICAgICAuZ2V0KFxuICAgICAgICB1cmxzKHsgc2FtcGxpbmdJZDogc2FtcGxpbmdJZCB9KS5zYW1wbGluZ1Byb3BlcnRpZXMuZmV0Y2hTYW1wbGluZy51cmwsXG4gICAgICApXG4gICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbXBsaW5nUmVzID0gcmVzLmRhdGE7XG4gICAgICAgIGNvbnN0IHNhbXBsaW5nUHJvcGVydGllcyA9IHNhbXBsaW5nUmVzLnNhbXBsaW5nX3Byb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25UaW1lU2VydmVyID1cbiAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lO1xuXG4gICAgICAgIGNvbnN0IF9wYWdlVHlwZSA9IGRldGVjdFBhZ2VUeXBlKFxuICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcyxcbiAgICAgICAgICBjb2xsZWN0aW9uVGltZVNlcnZlcixcbiAgICAgICAgICBvcCxcbiAgICAgICAgKTtcbiAgICAgICAgc2V0UGFnZVR5cGUoX3BhZ2VUeXBlKTtcblxuICAgICAgICBjb25zdCBpc0NhbmNlbGVkID1cbiAgICAgICAgICBfcGFnZVR5cGUgPT09ICdjYW5jZWwnXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogX3BhZ2VUeXBlID09PSAnY29sbGVjdCdcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmlzX2NhbmNlbGVkIHx8IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VDb2xsZWN0aW9uVGltZSA9XG4gICAgICAgICAgX3BhZ2VUeXBlID09PSAnY29sbGVjdCdcbiAgICAgICAgICAgID8gY29sbGVjdGlvblRpbWVcbiAgICAgICAgICAgIDogc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmNvbGxlY3Rpb25fdGltZTtcblxuICAgICAgICBjb25zdCBzYW0gPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmc7XG4gICAgICAgIGZvcm1pay5zZXRWYWx1ZXMoe1xuICAgICAgICAgIGxhYl9pZDogc2FtLmxhYl9pZCxcbiAgICAgICAgICBjb2xsZWN0aW9uX3RpbWU6IHBhZ2VDb2xsZWN0aW9uVGltZSxcbiAgICAgICAgICBwdW1wX3NhbXBsaW5nX3ZvbHVtZTogc2FtLnB1bXBfc2FtcGxpbmdfdm9sdW1lLFxuICAgICAgICAgIHB1bXBfYmF0dGVyeV9sZXZlbDogc2FtLnB1bXBfYmF0dGVyeV9sZXZlbCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc2FtLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGthbmRvX3JlcDogc2FtLmthbmRvX3JlcCxcbiAgICAgICAgICBzYW1wbGluZ19wbGFuX2lkOiBzYW0uc2FtcGxpbmdfcGxhbl9pZCxcbiAgICAgICAgICBjYW5jZWxsYXRpb25fcmVhc29uOiBzYW0uY2FuY2VsbGF0aW9uX3JlYXNvbiB8fCAnJyxcbiAgICAgICAgICBpc19jYW5jZWxlZDogaXNDYW5jZWxlZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFNhbXBsaW5nUHJvcGVydGllcyhzYW1wbGluZ1Byb3BlcnRpZXMpO1xuICAgICAgICBzZXRTYW1wbGluZ1BsYW4oc2FtcGxpbmdSZXMuc2FtcGxpbmdfcGxhbik7XG4gICAgICB9KTtcbiAgfTtcblxuICBjb25zdCBnZXRVcmxRdWVyeU9wID0gKCkgPT4ge1xuICAgIGxldCBvcCA9IHF1ZXJ5LmdldCgnb3AnKTtcbiAgICAvLyBpZiBub3QgcHJlc2VudCB0aGVuIGRlZmF1bHQgb3AgaXMgJ2NvbGxlY3RpbmcnXG4gICAgaWYgKFt1bmRlZmluZWQsIG51bGwsICcnXS5pbmNsdWRlcyhvcCkpIHtcbiAgICAgIHJldHVybiBDT0xMRUNUX1NBTVBMSU5HX09QO1xuICAgIH1cbiAgICByZXR1cm4gb3A7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFNhbXBsaW5nUHJvcGVydGllcyhzYW1wbGVJZCwgZ2V0VXJsUXVlcnlPcCgpKTtcbiAgfSwgW3NhbXBsaW5nVXBkYXRlZF0pO1xuXG4gIGlmICghc2FtcGxpbmdQbGFuIHx8ICFzYW1wbGluZ1Byb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gPFNwaW5uZXIgLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtaWsuaGFuZGxlU3VibWl0fT5cbiAgICAgIDxMYXlvdXQ+XG4gICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNTdHlsZT5cbiAgICAgICAgICB7IWlzTW9iaWxlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNIZWFkXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlfVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uRGF0ZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25EYXRlPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlfVxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtkYXRlRm9ybWF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlfVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uRGF0ZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25EYXRlPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlfVxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtkYXRlRm9ybWF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3NhbXBsaW5nUHJvcGVydGllcyAmJiBwYWdlVHlwZSAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzRm9ybVxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlfVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgc2F2aW5nTXNnPXtzYXZpbmdNc2d9XG4gICAgICAgICAgICAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgICAgICAgICAgc2V0UGhvdG9zVG9EZWxldGU9e3NldFBob3Rvc1RvRGVsZXRlfVxuICAgICAgICAgICAgICBzZXRQaG90b3M9e3NldFBob3Rvc31cbiAgICAgICAgICAgICAgcGhvdG9zPXtwaG90b3N9XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9mb3JtPlxuICApO1xufTtcblxuY29uc3QgU2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGUgPSBzdHlsZWQuZGl2YFxuICAkeyFpc01vYmlsZSA/ICd3aWR0aDogODMwcHg7JyA6ICcnfVxuICAkeyFpc01vYmlsZSA/ICdtYXJnaW46IDEwMHB4IGF1dG87JyA6ICcnfVxuYDtcbiJdfQ==
|
|
398
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWdlcy9TYW1wbGluZ3NQYWdlL1NhbXBsaW5nUHJvcGVydGllcy9TYW1wbGluZ1Byb3BlcnRpZXMudHN4Il0sIm5hbWVzIjpbImlzUHJvcGVydGllc1BhZ2UiLCJwYWdlVHlwZSIsIlNhbXBsaW5nUHJvcGVydGllcyIsIkRhdGUiLCJjb2xsZWN0aW9uVGltZSIsInNldENvbGxlY3Rpb25UaW1lIiwicGhvdG9zIiwic2V0UGhvdG9zIiwicGhvdG9zVG9EZWxldGUiLCJzZXRQaG90b3NUb0RlbGV0ZSIsImkxOG4iLCJ0Iiwic2F2aW5nTXNnIiwic2V0U2F2aW5nTXNnIiwic2FtcGxpbmdVcGRhdGVkIiwic2V0U2FtcGxpbmdVcGRhdGVkIiwidW5kZWZpbmVkIiwic2FtcGxpbmdQbGFuIiwic2V0U2FtcGxpbmdQbGFuIiwiaGlzdG9yeSIsInF1ZXJ5IiwidXNlckluZm8iLCJzdGF0ZSIsInBlcm1pc3Npb25zIiwidXNlcl9pbmZvIiwiZGF0ZUZvcm1hdCIsImRhdGVfdGltZV9mb3JtYXQiLCJzYW1wbGluZ1Byb3BlcnRpZXMiLCJzZXRTYW1wbGluZ1Byb3BlcnRpZXMiLCJzYW1wbGVJZCIsImluaXRGb3JtaWtWYWx1ZXMiLCJpc0NhbmNlbGVkIiwicGFnZUNvbGxlY3Rpb25UaW1lIiwiY3VycmVudCIsInNhbXBsaW5nIiwiY29sbGVjdGlvbl90aW1lIiwic2FtIiwiZm9ybWlrIiwic2V0VmFsdWVzIiwibGFiX2lkIiwicHVtcF9zYW1wbGluZ192b2x1bWUiLCJwdW1wX2JhdHRlcnlfbGV2ZWwiLCJkZXNjcmlwdGlvbiIsImthbmRvX3JlcCIsInNhbXBsaW5nX3BsYW5faWQiLCJjYW5jZWxsYXRpb25fcmVhc29uIiwiaXNfY2FuY2VsZWQiLCJpc0NhbmNlbGxlZExheW91dCIsInBhZ2VUeXBlMmlzQ2FuY2VsbGVkIiwiY2FuY2VsIiwiY29sbGVjdCIsInJldmVydF9jYW5jZWwiLCJmZXRjaFNhbXBsaW5nUHJvcGVydGllcyIsInNhbXBsaW5nSWQiLCJvcCIsImF4aW9zIiwiZ2V0IiwiZmV0Y2hTYW1wbGluZyIsInVybCIsInJlc3BvbnNlIiwiZGF0YSIsInNhbXBsaW5nX3Byb3BlcnRpZXMiLCJkZXRlY3RQYWdlVHlwZSIsImRldGVybWluZUNvbGxlY3Rpb25UaW1lIiwic2FtcGxpbmdfcGxhbiIsImdldFVybFF1ZXJ5T3AiLCJ2YWxpZGF0aW9uU2NoZW1hIiwicHJvcGVydGllc1ZhbGlkYXRpb25TY2hlbWEiLCJjYW5jZWxsYXRpb25WYWxpZGF0aW9uU2NoZW1hIiwiZW5hYmxlUmVpbml0aWFsaXplIiwiaW5pdGlhbFZhbHVlcyIsInNhbXBsaW5nUHJvcGVydHkiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwidmFsaWRhdGVPbkJsdXIiLCJvblN1Ym1pdCIsInZhbHVlcyIsImhhbmRsZVN1Ym1pdCIsImhhbmRsZUNsb3NlIiwiZ29CYWNrIiwicGljdHVyZXNfYXR0cmlidXRlcyIsInNhdmVGb3JtRGF0YSIsImZvcm1EYXRhQnVpbGRlciIsInVwZGF0ZU9yQ3JlYXRlIiwic2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0Iiwic2V0VGltZW91dCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJrZXkiLCJ2YWx1ZSIsImFwcGVuZCIsInVuaXF1ZVBob3Rvc1RvRGVsZXRlIiwiU2V0IiwibGVuZ3RoIiwiZm9yRWFjaCIsImlkIiwiaW5kZXgiLCJKU09OIiwic3RyaW5naWZ5IiwidXBkYXRlT3JDcmVhdGVTdWNjZXNzIiwibXNnIiwic2FtcGxpbmdJRCIsInBvc3QiLCJjcmVhdGVTYW1wbGluZyIsInB1dCIsInVwZGF0ZVNhbXBsaW5nIiwiaXNTYW1wbGluZ0NhbmNlbGxlZCIsImVkaXRQYWdlVmFsdWUiLCJDT0xMRUNUX1NBTVBMSU5HX09QIiwiQ0FOQ0VMX1NBTVBMSU5HX09QIiwiUkVWRVJUX0NBTkNFTExBVElPTiIsInNlcnZlckNvbGxlY3Rpb25UaW1lIiwiY3VycmVudFRpbWUiLCJzZXJ2ZXJUaW1lIiwiaW5jbHVkZXMiLCJpc01v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LE1BVFY7QUFVRSxJQUFBLE1BQU0sRUFBRStCO0FBVlYsSUE5QkosQ0FERixDQURGLENBREY7QUFrREQsQ0FuUk07Ozs7QUFxUlAsSUFBTThFLHVCQUF1QixHQUFHQywwQkFBT0MsR0FBVjtBQUFBO0FBQUE7QUFBQSxrQkFDekIsQ0FBQ0gsMkJBQUQsR0FBWSxlQUFaLEdBQThCLEVBREwsRUFFekIsQ0FBQ0EsMkJBQUQsR0FBWSxxQkFBWixHQUFvQyxFQUZYLENBQTdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFByb3BlcnRpZXMgYW5kIENhbmNlbGxpbmcgZm9ybXMuXG4gKiovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cy9tYWNybyc7XG5pbXBvcnQgeyBGb3JtaWtDb25maWcgfSBmcm9tICdmb3JtaWsvZGlzdC90eXBlcyc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJ3JlYWN0LWRldmljZS1kZXRlY3QnO1xuaW1wb3J0IHsgdXNlRm9ybWlrIH0gZnJvbSAnZm9ybWlrJztcbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZVBhcmFtcyB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBMYXlvdXQgZnJvbSAnc3JjL3VpLWtpdC9MYXlvdXQvTGF5b3V0JztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgdXNlUXVlcnlVUkwgZnJvbSAnc3JjL2hvb2tzL3VzZVF1ZXJ5VVJMJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdzcmMvY29tcG9uZW50cy9TcGlubmVyL1NwaW5uZXInO1xuaW1wb3J0IHsgdXJscyB9IGZyb20gJ3NyYy91dGlsaXRpZXMvdXJscyc7XG5cbmltcG9ydCB7XG4gIENBTkNFTF9TQU1QTElOR19PUCxcbiAgQ09MTEVDVF9TQU1QTElOR19PUCxcbiAgUkVWRVJUX0NBTkNFTExBVElPTixcbiAgU2FtcGxpbmdGZXRjaERhdGEsXG59IGZyb20gJy4uL3NhbXBsaW5nc1BhZ2VVdGlscyc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNGb3JtIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNGb3JtJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0hlYWQgfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0hlYWQnO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSc7XG5pbXBvcnQge1xuICBGb3JtVHlwZSxcbiAgVFNhbXBsaW5nUHJvcGVydGllcyxcbiAgY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSxcbiAgaXNDb2xsZWN0TGF5b3V0LFxuICBwcm9wZXJ0aWVzVmFsaWRhdGlvblNjaGVtYSxcbiAgc2FtcGxpbmdQcm9wZXJ0eSxcbn0gZnJvbSAnLi9zYW1wbGluZ1Byb3BlcnRpZXNVdGlscyc7XG5cbmNvbnN0IGlzUHJvcGVydGllc1BhZ2UgPSAocGFnZVR5cGUpID0+IHBhZ2VUeXBlID09PSAnZWRpdCc7XG5cbmV4cG9ydCBjb25zdCBTYW1wbGluZ1Byb3BlcnRpZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBbY29sbGVjdGlvblRpbWUsIHNldENvbGxlY3Rpb25UaW1lXSA9IHVzZVN0YXRlPHN0cmluZyB8IERhdGUgfCBudWxsPihcbiAgICBuZXcgRGF0ZSgpLFxuICApO1xuICBjb25zdCBbcGhvdG9zLCBzZXRQaG90b3NdID0gdXNlU3RhdGU8c3RyaW5nIHwgQmxvYiB8IGFueT4oW10pO1xuICBjb25zdCBbcGhvdG9zVG9EZWxldGUsIHNldFBob3Rvc1RvRGVsZXRlXSA9IHVzZVN0YXRlPG51bWJlcltdPihbXSk7XG4gIGNvbnN0IFtzYXZpbmdNc2csIHNldFNhdmluZ01zZ10gPSB1c2VTdGF0ZTxzdHJpbmc+KGkxOG4udCgnYnV0dG9ucy5zYXZlJykpO1xuICBjb25zdCBbc2FtcGxpbmdVcGRhdGVkLCBzZXRTYW1wbGluZ1VwZGF0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2FtcGxpbmdQbGFuLCBzZXRTYW1wbGluZ1BsYW5dID0gdXNlU3RhdGU8XG4gICAgU2FtcGxpbmdGZXRjaERhdGEgfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBxdWVyeSA9IHVzZVF1ZXJ5VVJMKCk7XG4gIGNvbnN0IHVzZXJJbmZvID0gdXNlU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5wZXJtaXNzaW9ucy51c2VyX2luZm8pO1xuICBjb25zdCBkYXRlRm9ybWF0ID1cbiAgICB1c2VySW5mby5kYXRlX3RpbWVfZm9ybWF0ID09PSAndXMnXG4gICAgICA/ICdNTU0gZCwgeXl5eSBoaDptbSBhYSdcbiAgICAgIDogJ2QvTU0veXl5eSBISDptbSc7XG4gIGNvbnN0IHBhZ2VUeXBlID0gdXNlUmVmPHN0cmluZz4oJycpO1xuICBjb25zdCBbc2FtcGxpbmdQcm9wZXJ0aWVzLCBzZXRTYW1wbGluZ1Byb3BlcnRpZXNdID1cbiAgICB1c2VTdGF0ZTxUU2FtcGxpbmdQcm9wZXJ0aWVzPigpO1xuICBjb25zdCB7IHNhbXBsZUlkIH0gPSB1c2VQYXJhbXMoKTtcblxuICBjb25zdCBpbml0Rm9ybWlrVmFsdWVzID0gKHNhbXBsaW5nUHJvcGVydGllcywgaXNDYW5jZWxlZCkgPT4ge1xuICAgIGNvbnN0IHBhZ2VDb2xsZWN0aW9uVGltZSA9IGlzQ29sbGVjdExheW91dChwYWdlVHlwZS5jdXJyZW50KVxuICAgICAgPyBjb2xsZWN0aW9uVGltZVxuICAgICAgOiBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lO1xuICAgIGNvbnN0IHNhbSA9IHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZztcbiAgICBmb3JtaWsuc2V0VmFsdWVzKHtcbiAgICAgIGxhYl9pZDogc2FtLmxhYl9pZCxcbiAgICAgIGNvbGxlY3Rpb25fdGltZTogcGFnZUNvbGxlY3Rpb25UaW1lLFxuICAgICAgcHVtcF9zYW1wbGluZ192b2x1bWU6IHNhbS5wdW1wX3NhbXBsaW5nX3ZvbHVtZSxcbiAgICAgIHB1bXBfYmF0dGVyeV9sZXZlbDogc2FtLnB1bXBfYmF0dGVyeV9sZXZlbCxcbiAgICAgIGRlc2NyaXB0aW9uOiBzYW0uZGVzY3JpcHRpb24sXG4gICAgICBrYW5kb19yZXA6IHNhbS5rYW5kb19yZXAsXG4gICAgICBzYW1wbGluZ19wbGFuX2lkOiBzYW0uc2FtcGxpbmdfcGxhbl9pZCxcbiAgICAgIGNhbmNlbGxhdGlvbl9yZWFzb246IHNhbS5jYW5jZWxsYXRpb25fcmVhc29uIHx8ICcnLFxuICAgICAgaXNfY2FuY2VsZWQ6IGlzQ2FuY2VsZWQsXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaXNDYW5jZWxsZWRMYXlvdXQgPSAoc2FtcGxpbmdQcm9wZXJ0aWVzKSA9PiB7XG4gICAgY29uc3QgcGFnZVR5cGUyaXNDYW5jZWxsZWQgPSB7XG4gICAgICBjYW5jZWw6IHRydWUsXG4gICAgICBjb2xsZWN0OiBmYWxzZSxcbiAgICAgIHJldmVydF9jYW5jZWw6IGZhbHNlLFxuICAgIH07XG4gICAgbGV0IGlzQ2FuY2VsZWQgPSBwYWdlVHlwZTJpc0NhbmNlbGxlZFtwYWdlVHlwZS5jdXJyZW50XTtcbiAgICBpZiAoaXNDYW5jZWxlZCA9PT0gbnVsbCkge1xuICAgICAgaXNDYW5jZWxlZCA9IHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZy5pc19jYW5jZWxlZCB8fCBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ2FuY2VsZWQ7XG4gIH07XG5cbiAgY29uc3QgZmV0Y2hTYW1wbGluZ1Byb3BlcnRpZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc2FtcGxpbmdJZCA9IHNhbXBsZUlkLCBvcCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoXG4gICAgICAgIHVybHMoeyBzYW1wbGluZ0lkOiBzYW1wbGluZ0lkIH0pLnNhbXBsaW5nUHJvcGVydGllcy5mZXRjaFNhbXBsaW5nLnVybCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzYW1wbGluZyA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICBjb25zdCBzYW1wbGluZ1Byb3BlcnRpZXMgPSBzYW1wbGluZy5zYW1wbGluZ19wcm9wZXJ0aWVzO1xuICAgICAgcGFnZVR5cGUuY3VycmVudCA9IGRldGVjdFBhZ2VUeXBlKFxuICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuaXNfY2FuY2VsZWQsXG4gICAgICAgIG9wLFxuICAgICAgKTtcbiAgICAgIHNldENvbGxlY3Rpb25UaW1lKFxuICAgICAgICBkZXRlcm1pbmVDb2xsZWN0aW9uVGltZShcbiAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lLFxuICAgICAgICAgIG9wLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGxldCBpc0NhbmNlbGVkID0gaXNDYW5jZWxsZWRMYXlvdXQoXG4gICAgICAgIHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZy5pc19jYW5jZWxlZCxcbiAgICAgICk7XG4gICAgICBpbml0Rm9ybWlrVmFsdWVzKHNhbXBsaW5nUHJvcGVydGllcywgaXNDYW5jZWxlZCk7XG4gICAgICBzZXRTYW1wbGluZ1Byb3BlcnRpZXMoc2FtcGxpbmdQcm9wZXJ0aWVzKTtcbiAgICAgIHNldFNhbXBsaW5nUGxhbihzYW1wbGluZy5zYW1wbGluZ19wbGFuKTtcbiAgICB9LFxuICAgIFtdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hTYW1wbGluZ1Byb3BlcnRpZXMoc2FtcGxlSWQsIGdldFVybFF1ZXJ5T3AoKSk7XG4gIH0sIFtzYW1wbGluZ1VwZGF0ZWRdKTtcblxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gaXNDb2xsZWN0TGF5b3V0KHBhZ2VUeXBlLmN1cnJlbnQpXG4gICAgPyBwcm9wZXJ0aWVzVmFsaWRhdGlvblNjaGVtYVxuICAgIDogY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYTtcbiAgY29uc3QgZm9ybWlrID0gdXNlRm9ybWlrPEZvcm1pa0NvbmZpZzxGb3JtVHlwZT4+KHtcbiAgICBlbmFibGVSZWluaXRpYWxpemU6IHRydWUsXG4gICAgaW5pdGlhbFZhbHVlczogc2FtcGxpbmdQcm9wZXJ0eSxcbiAgICB2YWxpZGF0aW9uU2NoZW1hOiB2YWxpZGF0aW9uU2NoZW1hLFxuICAgIHZhbGlkYXRlT25DaGFuZ2U6IGZhbHNlLFxuICAgIHZhbGlkYXRlT25CbHVyOiB0cnVlLFxuICAgIG9uU3VibWl0OiAodmFsdWVzKSA9PiB7XG4gICAgICBoYW5kbGVTdWJtaXQodmFsdWVzKTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICBoaXN0b3J5LmdvQmFjaygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICh2YWx1ZXMpID0+IHtcbiAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLnNhdmluZycpKTtcbiAgICB2YWx1ZXMucGljdHVyZXNfYXR0cmlidXRlcyA9IHBob3RvcztcbiAgICBjb25zdCBzYXZlRm9ybURhdGEgPSBmb3JtRGF0YUJ1aWxkZXIodmFsdWVzKTtcbiAgICB1cGRhdGVPckNyZWF0ZShzYXZlRm9ybURhdGEpO1xuICB9O1xuXG4gIGNvbnN0IHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuc2F2ZScpKTtcbiAgICB9LCAzMDAwKTtcbiAgfTtcblxuICBjb25zdCBmb3JtRGF0YUJ1aWxkZXIgPSAodmFsdWVzKSA9PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgIGlmIChrZXkgIT09ICdwaWN0dXJlc19hdHRyaWJ1dGVzJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1trZXldID09PSBudWxsID8gJycgOiB2YWx1ZXNba2V5XTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGBzYW1wbGluZ1ske2tleX1dYCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdW5pcXVlUGhvdG9zVG9EZWxldGUgPSBbLi4ubmV3IFNldChwaG90b3NUb0RlbGV0ZSldO1xuICAgIHVuaXF1ZVBob3Rvc1RvRGVsZXRlLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdW5pcXVlUGhvdG9zVG9EZWxldGUuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICBgc2FtcGxpbmdbcGljdHVyZXNfYXR0cmlidXRlc11bJHtpbmRleH1dW2lkXWAsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaWQpLFxuICAgICAgICApO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgYHNhbXBsaW5nW3BpY3R1cmVzX2F0dHJpYnV0ZXNdWyR7aW5kZXh9XVtfZGVzdHJveV1gLFxuICAgICAgICAgICd0cnVlJyxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVPckNyZWF0ZSA9IGFzeW5jIChmb3JtRGF0YSkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyA9IChtc2cpID0+IHtcbiAgICAgIHNldFNhdmluZ01zZyhpMThuLnQobXNnKSk7XG4gICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQodHJ1ZSk7XG4gICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNhbXBsaW5nSUQgPSBzYW1wbGluZ1Byb3BlcnRpZXM/LnNhbXBsaW5nPy5pZDtcbiAgICBpZiAoc2FtcGxpbmdJRCA9PT0gbnVsbCkge1xuICAgICAgLy8gY3JlYXRlXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoYHNhbXBsaW5nW2RhdGVdYCwgY29sbGVjdGlvblRpbWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChcbiAgICAgICAgICB1cmxzKCkuc2FtcGxpbmdQcm9wZXJ0aWVzLmNyZWF0ZVNhbXBsaW5nLnVybCxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlT3JDcmVhdGVTdWNjZXNzKCdidXR0b25zLmNyZWF0ZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5lcnJvcicpKTtcbiAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYWdlVHlwZS5jdXJyZW50ID09PSAncmV2ZXJ0X2NhbmNlbCcpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGBzYW1wbGluZ1tjb2xsZWN0aW9uX3RpbWVdYCwgY29sbGVjdGlvblRpbWUpO1xuICAgICAgfVxuICAgICAgLy8gdXBkYXRlXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBheGlvcy5wdXQoXG4gICAgICAgICAgdXJscyh7IHNhbXBsaW5nSWQ6IHNhbXBsaW5nSUQgfSkuc2FtcGxpbmdQcm9wZXJ0aWVzLnVwZGF0ZVNhbXBsaW5nXG4gICAgICAgICAgICAudXJsLFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MoJ2J1dHRvbnMudXBkYXRlZCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLmVycm9yJykpO1xuICAgICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGV0ZWN0UGFnZVR5cGUgPSAoaXNTYW1wbGluZ0NhbmNlbGxlZCwgb3ApID0+IHtcbiAgICBjb25zdCBlZGl0UGFnZVZhbHVlID0gaXNTYW1wbGluZ0NhbmNlbGxlZCA/ICdjYW5jZWwnIDogJ2NvbGxlY3QnO1xuICAgIGlmIChvcCA9PT0gJ2VkaXQnKSB7XG4gICAgICByZXR1cm4gZWRpdFBhZ2VWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKG9wID09PSBDT0xMRUNUX1NBTVBMSU5HX09QKSB7XG4gICAgICByZXR1cm4gJ2NvbGxlY3QnO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IENBTkNFTF9TQU1QTElOR19PUCkge1xuICAgICAgcmV0dXJuICdjYW5jZWwnO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IFJFVkVSVF9DQU5DRUxMQVRJT04pIHtcbiAgICAgIHJldHVybiAncmV2ZXJ0X2NhbmNlbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlZGl0UGFnZVZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZXRlcm1pbmVDb2xsZWN0aW9uVGltZSA9IChzZXJ2ZXJDb2xsZWN0aW9uVGltZSwgb3ApID0+IHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3Qgc2VydmVyVGltZSA9IHNlcnZlckNvbGxlY3Rpb25UaW1lXG4gICAgICA/IG5ldyBEYXRlKHNlcnZlckNvbGxlY3Rpb25UaW1lKVxuICAgICAgOiBjdXJyZW50VGltZTtcbiAgICBjb25zdCBlZGl0UGFnZVZhbHVlID0gc2VydmVyQ29sbGVjdGlvblRpbWUgPyBzZXJ2ZXJUaW1lIDogY3VycmVudFRpbWU7XG4gICAgaWYgKG9wID09PSAnZWRpdCcpIHtcbiAgICAgIHJldHVybiBlZGl0UGFnZVZhbHVlO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IENPTExFQ1RfU0FNUExJTkdfT1ApIHtcbiAgICAgIHJldHVybiBjdXJyZW50VGltZTtcbiAgICB9IGVsc2UgaWYgKFtDQU5DRUxfU0FNUExJTkdfT1AsIFJFVkVSVF9DQU5DRUxMQVRJT05dLmluY2x1ZGVzKG9wKSkge1xuICAgICAgcmV0dXJuIHNlcnZlclRpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlZGl0UGFnZVZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRVcmxRdWVyeU9wID0gKCkgPT4ge1xuICAgIGxldCBvcCA9IHF1ZXJ5LmdldCgnb3AnKTtcbiAgICAvLyBpZiBub3QgcHJlc2VudCB0aGVuIGRlZmF1bHQgb3AgaXMgJ2NvbGxlY3RpbmcnXG4gICAgaWYgKFt1bmRlZmluZWQsIG51bGwsICcnXS5pbmNsdWRlcyhvcCkpIHtcbiAgICAgIHJldHVybiBDT0xMRUNUX1NBTVBMSU5HX09QO1xuICAgIH1cbiAgICByZXR1cm4gb3A7XG4gIH07XG5cbiAgaWYgKCFzYW1wbGluZ1BsYW4gfHwgIXNhbXBsaW5nUHJvcGVydGllcykge1xuICAgIHJldHVybiA8U3Bpbm5lciAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2Zvcm1pay5oYW5kbGVTdWJtaXR9PlxuICAgICAgPExheW91dD5cbiAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgICAgIHshaXNNb2JpbGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0hlYWRcbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGUuY3VycmVudH1cbiAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWU9e2NvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRDb2xsZWN0aW9uVGltZT17c2V0Q29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldFNhbXBsaW5nVXBkYXRlZD17c2V0U2FtcGxpbmdVcGRhdGVkfVxuICAgICAgICAgICAgICBpc0RhdGVQaWNrZXJEaXNhYmxlZD17aXNQcm9wZXJ0aWVzUGFnZShwYWdlVHlwZSl9XG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2RhdGVGb3JtYXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7aXNNb2JpbGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0hlYWRNb2JpbGVcbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGUuY3VycmVudH1cbiAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWU9e2NvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRDb2xsZWN0aW9uVGltZT17c2V0Q29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldFNhbXBsaW5nVXBkYXRlZD17c2V0U2FtcGxpbmdVcGRhdGVkfVxuICAgICAgICAgICAgICBpc0RhdGVQaWNrZXJEaXNhYmxlZD17aXNQcm9wZXJ0aWVzUGFnZShwYWdlVHlwZSl9XG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2RhdGVGb3JtYXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7c2FtcGxpbmdQcm9wZXJ0aWVzICYmIHBhZ2VUeXBlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNGb3JtXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGUuY3VycmVudH1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIHNhdmluZ01zZz17c2F2aW5nTXNnfVxuICAgICAgICAgICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICAgICAgICAgIHNldFBob3Rvc1RvRGVsZXRlPXtzZXRQaG90b3NUb0RlbGV0ZX1cbiAgICAgICAgICAgICAgc2V0UGhvdG9zPXtzZXRQaG90b3N9XG4gICAgICAgICAgICAgIHBob3Rvcz17cGhvdG9zfVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TYW1wbGluZ1Byb3BlcnRpZXNTdHlsZT5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbmNvbnN0IFNhbXBsaW5nUHJvcGVydGllc1N0eWxlID0gc3R5bGVkLmRpdmBcbiAgJHshaXNNb2JpbGUgPyAnd2lkdGg6IDgzMHB4OycgOiAnJ31cbiAgJHshaXNNb2JpbGUgPyAnbWFyZ2luOiAxMDBweCBhdXRvOycgOiAnJ31cbmA7XG4iXX0=
|