@kando-env/kando-ui 1.2.67-alpha.2 → 1.2.67-alpha.4
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/i18n/en.json +1 -1
- package/lib/macros/getVersion.js +1 -1
- package/lib/pages/SamplingsPage/DownloadCSV.js +2 -4
- package/lib/pages/SamplingsPage/SamplingActionDropdown.js +4 -2
- package/lib/pages/SamplingsPage/SamplingMobileModal.js +2 -2
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +180 -105
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +9 -7
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +2 -2
- package/lib/pages/SamplingsPage/samplingsPageUtils.js +8 -8
- package/lib/utilities/File.js +80 -29
- package/lib/utilities/time.js +2 -8
- 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,16 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
56
58
|
/*
|
|
57
59
|
* Properties and Cancelling forms.
|
|
58
60
|
**/
|
|
61
|
+
var isCollectLayout = function isCollectLayout(pageType) {
|
|
62
|
+
return ['collect', 'revert_cancel'].includes(pageType);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
var isPropertiesPage = function isPropertiesPage(pageType) {
|
|
66
|
+
return pageType === 'edit';
|
|
67
|
+
};
|
|
68
|
+
|
|
59
69
|
var SamplingProperties = function SamplingProperties() {
|
|
60
|
-
var _useState = (0, _react.useState)(
|
|
70
|
+
var _useState = (0, _react.useState)(new Date()),
|
|
61
71
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
62
72
|
collectionTime = _useState2[0],
|
|
63
73
|
setCollectionTime = _useState2[1];
|
|
@@ -93,18 +103,87 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
93
103
|
return state.permissions.user_info;
|
|
94
104
|
});
|
|
95
105
|
var dateFormat = userInfo.date_time_format === 'us' ? 'MMM d, yyyy hh:mm aa' : 'd/MM/yyyy HH:mm';
|
|
106
|
+
var pageType = (0, _react.useRef)('');
|
|
96
107
|
|
|
97
108
|
var _useState13 = (0, _react.useState)(),
|
|
98
109
|
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
99
|
-
|
|
100
|
-
|
|
110
|
+
samplingProperties = _useState14[0],
|
|
111
|
+
setSamplingProperties = _useState14[1];
|
|
101
112
|
|
|
102
|
-
var
|
|
103
|
-
|
|
104
|
-
samplingProperties = _useState16[0],
|
|
105
|
-
setSamplingProperties = _useState16[1];
|
|
113
|
+
var _useParams = (0, _reactRouterDom.useParams)(),
|
|
114
|
+
sampleId = _useParams.sampleId;
|
|
106
115
|
|
|
107
|
-
var
|
|
116
|
+
var initFormikValues = function initFormikValues(samplingProperties, isCanceled) {
|
|
117
|
+
var pageCollectionTime = isCollectLayout(pageType.current) ? collectionTime : samplingProperties.sampling.collection_time;
|
|
118
|
+
var sam = samplingProperties.sampling;
|
|
119
|
+
formik.setValues({
|
|
120
|
+
lab_id: sam.lab_id,
|
|
121
|
+
collection_time: pageCollectionTime,
|
|
122
|
+
pump_sampling_volume: sam.pump_sampling_volume,
|
|
123
|
+
pump_battery_level: sam.pump_battery_level,
|
|
124
|
+
description: sam.description,
|
|
125
|
+
kando_rep: sam.kando_rep,
|
|
126
|
+
sampling_plan_id: sam.sampling_plan_id,
|
|
127
|
+
cancellation_reason: sam.cancellation_reason || '',
|
|
128
|
+
is_canceled: isCanceled
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
var isCancelledLayout = function isCancelledLayout(samplingProperties, op) {
|
|
133
|
+
detectPageType(samplingProperties, op);
|
|
134
|
+
var pageType2isCancelled = {
|
|
135
|
+
cancel: true,
|
|
136
|
+
collect: false,
|
|
137
|
+
revert_cancel: false
|
|
138
|
+
};
|
|
139
|
+
var isCanceled = pageType2isCancelled[pageType.current];
|
|
140
|
+
|
|
141
|
+
if (isCanceled === null) {
|
|
142
|
+
isCanceled = samplingProperties.sampling.is_canceled || false;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return isCanceled;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
var fetchSamplingProperties = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
149
|
+
var samplingId,
|
|
150
|
+
op,
|
|
151
|
+
response,
|
|
152
|
+
sampling,
|
|
153
|
+
samplingProperties,
|
|
154
|
+
isCanceled,
|
|
155
|
+
_args = arguments;
|
|
156
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
157
|
+
while (1) {
|
|
158
|
+
switch (_context.prev = _context.next) {
|
|
159
|
+
case 0:
|
|
160
|
+
samplingId = _args.length > 0 && _args[0] !== undefined ? _args[0] : sampleId;
|
|
161
|
+
op = _args.length > 1 ? _args[1] : undefined;
|
|
162
|
+
_context.next = 4;
|
|
163
|
+
return _axios.default.get((0, _urls.urls)({
|
|
164
|
+
samplingId: samplingId
|
|
165
|
+
}).samplingProperties.fetchSampling.url);
|
|
166
|
+
|
|
167
|
+
case 4:
|
|
168
|
+
response = _context.sent;
|
|
169
|
+
sampling = response.data;
|
|
170
|
+
samplingProperties = sampling.sampling_properties;
|
|
171
|
+
isCanceled = isCancelledLayout(samplingProperties, op);
|
|
172
|
+
initFormikValues(samplingProperties, isCanceled);
|
|
173
|
+
setSamplingProperties(samplingProperties);
|
|
174
|
+
setSamplingPlan(sampling.sampling_plan);
|
|
175
|
+
|
|
176
|
+
case 11:
|
|
177
|
+
case "end":
|
|
178
|
+
return _context.stop();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}, _callee);
|
|
182
|
+
})), []);
|
|
183
|
+
(0, _react.useEffect)(function () {
|
|
184
|
+
fetchSamplingProperties(sampleId, getUrlQueryOp());
|
|
185
|
+
}, [samplingUpdated, samplingUpdated]);
|
|
186
|
+
var validationSchema = isCollectLayout(pageType.current) ? _samplingPropertiesUtils.propertiesValidationSchema : _samplingPropertiesUtils.cancellationValidationSchema;
|
|
108
187
|
var formik = (0, _formik.useFormik)({
|
|
109
188
|
enableReinitialize: true,
|
|
110
189
|
initialValues: _samplingPropertiesUtils.samplingProperty,
|
|
@@ -151,99 +230,99 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
151
230
|
return formData;
|
|
152
231
|
};
|
|
153
232
|
|
|
154
|
-
var updateOrCreate = function
|
|
155
|
-
var
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
233
|
+
var updateOrCreate = /*#__PURE__*/function () {
|
|
234
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(formData) {
|
|
235
|
+
var _samplingProperties$s;
|
|
236
|
+
|
|
237
|
+
var updateOrCreateSuccess, _samplingProperties$s2;
|
|
238
|
+
|
|
239
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
240
|
+
while (1) {
|
|
241
|
+
switch (_context2.prev = _context2.next) {
|
|
242
|
+
case 0:
|
|
243
|
+
updateOrCreateSuccess = function updateOrCreateSuccess(msg) {
|
|
244
|
+
setSavingMsg(_i18n.default.t(msg));
|
|
245
|
+
setSamplingUpdated(true);
|
|
246
|
+
setOriginalSaveMessageWithTimeout();
|
|
247
|
+
handleClose();
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
if (!((samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.id) === null)) {
|
|
251
|
+
_context2.next = 15;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// create
|
|
256
|
+
formData.append("sampling[date]", collectionTime);
|
|
257
|
+
_context2.prev = 3;
|
|
258
|
+
_context2.next = 6;
|
|
259
|
+
return _axios.default.post((0, _urls.urls)().samplingProperties.createSampling.url, formData);
|
|
260
|
+
|
|
261
|
+
case 6:
|
|
262
|
+
updateOrCreateSuccess('buttons.created');
|
|
263
|
+
_context2.next = 13;
|
|
264
|
+
break;
|
|
265
|
+
|
|
266
|
+
case 9:
|
|
267
|
+
_context2.prev = 9;
|
|
268
|
+
_context2.t0 = _context2["catch"](3);
|
|
269
|
+
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
270
|
+
setOriginalSaveMessageWithTimeout();
|
|
271
|
+
|
|
272
|
+
case 13:
|
|
273
|
+
_context2.next = 25;
|
|
274
|
+
break;
|
|
275
|
+
|
|
276
|
+
case 15:
|
|
277
|
+
_context2.prev = 15;
|
|
278
|
+
_context2.next = 18;
|
|
279
|
+
return _axios.default.put((0, _urls.urls)({
|
|
280
|
+
samplingId: samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s2 = samplingProperties.sampling) === null || _samplingProperties$s2 === void 0 ? void 0 : _samplingProperties$s2.id
|
|
281
|
+
}).samplingProperties.updateSampling.url, formData);
|
|
282
|
+
|
|
283
|
+
case 18:
|
|
284
|
+
updateOrCreateSuccess('buttons.updated');
|
|
285
|
+
_context2.next = 25;
|
|
286
|
+
break;
|
|
287
|
+
|
|
288
|
+
case 21:
|
|
289
|
+
_context2.prev = 21;
|
|
290
|
+
_context2.t1 = _context2["catch"](15);
|
|
291
|
+
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
292
|
+
setOriginalSaveMessageWithTimeout();
|
|
293
|
+
|
|
294
|
+
case 25:
|
|
295
|
+
case "end":
|
|
296
|
+
return _context2.stop();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}, _callee2, null, [[3, 9], [15, 21]]);
|
|
300
|
+
}));
|
|
301
|
+
|
|
302
|
+
return function updateOrCreate(_x) {
|
|
303
|
+
return _ref2.apply(this, arguments);
|
|
162
304
|
};
|
|
305
|
+
}(); // Detects and updates pageType and collectionTime.
|
|
163
306
|
|
|
164
|
-
if ((samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.id) === null) {
|
|
165
|
-
// create
|
|
166
|
-
formData.append("sampling[date]", collectionTime);
|
|
167
|
-
|
|
168
|
-
_axios.default.post((0, _urls.urls)().samplingProperties.createSampling.url, formData).then(function () {
|
|
169
|
-
updateOrCreateSuccess('buttons.created');
|
|
170
|
-
}).catch(function () {
|
|
171
|
-
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
172
|
-
setOriginalSaveMessageWithTimeout();
|
|
173
|
-
});
|
|
174
|
-
} else {
|
|
175
|
-
var _samplingProperties$s2;
|
|
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
|
-
});
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
307
|
|
|
189
|
-
var detectPageType = function detectPageType(samplingProperties,
|
|
190
|
-
var
|
|
308
|
+
var detectPageType = function detectPageType(samplingProperties, op) {
|
|
309
|
+
var collectionTimeServer = samplingProperties.sampling.collection_time;
|
|
310
|
+
var serverTime = new Date(collectionTimeServer);
|
|
311
|
+
var currentTime = new Date();
|
|
191
312
|
|
|
192
313
|
if (op === 'edit') {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (collectionTimeServer) {
|
|
196
|
-
setCollectionTime(new Date(collectionTimeServer));
|
|
197
|
-
} else {
|
|
198
|
-
setCollectionTime(new Date());
|
|
199
|
-
}
|
|
314
|
+
pageType.current = samplingProperties.sampling.is_canceled ? 'cancel' : 'collect';
|
|
315
|
+
setCollectionTime(collectionTimeServer ? serverTime : currentTime);
|
|
200
316
|
} else if (op === _samplingsPageUtils.COLLECT_SAMPLING_OP) {
|
|
201
|
-
setCollectionTime(
|
|
202
|
-
|
|
317
|
+
setCollectionTime(currentTime);
|
|
318
|
+
pageType.current = 'collect';
|
|
203
319
|
} else if (op === _samplingsPageUtils.CANCEL_SAMPLING_OP) {
|
|
204
|
-
setCollectionTime(
|
|
205
|
-
|
|
320
|
+
setCollectionTime(serverTime);
|
|
321
|
+
pageType.current = 'cancel';
|
|
322
|
+
} else if (op === _samplingsPageUtils.REVERT_CANCELLATION) {
|
|
323
|
+
setCollectionTime(serverTime);
|
|
324
|
+
pageType.current = 'revert_cancel';
|
|
206
325
|
}
|
|
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
326
|
};
|
|
248
327
|
|
|
249
328
|
var getUrlQueryOp = function getUrlQueryOp() {
|
|
@@ -256,10 +335,6 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
256
335
|
return op;
|
|
257
336
|
};
|
|
258
337
|
|
|
259
|
-
(0, _react.useEffect)(function () {
|
|
260
|
-
fetchSamplingProperties(sampleId, getUrlQueryOp());
|
|
261
|
-
}, [samplingUpdated]);
|
|
262
|
-
|
|
263
338
|
if (!samplingPlan || !samplingProperties) {
|
|
264
339
|
return /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, null);
|
|
265
340
|
}
|
|
@@ -270,26 +345,26 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
270
345
|
samplingProperties: samplingProperties,
|
|
271
346
|
sampling: samplingPlan,
|
|
272
347
|
formik: formik,
|
|
273
|
-
pageType: pageType,
|
|
348
|
+
pageType: pageType.current,
|
|
274
349
|
collectionDate: collectionTime,
|
|
275
350
|
setCollectionDate: setCollectionTime,
|
|
276
351
|
setSamplingUpdated: setSamplingUpdated,
|
|
277
|
-
isDatePickerDisabled: isPropertiesPage,
|
|
352
|
+
isDatePickerDisabled: isPropertiesPage(pageType),
|
|
278
353
|
dateFormat: dateFormat
|
|
279
354
|
}), _reactDeviceDetect.isMobile && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesHeadMobile.SamplingPropertiesHeadMobile, {
|
|
280
355
|
samplingProperties: samplingProperties,
|
|
281
356
|
sampling: samplingPlan,
|
|
282
357
|
formik: formik,
|
|
283
|
-
pageType: pageType,
|
|
358
|
+
pageType: pageType.current,
|
|
284
359
|
collectionDate: collectionTime,
|
|
285
360
|
setCollectionDate: setCollectionTime,
|
|
286
361
|
setSamplingUpdated: setSamplingUpdated,
|
|
287
|
-
isDatePickerDisabled: isPropertiesPage,
|
|
362
|
+
isDatePickerDisabled: isPropertiesPage(pageType),
|
|
288
363
|
dateFormat: dateFormat
|
|
289
364
|
}), samplingProperties && pageType && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesForm.SamplingPropertiesForm, {
|
|
290
365
|
samplingProperties: samplingProperties,
|
|
291
366
|
sampling: samplingPlan,
|
|
292
|
-
pageType: pageType,
|
|
367
|
+
pageType: pageType.current,
|
|
293
368
|
setSamplingUpdated: setSamplingUpdated,
|
|
294
369
|
savingMsg: savingMsg,
|
|
295
370
|
handleClose: handleClose,
|
|
@@ -306,4 +381,4 @@ var SamplingPropertiesStyle = _styledComponents.default.div.withConfig({
|
|
|
306
381
|
displayName: "SamplingProperties__SamplingPropertiesStyle",
|
|
307
382
|
componentId: "sc-opklsf-0"
|
|
308
383
|
})(["", " ", ""], !_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==
|
|
384
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWdlcy9TYW1wbGluZ3NQYWdlL1NhbXBsaW5nUHJvcGVydGllcy9TYW1wbGluZ1Byb3BlcnRpZXMudHN4Il0sIm5hbWVzIjpbImlzQ29sbGVjdExheW91dCIsInBhZ2VUeXBlIiwiaW5jbHVkZXMiLCJpc1Byb3BlcnRpZXNQYWdlIiwiU2FtcGxpbmdQcm9wZXJ0aWVzIiwiRGF0ZSIsImNvbGxlY3Rpb25UaW1lIiwic2V0Q29sbGVjdGlvblRpbWUiLCJwaG90b3MiLCJzZXRQaG90b3MiLCJwaG90b3NUb0RlbGV0ZSIsInNldFBob3Rvc1RvRGVsZXRlIiwiaTE4biIsInQiLCJzYXZpbmdNc2ciLCJzZXRTYXZpbmdNc2ciLCJzYW1wbGluZ1VwZGF0ZWQiLCJzZXRTYW1wbGluZ1VwZGF0ZWQiLCJ1bmRlZmluZWQiLCJzYW1wbGluZ1BsYW4iLCJzZXRTYW1wbGluZ1BsYW4iLCJoaXN0b3J5IiwicXVlcnkiLCJ1c2VySW5mbyIsInN0YXRlIiwicGVybWlzc2lvbnMiLCJ1c2VyX2luZm8iLCJkYXRlRm9ybWF0IiwiZGF0ZV90aW1lX2Zvcm1hdCIsInNhbXBsaW5nUHJvcGVydGllcyIsInNldFNhbXBsaW5nUHJvcGVydGllcyIsInNhbXBsZUlkIiwiaW5pdEZvcm1pa1ZhbHVlcyIsImlzQ2FuY2VsZWQiLCJwYWdlQ29sbGVjdGlvblRpbWUiLCJjdXJyZW50Iiwic2FtcGxpbmciLCJjb2xsZWN0aW9uX3RpbWUiLCJzYW0iLCJmb3JtaWsiLCJzZXRWYWx1ZXMiLCJsYWJfaWQiLCJwdW1wX3NhbXBsaW5nX3ZvbHVtZSIsInB1bXBfYmF0dGVyeV9sZXZlbCIsImRlc2NyaXB0aW9uIiwia2FuZG9fcmVwIiwic2FtcGxpbmdfcGxhbl9pZCIsImNhbmNlbGxhdGlvbl9yZWFzb24iLCJpc19jYW5jZWxlZCIsImlzQ2FuY2VsbGVkTGF5b3V0Iiwib3AiLCJkZXRlY3RQYWdlVHlwZSIsInBhZ2VUeXBlMmlzQ2FuY2VsbGVkIiwiY2FuY2VsIiwiY29sbGVjdCIsInJldmVydF9jYW5jZWwiLCJmZXRjaFNhbXBsaW5nUHJvcGVydGllcyIsInNhbXBsaW5nSWQiLCJheGlvcyIsImdldCIsImZldGNoU2FtcGxpbmciLCJ1cmwiLCJyZXNwb25zZSIsImRhdGEiLCJzYW1wbGluZ19wcm9wZXJ0aWVzIiwic2FtcGxpbmdfcGxhbiIsImdldFVybFF1ZXJ5T3AiLCJ2YWxpZGF0aW9uU2NoZW1hIiwicHJvcGVydGllc1ZhbGlkYXRpb25TY2hlbWEiLCJjYW5jZWxsYXRpb25WYWxpZGF0aW9uU2NoZW1hIiwiZW5hYmxlUmVpbml0aWFsaXplIiwiaW5pdGlhbFZhbHVlcyIsInNhbXBsaW5nUHJvcGVydHkiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwidmFsaWRhdGVPbkJsdXIiLCJvblN1Ym1pdCIsInZhbHVlcyIsImhhbmRsZVN1Ym1pdCIsImhhbmRsZUNsb3NlIiwiZ29CYWNrIiwicGljdHVyZXNfYXR0cmlidXRlcyIsInNhdmVGb3JtRGF0YSIsImZvcm1EYXRhQnVpbGRlciIsInVwZGF0ZU9yQ3JlYXRlIiwic2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0Iiwic2V0VGltZW91dCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJrZXkiLCJ2YWx1ZSIsImFwcGVuZCIsInVuaXF1ZVBob3Rvc1RvRGVsZXRlIiwiU2V0IiwibGVuZ3RoIiwiZm9yRWFjaCIsImlkIiwiaW5kZXgiLCJKU09OIiwic3RyaW5naWZ5IiwidXBkYXRlT3JDcmVhdGVTdWNjZXNzIiwibXNnIiwicG9zdCIsImNyZWF0ZVNhbXBsaW5nIiwicHV0IiwidXBkYXRlU2FtcGxpbmciLCJjb2xsZWN0aW9uVGltZVNlcnZlciIsInNlcnZlclRpbWUiLCJjdXJyZW50VGltZSIsIkNPTExFQ1RfU0FNUExJTkdfT1AiLCJDQU5DRUxfU0FNUExJTkdfT1AiLCJSRVZFUlRfQ0FOQ0VMTEFUSU9OIiwiaXNNb2JpbGUiLCJTYW1wbGluZ1Byb3BlcnRpZXNTdHlsZSIsInN0eWxlZCIsImRpdiJdLCJtYXBwaW5ncyI6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UHJvcGVydGllcyBhbmQgQ2FuY2VsbGluZyBmb3Jtcy5cbiAqKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzL21hY3JvJztcbmltcG9ydCB7IEZvcm1pa0NvbmZpZyB9IGZyb20gJ2Zvcm1pay9kaXN0L3R5cGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAncmVhY3QtZGV2aWNlLWRldGVjdCc7XG5pbXBvcnQgeyB1c2VGb3JtaWsgfSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlUGFyYW1zIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IExheW91dCBmcm9tICdzcmMvdWkta2l0L0xheW91dC9MYXlvdXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB1c2VRdWVyeVVSTCBmcm9tICdzcmMvaG9va3MvdXNlUXVlcnlVUkwnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJ3NyYy9jb21wb25lbnRzL1NwaW5uZXIvU3Bpbm5lcic7XG5pbXBvcnQgeyB1cmxzIH0gZnJvbSAnc3JjL3V0aWxpdGllcy91cmxzJztcblxuaW1wb3J0IHtcbiAgQ0FOQ0VMX1NBTVBMSU5HX09QLFxuICBDT0xMRUNUX1NBTVBMSU5HX09QLFxuICBSRVZFUlRfQ0FOQ0VMTEFUSU9OLFxuICBTYW1wbGluZ0ZldGNoRGF0YSxcbn0gZnJvbSAnLi4vc2FtcGxpbmdzUGFnZVV0aWxzJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0Zvcm0gfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0Zvcm0nO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlJztcbmltcG9ydCB7XG4gIGNhbmNlbGxhdGlvblZhbGlkYXRpb25TY2hlbWEsXG4gIHByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hLFxuICBUU2FtcGxpbmdQcm9wZXJ0aWVzLFxuICBzYW1wbGluZ1Byb3BlcnR5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSAnLi9zYW1wbGluZ1Byb3BlcnRpZXNVdGlscyc7XG5cbmNvbnN0IGlzQ29sbGVjdExheW91dCA9IChwYWdlVHlwZSkgPT5cbiAgWydjb2xsZWN0JywgJ3JldmVydF9jYW5jZWwnXS5pbmNsdWRlcyhwYWdlVHlwZSk7XG5jb25zdCBpc1Byb3BlcnRpZXNQYWdlID0gKHBhZ2VUeXBlKSA9PiBwYWdlVHlwZSA9PT0gJ2VkaXQnO1xuXG5leHBvcnQgY29uc3QgU2FtcGxpbmdQcm9wZXJ0aWVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3QgW2NvbGxlY3Rpb25UaW1lLCBzZXRDb2xsZWN0aW9uVGltZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBEYXRlIHwgbnVsbD4oXG4gICAgbmV3IERhdGUoKSxcbiAgKTtcbiAgY29uc3QgW3Bob3Rvcywgc2V0UGhvdG9zXSA9IHVzZVN0YXRlPHN0cmluZyB8IEJsb2IgfCBhbnk+KFtdKTtcbiAgY29uc3QgW3Bob3Rvc1RvRGVsZXRlLCBzZXRQaG90b3NUb0RlbGV0ZV0gPSB1c2VTdGF0ZTxudW1iZXJbXT4oW10pO1xuICBjb25zdCBbc2F2aW5nTXNnLCBzZXRTYXZpbmdNc2ddID0gdXNlU3RhdGU8c3RyaW5nPihpMThuLnQoJ2J1dHRvbnMuc2F2ZScpKTtcbiAgY29uc3QgW3NhbXBsaW5nVXBkYXRlZCwgc2V0U2FtcGxpbmdVcGRhdGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NhbXBsaW5nUGxhbiwgc2V0U2FtcGxpbmdQbGFuXSA9IHVzZVN0YXRlPFxuICAgIFNhbXBsaW5nRmV0Y2hEYXRhIHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB1c2VRdWVyeVVSTCgpO1xuICBjb25zdCB1c2VySW5mbyA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUucGVybWlzc2lvbnMudXNlcl9pbmZvKTtcbiAgY29uc3QgZGF0ZUZvcm1hdCA9XG4gICAgdXNlckluZm8uZGF0ZV90aW1lX2Zvcm1hdCA9PT0gJ3VzJ1xuICAgICAgPyAnTU1NIGQsIHl5eXkgaGg6bW0gYWEnXG4gICAgICA6ICdkL01NL3l5eXkgSEg6bW0nO1xuICBjb25zdCBwYWdlVHlwZSA9IHVzZVJlZjxzdHJpbmc+KCcnKTtcbiAgY29uc3QgW3NhbXBsaW5nUHJvcGVydGllcywgc2V0U2FtcGxpbmdQcm9wZXJ0aWVzXSA9XG4gICAgdXNlU3RhdGU8VFNhbXBsaW5nUHJvcGVydGllcz4oKTtcbiAgY29uc3QgeyBzYW1wbGVJZCB9ID0gdXNlUGFyYW1zKCk7XG5cbiAgY29uc3QgaW5pdEZvcm1pa1ZhbHVlcyA9IChzYW1wbGluZ1Byb3BlcnRpZXMsIGlzQ2FuY2VsZWQpID0+IHtcbiAgICBjb25zdCBwYWdlQ29sbGVjdGlvblRpbWUgPSBpc0NvbGxlY3RMYXlvdXQocGFnZVR5cGUuY3VycmVudClcbiAgICAgID8gY29sbGVjdGlvblRpbWVcbiAgICAgIDogc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmNvbGxlY3Rpb25fdGltZTtcbiAgICBjb25zdCBzYW0gPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmc7XG4gICAgZm9ybWlrLnNldFZhbHVlcyh7XG4gICAgICBsYWJfaWQ6IHNhbS5sYWJfaWQsXG4gICAgICBjb2xsZWN0aW9uX3RpbWU6IHBhZ2VDb2xsZWN0aW9uVGltZSxcbiAgICAgIHB1bXBfc2FtcGxpbmdfdm9sdW1lOiBzYW0ucHVtcF9zYW1wbGluZ192b2x1bWUsXG4gICAgICBwdW1wX2JhdHRlcnlfbGV2ZWw6IHNhbS5wdW1wX2JhdHRlcnlfbGV2ZWwsXG4gICAgICBkZXNjcmlwdGlvbjogc2FtLmRlc2NyaXB0aW9uLFxuICAgICAga2FuZG9fcmVwOiBzYW0ua2FuZG9fcmVwLFxuICAgICAgc2FtcGxpbmdfcGxhbl9pZDogc2FtLnNhbXBsaW5nX3BsYW5faWQsXG4gICAgICBjYW5jZWxsYXRpb25fcmVhc29uOiBzYW0uY2FuY2VsbGF0aW9uX3JlYXNvbiB8fCAnJyxcbiAgICAgIGlzX2NhbmNlbGVkOiBpc0NhbmNlbGVkLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGlzQ2FuY2VsbGVkTGF5b3V0ID0gKHNhbXBsaW5nUHJvcGVydGllcywgb3ApID0+IHtcbiAgICBkZXRlY3RQYWdlVHlwZShzYW1wbGluZ1Byb3BlcnRpZXMsIG9wKTtcbiAgICBjb25zdCBwYWdlVHlwZTJpc0NhbmNlbGxlZCA9IHtcbiAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgIGNvbGxlY3Q6IGZhbHNlLFxuICAgICAgcmV2ZXJ0X2NhbmNlbDogZmFsc2UsXG4gICAgfTtcbiAgICBsZXQgaXNDYW5jZWxlZCA9IHBhZ2VUeXBlMmlzQ2FuY2VsbGVkW3BhZ2VUeXBlLmN1cnJlbnRdO1xuICAgIGlmIChpc0NhbmNlbGVkID09PSBudWxsKSB7XG4gICAgICBpc0NhbmNlbGVkID0gc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmlzX2NhbmNlbGVkIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaXNDYW5jZWxlZDtcbiAgfTtcblxuICBjb25zdCBmZXRjaFNhbXBsaW5nUHJvcGVydGllcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzYW1wbGluZ0lkID0gc2FtcGxlSWQsIG9wKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgdXJscyh7IHNhbXBsaW5nSWQ6IHNhbXBsaW5nSWQgfSkuc2FtcGxpbmdQcm9wZXJ0aWVzLmZldGNoU2FtcGxpbmcudXJsLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNhbXBsaW5nID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGNvbnN0IHNhbXBsaW5nUHJvcGVydGllcyA9IHNhbXBsaW5nLnNhbXBsaW5nX3Byb3BlcnRpZXM7XG4gICAgICBsZXQgaXNDYW5jZWxlZCA9IGlzQ2FuY2VsbGVkTGF5b3V0KHNhbXBsaW5nUHJvcGVydGllcywgb3ApO1xuICAgICAgaW5pdEZvcm1pa1ZhbHVlcyhzYW1wbGluZ1Byb3BlcnRpZXMsIGlzQ2FuY2VsZWQpO1xuICAgICAgc2V0U2FtcGxpbmdQcm9wZXJ0aWVzKHNhbXBsaW5nUHJvcGVydGllcyk7XG4gICAgICBzZXRTYW1wbGluZ1BsYW4oc2FtcGxpbmcuc2FtcGxpbmdfcGxhbik7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoU2FtcGxpbmdQcm9wZXJ0aWVzKHNhbXBsZUlkLCBnZXRVcmxRdWVyeU9wKCkpO1xuICB9LCBbc2FtcGxpbmdVcGRhdGVkLCBzYW1wbGluZ1VwZGF0ZWRdKTtcblxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gaXNDb2xsZWN0TGF5b3V0KHBhZ2VUeXBlLmN1cnJlbnQpXG4gICAgPyBwcm9wZXJ0aWVzVmFsaWRhdGlvblNjaGVtYVxuICAgIDogY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYTtcbiAgY29uc3QgZm9ybWlrID0gdXNlRm9ybWlrPEZvcm1pa0NvbmZpZzxGb3JtVHlwZT4+KHtcbiAgICBlbmFibGVSZWluaXRpYWxpemU6IHRydWUsXG4gICAgaW5pdGlhbFZhbHVlczogc2FtcGxpbmdQcm9wZXJ0eSxcbiAgICB2YWxpZGF0aW9uU2NoZW1hOiB2YWxpZGF0aW9uU2NoZW1hLFxuICAgIHZhbGlkYXRlT25DaGFuZ2U6IGZhbHNlLFxuICAgIHZhbGlkYXRlT25CbHVyOiB0cnVlLFxuICAgIG9uU3VibWl0OiAodmFsdWVzKSA9PiB7XG4gICAgICBoYW5kbGVTdWJtaXQodmFsdWVzKTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICBoaXN0b3J5LmdvQmFjaygpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICh2YWx1ZXMpID0+IHtcbiAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLnNhdmluZycpKTtcbiAgICB2YWx1ZXMucGljdHVyZXNfYXR0cmlidXRlcyA9IHBob3RvcztcbiAgICBjb25zdCBzYXZlRm9ybURhdGEgPSBmb3JtRGF0YUJ1aWxkZXIodmFsdWVzKTtcbiAgICB1cGRhdGVPckNyZWF0ZShzYXZlRm9ybURhdGEpO1xuICB9O1xuXG4gIGNvbnN0IHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuc2F2ZScpKTtcbiAgICB9LCAzMDAwKTtcbiAgfTtcblxuICBjb25zdCBmb3JtRGF0YUJ1aWxkZXIgPSAodmFsdWVzKSA9PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgIGlmIChrZXkgIT09ICdwaWN0dXJlc19hdHRyaWJ1dGVzJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1trZXldID09PSBudWxsID8gJycgOiB2YWx1ZXNba2V5XTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGBzYW1wbGluZ1ske2tleX1dYCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdW5pcXVlUGhvdG9zVG9EZWxldGUgPSBbLi4ubmV3IFNldChwaG90b3NUb0RlbGV0ZSldO1xuICAgIHVuaXF1ZVBob3Rvc1RvRGVsZXRlLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdW5pcXVlUGhvdG9zVG9EZWxldGUuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICBgc2FtcGxpbmdbcGljdHVyZXNfYXR0cmlidXRlc11bJHtpbmRleH1dW2lkXWAsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaWQpLFxuICAgICAgICApO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgYHNhbXBsaW5nW3BpY3R1cmVzX2F0dHJpYnV0ZXNdWyR7aW5kZXh9XVtfZGVzdHJveV1gLFxuICAgICAgICAgICd0cnVlJyxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVPckNyZWF0ZSA9IGFzeW5jIChmb3JtRGF0YSkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyA9IChtc2cpID0+IHtcbiAgICAgIHNldFNhdmluZ01zZyhpMThuLnQobXNnKSk7XG4gICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQodHJ1ZSk7XG4gICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcblxuICAgIGlmIChzYW1wbGluZ1Byb3BlcnRpZXM/LnNhbXBsaW5nPy5pZCA9PT0gbnVsbCkge1xuICAgICAgLy8gY3JlYXRlXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoYHNhbXBsaW5nW2RhdGVdYCwgY29sbGVjdGlvblRpbWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChcbiAgICAgICAgICB1cmxzKCkuc2FtcGxpbmdQcm9wZXJ0aWVzLmNyZWF0ZVNhbXBsaW5nLnVybCxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlT3JDcmVhdGVTdWNjZXNzKCdidXR0b25zLmNyZWF0ZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5lcnJvcicpKTtcbiAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucHV0KFxuICAgICAgICAgIHVybHMoeyBzYW1wbGluZ0lkOiBzYW1wbGluZ1Byb3BlcnRpZXM/LnNhbXBsaW5nPy5pZCB9KVxuICAgICAgICAgICAgLnNhbXBsaW5nUHJvcGVydGllcy51cGRhdGVTYW1wbGluZy51cmwsXG4gICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZU9yQ3JlYXRlU3VjY2VzcygnYnV0dG9ucy51cGRhdGVkJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuZXJyb3InKSk7XG4gICAgICAgIHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBEZXRlY3RzIGFuZCB1cGRhdGVzIHBhZ2VUeXBlIGFuZCBjb2xsZWN0aW9uVGltZS5cbiAgY29uc3QgZGV0ZWN0UGFnZVR5cGUgPSAoc2FtcGxpbmdQcm9wZXJ0aWVzLCBvcCkgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25UaW1lU2VydmVyID0gc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmNvbGxlY3Rpb25fdGltZTtcbiAgICBjb25zdCBzZXJ2ZXJUaW1lID0gbmV3IERhdGUoY29sbGVjdGlvblRpbWVTZXJ2ZXIpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKTtcblxuICAgIGlmIChvcCA9PT0gJ2VkaXQnKSB7XG4gICAgICBwYWdlVHlwZS5jdXJyZW50ID0gc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmlzX2NhbmNlbGVkXG4gICAgICAgID8gJ2NhbmNlbCdcbiAgICAgICAgOiAnY29sbGVjdCc7XG4gICAgICBzZXRDb2xsZWN0aW9uVGltZShjb2xsZWN0aW9uVGltZVNlcnZlciA/IHNlcnZlclRpbWUgOiBjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gQ09MTEVDVF9TQU1QTElOR19PUCkge1xuICAgICAgc2V0Q29sbGVjdGlvblRpbWUoY3VycmVudFRpbWUpO1xuICAgICAgcGFnZVR5cGUuY3VycmVudCA9ICdjb2xsZWN0JztcbiAgICB9IGVsc2UgaWYgKG9wID09PSBDQU5DRUxfU0FNUExJTkdfT1ApIHtcbiAgICAgIHNldENvbGxlY3Rpb25UaW1lKHNlcnZlclRpbWUpO1xuICAgICAgcGFnZVR5cGUuY3VycmVudCA9ICdjYW5jZWwnO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IFJFVkVSVF9DQU5DRUxMQVRJT04pIHtcbiAgICAgIHNldENvbGxlY3Rpb25UaW1lKHNlcnZlclRpbWUpO1xuICAgICAgcGFnZVR5cGUuY3VycmVudCA9ICdyZXZlcnRfY2FuY2VsJztcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VXJsUXVlcnlPcCA9ICgpID0+IHtcbiAgICBsZXQgb3AgPSBxdWVyeS5nZXQoJ29wJyk7XG4gICAgLy8gaWYgbm90IHByZXNlbnQgdGhlbiBkZWZhdWx0IG9wIGlzICdjb2xsZWN0aW5nJ1xuICAgIGlmIChbdW5kZWZpbmVkLCBudWxsLCAnJ10uaW5jbHVkZXMob3ApKSB7XG4gICAgICByZXR1cm4gQ09MTEVDVF9TQU1QTElOR19PUDtcbiAgICB9XG4gICAgcmV0dXJuIG9wO1xuICB9O1xuXG4gIGlmICghc2FtcGxpbmdQbGFuIHx8ICFzYW1wbGluZ1Byb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gPFNwaW5uZXIgLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtaWsuaGFuZGxlU3VibWl0fT5cbiAgICAgIDxMYXlvdXQ+XG4gICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNTdHlsZT5cbiAgICAgICAgICB7IWlzTW9iaWxlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNIZWFkXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlLmN1cnJlbnR9XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25EYXRlPXtjb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0Q29sbGVjdGlvbkRhdGU9e3NldENvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgaXNEYXRlUGlja2VyRGlzYWJsZWQ9e2lzUHJvcGVydGllc1BhZ2UocGFnZVR5cGUpfVxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtkYXRlRm9ybWF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlLmN1cnJlbnR9XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25EYXRlPXtjb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0Q29sbGVjdGlvbkRhdGU9e3NldENvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgaXNEYXRlUGlja2VyRGlzYWJsZWQ9e2lzUHJvcGVydGllc1BhZ2UocGFnZVR5cGUpfVxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtkYXRlRm9ybWF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3NhbXBsaW5nUHJvcGVydGllcyAmJiBwYWdlVHlwZSAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzRm9ybVxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlLmN1cnJlbnR9XG4gICAgICAgICAgICAgIHNldFNhbXBsaW5nVXBkYXRlZD17c2V0U2FtcGxpbmdVcGRhdGVkfVxuICAgICAgICAgICAgICBzYXZpbmdNc2c9e3NhdmluZ01zZ31cbiAgICAgICAgICAgICAgaGFuZGxlQ2xvc2U9e2hhbmRsZUNsb3NlfVxuICAgICAgICAgICAgICBzZXRQaG90b3NUb0RlbGV0ZT17c2V0UGhvdG9zVG9EZWxldGV9XG4gICAgICAgICAgICAgIHNldFBob3Rvcz17c2V0UGhvdG9zfVxuICAgICAgICAgICAgICBwaG90b3M9e3Bob3Rvc31cbiAgICAgICAgICAgICAgZm9ybWlrPXtmb3JtaWt9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGU+XG4gICAgICA8L0xheW91dD5cbiAgICA8L2Zvcm0+XG4gICk7XG59O1xuXG5jb25zdCBTYW1wbGluZ1Byb3BlcnRpZXNTdHlsZSA9IHN0eWxlZC5kaXZgXG4gICR7IWlzTW9iaWxlID8gJ3dpZHRoOiA4MzBweDsnIDogJyd9XG4gICR7IWlzTW9iaWxlID8gJ21hcmdpbjogMTAwcHggYXV0bzsnIDogJyd9XG5gO1xuIl19
|