oxygen-cli 1.30.0 → 1.30.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/CHANGELOG.md +6 -0
- package/build/reporter/ReportAggregator.js +45 -13
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v1.30.1 (2023-08-29)
|
|
4
|
+
|
|
5
|
+
#### :beetle: Bug Fix
|
|
6
|
+
* Fix step's Warning status not being properly processed.
|
|
7
|
+
* Improve the way test result status for suites with Skipped and Warning statuses is determined.
|
|
8
|
+
|
|
3
9
|
## v1.30.0 (2023-08-15)
|
|
4
10
|
|
|
5
11
|
#### :tada: New Feature
|
|
@@ -150,7 +150,7 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
150
150
|
if (testResult) {
|
|
151
151
|
testResult.endTime = _util.default.getTimeStamp();
|
|
152
152
|
testResult.duration = testResult.endTime - testResult.startTime;
|
|
153
|
-
testResult.status =
|
|
153
|
+
testResult.status = this._determineTestStatusBySuites(testResult, fatalError);
|
|
154
154
|
|
|
155
155
|
if (testResult.status === _status.default.FAILED) {
|
|
156
156
|
if (fatalError) {
|
|
@@ -189,6 +189,32 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
+
_determineTestStatusBySuites(testResult, fatalError) {
|
|
193
|
+
if (fatalError) {
|
|
194
|
+
return _status.default.FAILED;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const hasFailedSuites = testResult.suites.some(x => x.status === _status.default.FAILED);
|
|
198
|
+
|
|
199
|
+
if (hasFailedSuites) {
|
|
200
|
+
return _status.default.FAILED;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const hasWarningSuites = testResult.suites.some(x => x.status === _status.default.WARNING);
|
|
204
|
+
|
|
205
|
+
if (hasWarningSuites) {
|
|
206
|
+
return _status.default.WARNING;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const allSuitesSkipped = testResult.suites.every(x => x.status === _status.default.SKIPPED);
|
|
210
|
+
|
|
211
|
+
if (allSuitesSkipped) {
|
|
212
|
+
return _status.default.SKIPPED;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return _status.default.PASSED;
|
|
216
|
+
}
|
|
217
|
+
|
|
192
218
|
onIterationStart(rid, iteration, start) {
|
|
193
219
|
if (iteration) {
|
|
194
220
|
const msg = `${start} Iteration #${iteration} started...`;
|
|
@@ -338,10 +364,6 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
338
364
|
|
|
339
365
|
const resultKey = result.options._groupResult.resultKey;
|
|
340
366
|
const suiteKey = result.options._groupResult.suiteKey;
|
|
341
|
-
console.log('resultKey', resultKey);
|
|
342
|
-
console.log('suiteKey', suiteKey);
|
|
343
|
-
console.log('startTime', result.startTime);
|
|
344
|
-
console.log('endTime', result.endTime);
|
|
345
367
|
let groupedResult = groupedResults[resultKey];
|
|
346
368
|
|
|
347
369
|
if (!groupedResult) {
|
|
@@ -363,7 +385,6 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
363
385
|
} else {
|
|
364
386
|
for (const currentSuiteResult of result.suites) {
|
|
365
387
|
const groupKey = `${suiteKey}-${currentSuiteResult.iterationNum}`;
|
|
366
|
-
console.log('groupKey', groupKey);
|
|
367
388
|
const groupedSuiteResult = groupedResult._suitesHash[groupKey];
|
|
368
389
|
|
|
369
390
|
if (!groupedSuiteResult) {
|
|
@@ -375,8 +396,10 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
375
396
|
groupedSuiteResult.duration = groupedSuiteResult.endTime - groupedSuiteResult.startTime;
|
|
376
397
|
groupedSuiteResult.cases = [...groupedSuiteResult.cases, ...currentSuiteResult.cases];
|
|
377
398
|
|
|
378
|
-
if (currentSuiteResult.cases.some(c => c.status ===
|
|
379
|
-
groupedSuiteResult.status =
|
|
399
|
+
if (currentSuiteResult.cases.some(c => c.status === _status.default.FAILED)) {
|
|
400
|
+
groupedSuiteResult.status = _status.default.FAILED;
|
|
401
|
+
} else if (currentSuiteResult.cases.some(c => c.status === _status.default.WARNING)) {
|
|
402
|
+
groupedSuiteResult.status = _status.default.WARNING;
|
|
380
403
|
}
|
|
381
404
|
}
|
|
382
405
|
}
|
|
@@ -391,11 +414,18 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
391
414
|
}
|
|
392
415
|
|
|
393
416
|
groupedResult.suites = [...groupedResult.suites, ...Object.keys(groupedResult._suitesHash).map(suiteGroupKey => groupedResult._suitesHash[suiteGroupKey])];
|
|
394
|
-
const firstFailedSuite = groupedResult.suites.find(s => s.status ===
|
|
417
|
+
const firstFailedSuite = groupedResult.suites.find(s => s.status === _status.default.FAILED);
|
|
395
418
|
|
|
396
419
|
if (firstFailedSuite) {
|
|
397
|
-
groupedResult.status =
|
|
420
|
+
groupedResult.status = _status.default.FAILED;
|
|
398
421
|
groupedResult.failure = firstFailedSuite.failure || groupedResult.failure;
|
|
422
|
+
} else {
|
|
423
|
+
const firstSuiteWithWarning = groupedResult.suites.find(s => s.status === _status.default.WARNING);
|
|
424
|
+
|
|
425
|
+
if (firstSuiteWithWarning) {
|
|
426
|
+
groupedResult.status = _status.default.WARNING;
|
|
427
|
+
groupedResult.failure = firstSuiteWithWarning.failure || groupedResult.failure;
|
|
428
|
+
}
|
|
399
429
|
}
|
|
400
430
|
|
|
401
431
|
delete groupedResult['_suitesHash'];
|
|
@@ -410,10 +440,12 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
410
440
|
recalculateResultForStatus(results) {
|
|
411
441
|
return results.map(result => {
|
|
412
442
|
if (result && result.suites && Array.isArray(result.suites) && result.suites.length > 0) {
|
|
413
|
-
const failed = result.suites.find(suite => suite.status ===
|
|
443
|
+
const failed = result.suites.find(suite => suite.status === _status.default.FAILED);
|
|
414
444
|
|
|
415
445
|
if (failed) {
|
|
416
|
-
result.status =
|
|
446
|
+
result.status = _status.default.FAILED;
|
|
447
|
+
} else if (result.suites.find(suite => suite.status === _status.default.WARNING)) {
|
|
448
|
+
result.status = _status.default.WARNING;
|
|
417
449
|
}
|
|
418
450
|
}
|
|
419
451
|
|
|
@@ -437,4 +469,4 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
437
469
|
}
|
|
438
470
|
|
|
439
471
|
exports.default = ReportAggregator;
|
|
440
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJTdGF0dXMiLCJGQUlMRUQiLCJzdWl0ZXMiLCJzb21lIiwiUEFTU0VEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsInJvb3RQYXRoIiwiZnJhbWV3b3JrIiwiZnVsbFBhdGgiLCJwYXRoIiwib25TdGVwRW5kIiwic3RlcFJlc3VsdCIsInRvRml4ZWQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJjYXNlcyIsInN0ZXBzIiwidW5ncm91cGVkUmVzdWx0cyIsIl9ncm91cFJlc3VsdCIsInJlc3VsdEtleSIsInN1aXRlS2V5IiwiZ3JvdXBlZFJlc3VsdCIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjdXJyZW50U3VpdGVSZXN1bHQiLCJncm91cEtleSIsImdyb3VwZWRTdWl0ZVJlc3VsdCIsIl9zdWl0ZXNIYXNoIiwiYyIsImdyb3VwZWRSZXN1bHRzTGlzdCIsImtleXMiLCJtYXAiLCJzdWl0ZUdyb3VwS2V5IiwiZmlyc3RGYWlsZWRTdWl0ZSIsInMiLCJyZWNhbGN1bGF0ZVJlc3VsdEZvclN0YXR1cyIsInZhbGlkYXRlUmVzdWx0IiwiZmFpbGVkIiwidW5p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Q3BCQSxNQUFBQSxNQUFNLENBQUNWLE1BQVAsQ0FBYzZELEdBQWQsQ0FBbUJ0QyxLQUFELElBQVc7QUFDekIsWUFBSTZDLHdCQUF3QixDQUFDQyxRQUF6QixDQUFrQzlDLEtBQUssQ0FBQ0gsWUFBeEMsQ0FBSixFQUEyRDtBQUN2RGhELFVBQUFBLE9BQU8sQ0FBQ2tHLElBQVIsQ0FBYSxvQkFBYixFQUFtQy9DLEtBQUssQ0FBQ0gsWUFBekMsRUFBdUQsYUFBdkQ7QUFDSCxTQUZELE1BRU87QUFDSGdELFVBQUFBLHdCQUF3QixDQUFDdkcsSUFBekIsQ0FBOEIwRCxLQUFLLENBQUNILFlBQXBDO0FBQ0g7QUFDSixPQU5EO0FBT0gsS0FSRDtBQVNIOztBQWxZc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFJlcG9ydCBhZ2dyZWdhdG9yXHJcbiAqL1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuXHJcbi8vIGltcG9ydCBhbGwgYnVpbHQtaW4gcmVwb3J0ZXJzXHJcbmltcG9ydCBKc29uUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWpzb24nO1xyXG5pbXBvcnQgSlVuaXRSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanVuaXQnO1xyXG5pbXBvcnQgSHRtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1odG1sJztcclxuaW1wb3J0IEV4Y2VsUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWV4Y2VsJztcclxuaW1wb3J0IFBkZlJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1wZGYnO1xyXG5pbXBvcnQgWG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXhtbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5cclxuY29uc3QgUmVwb3J0ZXJzID0ge1xyXG4gICAganNvbjogSnNvblJlcG9ydGVyLFxyXG4gICAganVuaXQ6IEpVbml0UmVwb3J0ZXIsXHJcbiAgICBodG1sOiBIdG1sUmVwb3J0ZXIsXHJcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcclxuICAgIHBkZjogUGRmUmVwb3J0ZXIsXHJcbiAgICB4bWw6IFhtbFJlcG9ydGVyXHJcbn07XHJcblxyXG5jb25zdCBERUZBVUxUX1RFU1RfTkFNRSA9ICdPeHlnZW4gVGVzdCc7XHJcbmNvbnN0IERFRkFVTFRfUkVQT1JURVJTID0gW107XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRBZ2dyZWdhdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIHJlc3VsdHMgaGFzaCB0YWJsZSBiYXNlZCBvbiBydW5uZXIgaWQga2V5XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgLy8gYSBoYXNoIGxpc3Qgb2YgcnVubmVyRW5kIGV2ZW50IHByb21pc2VzLCBrZXllZCBieSBydW5uZXIgaWRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLmluc3RhbnRpYXRlUmVwb3J0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhpdENvZGUoKSB7XHJcbiAgICAgICAgbGV0IGV4aXRDb2RlID0gMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpICYmXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3RGYWlsZGVkID0gdGhpcy5yZXN1bHRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVzdEZhaWxkZWQpIHtcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgYnJva2VuID9cclxuICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBleGl0Q29kZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW50aWF0ZVJlcG9ydGVycygpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYWxSZXBvcnRpbmdPcHRzID0gdGhpcy5vcHRpb25zLnJlcG9ydGluZyB8fCB7fTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiBnZW5lcmFsUmVwb3J0aW5nT3B0cy5yZXBvcnRlcnMgfHwgREVGQVVMVF9SRVBPUlRFUlMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIHJlcG9ydGVycyB0aGF0IGRvIG5vdCBoYXZlICduYW1lJyBwcm9wZXJ0eSBhcyBpdCdzIGVzc2VudGlhbCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIFJlcG9ydGVyIGNsYXNzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJOYW1lID0gdHlwZW9mIHJlcG9ydGVyID09PSAnc3RyaW5nJyA/IHJlcG9ydGVyIDogcmVwb3J0ZXIubmFtZTtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogZ2VuZXJhbFJlcG9ydGluZ09wdHM7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlcG9ydGVycywgcmVwb3J0ZXJOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRlcnMucHVzaChuZXcgUmVwb3J0ZXJzW3JlcG9ydGVyTmFtZV0odGhpcy5vcHRpb25zLCByZXBvcnRlck9wdHMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgdGhpcy5yZXBvcnRlcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0UGF0aCA9IHJlcG9ydGVyLmdlbmVyYXRlKGdyb3VwZWRSZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yUmVzdWx0cygpIHtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlcyAmJiB0aGlzLnJ1bm5lckVuZFByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUnVubmVyU3RhcnQocmlkLCBvcHRzLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCFyaWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJpZFwiIGNhbm5vdCBiZSBlbXB0eS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5yaWQgPSByaWQ7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5uYW1lID0gb3B0cy5uYW1lIHx8IERFRkFVTFRfVEVTVF9OQU1FO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gY2FwcztcclxuICAgICAgICB0ZXN0UmVzdWx0LmVudmlyb25tZW50ID0gb3B0cy5lbnZWYXJzIHx8IHt9O1xyXG4gICAgICAgIHRlc3RSZXN1bHQub3B0aW9ucyA9IG9wdHM7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2godGVzdFJlc3VsdCk7XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHByb21pc2UgZm9yIGxhdGVyIHRvIGJlIHJlc29sdmVkIG9uIHJ1bm5lcjplbmQgZXZlbnRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0gPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIG9wdHMsXHJcbiAgICAgICAgICAgIGNhcHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lckVuZChyaWQsIGZpbmFsUmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gZmF0YWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihmYXRhbEVycm9yKSA6IGZhdGFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSB0aGlzLl9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlICYmIHRlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgZmluaXNoZWQgd2l0aCBzdGF0dXM6ICR7dGVzdFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHRlc3RSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICAvLyBjYWxsaW5nIG5leHRUaWNrKCkgd2lsbCBoZWxwIHVzIHRvIGluc3VyZSB0aGF0IHdlIHJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgZW1pdCgncnVubmVyOmVuZCcpIGhhcyBjb21wbGV0ZWRcclxuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0ucmVzb2x2ZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uU3RhcnQocmlkLCBpdGVyYXRpb24sIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke2l0ZXJhdGlvbn0gc3RhcnRlZC4uLmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25JdGVyYXRpb25FbmQocmlkLCByZXN1bHQsIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuaXRlcmF0aW9uTnVtICYmIHJlc3VsdC5zdGF0dXMgJiYgcmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSkge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke3Jlc3VsdC5pdGVyYXRpb25OdW19IGVuZGVkIHdpdGggc3RhdHVzOiAke3Jlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICAgICAgdGhpcy5vbkxvZ0VudHJ5KG51bGwsICdJTkZPJywgbXNnLCAndXNlcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlU3RhcnQocmlkLCBzdWl0ZUlkLCBzdWl0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGUubmFtZX1cIiBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZDogc3VpdGVJZCxcclxuICAgICAgICAgICAgc3VpdGU6IHN1aXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU3VpdGVFbmQocmlkLCBzdWl0ZUlkLCBzdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlc3RSZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGVSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7c3VpdGVSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogc3VpdGVSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXNlU3RhcnQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VEZWYpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlRGVmLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Nhc2U6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBjYXNlOiBjYXNlRGVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZUVuZChyaWQsIHN1aXRlSWQsIGNhc2VJZCwgY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAtIENhc2UgXCIke2Nhc2VSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7Y2FzZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogY2FzZVJlc3VsdCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN0ZXBTdGFydChyaWQsIHN0ZXApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXAubmFtZX1cIiBoYXMgc3RhcnRlZC4uLmApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5yb290UGF0aCAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrICYmIHRoaXMub3B0aW9ucy5mcmFtZXdvcmsgPT09ICdjdWN1bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnJvb3RQYXRoLCBzdGVwLmxvY2F0aW9uKTtcclxuICAgICAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGZ1bGxQYXRoKyc6MSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3RlcDogc3RlcCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN0ZXBFbmQocmlkLCBzdGVwUmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gc3RlcFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHN0ZXBSZXN1bHQuZHVyYXRpb24gPyAoc3RlcFJlc3VsdC5kdXJhdGlvbiAvIDEwMDApLnRvRml4ZWQoMikgOiAwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIC0gU3RlcCBcIiR7c3RlcFJlc3VsdC5uYW1lfVwiIGhhcyBlbmRlZCBpbiAke2R1cmF0aW9ufXMgd2l0aCBzdGF0dXM6ICR7c3RhdHVzfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXBSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Mb2dFbnRyeSh0aW1lLCBsZXZlbCwgbXNnLCBzcmMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdsb2cnLCB7XHJcbiAgICAgICAgICAgIGxldmVsLCBtc2csIHRpbWUsIHNyY1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgZmFpbHVyZSBvYmplY3QgaW4gb25lIG9mIHRlc3QgcmVzdWx0J3MgZW50aXRpZXMuIFxyXG4gICAgICogQHBhcmFtIHtUZXN0UmVzdWx0fSB0ZXN0UmVzdWx0IFxyXG4gICAgICovXHJcbiAgICBfZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGVzdFJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBzdWl0ZVJlc3VsdCBvZiB0ZXN0UmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGVSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhc2VSZXN1bHQgb2Ygc3VpdGVSZXN1bHQuY2FzZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXNlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXBSZXN1bHQgb2YgY2FzZVJlc3VsdC5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcFJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwUmVzdWx0LmZhaWx1cmUgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBSZXN1bHRzKCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHRzID0ge307XHJcbiAgICAgICAgY29uc3QgdW5ncm91cGVkUmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpIHx8IHRoaXMucmVzdWx0cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHJlc3VsdCBvZiB0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQgfHwgIXJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5yZXN1bHRLZXkpIHtcclxuICAgICAgICAgICAgICAgIHVuZ3JvdXBlZFJlc3VsdHMucHVzaChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0S2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnJlc3VsdEtleTtcclxuICAgICAgICAgICAgY29uc3Qgc3VpdGVLZXkgPSByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQuc3VpdGVLZXk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHRLZXknLCByZXN1bHRLZXkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3VpdGVLZXknLCBzdWl0ZUtleSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdGFydFRpbWUnLCByZXN1bHQuc3RhcnRUaW1lKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2VuZFRpbWUnLCByZXN1bHQuZW5kVGltZSk7XHJcbiAgICAgICAgICAgIGxldCBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbcmVzdWx0S2V5XTtcclxuICAgICAgICAgICAgaWYgKCFncm91cGVkUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbcmVzdWx0S2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVzOiBbXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Wydfc3VpdGVzSGFzaCddID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN0YXJ0VGltZSA9IE1hdGgubWluKGdyb3VwZWRSZXN1bHQuc3RhcnRUaW1lLCByZXN1bHQuc3RhcnRUaW1lKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZW5kVGltZSA9IE1hdGgubWF4KGdyb3VwZWRSZXN1bHQuZW5kVGltZSwgcmVzdWx0LmVuZFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5kdXJhdGlvbiA9IGdyb3VwZWRSZXN1bHQuZW5kVGltZSAtIGdyb3VwZWRSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmIGdyb3VwaW5nIGlzIGJ5IHJlc3VsdCBvbmx5LCB0aGVuIGp1c3QgYXBwZW5kIGN1cnJlbnQgcmVzdWx0J3Mgc3VpdGVzIHRvIHRoZSBncm91cCdzIHN1aXRlc1xyXG4gICAgICAgICAgICBpZiAoIXN1aXRlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN1aXRlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkUmVzdWx0LnN1aXRlcyxcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQuc3VpdGVzXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50U3VpdGVSZXN1bHQgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gYCR7c3VpdGVLZXl9LSR7Y3VycmVudFN1aXRlUmVzdWx0Lml0ZXJhdGlvbk51bX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdncm91cEtleScsIGdyb3VwS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkU3VpdGVSZXN1bHQgPSBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRTdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3VpdGVSZXN1bHQuY2FzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09ICdmYWlsZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnZlcnQgZ3JvdXBlZCByZXN1bHRzIGhhc2ggdG8gYW4gYXJyYXlcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0c0xpc3QgPSBPYmplY3Qua2V5cyhncm91cGVkUmVzdWx0cykubWFwKFxyXG4gICAgICAgICAgICBncm91cEtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbZ3JvdXBLZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN1aXRlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkUmVzdWx0LnN1aXRlcyxcclxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoKS5tYXAoc3VpdGVHcm91cEtleSA9PiBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW3N1aXRlR3JvdXBLZXldKVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RmFpbGVkU3VpdGUgPSBncm91cGVkUmVzdWx0LnN1aXRlcy5maW5kKHMgPT4gcy5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdEZhaWxlZFN1aXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdEZhaWxlZFN1aXRlLmZhaWx1cmUgfHwgZ3JvdXBlZFJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbLi4uZ3JvdXBlZFJlc3VsdHNMaXN0LCAuLi51bmdyb3VwZWRSZXN1bHRzXTtcclxuICAgICAgICAvLyBjaGFuZ2UgcmVzdWx0cyBzdGF0dXMgdG8gZmFpZGVkIGlmIGZhaWxlZCBzdWl0ZXMgYXJlIGZpbmRlZFxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpO1xyXG5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0LnN1aXRlcykgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVJlc3VsdChyZXN1bHRzKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzID0gW107XHJcblxyXG4gICAgICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5tYXAoKHN1aXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLmluY2x1ZGVzKHN1aXRlLml0ZXJhdGlvbk51bSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3N1aXRlLml0ZXJhdGlvbk51bScsIHN1aXRlLml0ZXJhdGlvbk51bSwgJyBub3QgdW5pcXVlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcy5wdXNoKHN1aXRlLml0ZXJhdGlvbk51bSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59Il19
|
|
472
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJfZGV0ZXJtaW5lVGVzdFN0YXR1c0J5U3VpdGVzIiwiU3RhdHVzIiwiRkFJTEVEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJoYXNGYWlsZWRTdWl0ZXMiLCJzdWl0ZXMiLCJzb21lIiwiaGFzV2FybmluZ1N1aXRlcyIsIldBUk5JTkciLCJhbGxTdWl0ZXNTa2lwcGVkIiwiZXZlcnkiLCJTS0lQUEVEIiwiUEFTU0VEIiwib25JdGVyYXRpb25TdGFydCIsIml0ZXJhdGlvbiIsInN0YXJ0IiwibXNnIiwib25Mb2dFbnRyeSIsIm9uSXRlcmF0aW9uRW5kIiwiaXRlcmF0aW9uTnVtIiwib25TdWl0ZVN0YXJ0Iiwic3VpdGVJZCIsInN1aXRlIiwib25TdWl0ZUVuZCIsInN1aXRlUmVzdWx0Iiwib25DYXNlU3RhcnQiLCJjYXNlSWQiLCJjYXNlRGVmIiwiY2FzZSIsIm9uQ2FzZUVuZCIsImNhc2VSZXN1bHQiLCJvblN0ZXBTdGFydCIsInN0ZXAiLCJyb290UGF0aCIsImZyYW1ld29yayIsImZ1bGxQYXRoIiwicGF0aCIsIm9uU3RlcEVuZCIsInN0ZXBSZXN1bHQiLCJ0b0ZpeGVkIiwidGltZSIsImxldmVsIiwic3JjIiwiY2FzZXMiLCJzdGVwcyIsInVuZ3JvdXBlZFJlc3VsdHMiLCJfZ3JvdXBSZXN1bHQiLCJyZXN1bHRLZXkiLCJzdWl0ZUtleSIsImdyb3VwZWRSZXN1bHQiLCJNYXRoIiwibWluIiwibWF4IiwiY3VycmVudFN1aXRlUmVzdWx0IiwiZ3JvdXBLZXkiLCJncm91cGVkU3VpdGVSZXN1bHQiLCJfc3VpdGVzSGFzaCIsImMiLCJncm91cGVkUmVzdWx0c0xpc3QiLCJrZXlzIiwibWFwIiwic3VpdGVHcm91cEtleSIsImZpcnN0RmFpbGVkU3VpdGUiLCJzIiwiZmlyc3RTdWl0ZVdpdGhXYXJuaW5nIiwicmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMiLCJ2YWxpZGF0ZVJlc3VsdCIsImZhaWxlZCIsInVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcyIsImluY2x1ZGVzIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUc7QUFDZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFEUTtBQUVkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUZPO0FBR2RDLEVBQUFBLElBQUksRUFBRUMscUJBSFE7QUFJZEMsRUFBQUEsS0FBSyxFQUFFQyxzQkFKTztBQUtkQyxFQUFBQSxHQUFHLEVBQUVDLG9CQUxTO0FBTWRDLEVBQUFBLEdBQUcsRUFBRUM7QUFOUyxDQUFsQjtBQVNBLE1BQU1DLGlCQUFpQixHQUFHLGFBQTFCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsRUFBMUI7O0FBRWUsTUFBTUMsZ0JBQU4sU0FBK0JDLG9CQUEvQixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVU7QUFDakI7QUFFQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUVBLFNBQUtDLGlCQUFMLEdBQXlCLEVBQXpCO0FBQ0EsU0FBS0YsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0csb0JBQUw7QUFDSDs7QUFFREMsRUFBQUEsV0FBVyxHQUFHO0FBQ1YsUUFBSUMsUUFBUSxHQUFHLENBQWY7O0FBRUEsUUFDSSxLQUFLSixPQUFMLElBQ0FLLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUtOLE9BQW5CLENBREEsSUFFQSxLQUFLQSxPQUFMLENBQWFPLE1BQWIsR0FBc0IsQ0FIMUIsRUFJRTtBQUNFLFlBQU1DLFdBQVcsR0FB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UCxHQUFnQjhDLGdCQUFPaUIsT0FBdkI7QUFDSDtBQUNKOztBQUVELGFBQU9SLE1BQVA7QUFDSCxLQWpCTSxDQUFQO0FBa0JIOztBQUVEa0UsRUFBQUEsY0FBYyxDQUFDcEksT0FBRCxFQUFVO0FBQ3BCLFVBQU1zSSx3QkFBd0IsR0FBRyxFQUFqQztBQUVBdEksSUFBQUEsT0FBTyxDQUFDOEgsR0FBUixDQUFhNUQsTUFBRCxJQUFZO0FBQ3BCQSxNQUFBQSxNQUFNLENBQUNLLE1BQVAsQ0FBY3VELEdBQWQsQ0FBbUJ0QyxLQUFELElBQVc7QUFDekIsWUFBSThDLHdCQUF3QixDQUFDQyxRQUF6QixDQUFrQy9DLEtBQUssQ0FBQ0gsWUFBeEMsQ0FBSixFQUEyRDtBQUN2RHZELFVBQUFBLE9BQU8sQ0FBQzBHLElBQVIsQ0FBYSxvQkFBYixFQUFtQ2hELEtBQUssQ0FBQ0gsWUFBekMsRUFBdUQsYUFBdkQ7QUFDSCxTQUZELE1BRU87QUFDSGlELFVBQUFBLHdCQUF3QixDQUFDL0csSUFBekIsQ0FBOEJpRSxLQUFLLENBQUNILFlBQXBDO0FBQ0g7QUFDSixPQU5EO0FBT0gsS0FSRDtBQVNIOztBQS9ac0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFJlcG9ydCBhZ2dyZWdhdG9yXHJcbiAqL1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuXHJcbi8vIGltcG9ydCBhbGwgYnVpbHQtaW4gcmVwb3J0ZXJzXHJcbmltcG9ydCBKc29uUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWpzb24nO1xyXG5pbXBvcnQgSlVuaXRSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanVuaXQnO1xyXG5pbXBvcnQgSHRtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1odG1sJztcclxuaW1wb3J0IEV4Y2VsUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWV4Y2VsJztcclxuaW1wb3J0IFBkZlJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1wZGYnO1xyXG5pbXBvcnQgWG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXhtbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5cclxuY29uc3QgUmVwb3J0ZXJzID0ge1xyXG4gICAganNvbjogSnNvblJlcG9ydGVyLFxyXG4gICAganVuaXQ6IEpVbml0UmVwb3J0ZXIsXHJcbiAgICBodG1sOiBIdG1sUmVwb3J0ZXIsXHJcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcclxuICAgIHBkZjogUGRmUmVwb3J0ZXIsXHJcbiAgICB4bWw6IFhtbFJlcG9ydGVyXHJcbn07XHJcblxyXG5jb25zdCBERUZBVUxUX1RFU1RfTkFNRSA9ICdPeHlnZW4gVGVzdCc7XHJcbmNvbnN0IERFRkFVTFRfUkVQT1JURVJTID0gW107XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRBZ2dyZWdhdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIHJlc3VsdHMgaGFzaCB0YWJsZSBiYXNlZCBvbiBydW5uZXIgaWQga2V5XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgLy8gYSBoYXNoIGxpc3Qgb2YgcnVubmVyRW5kIGV2ZW50IHByb21pc2VzLCBrZXllZCBieSBydW5uZXIgaWRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLmluc3RhbnRpYXRlUmVwb3J0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhpdENvZGUoKSB7XHJcbiAgICAgICAgbGV0IGV4aXRDb2RlID0gMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpICYmXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3RGYWlsZGVkID0gdGhpcy5yZXN1bHRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVzdEZhaWxkZWQpIHtcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgYnJva2VuID9cclxuICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBleGl0Q29kZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW50aWF0ZVJlcG9ydGVycygpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYWxSZXBvcnRpbmdPcHRzID0gdGhpcy5vcHRpb25zLnJlcG9ydGluZyB8fCB7fTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiBnZW5lcmFsUmVwb3J0aW5nT3B0cy5yZXBvcnRlcnMgfHwgREVGQVVMVF9SRVBPUlRFUlMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIHJlcG9ydGVycyB0aGF0IGRvIG5vdCBoYXZlICduYW1lJyBwcm9wZXJ0eSBhcyBpdCdzIGVzc2VudGlhbCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIFJlcG9ydGVyIGNsYXNzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJOYW1lID0gdHlwZW9mIHJlcG9ydGVyID09PSAnc3RyaW5nJyA/IHJlcG9ydGVyIDogcmVwb3J0ZXIubmFtZTtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogZ2VuZXJhbFJlcG9ydGluZ09wdHM7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlcG9ydGVycywgcmVwb3J0ZXJOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRlcnMucHVzaChuZXcgUmVwb3J0ZXJzW3JlcG9ydGVyTmFtZV0odGhpcy5vcHRpb25zLCByZXBvcnRlck9wdHMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgdGhpcy5yZXBvcnRlcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0UGF0aCA9IHJlcG9ydGVyLmdlbmVyYXRlKGdyb3VwZWRSZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yUmVzdWx0cygpIHtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlcyAmJiB0aGlzLnJ1bm5lckVuZFByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUnVubmVyU3RhcnQocmlkLCBvcHRzLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCFyaWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJpZFwiIGNhbm5vdCBiZSBlbXB0eS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5yaWQgPSByaWQ7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5uYW1lID0gb3B0cy5uYW1lIHx8IERFRkFVTFRfVEVTVF9OQU1FO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gY2FwcztcclxuICAgICAgICB0ZXN0UmVzdWx0LmVudmlyb25tZW50ID0gb3B0cy5lbnZWYXJzIHx8IHt9O1xyXG4gICAgICAgIHRlc3RSZXN1bHQub3B0aW9ucyA9IG9wdHM7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2godGVzdFJlc3VsdCk7XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHByb21pc2UgZm9yIGxhdGVyIHRvIGJlIHJlc29sdmVkIG9uIHJ1bm5lcjplbmQgZXZlbnRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0gPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIG9wdHMsXHJcbiAgICAgICAgICAgIGNhcHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lckVuZChyaWQsIGZpbmFsUmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IHN0YXR1cyBiYXNlZCBvbiBzdWl0ZXMgc3RhdHVzZXNcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5zdGF0dXMgPSB0aGlzLl9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcik7XHJcbiAgICAgICAgICAgIC8vIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gZmF0YWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihmYXRhbEVycm9yKSA6IGZhdGFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSB0aGlzLl9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlICYmIHRlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgZmluaXNoZWQgd2l0aCBzdGF0dXM6ICR7dGVzdFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHRlc3RSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICAvLyBjYWxsaW5nIG5leHRUaWNrKCkgd2lsbCBoZWxwIHVzIHRvIGluc3VyZSB0aGF0IHdlIHJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgZW1pdCgncnVubmVyOmVuZCcpIGhhcyBjb21wbGV0ZWRcclxuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0ucmVzb2x2ZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGlmIChmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYXNGYWlsZWRTdWl0ZXMgPSB0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgIGlmIChoYXNGYWlsZWRTdWl0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhhc1dhcm5pbmdTdWl0ZXMgPSB0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICBpZiAoaGFzV2FybmluZ1N1aXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFsbFN1aXRlc1NraXBwZWQgPSB0ZXN0UmVzdWx0LnN1aXRlcy5ldmVyeSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuU0tJUFBFRCk7XHJcbiAgICAgICAgaWYgKGFsbFN1aXRlc1NraXBwZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TS0lQUEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU3RhdHVzLlBBU1NFRDtcclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwUmVzdWx0cygpIHtcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHVuZ3JvdXBlZFJlc3VsdHMgPSBbXTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSB8fCB0aGlzLnJlc3VsdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0IHx8ICFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICB1bmdyb3VwZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEtleSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5yZXN1bHRLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5O1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV07XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogW10sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWUgPSBNYXRoLm1pbihncm91cGVkUmVzdWx0LnN0YXJ0VGltZSwgcmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmVuZFRpbWUgPSBNYXRoLm1heChncm91cGVkUmVzdWx0LmVuZFRpbWUsIHJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZHVyYXRpb24gPSBncm91cGVkUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBncm91cGluZyBpcyBieSByZXN1bHQgb25seSwgdGhlbiBqdXN0IGFwcGVuZCBjdXJyZW50IHJlc3VsdCdzIHN1aXRlcyB0byB0aGUgZ3JvdXAncyBzdWl0ZXNcclxuICAgICAgICAgICAgaWYgKCFzdWl0ZUtleSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LnN1aXRlc1xyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudFN1aXRlUmVzdWx0IG9mIHJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cEtleSA9IGAke3N1aXRlS2V5fS0ke2N1cnJlbnRTdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW19YDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkU3VpdGVSZXN1bHQgPSBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRTdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3VpdGVSZXN1bHQuY2FzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb252ZXJ0IGdyb3VwZWQgcmVzdWx0cyBoYXNoIHRvIGFuIGFycmF5XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHNMaXN0ID0gT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdHMpLm1hcChcclxuICAgICAgICAgICAgZ3JvdXBLZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkubWFwKHN1aXRlR3JvdXBLZXkgPT4gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtzdWl0ZUdyb3VwS2V5XSlcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEZhaWxlZFN1aXRlID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdEZhaWxlZFN1aXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0RmFpbGVkU3VpdGUuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFN1aXRlV2l0aFdhcm5pbmcgPSBncm91cGVkUmVzdWx0LnN1aXRlcy5maW5kKHMgPT4gcy5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RTdWl0ZVdpdGhXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0U3VpdGVXaXRoV2FybmluZy5mYWlsdXJlIHx8IGdyb3VwZWRSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFsuLi5ncm91cGVkUmVzdWx0c0xpc3QsIC4uLnVuZ3JvdXBlZFJlc3VsdHNdO1xyXG4gICAgICAgIC8vIGNoYW5nZSByZXN1bHRzIHN0YXR1cyB0byBmYWlkZWQgaWYgZmFpbGVkIHN1aXRlcyBhcmUgZmluZGVkXHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cyk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXN1bHQocmVzdWx0cyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cykge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQuc3VpdGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0LnN1aXRlcy5maW5kKChzdWl0ZSkgPT4gc3VpdGUuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpIHtcclxuICAgICAgICBjb25zdCB1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMgPSBbXTtcclxuXHJcbiAgICAgICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMuaW5jbHVkZXMoc3VpdGUuaXRlcmF0aW9uTnVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3VpdGUuaXRlcmF0aW9uTnVtJywgc3VpdGUuaXRlcmF0aW9uTnVtLCAnIG5vdCB1bmlxdWUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLnB1c2goc3VpdGUuaXRlcmF0aW9uTnVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
|