@microsoft/ocsdk 0.6.0-main.67b919d → 0.6.0-main.7b9626a
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/dist/SDK.min.js +1 -1
- package/lib/SDK.js +31 -28
- package/lib/SDK.js.map +1 -1
- package/package.json +1 -1
package/lib/SDK.js
CHANGED
|
@@ -518,33 +518,29 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
// Resolves only if it contains chat token response which only happens on status 200
|
|
521
|
-
if (!data) {
|
|
522
|
-
_context5.next = 4;
|
|
523
|
-
break;
|
|
524
|
-
}
|
|
525
|
-
if (!(Object.keys(data).length === 0)) {
|
|
521
|
+
if (!(data && Object.keys(data).length > 0)) {
|
|
526
522
|
_context5.next = 3;
|
|
527
523
|
break;
|
|
528
524
|
}
|
|
529
|
-
reject(new Error("Empty data received from getChatToken"));
|
|
530
|
-
return _context5.abrupt("return");
|
|
531
|
-
case 3:
|
|
532
525
|
data.requestId = requestId;
|
|
533
526
|
_this3.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETCHATTOKENSUCCEEDED, "Get Chat Token succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
534
527
|
resolve(data);
|
|
535
528
|
return _context5.abrupt("return");
|
|
536
|
-
case
|
|
537
|
-
if (!(reconnectId && response.status === _Constants["default"].noContentStatusCode)) {
|
|
538
|
-
_context5.next =
|
|
529
|
+
case 3:
|
|
530
|
+
if (!(!data && reconnectId && response.status === _Constants["default"].noContentStatusCode)) {
|
|
531
|
+
_context5.next = 4;
|
|
539
532
|
break;
|
|
540
533
|
}
|
|
541
534
|
reject(response);
|
|
542
535
|
return _context5.abrupt("return");
|
|
536
|
+
case 4:
|
|
537
|
+
throw Object.assign(new Error("Empty data received from getChatToken"), {
|
|
538
|
+
response: {
|
|
539
|
+
status: response.status
|
|
540
|
+
}
|
|
541
|
+
});
|
|
543
542
|
case 5:
|
|
544
|
-
_context5.
|
|
545
|
-
break;
|
|
546
|
-
case 6:
|
|
547
|
-
_context5.prev = 6;
|
|
543
|
+
_context5.prev = 5;
|
|
548
544
|
_t4 = _context5["catch"](1);
|
|
549
545
|
_httpRequestResponseTime4 = backendTimer.milliSecondsElapsed;
|
|
550
546
|
_elapsedTimeInMilliseconds4 = timer.milliSecondsElapsed;
|
|
@@ -553,11 +549,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
553
549
|
reject(new Error(_this3.HTTPTimeOutErrorMessage));
|
|
554
550
|
}
|
|
555
551
|
reject(_t4);
|
|
556
|
-
case
|
|
552
|
+
case 6:
|
|
557
553
|
case "end":
|
|
558
554
|
return _context5.stop();
|
|
559
555
|
}
|
|
560
|
-
}, _callee5, null, [[1,
|
|
556
|
+
}, _callee5, null, [[1, 5]]);
|
|
561
557
|
}));
|
|
562
558
|
return function (_x6, _x7) {
|
|
563
559
|
return _ref2.apply(this, arguments);
|
|
@@ -1012,31 +1008,38 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1012
1008
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1013
1009
|
_data = response.data, headers = response.headers;
|
|
1014
1010
|
_this7.setAuthCodeNonce(headers);
|
|
1015
|
-
if (_data) {
|
|
1016
|
-
|
|
1017
|
-
|
|
1011
|
+
if (!_data) {
|
|
1012
|
+
_context11.next = 3;
|
|
1013
|
+
break;
|
|
1018
1014
|
}
|
|
1019
|
-
|
|
1020
|
-
|
|
1015
|
+
_this7.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETAGENTAVAILABILITYSUCCEEDED, "Get agent availability succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1016
|
+
resolve(_data);
|
|
1017
|
+
return _context11.abrupt("return");
|
|
1021
1018
|
case 3:
|
|
1022
|
-
|
|
1019
|
+
throw Object.assign(new Error("Empty data received from getAgentAvailability"), {
|
|
1020
|
+
response: {
|
|
1021
|
+
status: response.status
|
|
1022
|
+
}
|
|
1023
|
+
});
|
|
1024
|
+
case 4:
|
|
1025
|
+
_context11.prev = 4;
|
|
1023
1026
|
_t8 = _context11["catch"](1);
|
|
1024
1027
|
_httpRequestResponseTime8 = backendTimer.milliSecondsElapsed;
|
|
1025
1028
|
_elapsedTimeInMilliseconds8 = timer.milliSecondsElapsed;
|
|
1026
1029
|
_this7.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETAGENTAVAILABILITYFAILED, "Get agent availability failed", requestId, undefined, _elapsedTimeInMilliseconds8, requestPath, method, _t8, undefined, requestHeaders, _httpRequestResponseTime8);
|
|
1027
1030
|
if (!(0, _isExpectedAxiosError["default"])(_t8, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1028
|
-
_context11.next =
|
|
1031
|
+
_context11.next = 5;
|
|
1029
1032
|
break;
|
|
1030
1033
|
}
|
|
1031
1034
|
reject(new Error(_this7.HTTPTimeOutErrorMessage));
|
|
1032
1035
|
return _context11.abrupt("return");
|
|
1033
|
-
case 4:
|
|
1034
|
-
reject(_t8);
|
|
1035
1036
|
case 5:
|
|
1037
|
+
reject(_t8);
|
|
1038
|
+
case 6:
|
|
1036
1039
|
case "end":
|
|
1037
1040
|
return _context11.stop();
|
|
1038
1041
|
}
|
|
1039
|
-
}, _callee11, null, [[1,
|
|
1042
|
+
}, _callee11, null, [[1, 4]]);
|
|
1040
1043
|
}));
|
|
1041
1044
|
return function (_x16, _x17) {
|
|
1042
1045
|
return _ref6.apply(this, arguments);
|
|
@@ -2861,4 +2864,4 @@ _SDK = SDK;
|
|
|
2861
2864
|
waitTimeBetweenRetriesConfig: _waitTimeBetweenRetriesConfigs.waitTimeBetweenRetriesConfigs,
|
|
2862
2865
|
ocUserAgent: []
|
|
2863
2866
|
});
|
|
2864
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRW51bXMiLCJyZXF1aXJlIiwiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9heGlvc1JldHJ5SGFuZGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0Jyb3dzZXJJbmZvIiwiX0NvbnN0YW50cyIsIl9DdXN0b21Db250ZXh0RGF0YSIsIl9EZXZpY2VJbmZvIiwiX2VuY0hleCIsIl9Mb2NhbGVzIiwiX0xvZ0xldmVsIiwiX0xvZ2dpbmdTYW5pdGl6ZXIiLCJfT1NJbmZvIiwiX09tbmljaGFubmVsRW5kcG9pbnRzIiwiX09tbmljaGFubmVsSFRUUEhlYWRlcnMiLCJfc2hhIiwiX1RpbWVyIiwiX2h0dHBIZWFkZXJzVXRpbHMiLCJfZW5kcG9pbnRzQ3JlYXRvcnMiLCJfaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJfU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJfdXVpZCIsIl93YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyIsIl9TREsiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90MjIiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlNESyIsImV4cG9ydHMiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJfdGhpcyIsImNvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJkZWZhdWx0Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9jbGFzc0NhbGxDaGVjazIiLCJjb25jYXQiLCJTREtFcnJvciIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lIiwiQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2UiLCJoZWFkZXJzIiwiYXV0aGNvZGVub25jZSIsImF1dGhDb2RlTm9uY2UiLCJzZXNzaW9uSWQiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwib2NTZXNzaW9uSWQiLCJyZXF1ZXN0SWQiLCJjb3JyZWxhdGlvbklkIiwiX3R5cGVvZjIiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleSIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJjaGFubmVsSWQiLCJ2YWx1ZXMiLCJDaGFubmVsSWQiLCJpbmNsdWRlcyIsIkVycm9yIiwiY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfaXRlcmF0b3IiLCJDb25zdGFudHMiLCJyZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfc3RlcCIsImVyciIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJfY3JlYXRlQ2xhc3MyIiwiX2dldExjd0Zjc0RldGFpbHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRpbWVyIiwicmVxdWVzdFBhdGgiLCJtZXRob2QiLCJ1cmwiLCJheGlvc0luc3RhbmNlIiwicmVxdWVzdEhlYWRlcnMiLCJiYWNrZW5kVGltZXIiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQiLCJyZXNwb25zZSIsImh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMY3dGY3NEZXRhaWxzUGF0aCIsIm9yZ0lkIiwib3JnVXJsIiwiYXhpb3MiLCJjcmVhdGUiLCJheGlvc1JldHJ5SGFuZGxlciIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJhZGRPY1VzZXJBZ2VudEhlYWRlciIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInNlbnQiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsImFicnVwdCIsIkVSUk9SIiwiR0VUTENXRkNTREVUQUlMU0ZBSUxFRCIsInN0b3AiLCJnZXRMY3dGY3NEZXRhaWxzIiwiX2dldENoYXRDb25maWciLCJfY2FsbGVlMiIsImJ5cGFzc0NhY2hlIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIiLCJyZXRyeUNvdW50IiwiX2FyZ3MyIiwiX3QyIiwiX2NvbnRleHQyIiwiR0VUQ0hBVENPTkZJR0ZTVEFSVEVEIiwidXVpZHY0IiwiTGl2ZUNoYXRDb25maWdQYXRoIiwid2lkZ2V0SWQiLCJyZXRyeU9uNDI5IiwiZ2V0Q2hhdENvbmZpZ1JldHJ5T240MjkiLCJhZGREZWZhdWx0SGVhZGVycyIsImJ5cGFzc0NhY2hlSGVhZGVycyIsIkdFVENIQVRDT05GSUdTVUNDRUVERUQiLCJnZXRSZXRyeUNvdW50IiwiY29uZmlnIiwiR0VUQ0hBVENPTkZJR0ZBSUxFRCIsIlByb21pc2UiLCJyZWplY3QiLCJfeCIsIl9nZXRMV0lEZXRhaWxzIiwiX2NhbGxlZTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQzIiwiX3RoaXMyIiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsInJlY29ubmVjdElkIiwic2hvdWxkVXNlU2lnUXVlcnlQYXJhbSIsInBhcmFtcyIsIm9wdGlvbnMiLCJfYXJnczQiLCJfY29udGV4dDQiLCJHRVRMV0lTVEFUVVNTVEFSVEVEIiwiTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsImF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kIiwiaGVhZGVyT3ZlcndyaXRlcyIsImdldExXSURldGFpbHMiLCJkZWZhdWx0SGVhZGVycyIsIkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRoIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwic2lnIiwiX3JlZiIsIl9jYWxsZWUzIiwicmVzb2x2ZSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTMiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczMiLCJfdDMiLCJfY29udGV4dDMiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiR0VUTFdJU1RBVFVTRkFJTEVEIiwiaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsIl94MyIsIl94NCIsIl94MiIsIl9nZXRDaGF0VG9rZW4iLCJfY2FsbGVlNiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDQiLCJfdGhpczMiLCJnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyIsImN1cnJlbnRSZXRyeUNvdW50IiwiY3VycmVudExpdmVDaGF0VmVyc2lvbiIsInJlZnJlc2hUb2tlbiIsIk1zT2NCb3RBcHBsaWNhdGlvbklkIiwibXVsdGlCb3QiLCJlbmRwb2ludCIsIl9hcmdzNiIsIl9jb250ZXh0NiIsIkdFVENIQVRUT0tFTlNUQVJURUQiLCJjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludCIsImdldENoYXRUb2tlbiIsImdldENoYXRUb2tlblJldHJ5T240MjkiLCJfcmVmMiIsIl9jYWxsZWU1IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNCIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNCIsIl90NCIsIl9jb250ZXh0NSIsInRvTG93ZXJDYXNlIiwiR0VUQ0hBVFRPS0VOU1VDQ0VFREVEIiwic3RhdHVzIiwibm9Db250ZW50U3RhdHVzQ29kZSIsIkdFVENIQVRUT0tFTkZBSUxFRCIsIl94NiIsIl94NyIsIl94NSIsIl9yZW5ld0NoYXRUb2tlbiIsIl9jYWxsZWU4IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kdyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kdzIiLCJfdGhpczQiLCJyZW5ld0NoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIiwibWF4UmV0cmllcyIsIl9hcmdzOCIsIl9jb250ZXh0OCIsIlJFTkVXQ0hBVFRPS0VOU1RBUlRFRCIsIkxpdmVDaGF0djJBdXRoUmVuZXdDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXR2MlJlbmV3Q2hhdFRva2VuUGF0aCIsInJlbmV3Q2hhdFRva2VuIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MiLCJfcmVmMyIsIl9jYWxsZWU3IiwiZXJyb3IiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU1IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM1IiwiX3Q1IiwiX2NvbnRleHQ3IiwiVG9rZW4iLCJSRU5FV0NIQVRUT0tFTkZBSUxFRCIsIlJFTkVXQ0hBVFRPS0VOU1VDQ0VFREVEIiwiX3g5IiwiX3gwIiwiX3g4IiwiX2dldFJlY29ubmVjdGFibGVDaGF0cyIsIl9jYWxsZWUwIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkNiIsIl90aGlzNSIsIl9jb250ZXh0MCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NUQVJURUQiLCJMaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGgiLCJnZXRSZWNvbm5lY3RhYmxlQ2hhdHMiLCJfcmVmNCIsIl9jYWxsZWU5IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNiIsIl90NiIsIl9jb250ZXh0OSIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCIsIl94MTAiLCJfeDExIiwiX3gxIiwiX2dldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIl9jYWxsZWUxMCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDciLCJfdGhpczYiLCJvcHRpb25hbFBhcmFtcyIsIl9hcmdzMTAiLCJfY29udGV4dDEwIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCIsIkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aCIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIl9yZWY1IiwiX2NhbGxlZTEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU3IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM3IiwiX3Q3IiwiX2NvbnRleHQxIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVEIiwiV0FSTiIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCIsIl94MTMiLCJfeDE0IiwiX3gxMiIsIl9nZXRBZ2VudEF2YWlsYWJpbGl0eSIsIl9jYWxsZWUxMiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDgiLCJfdGhpczciLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiaW5pdENvbnRleHQiLCJnZXRDb250ZXh0IiwiY2FjaE9iaiIsInRlbXBBcnIiLCJfYXJnczEyIiwiX2NvbnRleHQxMiIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCIsIkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aCIsImdldEFnZW50QXZhaWxhYmlsaXR5IiwiY3VzdG9tQ29udGV4dERhdGEiLCJDdXN0b21Db250ZXh0RGF0YSIsInNvcnQiLCJhc3NpZ24iLCJwb3J0YWxjb250YWN0aWQiLCJjYWNoZUtleSIsIlNIQTI1NiIsIkpTT04iLCJzdHJpbmdpZnkiLCJIZXgiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImJyb3dzZXIiLCJCcm93c2VySW5mbyIsImdldEJyb3dzZXJOYW1lIiwiZGV2aWNlIiwiRGV2aWNlSW5mbyIsImdldERldmljZVR5cGUiLCJvcmlnaW51cmwiLCJsb2NhdGlvbiIsImhyZWYiLCJvcyIsIk9TSW5mbyIsImdldE9zVHlwZSIsImxvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJMb2NhbGVzIiwic3VwcG9ydGVkTG9jYWxlcyIsIl9yZWY2IiwiX2NhbGxlZTExIiwiX2RhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM4IiwiX3Q4IiwiX2NvbnRleHQxMSIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVEIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQiLCJfeDE2IiwiX3gxNyIsIl94MTUiLCJfc2Vzc2lvbkluaXQiLCJfY2FsbGVlMTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ5IiwiX3RoaXM4Iiwic2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyIsImJhc2VQYXRoIiwiX2FyZ3MxNCIsIl9jb250ZXh0MTQiLCJTRVNTSU9OSU5JVFNUQVJURUQiLCJzZXNzaW9uSW5pdCIsInNob3VsZFJldHJ5Iiwic2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGgiLCJMaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCIsInNldFJlcXVlc3RJZEhlYWRlciIsIl9yZWY3IiwiX2NhbGxlZTEzIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOSIsIl90OSIsIl9jb250ZXh0MTMiLCJTRVNTSU9OSU5JVFNVQ0NFRURFRCIsIlNFU1NJT05JTklURkFJTEVEIiwiX3gxOSIsIl94MjAiLCJfeDE4IiwiX2NyZWF0ZUNvbnZlcnNhdGlvbiIsIl9jYWxsZWUxNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDAiLCJfZGF0YTIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMwIiwiX2FyZ3MxNSIsIl90MCIsIl9jb250ZXh0MTUiLCJDUkVBVEVTRVNTSU9OU1RBUlRFRCIsIkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGgiLCJMaXZlQ2hhdENvbm5lY3RvclBhdGgiLCJDUkVBVEVTRVNTSU9OU1VDQ0VFREVEIiwiQ1JFQVRFU0VTU0lPTkZBSUxFRCIsImNyZWF0ZUNvbnZlcnNhdGlvbiIsIl94MjEiLCJfc2Vzc2lvbkNsb3NlIiwiX2NhbGxlZTE3IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMSIsIl90aGlzOSIsInNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIiwiaXNSZWNvbm5lY3RDaGF0IiwiaXNQZXJzaXN0ZW50Q2hhdCIsImNoYXRJZCIsIl9hcmdzMTciLCJfY29udGV4dDE3IiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsIkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aCIsInNlc3Npb25DbG9zZSIsIkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGgiLCJfcmVmOCIsIl9jYWxsZWUxNiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczEiLCJfdDEiLCJfY29udGV4dDE2IiwiU0VTU0lPTkNMT1NFU1VDQ0VFREVEIiwiU0VTU0lPTkNMT1NFRkFJTEVEIiwiY29kZSIsIl94MjMiLCJfeDI0IiwiX3gyMiIsIl92YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwiX2NhbGxlZTE5IiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTAiLCJfdGhpczAiLCJfY29udGV4dDE5IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiX3JlZjkiLCJfY2FsbGVlMTgiLCJfcmVzcG9uc2UkZGF0YSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMCIsIl90MTAiLCJfY29udGV4dDE4IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwiX3gyNyIsIl94MjgiLCJfeDI1IiwiX3gyNiIsIl9zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiX2NhbGxlZTIxIiwicG9zdENoYXRSZXNwb25zZSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDExIiwiX3RoaXMxIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyMSIsIl9jb250ZXh0MjEiLCJTVUJNSVRQT1NUQ0hBVFNUQVJURUQiLCJMaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aCIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UiLCJMaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGgiLCJfcmVmMCIsIl9jYWxsZWUyMCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTExIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMSIsIl90MTEiLCJfY29udGV4dDIwIiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsIl94MzEiLCJfeDMyIiwiX3gyOSIsIl94MzAiLCJfZ2V0U3VydmV5SW52aXRlTGluayIsIl9jYWxsZWUyMyIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEyIiwiX3RoaXMxMCIsImdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyIsIl9hcmdzMjMiLCJfY29udGV4dDIzIiwibG9nIiwiR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURUQiLCJTdXJ2ZXlPd25lcklkIiwiTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsImdldFN1cnZleUludml0ZUxpbmsiLCJMaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsIndpZGdldEFwcElkIiwiX3JlZjEiLCJfY2FsbGVlMjIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxMiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTIiLCJfdDEyIiwiX2NvbnRleHQyMiIsIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVEIiwiX3gzNSIsIl94MzYiLCJfeDMzIiwiX3gzNCIsIl9nZXRDaGF0VHJhbnNjcmlwdHMiLCJfY2FsbGVlMjUiLCJ0b2tlbiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEzIiwiX3RoaXMxMSIsImdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyNSIsIl9jb250ZXh0MjUiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCIsImdldENoYXRUcmFuc2NyaXB0cyIsIm9yZ2FuaXphdGlvbklkIiwiYXV0aG9yaXphdGlvbiIsIkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0QXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIl9yZWYxMCIsIl9jYWxsZWUyNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEzIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMyIsIl90MTMiLCJfY29udGV4dDI0IiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRCIsIl94NDAiLCJfeDQxIiwiX3gzNyIsIl94MzgiLCJfeDM5IiwiX2dldFBlcnNpc3RlbnRDaGF0SGlzdG9yeSIsIl9jYWxsZWUyNyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE0IiwiX3RoaXMxMiIsImdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zIiwicGFnZVNpemUiLCJwYWdlVG9rZW4iLCJlcnJvck1lc3NhZ2UiLCJfYXJnczI3IiwiX2NvbnRleHQyNyIsIkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNUQVJURUQiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQiLCJMaXZlQ2hhdEF1dGhHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlQYXRoIiwiZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5IiwiX3JlZjExIiwiX2NhbGxlZTI2IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTQiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE0IiwiX3QxNCIsIl9jb250ZXh0MjYiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVUNDRUVERUQiLCJfeDQzIiwiX3g0NCIsIl94NDIiLCJfZW1haWxUcmFuc2NyaXB0IiwiX2NhbGxlZTI5IiwiZW1haWxSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE1IiwiX3RoaXMxMyIsImVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyOSIsIl9jb250ZXh0MjkiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsImVtYWlsVHJhbnNjcmlwdCIsIkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiX3JlZjEyIiwiX2NhbGxlZTI4IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE1IiwiX3QxNSIsIl9jb250ZXh0MjgiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJfeDQ4IiwiX3g0OSIsIl94NDUiLCJfeDQ2IiwiX3g0NyIsIl9mZXRjaERhdGFNYXNraW5nSW5mbyIsIl9jYWxsZWUzMSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE2IiwiX3RoaXMxNCIsIl9jb250ZXh0MzEiLCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRCIsIkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoIiwiZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJfcmVmMTMiLCJfY2FsbGVlMzAiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxNiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTYiLCJfdDE2IiwiX2NvbnRleHQzMCIsIkZFVENIREFUQU1BU0tJTkdTVUNDRUVERUQiLCJGRVRDSERBVEFNQVNLSU5HRkFJTEVEIiwiX3g1MSIsIl94NTIiLCJfeDUwIiwiX21ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0IiwiX2NhbGxlZTMzIiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNyIsIl90aGlzMTUiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyIsIl9hcmdzMzMiLCJfY29udGV4dDMzIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJMaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwiX3JlZjE0IiwiX2NhbGxlZTMyIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTciLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE3IiwiX3QxNyIsIl9jb250ZXh0MzIiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsIl94NTUiLCJfeDU2IiwiX3g1MyIsIl94NTQiLCJfc2VuZFR5cGluZ0luZGljYXRvciIsIl9jYWxsZWUzNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE4IiwiX3RoaXMxNiIsInNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyIsImN1c3RvbWVyRGlzcGxheU5hbWUiLCJfYXJnczM1IiwiX2NvbnRleHQzNSIsIlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoIiwic2VuZFR5cGluZ0luZGljYXRvciIsIl9yZWYxNSIsIl9jYWxsZWUzNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxOCIsIl90MTgiLCJfY29udGV4dDM0IiwiU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQiLCJfeDU5IiwiX3g2MCIsIl94NTciLCJfeDU4IiwiX21pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQiLCJfY2FsbGVlMzciLCJhdXRoZW50aWNhdGVDaGF0UGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTkiLCJfdGhpczE3IiwiX2NvbnRleHQzNyIsIk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVEIiwiTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCIsIkxpdmVDaGF0QXV0aE1pZENvbnZlcnNhdGlvblBhdGgiLCJtaWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0IiwiX3JlZjE2IiwiX2NhbGxlZTM2IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTkiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE5IiwiX3QxOSIsIl9jb250ZXh0MzYiLCJNSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVEIiwiX3g2MyIsIl94NjQiLCJfeDYxIiwiX3g2MiIsIl9nZXRVbnJlYWRNZXNzYWdlQ291bnQiLCJfY2FsbGVlMzkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQyMCIsIl90aGlzMTgiLCJfY29udGV4dDM5IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1RBUlRFRCIsImdldFVucmVhZE1lc3NhZ2VDb3VudCIsIl9yZWYxNyIsIl9jYWxsZWUzOCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMyMCIsIl90MjAiLCJfY29udGV4dDM4IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1VDQ0VFREVEIiwiR0VUVU5SRUFETUVTU0FHRUNPVU5URkFJTEVEIiwiX3g2NiIsIl94NjciLCJfeDY1IiwiX3NlbmRSZWFkUmVjZWlwdCIsIl9jYWxsZWU0MSIsIm1lc3NhZ2VJZCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDIxIiwiX3RoaXMxOSIsIl9jb250ZXh0NDEiLCJTRU5EUkVBRFJFQ0VJUFRTVEFSVEVEIiwic2VuZFJlYWRSZWNlaXB0IiwiX3JlZjE4IiwiX2NhbGxlZTQwIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMjEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIxIiwiX3QyMSIsIl9jb250ZXh0NDAiLCJTRU5EUkVBRFJFQ0VJUFRTVUNDRUVERUQiLCJTRU5EUkVBRFJFQ0VJUFRGQUlMRUQiLCJfeDcxIiwiX3g3MiIsIl94NjgiLCJfeDY5IiwiX3g3MCIsImxvZ0xldmVsIiwidGVsZW1ldHJ5RXZlbnRUeXBlIiwiZGVzY3JpcHRpb24iLCJyZXF1ZXN0UGF5bG9hZCIsIl9yZXNwb25zZSIsIl9yZXNwb25zZTIiLCJfcmVzcG9uc2UzIiwiTG9nZ2luZ1Nhbml0aXplciIsInN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzIiwic2FuaXRpemVkUmVxdWVzdFBheWxvYWQiLCJzdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzIiwicHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBQcmVDaGF0UmVzcG9uc2UiLCJzdHJpcEdlb2xvY2F0aW9uIiwic2FuaXRpemVkUmVxdWVzdEhlYWRlcnMiLCJhdXRoVG9rZW5EZXRhaWxzIiwic3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMiLCJhdG9iIiwicGF5bG9hZCIsInNwbGl0IiwianNvbkRhdGEiLCJwYXJzZSIsImx3aUNvbnRleHRzIiwic3ViIiwiZXhwIiwibHdpQ29udGV4dHNEYXRhIiwiX3VudXNlZCIsImN1c3RvbURhdGEiLCJSZXF1ZXN0SWQiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiSHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJUcmFuc2FjdGlvbklkIiwidHJhbnNhY3Rpb25pZCIsIlJlcXVlc3RQYXRoIiwiUmVxdWVzdE1ldGhvZCIsIlJlc3BvbnNlU3RhdHVzQ29kZSIsIkV4Y2VwdGlvbkRldGFpbHMiLCJSZXF1ZXN0UGF5bG9hZCIsIlJlcXVlc3RIZWFkZXJzIiwiUmVzcG9uc2VFcnJvcmNvZGUiLCJlcnJvcmNvZGUiLCJBdXRoVG9rZW5EZXRhaWxzIiwiUmV0cnlDb3VudCIsInNldFNlc3Npb25JZEhlYWRlciIsInNldENvcnJlbGF0aW9uSWRJbkhlYWRlciIsInN1YnN0cmluZyIsImdldENoYXRUb2tlblJldHJ5Q291bnQiLCJnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmUiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWciXSwic291cmNlUm9vdCI6Im9jc2RrOi8vLyIsInNvdXJjZXMiOlsiLi4vc3JjL1NESy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFubmVsSWQsIExpdmVDaGF0VmVyc2lvbiwgT0NTREtUZWxlbWV0cnlFdmVudCwgU0RLRXJyb3IgfSBmcm9tIFwiLi9Db21tb24vRW51bXNcIjtcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yLCBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBheGlvc1JldHJ5SGFuZGxlciwgeyBheGlvc1JldHJ5SGFuZGxlcldpdGhOb3RGb3VuZCwgZ2V0UmV0cnlDb3VudCB9IGZyb20gXCIuL1V0aWxzL2F4aW9zUmV0cnlIYW5kbGVyXCI7XG5cbmltcG9ydCB7IEJyb3dzZXJJbmZvIH0gZnJvbSBcIi4vVXRpbHMvQnJvd3NlckluZm9cIjtcbmltcG9ydCBDb25zdGFudHMgZnJvbSBcIi4vQ29tbW9uL0NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGV4dERhdGEgfSBmcm9tIFwiLi9VdGlscy9DdXN0b21Db250ZXh0RGF0YVwiO1xuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gXCIuL1V0aWxzL0RldmljZUluZm9cIjtcbmltcG9ydCBGZXRjaENoYXRUb2tlblJlc3BvbnNlIGZyb20gXCIuL01vZGVsL0ZldGNoQ2hhdFRva2VuUmVzcG9uc2VcIjtcbmltcG9ydCBIZXggZnJvbSBcImNyeXB0by1qcy9lbmMtaGV4XCI7XG5pbXBvcnQgSURhdGFNYXNraW5nSW5mbyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lEYXRhTWFza2luZ0luZm9cIjtcbmltcG9ydCBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXNcIjtcbmltcG9ydCBJUmVuZXdDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZW5ld0NoYXRUb2tlbk9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNESyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtcIjtcbmltcG9ydCBJU0RLQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXNcIlxuaW1wb3J0IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSW5pdENvbnRleHQgZnJvbSBcIi4vTW9kZWwvSW5pdENvbnRleHRcIjtcbmltcG9ydCBMb2NhbGVzIGZyb20gXCIuL0NvbW1vbi9Mb2NhbGVzXCI7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL01vZGVsL0xvZ0xldmVsXCI7XG5pbXBvcnQgeyBMb2dnaW5nU2FuaXRpemVyIH0gZnJvbSBcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiO1xuaW1wb3J0IE9DU0RLTG9nZ2VyIGZyb20gXCIuL0NvbW1vbi9PQ1NES0xvZ2dlclwiO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSBcIi4vVXRpbHMvT1NJbmZvXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxFbmRwb2ludHMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxIVFRQSGVhZGVycyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVyc1wiO1xuaW1wb3J0IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgZnJvbSBcIi4vSW50ZXJmYWNlcy9PbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyXCI7XG5pbXBvcnQgUXVldWVBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUXVldWVBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUmVjb25uZWN0QXZhaWxhYmlsaXR5XCI7XG5pbXBvcnQgUmVjb25uZWN0TWFwcGluZ1JlY29yZCBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RNYXBwaW5nUmVjb3JkXCI7XG5pbXBvcnQgUmVuZXdDaGF0VG9rZW5SZXNwb25zZSBmcm9tIFwiLi9Nb2RlbC9SZW5ld0NoYXRUb2tlblJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXF1ZXN0VGltZW91dENvbmZpZyB9IGZyb20gXCIuL0NvbW1vbi9SZXF1ZXN0VGltZW91dENvbmZpZ1wiO1xuaW1wb3J0IFNIQTI1NiBmcm9tIFwiY3J5cHRvLWpzL3NoYTI1NlwiO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSBcIi4vQ29tbW9uL01hcHBpbmdzXCI7XG5pbXBvcnQgeyBUaW1lciB9IGZyb20gXCIuL1V0aWxzL1RpbWVyXCI7XG5pbXBvcnQgeyBhZGRPY1VzZXJBZ2VudEhlYWRlciB9IGZyb20gXCIuL1V0aWxzL2h0dHBIZWFkZXJzVXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50IH0gZnJvbSBcIi4vVXRpbHMvZW5kcG9pbnRzQ3JlYXRvcnNcIjtcbmltcG9ydCBpc0V4cGVjdGVkQXhpb3NFcnJvciBmcm9tIFwiLi9VdGlscy9pc0V4cGVjdGVkQXhpb3NFcnJvclwiO1xuaW1wb3J0IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL1Nlc3Npb25Jbml0UmV0cnlIYW5kbGVyXCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9VdGlscy91dWlkXCI7XG5pbXBvcnQgeyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyB9IGZyb20gXCIuL1V0aWxzL3dhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWc6IFJlcXVlc3RUaW1lb3V0Q29uZmlnID0ge1xuICAgIGdldENoYXRDb25maWc6IDEyMDAwMCxcbiAgICBnZXRMV0lEZXRhaWxzOiAxNTAwMCxcbiAgICBnZXRDaGF0VG9rZW46IDE1MDAwLFxuICAgIHNlc3Npb25Jbml0OiAxNTAwMCxcbiAgICBzZXNzaW9uQ2xvc2U6IDE1MDAwLFxuICAgIGdldFJlY29ubmVjdGFibGVDaGF0czogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5OiAxNTAwMCxcbiAgICBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlOiAxNTAwMCxcbiAgICBnZXRTdXJ2ZXlJbnZpdGVMaW5rOiAxNTAwMCxcbiAgICBnZXRDaGF0VHJhbnNjcmlwdHM6IDMwMDAwLFxuICAgIGVtYWlsVHJhbnNjcmlwdDogNTAwMCxcbiAgICBmZXRjaERhdGFNYXNraW5nSW5mbzogNTAwMCxcbiAgICBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdDogMTUwMDAsXG4gICAgZ2V0QWdlbnRBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHNlbmRUeXBpbmdJbmRpY2F0b3I6IDUwMDAsXG4gICAgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQ6IDE1MDAwLFxuICAgIGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeTogMTUwMDAsXG4gICAgbWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdDogMTUwMDAsXG4gICAgZ2V0VW5yZWFkTWVzc2FnZUNvdW50OiAxNTAwMCxcbiAgICBzZW5kUmVhZFJlY2VpcHQ6IDUwMDAsXG4gICAgcmVuZXdDaGF0VG9rZW46IDE1MDAwXG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdENvbmZpZ3VyYXRpb246IElTREtDb25maWd1cmF0aW9uID0ge1xuICAgIGF1dGhDb2RlTm9uY2U6IHV1aWR2NCgpLnN1YnN0cmluZygwLCA4KSxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeUNvdW50OiAxMCxcbiAgICBnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmU6IDEwMDAwLFxuICAgIGdldENoYXRUb2tlblJldHJ5T240Mjk6IHRydWUsXG4gICAgZ2V0Q2hhdENvbmZpZ1JldHJ5T240Mjk6IHRydWUsXG4gICAgbWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmU6IDUsXG4gICAgZGVmYXVsdFJlcXVlc3RUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgcmVxdWVzdFRpbWVvdXRDb25maWc6IFNESy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWcsXG4gICAgdXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtOiBmYWxzZSxcbiAgICB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnOiB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyxcbiAgICBvY1VzZXJBZ2VudDogW11cbiAgfTtcblxuICBsaXZlQ2hhdFZlcnNpb246IG51bWJlcjtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBvY1VzZXJBZ2VudDogc3RyaW5nW107XG4gIEhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlID0gYCR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck5hbWV9OiAke1NES0Vycm9yLkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlfWA7XG5cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb246IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24sIHByaXZhdGUgbG9nZ2VyPzogT0NTREtMb2dnZXIpIHtcbiAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLmxlbmd0aCB8fCB0eXBlb2YgKGNvbmZpZ3VyYXRpb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgU0RLIGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgaW5kaXZpZHVhbCBlbmRwb2ludFRpbWVvdXQgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNoYW5uZWxJZFxuICAgIGNvbnN0IHsgY2hhbm5lbElkIH0gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKENoYW5uZWxJZCkuaW5jbHVkZXMoY2hhbm5lbElkIGFzIENoYW5uZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFubmVsSWRgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBPQyBjb25maWdcbiAgICBjb25zdCBjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9tbmljaGFubmVsQ29uZmlndXJhdGlvbik7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgQ29uc3RhbnRzLnJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycykge1xuICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAnJHtrZXl9JyBpbiBPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9jVXNlckFnZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLm9jVXNlckFnZW50O1xuICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gTGl2ZUNoYXRWZXJzaW9uLlYyO1xuICB9XG5cblxuICAvKipcbiAgICogRmV0Y2hlcyBMQ1cgRkNTIERldGFpbHMgb2YgdGhlIE9yZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMY3dGY3NEZXRhaWxzKCk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1RBUlRFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIHN0YXJ0ZWRcIiwgXCJcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MY3dGY3NEZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlLmdldCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRDb25maWdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExDV0ZDU0RFVEFJTFNTVUNDRUVERUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdWNjZWVkZWRcIiwgXCJcIiwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTRkFJTEVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgZmFpbGVkXCIsIFwiXCIsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNoYXQgY29uZmlnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRDb25maWcocmVxdWVzdElkOiBzdHJpbmcsIGJ5cGFzc0NhY2hlID0gZmFsc2UpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZTVEFSVEVELCBcIkdldCBDaGF0IGNvbmZpZyBzdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29uZmlnUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0/cmVxdWVzdElkPSR7cmVxdWVzdElkfSZjaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0Q29uZmlnUmV0cnlPbjQyOSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGJ5cGFzc0NhY2hlKSB7XG4gICAgICByZXF1ZXN0SGVhZGVycyA9IHsgLi4uQ29uc3RhbnRzLmJ5cGFzc0NhY2hlSGVhZGVycywgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuXG4gICAgICAvLyBBZGQgdHlwZSBndWFyZCB0byBwcmV2ZW50IFR5cGVFcnJvciB3aGVuIGJhY2tlbmQgcmV0dXJucyBub24tb2JqZWN0IChlLmcuLCBlbXB0eSBzdHJpbmcsIG51bGwsIHVuZGVmaW5lZClcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbikge1xuICAgICAgICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gZGF0YS5MaXZlQ2hhdFZlcnNpb247XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMgJiYgcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl0pIHtcbiAgICAgICAgICBkYXRhLmhlYWRlcnNbXCJkYXRlXCJdID0gcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdTVUNDRUVERUQsIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lLCBnZXRSZXRyeUNvdW50KHJlc3BvbnNlPy5jb25maWcpKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHJldHJ5Q291bnQgPSBnZXRSZXRyeUNvdW50KChlcnJvciBhcyBBeGlvc0Vycm9yKT8uY29uZmlnKTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRkFJTEVELCBcIkdldCBDaGF0IGNvbmZpZyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSwgcmV0cnlDb3VudCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgTFdJIERldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TFdJRGV0YWlscyhyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVEFSVEVELCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGEgZW5kcG9pbnQgZm9yIGFub255bW91cyBjaGF0cyB0byBnZXQgTFdJIERldGFpbHNcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXJXaXRoTm90Rm91bmQoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0TFdJRGV0YWlscyxcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgYXV0aCB0b2tlbiBhbmQgcmVjb25uZWN0IGlkIGZyb20gb3B0aW9uYWwgcGFyYW1cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkIH0gPSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICAvLyB1cGRhdGVkIGF1dGggZW5kcG9pbnQgZm9yIGF1dGhlbnRpY2F0ZWQgY2hhdHMgYW5kIGFkZCBhdXRoIHRva2VuIGluIGhlYWRlclxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfTtcblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldExXSURldGFpbHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCBcIkdldCBMV0kgRGV0YWlscyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTRkFJTEVELCBcIkdldCBMV0kgRGV0YWlscyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY2hhdCB0b2tlbiBmcm9tIE9tbmljaGFubmVsIHRvIGpvaW4gVDEgdGhyZWFkLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VG9rZW4ocmVxdWVzdElkOiBzdHJpbmcsIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSwgY3VycmVudFJldHJ5Q291bnQ6IG51bWJlciA9IDApOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW5mZXJyYWJsZS10eXBlc1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCByZWZyZXNoVG9rZW4sIE1zT2NCb3RBcHBsaWNhdGlvbklkIH0gPSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBtdWx0aUJvdCA9IChNc09jQm90QXBwbGljYXRpb25JZCAmJiBNc09jQm90QXBwbGljYXRpb25JZC5sZW5ndGggPiAwKT8gdHJ1ZTogZmFsc2U7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1RBUlRFRCwgXCJHZXQgQ2hhdCBUb2tlbiBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoY3VycmVudFJldHJ5Q291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3VycmVudFJldHJ5Q291bnRgKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQoY3VycmVudExpdmVDaGF0VmVyc2lvbiBhcyBMaXZlQ2hhdFZlcnNpb24gfHwgdGhpcy5saXZlQ2hhdFZlcnNpb24sIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyB0cnVlIDogZmFsc2UsIG11bHRpQm90KTtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH1cbiAgICBpZiAoTXNPY0JvdEFwcGxpY2F0aW9uSWQgJiYgTXNPY0JvdEFwcGxpY2F0aW9uSWQubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYW1zWydNcy1PYy1Cb3QtQXBwbGljYXRpb24tSWQnXSA9IE1zT2NCb3RBcHBsaWNhdGlvbklkO1xuICAgIH1cblxuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5yZWZyZXNoVG9rZW4gPSAndHJ1ZSdcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogKGN1cnJlbnRSZXRyeUNvdW50ID4gdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlKSA/IGN1cnJlbnRSZXRyeUNvdW50IDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgcmV0cnlPbjQyOTogdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblJldHJ5T240MjksXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgY2hhdCB0b2tlbiByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIGNoZWNrIGlmIGRhdGEgaXMgZW1wdHksIGlmIHNvLCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVUNDRUVERUQsIFwiR2V0IENoYXQgVG9rZW4gc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gY29udGVudCBmb3IgcmVjb25uZWN0IGNoYXQgY2FzZSBzaG91bGRuJ3QgYmUgcmV0cmllZC5cbiAgICAgICAgaWYgKHJlY29ubmVjdElkICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gQ29uc3RhbnRzLm5vQ29udGVudFN0YXR1c0NvZGUpIHtcbiAgICAgICAgICByZWplY3QocmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTkZBSUxFRCwgXCJHZXQgQ2hhdCBUb2tlbiBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5ld3MgdGhlIEFDUyBjaGF0IHRva2VuIG9mIHRoZSB2aXNpdG9yIGluIGFuIG9wZW4gY29udmVyc2F0aW9uLCBzbyB0aGUgY2hhdCBjYW4gY29udGludWUgYWZ0ZXIgdGhlIHRva2VuXG4gICAqIGZyb20gZ2V0Q2hhdFRva2VuIGV4cGlyZXMuIFJlamVjdHMgd2hlbiB0aGUgQVBJIGlzIG5vdCBhdmFpbGFibGUgb3IgdGhlIGNvbnZlcnNhdGlvbiBjYW4ndCBiZSByZW5ld2VkIChlLmcuIDQwNCk7XG4gICAqIGNhbGxlcnMgc2hvdWxkIGtlZXAgdGhlaXIgY3VycmVudCB0b2tlbiBpbiB0aGF0IGNhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBjb252ZXJzYXRpb24sIG9yIHRoZSByZWNvbm5lY3QgaWQgZm9yIGEgcmVjb25uZWN0ZWQgY2hhdC5cbiAgICogQHBhcmFtIHJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgcmVuZXcgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW5ld0NoYXRUb2tlbihyZXF1ZXN0SWQ6IHN0cmluZywgcmVuZXdDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogSVJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UmVuZXdDaGF0VG9rZW5SZXNwb25zZT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIG1heFJldHJpZXMgfSA9IHJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuUkVORVdDSEFUVE9LRU5TVEFSVEVELCBcIlJlbmV3IENoYXQgVG9rZW4gU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByZXF1ZXN0SWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aFJlbmV3Q2hhdFRva2VuUGF0aCA6IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJSZW5ld0NoYXRUb2tlblBhdGg7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9O1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcucmVuZXdDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdHlwZW9mIG1heFJldHJpZXMgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzSW50ZWdlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID49IDBcbiAgICAgICAgPyBtYXhSZXRyaWVzIDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnPy5yZW5ld0NoYXRUb2tlbiA/PyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncy5yZW5ld0NoYXRUb2tlblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8ICFkYXRhLlRva2VuKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGEgcmVjZWl2ZWQgZnJvbSByZW5ld0NoYXRUb2tlblwiKTtcbiAgICAgICAgICAvLyBOb3QgcGFzc2luZyByZXNwb25zZTogbG9nV2l0aExvZ2dlciByZWFkcyByZXNwb25zZS5kYXRhLlJlZ2lvbiwgd2hpY2ggdGhyb3dzIHdoZW4gZGF0YSBpcyBudWxsXG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlJFTkVXQ0hBVFRPS0VORkFJTEVELCBcIlJlbmV3IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlJFTkVXQ0hBVFRPS0VOU1VDQ0VFREVELCBcIlJlbmV3IENoYXQgVG9rZW4gc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5SRU5FV0NIQVRUT0tFTkZBSUxFRCwgXCJSZW5ldyBDaGF0IFRva2VuIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICAgKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb25uZWN0YWJsZUNoYXRzKHJlY29ubmVjdGFibGVDaGF0c1BhcmFtczogSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyk6IFByb21pc2U8UmVjb25uZWN0TWFwcGluZ1JlY29yZCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTU1RBUlRFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBjaGF0IFN0YXJ0ZWRcIik7XG4gICAgY29uc3QgcmVxdWVzdElkID0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zPy5yZXF1ZXN0SWQ7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0YWJsZUNoYXRzXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgcmVjb25uZWN0YWJsZSBjaGF0cyByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBTdWNjZWVkZWQgYW5kIG9sZCBzZXNzaW9uIHJldHVybmVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgaW4gdGhlIG9sZCBzZXNzaW9ucyBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTRkFJTEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkocmVjb25uZWN0SWQ6IHN0cmluZywgb3B0aW9uYWxQYXJhbXM6IElSZWNvbm5lY3RBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxSZWNvbm5lY3RBdmFpbGFiaWxpdHkgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IFJlY29ubmVjdGFibGUgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVjb25uZWN0SWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMob3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5XQVJOLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBkaWRuJ3Qgc2VuZCBhbnkgdmFsaWQgZGF0YVwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgUmVjb25uZWN0IEF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkocmVxdWVzdElkOiBzdHJpbmcsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFF1ZXVlQXZhaWxhYmlsaXR5PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD1sY3dgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuXG4gICAgY29uc3QgY2FjaE9iaiA9IHtcbiAgICAgIFwib3JnSWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQsXG4gICAgICBcIndpZGdldElkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkXG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgY29uc3QgdGVtcEFyciA9IEN1c3RvbUNvbnRleHREYXRhLnNvcnQoZGF0YS5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJjdXN0b21Db250ZXh0XCI6IHRlbXBBcnIgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEucG9ydGFsY29udGFjdGlkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJwb3J0YWxjb250YWN0aWRcIjogZGF0YS5wb3J0YWxjb250YWN0aWQgfSk7XG4gICAgfVxuXG4gICAgLy9kYXRhLmNhY2hlS2V5ID0gaGFzaC5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoY2FjaE9iaikpLmRpZ2VzdCgnaGV4JykudG9TdHJpbmcoKTtcbiAgICBkYXRhLmNhY2hlS2V5ID0gU0hBMjU2KEpTT04uc3RyaW5naWZ5KGNhY2hPYmopKS50b1N0cmluZyhIZXgpO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKidcbiAgICogU3RhcnRzIGEgc2Vzc2lvbiB0byBvbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25Jbml0KHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1RBUlRFRCwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBjb25zdCByZXRyeU9uNDI5ID0gdHJ1ZTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkluaXQsXG4gICAgICBzaG91bGRSZXRyeTogKGVycm9yKSA9PiBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlcihlcnJvciwgcmV0cnlPbjQyOSksXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGNvbnN0IGJhc2VQYXRoID0gYXV0aGVudGljYXRlZFVzZXJUb2tlblxuICAgICAgPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGhcbiAgICAgIDogT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGg7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7YmFzZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkICYmIHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCBcIlNlc3Npb24gSW5pdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCBcIlNlc3Npb24gSW5pdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDb252ZXJzYXRpb24ocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTlNUQVJURUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgY29uc3QgcmV0cnlPbjQyOSA9IHRydWU7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25Jbml0LFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJvcikgPT4gc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIoZXJyb3IsIHJldHJ5T240MjkpLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cbiAgICAgID8gT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvclBhdGg7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0QXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbmA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBkYXRhLnJlY29ubmVjdElkID0gcmVjb25uZWN0SWQ7XG4gICAgfVxuXG4gICAgZGF0YS5jaGFubmVsSWQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGVtcHR5LCBpZiBzbywgdGhlbiB0aHJvdyBhbiBlcnJvclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05TVUNDRUVERUQsIFwiQ3JlYXRlIGNvdmVyc2F0aW9uIGNhbGwgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5DUkVBVEVTRVNTSU9ORkFJTEVELCBcIkNyZWF0ZSBjb252ZXJzYXRpb24gY2FsbCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgXG4gICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGNsb3NlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25DbG9zZShyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIFwiU2Vzc2lvbiBDbG9zZSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQsIGNoYXRJZCB9ID0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZGF0YS5jaGF0SWQgPSBjaGF0SWQ7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChpc1JlY29ubmVjdENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNSZWNvbm5lY3RDaGF0PXRydWVgO1xuICAgIH1cblxuICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uQ2xvc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1VDQ0VFREVELCBcIlNlc3Npb24gQ2xvc2Ugc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VGQUlMRUQsIFwiU2Vzc2lvbiBjbG9zZSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkKHJlcXVlc3RJZDogc3RyaW5nLCB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY2hhdElkIH0gPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRWYWxpZGF0ZUF1dGhDaGF0TWFwUmVjb3JkUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcudmFsaWRhdGVBdXRoQ2hhdFJlY29yZFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8uYXV0aENoYXRFeGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IudG9TdHJpbmcoKSA9PT0gXCJFcnJvcjogUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSA0MDRcIikgeyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBwb3N0Q2hhdFJlc3BvbnNlOiBvYmplY3QsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1RBUlRFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0Q2hhdFJlc3BvbnNlKSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRGQUlMRUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U3VydmV5SW52aXRlTGluayhzdXJ2ZXlPd25lcklkOiBzdHJpbmcsIHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5OiBvYmplY3QsIGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtczogSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWwuSU5GTyxcbiAgICAgICAgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCxcbiAgICAgICAgeyBTdXJ2ZXlPd25lcklkOiBzdXJ2ZXlPd25lcklkIH0sXG4gICAgICAgIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdGFydGVkXCIpO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkIH0gPSBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0U3VydmV5SW52aXRlTGlua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNoYXQgdHJhbnNjcmlwdHMgZm9yIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIGNoYXRJZCBDaGF0IHRocmVhZCBJZC5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdHJhbnNjcmlwdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdFRyYW5zY3JpcHRzKHJlcXVlc3RJZDogc3RyaW5nLCBjaGF0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXM6IElHZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVEFSVEVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0VHJhbnNjcmlwdHNcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiB9ID0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMikpIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5KHJlcXVlc3RJZDogc3RyaW5nLCBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtczogSUdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVEFSVEVELCBcIkdldCBQZXJzaXN0ZW50IENoYXQgSGlzdG9yeSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHBhZ2VTaXplLCBwYWdlVG9rZW4gfSA9IGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgaWYgKCFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcIkF1dGhlbnRpY2F0ZWQgdXNlciB0b2tlbiBpcyByZXF1aXJlZCBmb3IgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnlcIjtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZCAtIE1pc3NpbmcgYXV0aGVudGljYXRlZCB1c2VyIHRva2VuXCIsIHJlcXVlc3RJZCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS9jb252ZXJzYXRpb24vaGlzdG9yeWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHt9O1xuICAgIFxuICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnZVNpemUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICAvLyBpbiBjYXNlIHBhZ2UgdG9rZW4gaXMgYXNzaWduZWQgZnJvbSBtdXRhdGVkIGhlYWRlcnMsIHdlIG92ZXJyaWRlIHdpdGggdGhlIGFjdHVhbCB2YWx1ZSBvciBlbXB0eVxuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucGFnZVRva2VuXSA9IHBhZ2VUb2tlbiB8fCBcIlwiO1xuICAgXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNVQ0NFRURFRCwgXCJHZXQgUGVyc2lzdGVudCBDaGF0IEhpc3Rvcnkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWFpbCB0cmFuc2NyaXB0IHRvIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZW1haWxSZXF1ZXN0Qm9keSBFbWFpbCByZXF1ZXN0IGJvZHkuXG4gICAqIEBwYXJhbSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBlbWFpbCB0cmFuc2NyaXB0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVtYWlsVHJhbnNjcmlwdChyZXF1ZXN0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZW1haWxSZXF1ZXN0Qm9keTogb2JqZWN0LCBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtczogSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRofS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmVtYWlsVHJhbnNjcmlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShlbWFpbFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBkYXRhIG1hc2tpbmcgaW5mbyBvZiB0aGUgb3JnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZldGNoRGF0YU1hc2tpbmdJbmZvKHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxJRGF0YU1hc2tpbmdJbmZvPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVEFSVEVELCBcIkZldGNoIERhdGEgTWFza2luZyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZmV0Y2hEYXRhTWFza2luZ0luZm9cbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVELCBcIkZldGNoIERhdGEgTWFza2luZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnQgbmV0d29yayBjYWxsIHRvIE9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSBzZWNvbmRhcnlDaGFubmVsIGV2ZW50IHJlcXVlc3QgYm9keVxuICAgKiBAcGFyYW0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nLCBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keTogb2JqZWN0LCBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtczogSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgcmVxdWVzdFBhdGggKz0gXCI/Y2hhbm5lbElkPVwiICsgQ29uc3RhbnRzLmRlZmF1bHRDaGFubmVsSWQ7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVUNDRUVERUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbmQgdHlwaW5nIGluZGljYXRvclxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVHlwaW5nSW5kaWNhdG9yKHJlcXVlc3RJZDogc3RyaW5nLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uOiBudW1iZXIsIHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtczogSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYXZvaWRpbmcgbG9nZ2luZyBJbmZvIGZvciB0eXBpbmdpbmRpY2F0b3IgdG8gcmVkdWNlIGxvZyB0cmFmZmljXG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBjdXN0b21lckRpc3BsYXlOYW1lIH0gPSBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM7XG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikgeyB0aHJvdyBuZXcgRXJyb3IoJ1R5cGluZyBpbmRpY2F0b3IgaXMgb25seSBzdXBwb3J0ZWQgb24gdjInKSB9XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuU2VuZFR5cGluZ0luZGljYXRvclBhdGh9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBpZiAoY3VzdG9tZXJEaXNwbGF5TmFtZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbQ29uc3RhbnRzLmN1c3RvbWVyRGlzcGxheU5hbWVdID0gY3VzdG9tZXJEaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRUeXBpbmdJbmRpY2F0b3JcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCwgXCJTZW5kIFR5cGluZyBJbmRpY2F0b3IgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGFuIG9uZ29pbmcgKHByZXZpb3VzbHkgdW5hdXRoZW50aWNhdGVkKSBjaGF0IHNlc3Npb24uXG4gICAqIFVwZ3JhZGVzIGVuZ2FnZW1lbnQgY29udGV4dCBzbyBzdWJzZXF1ZW50IGNhbGxzIHVzZSBhdXRoZW50aWNhdGVkIGVuZHBvaW50cy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBDdXJyZW50IHJlcXVlc3QvY29ycmVsYXRpb24gaWRcbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXMgeyBjaGF0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQocmVxdWVzdElkOiBzdHJpbmcsIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXM6IHsgY2hhdElkOiBzdHJpbmc7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50Lk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGNoYXRJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gYXV0aGVudGljYXRlQ2hhdFBhcmFtcztcblxuICAgIGlmICghY2hhdElkIHx8ICFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCxcbiAgICAgICAgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkIC0gY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiLCByZXF1ZXN0SWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhNaWRDb252ZXJzYXRpb25QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5taWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGhlYWRlcnMgJiYgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCwgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHVucmVhZCBtZXNzYWdlIGNvdW50IGZvciB0aGUgYXV0aGVudGljYXRlZCB1c2VyLlxuICAgKiBBdXRoLW9ubHkgZW5kcG9pbnQg4oCUIGRvZXMgbm90IHJlcXVpcmUgYW4gYWN0aXZlIGNoYXQgc2Vzc2lvbi5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VW5yZWFkTWVzc2FnZUNvdW50KGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNUQVJURUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS91bnJlYWRtZXNzYWdlc2A7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNVQ0NFRURFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRVTlJFQURNRVNTQUdFQ09VTlRGQUlMRUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcmVhZCByZWNlaXB0IGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgaW4gYW4gYXV0aGVudGljYXRlZCBjb252ZXJzYXRpb24uXG4gICAqIFVwZGF0ZXMgdGhlIHVucmVhZCBtZXNzYWdlIGNvdW50ZXIgb24gdGhlIHNlcnZlciBhbmQgZm9yd2FyZHMgdGhlIHJlY2VpcHQgdG8gQUNTLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCAoY29udmVyc2F0aW9uVGhyZWFkSWQpIG9mIHRoZSBjb252ZXJzYXRpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgVGhlIEFDUyBtZXNzYWdlIElEIHRvIG1hcmsgYXMgcmVhZC5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFJlYWRSZWNlaXB0KHJlcXVlc3RJZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZywgYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRSRUFEUkVDRUlQVFNUQVJURUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0YXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbnMvJHtyZXF1ZXN0SWR9L3JlYWRyZWNlaXB0YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlSWQgfSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFJFQURSRUNFSVBUU1VDQ0VFREVELCBcIlNlbmQgUmVhZCBSZWNlaXB0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EUkVBRFJFQ0VJUFRGQUlMRUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgTG9nIGxldmVsIGZvciBsb2dnaW5nLlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5RXZlbnRUeXBlIFRlbGVtZXRyeSBldmVudCB0eXBlIGluIHdoaWNoIGV2ZW50IHdpbGwgYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlc3BvbnNlIFJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIEVsYXBzZWQgdGltZSBpbiBtc1xuICAgKiBAcGFyYW0gcmVxdWVzdFBhdGggUmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBtZXRob2QgTWV0aG9kXG4gICAqIEBwYXJhbSBlcnJvciBFcnJvclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhXG4gICAqL1xuICBwcml2YXRlIGxvZ1dpdGhMb2dnZXIobG9nTGV2ZWw6IExvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGU6IE9DU0RLVGVsZW1ldHJ5RXZlbnQsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZywgcmVzcG9uc2U/OiBBeGlvc1Jlc3BvbnNlPGFueT4sIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHJlcXVlc3RQYXRoPzogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgcmVxdWVzdFBheWxvYWQ/OiBhbnksIHJlcXVlc3RIZWFkZXJzPzogYW55LCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZT86IG51bWJlciwgcmV0cnlDb3VudD86IG51bWJlcik6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcik7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1ZXN0UGF5bG9hZCkge1xuICAgICAgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB7IC4uLnJlcXVlc3RQYXlsb2FkIH07XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFByZUNoYXRSZXNwb25zZShzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEdlb2xvY2F0aW9uKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGF1dGhUb2tlbkRldGFpbHM6IGFueSA9IHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHsgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMoc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICBpZiAocmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSkge1xuICAgICAgICBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0b2tlbi5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LmF0b2IocGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0cyA9IGpzb25EYXRhW1wibHdpY29udGV4dHNcIl07XG4gICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzID0ge1xuICAgICAgICAgICAgICBzdWI6IGpzb25EYXRhW1wic3ViXCJdLFxuICAgICAgICAgICAgICBleHA6IGpzb25EYXRhW1wiZXhwXCJdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobHdpQ29udGV4dHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgbHdpQ29udGV4dHNEYXRhID0gSlNPTi5wYXJzZShsd2lDb250ZXh0cyk7XG4gICAgICAgICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyhsd2lDb250ZXh0c0RhdGEpO1xuICAgICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzLmx3aUNvbnRleHRzID0gbHdpQ29udGV4dHNEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbURhdGEgPSB7XG4gICAgICBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIFJlZ2lvbjogcmVzcG9uc2U/LmRhdGEuUmVnaW9uLFxuICAgICAgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyxcbiAgICAgIEh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOiBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSxcbiAgICAgIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlPy5oZWFkZXJzW0NvbnN0YW50cy50cmFuc2FjdGlvbmlkXSxcbiAgICAgIFJlcXVlc3RQYXRoOiByZXF1ZXN0UGF0aCxcbiAgICAgIFJlcXVlc3RNZXRob2Q6IG1ldGhvZCxcbiAgICAgIFJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5zdGF0dXMgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgXG4gICAgICBFeGNlcHRpb25EZXRhaWxzOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yIDogdW5kZWZpbmVkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIFJlcXVlc3RQYXlsb2FkOiBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCxcbiAgICAgIFJlcXVlc3RIZWFkZXJzOiBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyxcbiAgICAgIFJlc3BvbnNlRXJyb3Jjb2RlOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5oZWFkZXJzPy5lcnJvcmNvZGUgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgQXV0aFRva2VuRGV0YWlsczogYXV0aFRva2VuRGV0YWlscyxcbiAgICAgIFJldHJ5Q291bnQ6IHJldHJ5Q291bnRcbiAgICB9O1xuICAgIHRoaXMubG9nZ2VyLmxvZyhsb2dMZXZlbCwgdGVsZW1ldHJ5RXZlbnRUeXBlLCBjdXN0b21EYXRhLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldEF1dGhDb2RlTm9uY2UgPSAoaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2UpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlID0gaGVhZGVycz8uYXV0aGNvZGVub25jZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldFNlc3Npb25JZEhlYWRlciA9IChzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkXSA9IHNlc3Npb25JZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFJlcXVlc3RJZEhlYWRlciA9IChyZXF1ZXN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogU3RyaW5nTWFwKSA9PiB7XG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIgPSAoY29ycmVsYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBTdHJpbmdNYXApID0+IHtcbiAgICBpZiAoY29ycmVsYXRpb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmNvcnJlbGF0aW9uSWRdID0gY29ycmVsYXRpb25JZDtcbiAgICB9XG4gIH1cbn1cblxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGtCQUFBLEdBQUFDLHVCQUFBLENBQUFK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
|
|
2867
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRW51bXMiLCJyZXF1aXJlIiwiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9heGlvc1JldHJ5SGFuZGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0Jyb3dzZXJJbmZvIiwiX0NvbnN0YW50cyIsIl9DdXN0b21Db250ZXh0RGF0YSIsIl9EZXZpY2VJbmZvIiwiX2VuY0hleCIsIl9Mb2NhbGVzIiwiX0xvZ0xldmVsIiwiX0xvZ2dpbmdTYW5pdGl6ZXIiLCJfT1NJbmZvIiwiX09tbmljaGFubmVsRW5kcG9pbnRzIiwiX09tbmljaGFubmVsSFRUUEhlYWRlcnMiLCJfc2hhIiwiX1RpbWVyIiwiX2h0dHBIZWFkZXJzVXRpbHMiLCJfZW5kcG9pbnRzQ3JlYXRvcnMiLCJfaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJfU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJfdXVpZCIsIl93YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyIsIl9TREsiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90MjIiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlNESyIsImV4cG9ydHMiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJfdGhpcyIsImNvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJkZWZhdWx0Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9jbGFzc0NhbGxDaGVjazIiLCJjb25jYXQiLCJTREtFcnJvciIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lIiwiQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2UiLCJoZWFkZXJzIiwiYXV0aGNvZGVub25jZSIsImF1dGhDb2RlTm9uY2UiLCJzZXNzaW9uSWQiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwib2NTZXNzaW9uSWQiLCJyZXF1ZXN0SWQiLCJjb3JyZWxhdGlvbklkIiwiX3R5cGVvZjIiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleSIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJjaGFubmVsSWQiLCJ2YWx1ZXMiLCJDaGFubmVsSWQiLCJpbmNsdWRlcyIsIkVycm9yIiwiY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfaXRlcmF0b3IiLCJDb25zdGFudHMiLCJyZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfc3RlcCIsImVyciIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJfY3JlYXRlQ2xhc3MyIiwiX2dldExjd0Zjc0RldGFpbHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRpbWVyIiwicmVxdWVzdFBhdGgiLCJtZXRob2QiLCJ1cmwiLCJheGlvc0luc3RhbmNlIiwicmVxdWVzdEhlYWRlcnMiLCJiYWNrZW5kVGltZXIiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQiLCJyZXNwb25zZSIsImh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMY3dGY3NEZXRhaWxzUGF0aCIsIm9yZ0lkIiwib3JnVXJsIiwiYXhpb3MiLCJjcmVhdGUiLCJheGlvc1JldHJ5SGFuZGxlciIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJhZGRPY1VzZXJBZ2VudEhlYWRlciIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInNlbnQiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsImFicnVwdCIsIkVSUk9SIiwiR0VUTENXRkNTREVUQUlMU0ZBSUxFRCIsInN0b3AiLCJnZXRMY3dGY3NEZXRhaWxzIiwiX2dldENoYXRDb25maWciLCJfY2FsbGVlMiIsImJ5cGFzc0NhY2hlIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIiLCJyZXRyeUNvdW50IiwiX2FyZ3MyIiwiX3QyIiwiX2NvbnRleHQyIiwiR0VUQ0hBVENPTkZJR0ZTVEFSVEVEIiwidXVpZHY0IiwiTGl2ZUNoYXRDb25maWdQYXRoIiwid2lkZ2V0SWQiLCJyZXRyeU9uNDI5IiwiZ2V0Q2hhdENvbmZpZ1JldHJ5T240MjkiLCJhZGREZWZhdWx0SGVhZGVycyIsImJ5cGFzc0NhY2hlSGVhZGVycyIsIkdFVENIQVRDT05GSUdTVUNDRUVERUQiLCJnZXRSZXRyeUNvdW50IiwiY29uZmlnIiwiR0VUQ0hBVENPTkZJR0ZBSUxFRCIsIlByb21pc2UiLCJyZWplY3QiLCJfeCIsIl9nZXRMV0lEZXRhaWxzIiwiX2NhbGxlZTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQzIiwiX3RoaXMyIiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsInJlY29ubmVjdElkIiwic2hvdWxkVXNlU2lnUXVlcnlQYXJhbSIsInBhcmFtcyIsIm9wdGlvbnMiLCJfYXJnczQiLCJfY29udGV4dDQiLCJHRVRMV0lTVEFUVVNTVEFSVEVEIiwiTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsImF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kIiwiaGVhZGVyT3ZlcndyaXRlcyIsImdldExXSURldGFpbHMiLCJkZWZhdWx0SGVhZGVycyIsIkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRoIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwic2lnIiwiX3JlZiIsIl9jYWxsZWUzIiwicmVzb2x2ZSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTMiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczMiLCJfdDMiLCJfY29udGV4dDMiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiR0VUTFdJU1RBVFVTRkFJTEVEIiwiaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsIl94MyIsIl94NCIsIl94MiIsIl9nZXRDaGF0VG9rZW4iLCJfY2FsbGVlNiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDQiLCJfdGhpczMiLCJnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyIsImN1cnJlbnRSZXRyeUNvdW50IiwiY3VycmVudExpdmVDaGF0VmVyc2lvbiIsInJlZnJlc2hUb2tlbiIsIk1zT2NCb3RBcHBsaWNhdGlvbklkIiwibXVsdGlCb3QiLCJlbmRwb2ludCIsIl9hcmdzNiIsIl9jb250ZXh0NiIsIkdFVENIQVRUT0tFTlNUQVJURUQiLCJjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludCIsImdldENoYXRUb2tlbiIsImdldENoYXRUb2tlblJldHJ5T240MjkiLCJfcmVmMiIsIl9jYWxsZWU1IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNCIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNCIsIl90NCIsIl9jb250ZXh0NSIsInRvTG93ZXJDYXNlIiwiR0VUQ0hBVFRPS0VOU1VDQ0VFREVEIiwic3RhdHVzIiwibm9Db250ZW50U3RhdHVzQ29kZSIsImFzc2lnbiIsIkdFVENIQVRUT0tFTkZBSUxFRCIsIl94NiIsIl94NyIsIl94NSIsIl9yZW5ld0NoYXRUb2tlbiIsIl9jYWxsZWU4IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kdyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kdzIiLCJfdGhpczQiLCJyZW5ld0NoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIiwibWF4UmV0cmllcyIsIl9hcmdzOCIsIl9jb250ZXh0OCIsIlJFTkVXQ0hBVFRPS0VOU1RBUlRFRCIsIkxpdmVDaGF0djJBdXRoUmVuZXdDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXR2MlJlbmV3Q2hhdFRva2VuUGF0aCIsInJlbmV3Q2hhdFRva2VuIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MiLCJfcmVmMyIsIl9jYWxsZWU3IiwiZXJyb3IiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU1IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM1IiwiX3Q1IiwiX2NvbnRleHQ3IiwiVG9rZW4iLCJSRU5FV0NIQVRUT0tFTkZBSUxFRCIsIlJFTkVXQ0hBVFRPS0VOU1VDQ0VFREVEIiwiX3g5IiwiX3gwIiwiX3g4IiwiX2dldFJlY29ubmVjdGFibGVDaGF0cyIsIl9jYWxsZWUwIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkNiIsIl90aGlzNSIsIl9jb250ZXh0MCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NUQVJURUQiLCJMaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGgiLCJnZXRSZWNvbm5lY3RhYmxlQ2hhdHMiLCJfcmVmNCIsIl9jYWxsZWU5IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNiIsIl90NiIsIl9jb250ZXh0OSIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCIsIl94MTAiLCJfeDExIiwiX3gxIiwiX2dldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIl9jYWxsZWUxMCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDciLCJfdGhpczYiLCJvcHRpb25hbFBhcmFtcyIsIl9hcmdzMTAiLCJfY29udGV4dDEwIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCIsIkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aCIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIl9yZWY1IiwiX2NhbGxlZTEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU3IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM3IiwiX3Q3IiwiX2NvbnRleHQxIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVEIiwiV0FSTiIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCIsIl94MTMiLCJfeDE0IiwiX3gxMiIsIl9nZXRBZ2VudEF2YWlsYWJpbGl0eSIsIl9jYWxsZWUxMiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDgiLCJfdGhpczciLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiaW5pdENvbnRleHQiLCJnZXRDb250ZXh0IiwiY2FjaE9iaiIsInRlbXBBcnIiLCJfYXJnczEyIiwiX2NvbnRleHQxMiIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCIsIkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aCIsImdldEFnZW50QXZhaWxhYmlsaXR5IiwiY3VzdG9tQ29udGV4dERhdGEiLCJDdXN0b21Db250ZXh0RGF0YSIsInNvcnQiLCJwb3J0YWxjb250YWN0aWQiLCJjYWNoZUtleSIsIlNIQTI1NiIsIkpTT04iLCJzdHJpbmdpZnkiLCJIZXgiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImJyb3dzZXIiLCJCcm93c2VySW5mbyIsImdldEJyb3dzZXJOYW1lIiwiZGV2aWNlIiwiRGV2aWNlSW5mbyIsImdldERldmljZVR5cGUiLCJvcmlnaW51cmwiLCJsb2NhdGlvbiIsImhyZWYiLCJvcyIsIk9TSW5mbyIsImdldE9zVHlwZSIsImxvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJMb2NhbGVzIiwic3VwcG9ydGVkTG9jYWxlcyIsIl9yZWY2IiwiX2NhbGxlZTExIiwiX2RhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM4IiwiX3Q4IiwiX2NvbnRleHQxMSIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVEIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQiLCJfeDE2IiwiX3gxNyIsIl94MTUiLCJfc2Vzc2lvbkluaXQiLCJfY2FsbGVlMTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ5IiwiX3RoaXM4Iiwic2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyIsImJhc2VQYXRoIiwiX2FyZ3MxNCIsIl9jb250ZXh0MTQiLCJTRVNTSU9OSU5JVFNUQVJURUQiLCJzZXNzaW9uSW5pdCIsInNob3VsZFJldHJ5Iiwic2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGgiLCJMaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCIsInNldFJlcXVlc3RJZEhlYWRlciIsIl9yZWY3IiwiX2NhbGxlZTEzIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOSIsIl90OSIsIl9jb250ZXh0MTMiLCJTRVNTSU9OSU5JVFNVQ0NFRURFRCIsIlNFU1NJT05JTklURkFJTEVEIiwiX3gxOSIsIl94MjAiLCJfeDE4IiwiX2NyZWF0ZUNvbnZlcnNhdGlvbiIsIl9jYWxsZWUxNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDAiLCJfZGF0YTIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMwIiwiX2FyZ3MxNSIsIl90MCIsIl9jb250ZXh0MTUiLCJDUkVBVEVTRVNTSU9OU1RBUlRFRCIsIkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGgiLCJMaXZlQ2hhdENvbm5lY3RvclBhdGgiLCJDUkVBVEVTRVNTSU9OU1VDQ0VFREVEIiwiQ1JFQVRFU0VTU0lPTkZBSUxFRCIsImNyZWF0ZUNvbnZlcnNhdGlvbiIsIl94MjEiLCJfc2Vzc2lvbkNsb3NlIiwiX2NhbGxlZTE3IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMSIsIl90aGlzOSIsInNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIiwiaXNSZWNvbm5lY3RDaGF0IiwiaXNQZXJzaXN0ZW50Q2hhdCIsImNoYXRJZCIsIl9hcmdzMTciLCJfY29udGV4dDE3IiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsIkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aCIsInNlc3Npb25DbG9zZSIsIkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGgiLCJfcmVmOCIsIl9jYWxsZWUxNiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczEiLCJfdDEiLCJfY29udGV4dDE2IiwiU0VTU0lPTkNMT1NFU1VDQ0VFREVEIiwiU0VTU0lPTkNMT1NFRkFJTEVEIiwiY29kZSIsIl94MjMiLCJfeDI0IiwiX3gyMiIsIl92YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwiX2NhbGxlZTE5IiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTAiLCJfdGhpczAiLCJfY29udGV4dDE5IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiX3JlZjkiLCJfY2FsbGVlMTgiLCJfcmVzcG9uc2UkZGF0YSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMCIsIl90MTAiLCJfY29udGV4dDE4IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwiX3gyNyIsIl94MjgiLCJfeDI1IiwiX3gyNiIsIl9zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiX2NhbGxlZTIxIiwicG9zdENoYXRSZXNwb25zZSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDExIiwiX3RoaXMxIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyMSIsIl9jb250ZXh0MjEiLCJTVUJNSVRQT1NUQ0hBVFNUQVJURUQiLCJMaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aCIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UiLCJMaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGgiLCJfcmVmMCIsIl9jYWxsZWUyMCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTExIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMSIsIl90MTEiLCJfY29udGV4dDIwIiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsIl94MzEiLCJfeDMyIiwiX3gyOSIsIl94MzAiLCJfZ2V0U3VydmV5SW52aXRlTGluayIsIl9jYWxsZWUyMyIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEyIiwiX3RoaXMxMCIsImdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyIsIl9hcmdzMjMiLCJfY29udGV4dDIzIiwibG9nIiwiR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURUQiLCJTdXJ2ZXlPd25lcklkIiwiTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsImdldFN1cnZleUludml0ZUxpbmsiLCJMaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsIndpZGdldEFwcElkIiwiX3JlZjEiLCJfY2FsbGVlMjIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxMiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTIiLCJfdDEyIiwiX2NvbnRleHQyMiIsIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVEIiwiX3gzNSIsIl94MzYiLCJfeDMzIiwiX3gzNCIsIl9nZXRDaGF0VHJhbnNjcmlwdHMiLCJfY2FsbGVlMjUiLCJ0b2tlbiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEzIiwiX3RoaXMxMSIsImdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyNSIsIl9jb250ZXh0MjUiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCIsImdldENoYXRUcmFuc2NyaXB0cyIsIm9yZ2FuaXphdGlvbklkIiwiYXV0aG9yaXphdGlvbiIsIkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0QXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIl9yZWYxMCIsIl9jYWxsZWUyNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEzIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMyIsIl90MTMiLCJfY29udGV4dDI0IiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRCIsIl94NDAiLCJfeDQxIiwiX3gzNyIsIl94MzgiLCJfeDM5IiwiX2dldFBlcnNpc3RlbnRDaGF0SGlzdG9yeSIsIl9jYWxsZWUyNyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE0IiwiX3RoaXMxMiIsImdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zIiwicGFnZVNpemUiLCJwYWdlVG9rZW4iLCJlcnJvck1lc3NhZ2UiLCJfYXJnczI3IiwiX2NvbnRleHQyNyIsIkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNUQVJURUQiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQiLCJMaXZlQ2hhdEF1dGhHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlQYXRoIiwiZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5IiwiX3JlZjExIiwiX2NhbGxlZTI2IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTQiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE0IiwiX3QxNCIsIl9jb250ZXh0MjYiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVUNDRUVERUQiLCJfeDQzIiwiX3g0NCIsIl94NDIiLCJfZW1haWxUcmFuc2NyaXB0IiwiX2NhbGxlZTI5IiwiZW1haWxSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE1IiwiX3RoaXMxMyIsImVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyOSIsIl9jb250ZXh0MjkiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsImVtYWlsVHJhbnNjcmlwdCIsIkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiX3JlZjEyIiwiX2NhbGxlZTI4IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE1IiwiX3QxNSIsIl9jb250ZXh0MjgiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJfeDQ4IiwiX3g0OSIsIl94NDUiLCJfeDQ2IiwiX3g0NyIsIl9mZXRjaERhdGFNYXNraW5nSW5mbyIsIl9jYWxsZWUzMSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE2IiwiX3RoaXMxNCIsIl9jb250ZXh0MzEiLCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRCIsIkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoIiwiZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJfcmVmMTMiLCJfY2FsbGVlMzAiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxNiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTYiLCJfdDE2IiwiX2NvbnRleHQzMCIsIkZFVENIREFUQU1BU0tJTkdTVUNDRUVERUQiLCJGRVRDSERBVEFNQVNLSU5HRkFJTEVEIiwiX3g1MSIsIl94NTIiLCJfeDUwIiwiX21ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0IiwiX2NhbGxlZTMzIiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNyIsIl90aGlzMTUiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyIsIl9hcmdzMzMiLCJfY29udGV4dDMzIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJMaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwiX3JlZjE0IiwiX2NhbGxlZTMyIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTciLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE3IiwiX3QxNyIsIl9jb250ZXh0MzIiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsIl94NTUiLCJfeDU2IiwiX3g1MyIsIl94NTQiLCJfc2VuZFR5cGluZ0luZGljYXRvciIsIl9jYWxsZWUzNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE4IiwiX3RoaXMxNiIsInNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyIsImN1c3RvbWVyRGlzcGxheU5hbWUiLCJfYXJnczM1IiwiX2NvbnRleHQzNSIsIlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoIiwic2VuZFR5cGluZ0luZGljYXRvciIsIl9yZWYxNSIsIl9jYWxsZWUzNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxOCIsIl90MTgiLCJfY29udGV4dDM0IiwiU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQiLCJfeDU5IiwiX3g2MCIsIl94NTciLCJfeDU4IiwiX21pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQiLCJfY2FsbGVlMzciLCJhdXRoZW50aWNhdGVDaGF0UGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTkiLCJfdGhpczE3IiwiX2NvbnRleHQzNyIsIk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVEIiwiTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCIsIkxpdmVDaGF0QXV0aE1pZENvbnZlcnNhdGlvblBhdGgiLCJtaWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0IiwiX3JlZjE2IiwiX2NhbGxlZTM2IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTkiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE5IiwiX3QxOSIsIl9jb250ZXh0MzYiLCJNSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVEIiwiX3g2MyIsIl94NjQiLCJfeDYxIiwiX3g2MiIsIl9nZXRVbnJlYWRNZXNzYWdlQ291bnQiLCJfY2FsbGVlMzkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQyMCIsIl90aGlzMTgiLCJfY29udGV4dDM5IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1RBUlRFRCIsImdldFVucmVhZE1lc3NhZ2VDb3VudCIsIl9yZWYxNyIsIl9jYWxsZWUzOCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMyMCIsIl90MjAiLCJfY29udGV4dDM4IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1VDQ0VFREVEIiwiR0VUVU5SRUFETUVTU0FHRUNPVU5URkFJTEVEIiwiX3g2NiIsIl94NjciLCJfeDY1IiwiX3NlbmRSZWFkUmVjZWlwdCIsIl9jYWxsZWU0MSIsIm1lc3NhZ2VJZCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDIxIiwiX3RoaXMxOSIsIl9jb250ZXh0NDEiLCJTRU5EUkVBRFJFQ0VJUFRTVEFSVEVEIiwic2VuZFJlYWRSZWNlaXB0IiwiX3JlZjE4IiwiX2NhbGxlZTQwIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMjEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIxIiwiX3QyMSIsIl9jb250ZXh0NDAiLCJTRU5EUkVBRFJFQ0VJUFRTVUNDRUVERUQiLCJTRU5EUkVBRFJFQ0VJUFRGQUlMRUQiLCJfeDcxIiwiX3g3MiIsIl94NjgiLCJfeDY5IiwiX3g3MCIsImxvZ0xldmVsIiwidGVsZW1ldHJ5RXZlbnRUeXBlIiwiZGVzY3JpcHRpb24iLCJyZXF1ZXN0UGF5bG9hZCIsIl9yZXNwb25zZSIsIl9yZXNwb25zZTIiLCJfcmVzcG9uc2UzIiwiTG9nZ2luZ1Nhbml0aXplciIsInN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzIiwic2FuaXRpemVkUmVxdWVzdFBheWxvYWQiLCJzdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzIiwicHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBQcmVDaGF0UmVzcG9uc2UiLCJzdHJpcEdlb2xvY2F0aW9uIiwic2FuaXRpemVkUmVxdWVzdEhlYWRlcnMiLCJhdXRoVG9rZW5EZXRhaWxzIiwic3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMiLCJhdG9iIiwicGF5bG9hZCIsInNwbGl0IiwianNvbkRhdGEiLCJwYXJzZSIsImx3aUNvbnRleHRzIiwic3ViIiwiZXhwIiwibHdpQ29udGV4dHNEYXRhIiwiX3VudXNlZCIsImN1c3RvbURhdGEiLCJSZXF1ZXN0SWQiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiSHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJUcmFuc2FjdGlvbklkIiwidHJhbnNhY3Rpb25pZCIsIlJlcXVlc3RQYXRoIiwiUmVxdWVzdE1ldGhvZCIsIlJlc3BvbnNlU3RhdHVzQ29kZSIsIkV4Y2VwdGlvbkRldGFpbHMiLCJSZXF1ZXN0UGF5bG9hZCIsIlJlcXVlc3RIZWFkZXJzIiwiUmVzcG9uc2VFcnJvcmNvZGUiLCJlcnJvcmNvZGUiLCJBdXRoVG9rZW5EZXRhaWxzIiwiUmV0cnlDb3VudCIsInNldFNlc3Npb25JZEhlYWRlciIsInNldENvcnJlbGF0aW9uSWRJbkhlYWRlciIsInN1YnN0cmluZyIsImdldENoYXRUb2tlblJldHJ5Q291bnQiLCJnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmUiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWciXSwic291cmNlUm9vdCI6Im9jc2RrOi8vLyIsInNvdXJjZXMiOlsiLi4vc3JjL1NESy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFubmVsSWQsIExpdmVDaGF0VmVyc2lvbiwgT0NTREtUZWxlbWV0cnlFdmVudCwgU0RLRXJyb3IgfSBmcm9tIFwiLi9Db21tb24vRW51bXNcIjtcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yLCBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBheGlvc1JldHJ5SGFuZGxlciwgeyBheGlvc1JldHJ5SGFuZGxlcldpdGhOb3RGb3VuZCwgZ2V0UmV0cnlDb3VudCB9IGZyb20gXCIuL1V0aWxzL2F4aW9zUmV0cnlIYW5kbGVyXCI7XG5cbmltcG9ydCB7IEJyb3dzZXJJbmZvIH0gZnJvbSBcIi4vVXRpbHMvQnJvd3NlckluZm9cIjtcbmltcG9ydCBDb25zdGFudHMgZnJvbSBcIi4vQ29tbW9uL0NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGV4dERhdGEgfSBmcm9tIFwiLi9VdGlscy9DdXN0b21Db250ZXh0RGF0YVwiO1xuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gXCIuL1V0aWxzL0RldmljZUluZm9cIjtcbmltcG9ydCBGZXRjaENoYXRUb2tlblJlc3BvbnNlIGZyb20gXCIuL01vZGVsL0ZldGNoQ2hhdFRva2VuUmVzcG9uc2VcIjtcbmltcG9ydCBIZXggZnJvbSBcImNyeXB0by1qcy9lbmMtaGV4XCI7XG5pbXBvcnQgSURhdGFNYXNraW5nSW5mbyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lEYXRhTWFza2luZ0luZm9cIjtcbmltcG9ydCBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXNcIjtcbmltcG9ydCBJUmVuZXdDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZW5ld0NoYXRUb2tlbk9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNESyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtcIjtcbmltcG9ydCBJU0RLQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXNcIlxuaW1wb3J0IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSW5pdENvbnRleHQgZnJvbSBcIi4vTW9kZWwvSW5pdENvbnRleHRcIjtcbmltcG9ydCBMb2NhbGVzIGZyb20gXCIuL0NvbW1vbi9Mb2NhbGVzXCI7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL01vZGVsL0xvZ0xldmVsXCI7XG5pbXBvcnQgeyBMb2dnaW5nU2FuaXRpemVyIH0gZnJvbSBcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiO1xuaW1wb3J0IE9DU0RLTG9nZ2VyIGZyb20gXCIuL0NvbW1vbi9PQ1NES0xvZ2dlclwiO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSBcIi4vVXRpbHMvT1NJbmZvXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxFbmRwb2ludHMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxIVFRQSGVhZGVycyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVyc1wiO1xuaW1wb3J0IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgZnJvbSBcIi4vSW50ZXJmYWNlcy9PbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyXCI7XG5pbXBvcnQgUXVldWVBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUXVldWVBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUmVjb25uZWN0QXZhaWxhYmlsaXR5XCI7XG5pbXBvcnQgUmVjb25uZWN0TWFwcGluZ1JlY29yZCBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RNYXBwaW5nUmVjb3JkXCI7XG5pbXBvcnQgUmVuZXdDaGF0VG9rZW5SZXNwb25zZSBmcm9tIFwiLi9Nb2RlbC9SZW5ld0NoYXRUb2tlblJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXF1ZXN0VGltZW91dENvbmZpZyB9IGZyb20gXCIuL0NvbW1vbi9SZXF1ZXN0VGltZW91dENvbmZpZ1wiO1xuaW1wb3J0IFNIQTI1NiBmcm9tIFwiY3J5cHRvLWpzL3NoYTI1NlwiO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSBcIi4vQ29tbW9uL01hcHBpbmdzXCI7XG5pbXBvcnQgeyBUaW1lciB9IGZyb20gXCIuL1V0aWxzL1RpbWVyXCI7XG5pbXBvcnQgeyBhZGRPY1VzZXJBZ2VudEhlYWRlciB9IGZyb20gXCIuL1V0aWxzL2h0dHBIZWFkZXJzVXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50IH0gZnJvbSBcIi4vVXRpbHMvZW5kcG9pbnRzQ3JlYXRvcnNcIjtcbmltcG9ydCBpc0V4cGVjdGVkQXhpb3NFcnJvciBmcm9tIFwiLi9VdGlscy9pc0V4cGVjdGVkQXhpb3NFcnJvclwiO1xuaW1wb3J0IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL1Nlc3Npb25Jbml0UmV0cnlIYW5kbGVyXCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9VdGlscy91dWlkXCI7XG5pbXBvcnQgeyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyB9IGZyb20gXCIuL1V0aWxzL3dhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWc6IFJlcXVlc3RUaW1lb3V0Q29uZmlnID0ge1xuICAgIGdldENoYXRDb25maWc6IDEyMDAwMCxcbiAgICBnZXRMV0lEZXRhaWxzOiAxNTAwMCxcbiAgICBnZXRDaGF0VG9rZW46IDE1MDAwLFxuICAgIHNlc3Npb25Jbml0OiAxNTAwMCxcbiAgICBzZXNzaW9uQ2xvc2U6IDE1MDAwLFxuICAgIGdldFJlY29ubmVjdGFibGVDaGF0czogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5OiAxNTAwMCxcbiAgICBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlOiAxNTAwMCxcbiAgICBnZXRTdXJ2ZXlJbnZpdGVMaW5rOiAxNTAwMCxcbiAgICBnZXRDaGF0VHJhbnNjcmlwdHM6IDMwMDAwLFxuICAgIGVtYWlsVHJhbnNjcmlwdDogNTAwMCxcbiAgICBmZXRjaERhdGFNYXNraW5nSW5mbzogNTAwMCxcbiAgICBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdDogMTUwMDAsXG4gICAgZ2V0QWdlbnRBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHNlbmRUeXBpbmdJbmRpY2F0b3I6IDUwMDAsXG4gICAgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQ6IDE1MDAwLFxuICAgIGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeTogMTUwMDAsXG4gICAgbWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdDogMTUwMDAsXG4gICAgZ2V0VW5yZWFkTWVzc2FnZUNvdW50OiAxNTAwMCxcbiAgICBzZW5kUmVhZFJlY2VpcHQ6IDUwMDAsXG4gICAgcmVuZXdDaGF0VG9rZW46IDE1MDAwXG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdENvbmZpZ3VyYXRpb246IElTREtDb25maWd1cmF0aW9uID0ge1xuICAgIGF1dGhDb2RlTm9uY2U6IHV1aWR2NCgpLnN1YnN0cmluZygwLCA4KSxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeUNvdW50OiAxMCxcbiAgICBnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmU6IDEwMDAwLFxuICAgIGdldENoYXRUb2tlblJldHJ5T240Mjk6IHRydWUsXG4gICAgZ2V0Q2hhdENvbmZpZ1JldHJ5T240Mjk6IHRydWUsXG4gICAgbWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmU6IDUsXG4gICAgZGVmYXVsdFJlcXVlc3RUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgcmVxdWVzdFRpbWVvdXRDb25maWc6IFNESy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWcsXG4gICAgdXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtOiBmYWxzZSxcbiAgICB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnOiB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyxcbiAgICBvY1VzZXJBZ2VudDogW11cbiAgfTtcblxuICBsaXZlQ2hhdFZlcnNpb246IG51bWJlcjtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBvY1VzZXJBZ2VudDogc3RyaW5nW107XG4gIEhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlID0gYCR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck5hbWV9OiAke1NES0Vycm9yLkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlfWA7XG5cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb246IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24sIHByaXZhdGUgbG9nZ2VyPzogT0NTREtMb2dnZXIpIHtcbiAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLmxlbmd0aCB8fCB0eXBlb2YgKGNvbmZpZ3VyYXRpb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgU0RLIGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgaW5kaXZpZHVhbCBlbmRwb2ludFRpbWVvdXQgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNoYW5uZWxJZFxuICAgIGNvbnN0IHsgY2hhbm5lbElkIH0gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKENoYW5uZWxJZCkuaW5jbHVkZXMoY2hhbm5lbElkIGFzIENoYW5uZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFubmVsSWRgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBPQyBjb25maWdcbiAgICBjb25zdCBjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9tbmljaGFubmVsQ29uZmlndXJhdGlvbik7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgQ29uc3RhbnRzLnJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycykge1xuICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAnJHtrZXl9JyBpbiBPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9jVXNlckFnZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLm9jVXNlckFnZW50O1xuICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gTGl2ZUNoYXRWZXJzaW9uLlYyO1xuICB9XG5cblxuICAvKipcbiAgICogRmV0Y2hlcyBMQ1cgRkNTIERldGFpbHMgb2YgdGhlIE9yZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMY3dGY3NEZXRhaWxzKCk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1RBUlRFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIHN0YXJ0ZWRcIiwgXCJcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MY3dGY3NEZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlLmdldCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRDb25maWdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExDV0ZDU0RFVEFJTFNTVUNDRUVERUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdWNjZWVkZWRcIiwgXCJcIiwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTRkFJTEVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgZmFpbGVkXCIsIFwiXCIsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNoYXQgY29uZmlnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRDb25maWcocmVxdWVzdElkOiBzdHJpbmcsIGJ5cGFzc0NhY2hlID0gZmFsc2UpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZTVEFSVEVELCBcIkdldCBDaGF0IGNvbmZpZyBzdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29uZmlnUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0/cmVxdWVzdElkPSR7cmVxdWVzdElkfSZjaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0Q29uZmlnUmV0cnlPbjQyOSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGJ5cGFzc0NhY2hlKSB7XG4gICAgICByZXF1ZXN0SGVhZGVycyA9IHsgLi4uQ29uc3RhbnRzLmJ5cGFzc0NhY2hlSGVhZGVycywgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuXG4gICAgICAvLyBBZGQgdHlwZSBndWFyZCB0byBwcmV2ZW50IFR5cGVFcnJvciB3aGVuIGJhY2tlbmQgcmV0dXJucyBub24tb2JqZWN0IChlLmcuLCBlbXB0eSBzdHJpbmcsIG51bGwsIHVuZGVmaW5lZClcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbikge1xuICAgICAgICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gZGF0YS5MaXZlQ2hhdFZlcnNpb247XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMgJiYgcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl0pIHtcbiAgICAgICAgICBkYXRhLmhlYWRlcnNbXCJkYXRlXCJdID0gcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdTVUNDRUVERUQsIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lLCBnZXRSZXRyeUNvdW50KHJlc3BvbnNlPy5jb25maWcpKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHJldHJ5Q291bnQgPSBnZXRSZXRyeUNvdW50KChlcnJvciBhcyBBeGlvc0Vycm9yKT8uY29uZmlnKTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRkFJTEVELCBcIkdldCBDaGF0IGNvbmZpZyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSwgcmV0cnlDb3VudCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgTFdJIERldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TFdJRGV0YWlscyhyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVEFSVEVELCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGEgZW5kcG9pbnQgZm9yIGFub255bW91cyBjaGF0cyB0byBnZXQgTFdJIERldGFpbHNcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXJXaXRoTm90Rm91bmQoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0TFdJRGV0YWlscyxcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgYXV0aCB0b2tlbiBhbmQgcmVjb25uZWN0IGlkIGZyb20gb3B0aW9uYWwgcGFyYW1cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkIH0gPSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICAvLyB1cGRhdGVkIGF1dGggZW5kcG9pbnQgZm9yIGF1dGhlbnRpY2F0ZWQgY2hhdHMgYW5kIGFkZCBhdXRoIHRva2VuIGluIGhlYWRlclxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfTtcblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldExXSURldGFpbHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCBcIkdldCBMV0kgRGV0YWlscyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTRkFJTEVELCBcIkdldCBMV0kgRGV0YWlscyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY2hhdCB0b2tlbiBmcm9tIE9tbmljaGFubmVsIHRvIGpvaW4gVDEgdGhyZWFkLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VG9rZW4ocmVxdWVzdElkOiBzdHJpbmcsIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSwgY3VycmVudFJldHJ5Q291bnQ6IG51bWJlciA9IDApOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW5mZXJyYWJsZS10eXBlc1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCByZWZyZXNoVG9rZW4sIE1zT2NCb3RBcHBsaWNhdGlvbklkIH0gPSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBtdWx0aUJvdCA9IChNc09jQm90QXBwbGljYXRpb25JZCAmJiBNc09jQm90QXBwbGljYXRpb25JZC5sZW5ndGggPiAwKT8gdHJ1ZTogZmFsc2U7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1RBUlRFRCwgXCJHZXQgQ2hhdCBUb2tlbiBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoY3VycmVudFJldHJ5Q291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3VycmVudFJldHJ5Q291bnRgKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQoY3VycmVudExpdmVDaGF0VmVyc2lvbiBhcyBMaXZlQ2hhdFZlcnNpb24gfHwgdGhpcy5saXZlQ2hhdFZlcnNpb24sIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyB0cnVlIDogZmFsc2UsIG11bHRpQm90KTtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH1cbiAgICBpZiAoTXNPY0JvdEFwcGxpY2F0aW9uSWQgJiYgTXNPY0JvdEFwcGxpY2F0aW9uSWQubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYW1zWydNcy1PYy1Cb3QtQXBwbGljYXRpb24tSWQnXSA9IE1zT2NCb3RBcHBsaWNhdGlvbklkO1xuICAgIH1cblxuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5yZWZyZXNoVG9rZW4gPSAndHJ1ZSdcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogKGN1cnJlbnRSZXRyeUNvdW50ID4gdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlKSA/IGN1cnJlbnRSZXRyeUNvdW50IDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgcmV0cnlPbjQyOTogdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblJldHJ5T240MjksXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgY2hhdCB0b2tlbiByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1VDQ0VFREVELCBcIkdldCBDaGF0IFRva2VuIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNvbnRlbnQgZm9yIHJlY29ubmVjdCBjaGF0IGNhc2Ugc2hvdWxkbid0IGJlIHJldHJpZWQuXG4gICAgICAgIGlmICghZGF0YSAmJiByZWNvbm5lY3RJZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIkVtcHR5IGRhdGEgcmVjZWl2ZWQgZnJvbSBnZXRDaGF0VG9rZW5cIiksIHtcbiAgICAgICAgICByZXNwb25zZTogeyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTkZBSUxFRCwgXCJHZXQgQ2hhdCBUb2tlbiBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5ld3MgdGhlIEFDUyBjaGF0IHRva2VuIG9mIHRoZSB2aXNpdG9yIGluIGFuIG9wZW4gY29udmVyc2F0aW9uLCBzbyB0aGUgY2hhdCBjYW4gY29udGludWUgYWZ0ZXIgdGhlIHRva2VuXG4gICAqIGZyb20gZ2V0Q2hhdFRva2VuIGV4cGlyZXMuIFJlamVjdHMgd2hlbiB0aGUgQVBJIGlzIG5vdCBhdmFpbGFibGUgb3IgdGhlIGNvbnZlcnNhdGlvbiBjYW4ndCBiZSByZW5ld2VkIChlLmcuIDQwNCk7XG4gICAqIGNhbGxlcnMgc2hvdWxkIGtlZXAgdGhlaXIgY3VycmVudCB0b2tlbiBpbiB0aGF0IGNhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBjb252ZXJzYXRpb24sIG9yIHRoZSByZWNvbm5lY3QgaWQgZm9yIGEgcmVjb25uZWN0ZWQgY2hhdC5cbiAgICogQHBhcmFtIHJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgcmVuZXcgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW5ld0NoYXRUb2tlbihyZXF1ZXN0SWQ6IHN0cmluZywgcmVuZXdDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogSVJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UmVuZXdDaGF0VG9rZW5SZXNwb25zZT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIG1heFJldHJpZXMgfSA9IHJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuUkVORVdDSEFUVE9LRU5TVEFSVEVELCBcIlJlbmV3IENoYXQgVG9rZW4gU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByZXF1ZXN0SWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aFJlbmV3Q2hhdFRva2VuUGF0aCA6IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJSZW5ld0NoYXRUb2tlblBhdGg7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9O1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcucmVuZXdDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdHlwZW9mIG1heFJldHJpZXMgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzSW50ZWdlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID49IDBcbiAgICAgICAgPyBtYXhSZXRyaWVzIDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnPy5yZW5ld0NoYXRUb2tlbiA/PyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncy5yZW5ld0NoYXRUb2tlblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8ICFkYXRhLlRva2VuKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGEgcmVjZWl2ZWQgZnJvbSByZW5ld0NoYXRUb2tlblwiKTtcbiAgICAgICAgICAvLyBOb3QgcGFzc2luZyByZXNwb25zZTogbG9nV2l0aExvZ2dlciByZWFkcyByZXNwb25zZS5kYXRhLlJlZ2lvbiwgd2hpY2ggdGhyb3dzIHdoZW4gZGF0YSBpcyBudWxsXG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlJFTkVXQ0hBVFRPS0VORkFJTEVELCBcIlJlbmV3IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlJFTkVXQ0hBVFRPS0VOU1VDQ0VFREVELCBcIlJlbmV3IENoYXQgVG9rZW4gc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5SRU5FV0NIQVRUT0tFTkZBSUxFRCwgXCJSZW5ldyBDaGF0IFRva2VuIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICAgKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb25uZWN0YWJsZUNoYXRzKHJlY29ubmVjdGFibGVDaGF0c1BhcmFtczogSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyk6IFByb21pc2U8UmVjb25uZWN0TWFwcGluZ1JlY29yZCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTU1RBUlRFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBjaGF0IFN0YXJ0ZWRcIik7XG4gICAgY29uc3QgcmVxdWVzdElkID0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zPy5yZXF1ZXN0SWQ7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0YWJsZUNoYXRzXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgcmVjb25uZWN0YWJsZSBjaGF0cyByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBTdWNjZWVkZWQgYW5kIG9sZCBzZXNzaW9uIHJldHVybmVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgaW4gdGhlIG9sZCBzZXNzaW9ucyBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTRkFJTEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkocmVjb25uZWN0SWQ6IHN0cmluZywgb3B0aW9uYWxQYXJhbXM6IElSZWNvbm5lY3RBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxSZWNvbm5lY3RBdmFpbGFiaWxpdHkgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IFJlY29ubmVjdGFibGUgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVjb25uZWN0SWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMob3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5XQVJOLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBkaWRuJ3Qgc2VuZCBhbnkgdmFsaWQgZGF0YVwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgUmVjb25uZWN0IEF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkocmVxdWVzdElkOiBzdHJpbmcsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFF1ZXVlQXZhaWxhYmlsaXR5PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD1sY3dgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuXG4gICAgY29uc3QgY2FjaE9iaiA9IHtcbiAgICAgIFwib3JnSWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQsXG4gICAgICBcIndpZGdldElkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkXG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgY29uc3QgdGVtcEFyciA9IEN1c3RvbUNvbnRleHREYXRhLnNvcnQoZGF0YS5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJjdXN0b21Db250ZXh0XCI6IHRlbXBBcnIgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEucG9ydGFsY29udGFjdGlkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJwb3J0YWxjb250YWN0aWRcIjogZGF0YS5wb3J0YWxjb250YWN0aWQgfSk7XG4gICAgfVxuXG4gICAgLy9kYXRhLmNhY2hlS2V5ID0gaGFzaC5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoY2FjaE9iaikpLmRpZ2VzdCgnaGV4JykudG9TdHJpbmcoKTtcbiAgICBkYXRhLmNhY2hlS2V5ID0gU0hBMjU2KEpTT04uc3RyaW5naWZ5KGNhY2hPYmopKS50b1N0cmluZyhIZXgpO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiRW1wdHkgZGF0YSByZWNlaXZlZCBmcm9tIGdldEFnZW50QXZhaWxhYmlsaXR5XCIpLCB7XG4gICAgICAgICAgcmVzcG9uc2U6IHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKidcbiAgICogU3RhcnRzIGEgc2Vzc2lvbiB0byBvbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25Jbml0KHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1RBUlRFRCwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBjb25zdCByZXRyeU9uNDI5ID0gdHJ1ZTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkluaXQsXG4gICAgICBzaG91bGRSZXRyeTogKGVycm9yKSA9PiBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlcihlcnJvciwgcmV0cnlPbjQyOSksXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGNvbnN0IGJhc2VQYXRoID0gYXV0aGVudGljYXRlZFVzZXJUb2tlblxuICAgICAgPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGhcbiAgICAgIDogT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGg7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7YmFzZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkICYmIHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCBcIlNlc3Npb24gSW5pdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCBcIlNlc3Npb24gSW5pdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDb252ZXJzYXRpb24ocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTlNUQVJURUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgY29uc3QgcmV0cnlPbjQyOSA9IHRydWU7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25Jbml0LFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJvcikgPT4gc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIoZXJyb3IsIHJldHJ5T240MjkpLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cbiAgICAgID8gT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvclBhdGg7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0QXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbmA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBkYXRhLnJlY29ubmVjdElkID0gcmVjb25uZWN0SWQ7XG4gICAgfVxuXG4gICAgZGF0YS5jaGFubmVsSWQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGVtcHR5LCBpZiBzbywgdGhlbiB0aHJvdyBhbiBlcnJvclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05TVUNDRUVERUQsIFwiQ3JlYXRlIGNvdmVyc2F0aW9uIGNhbGwgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5DUkVBVEVTRVNTSU9ORkFJTEVELCBcIkNyZWF0ZSBjb252ZXJzYXRpb24gY2FsbCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgXG4gICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGNsb3NlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25DbG9zZShyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIFwiU2Vzc2lvbiBDbG9zZSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQsIGNoYXRJZCB9ID0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZGF0YS5jaGF0SWQgPSBjaGF0SWQ7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChpc1JlY29ubmVjdENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNSZWNvbm5lY3RDaGF0PXRydWVgO1xuICAgIH1cblxuICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uQ2xvc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1VDQ0VFREVELCBcIlNlc3Npb24gQ2xvc2Ugc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VGQUlMRUQsIFwiU2Vzc2lvbiBjbG9zZSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkKHJlcXVlc3RJZDogc3RyaW5nLCB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY2hhdElkIH0gPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRWYWxpZGF0ZUF1dGhDaGF0TWFwUmVjb3JkUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcudmFsaWRhdGVBdXRoQ2hhdFJlY29yZFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8uYXV0aENoYXRFeGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IudG9TdHJpbmcoKSA9PT0gXCJFcnJvcjogUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSA0MDRcIikgeyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBwb3N0Q2hhdFJlc3BvbnNlOiBvYmplY3QsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1RBUlRFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0Q2hhdFJlc3BvbnNlKSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRGQUlMRUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U3VydmV5SW52aXRlTGluayhzdXJ2ZXlPd25lcklkOiBzdHJpbmcsIHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5OiBvYmplY3QsIGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtczogSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWwuSU5GTyxcbiAgICAgICAgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCxcbiAgICAgICAgeyBTdXJ2ZXlPd25lcklkOiBzdXJ2ZXlPd25lcklkIH0sXG4gICAgICAgIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdGFydGVkXCIpO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkIH0gPSBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0U3VydmV5SW52aXRlTGlua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNoYXQgdHJhbnNjcmlwdHMgZm9yIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIGNoYXRJZCBDaGF0IHRocmVhZCBJZC5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdHJhbnNjcmlwdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdFRyYW5zY3JpcHRzKHJlcXVlc3RJZDogc3RyaW5nLCBjaGF0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXM6IElHZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVEFSVEVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0VHJhbnNjcmlwdHNcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiB9ID0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMikpIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5KHJlcXVlc3RJZDogc3RyaW5nLCBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtczogSUdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVEFSVEVELCBcIkdldCBQZXJzaXN0ZW50IENoYXQgSGlzdG9yeSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHBhZ2VTaXplLCBwYWdlVG9rZW4gfSA9IGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgaWYgKCFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcIkF1dGhlbnRpY2F0ZWQgdXNlciB0b2tlbiBpcyByZXF1aXJlZCBmb3IgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnlcIjtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZCAtIE1pc3NpbmcgYXV0aGVudGljYXRlZCB1c2VyIHRva2VuXCIsIHJlcXVlc3RJZCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS9jb252ZXJzYXRpb24vaGlzdG9yeWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHt9O1xuICAgIFxuICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnZVNpemUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICAvLyBpbiBjYXNlIHBhZ2UgdG9rZW4gaXMgYXNzaWduZWQgZnJvbSBtdXRhdGVkIGhlYWRlcnMsIHdlIG92ZXJyaWRlIHdpdGggdGhlIGFjdHVhbCB2YWx1ZSBvciBlbXB0eVxuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucGFnZVRva2VuXSA9IHBhZ2VUb2tlbiB8fCBcIlwiO1xuICAgXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNVQ0NFRURFRCwgXCJHZXQgUGVyc2lzdGVudCBDaGF0IEhpc3Rvcnkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWFpbCB0cmFuc2NyaXB0IHRvIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZW1haWxSZXF1ZXN0Qm9keSBFbWFpbCByZXF1ZXN0IGJvZHkuXG4gICAqIEBwYXJhbSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBlbWFpbCB0cmFuc2NyaXB0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVtYWlsVHJhbnNjcmlwdChyZXF1ZXN0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZW1haWxSZXF1ZXN0Qm9keTogb2JqZWN0LCBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtczogSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRofS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmVtYWlsVHJhbnNjcmlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShlbWFpbFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBkYXRhIG1hc2tpbmcgaW5mbyBvZiB0aGUgb3JnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZldGNoRGF0YU1hc2tpbmdJbmZvKHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxJRGF0YU1hc2tpbmdJbmZvPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVEFSVEVELCBcIkZldGNoIERhdGEgTWFza2luZyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZmV0Y2hEYXRhTWFza2luZ0luZm9cbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVELCBcIkZldGNoIERhdGEgTWFza2luZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnQgbmV0d29yayBjYWxsIHRvIE9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSBzZWNvbmRhcnlDaGFubmVsIGV2ZW50IHJlcXVlc3QgYm9keVxuICAgKiBAcGFyYW0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nLCBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keTogb2JqZWN0LCBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtczogSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgcmVxdWVzdFBhdGggKz0gXCI/Y2hhbm5lbElkPVwiICsgQ29uc3RhbnRzLmRlZmF1bHRDaGFubmVsSWQ7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVUNDRUVERUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbmQgdHlwaW5nIGluZGljYXRvclxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVHlwaW5nSW5kaWNhdG9yKHJlcXVlc3RJZDogc3RyaW5nLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uOiBudW1iZXIsIHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtczogSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYXZvaWRpbmcgbG9nZ2luZyBJbmZvIGZvciB0eXBpbmdpbmRpY2F0b3IgdG8gcmVkdWNlIGxvZyB0cmFmZmljXG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBjdXN0b21lckRpc3BsYXlOYW1lIH0gPSBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM7XG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikgeyB0aHJvdyBuZXcgRXJyb3IoJ1R5cGluZyBpbmRpY2F0b3IgaXMgb25seSBzdXBwb3J0ZWQgb24gdjInKSB9XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuU2VuZFR5cGluZ0luZGljYXRvclBhdGh9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBpZiAoY3VzdG9tZXJEaXNwbGF5TmFtZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbQ29uc3RhbnRzLmN1c3RvbWVyRGlzcGxheU5hbWVdID0gY3VzdG9tZXJEaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRUeXBpbmdJbmRpY2F0b3JcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCwgXCJTZW5kIFR5cGluZyBJbmRpY2F0b3IgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGFuIG9uZ29pbmcgKHByZXZpb3VzbHkgdW5hdXRoZW50aWNhdGVkKSBjaGF0IHNlc3Npb24uXG4gICAqIFVwZ3JhZGVzIGVuZ2FnZW1lbnQgY29udGV4dCBzbyBzdWJzZXF1ZW50IGNhbGxzIHVzZSBhdXRoZW50aWNhdGVkIGVuZHBvaW50cy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBDdXJyZW50IHJlcXVlc3QvY29ycmVsYXRpb24gaWRcbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXMgeyBjaGF0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQocmVxdWVzdElkOiBzdHJpbmcsIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXM6IHsgY2hhdElkOiBzdHJpbmc7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50Lk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGNoYXRJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gYXV0aGVudGljYXRlQ2hhdFBhcmFtcztcblxuICAgIGlmICghY2hhdElkIHx8ICFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCxcbiAgICAgICAgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkIC0gY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiLCByZXF1ZXN0SWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhNaWRDb252ZXJzYXRpb25QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5taWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGhlYWRlcnMgJiYgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCwgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHVucmVhZCBtZXNzYWdlIGNvdW50IGZvciB0aGUgYXV0aGVudGljYXRlZCB1c2VyLlxuICAgKiBBdXRoLW9ubHkgZW5kcG9pbnQg4oCUIGRvZXMgbm90IHJlcXVpcmUgYW4gYWN0aXZlIGNoYXQgc2Vzc2lvbi5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VW5yZWFkTWVzc2FnZUNvdW50KGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNUQVJURUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS91bnJlYWRtZXNzYWdlc2A7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNVQ0NFRURFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRVTlJFQURNRVNTQUdFQ09VTlRGQUlMRUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcmVhZCByZWNlaXB0IGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgaW4gYW4gYXV0aGVudGljYXRlZCBjb252ZXJzYXRpb24uXG4gICAqIFVwZGF0ZXMgdGhlIHVucmVhZCBtZXNzYWdlIGNvdW50ZXIgb24gdGhlIHNlcnZlciBhbmQgZm9yd2FyZHMgdGhlIHJlY2VpcHQgdG8gQUNTLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCAoY29udmVyc2F0aW9uVGhyZWFkSWQpIG9mIHRoZSBjb252ZXJzYXRpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgVGhlIEFDUyBtZXNzYWdlIElEIHRvIG1hcmsgYXMgcmVhZC5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFJlYWRSZWNlaXB0KHJlcXVlc3RJZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZywgYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRSRUFEUkVDRUlQVFNUQVJURUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0YXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbnMvJHtyZXF1ZXN0SWR9L3JlYWRyZWNlaXB0YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlSWQgfSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFJFQURSRUNFSVBUU1VDQ0VFREVELCBcIlNlbmQgUmVhZCBSZWNlaXB0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EUkVBRFJFQ0VJUFRGQUlMRUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgTG9nIGxldmVsIGZvciBsb2dnaW5nLlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5RXZlbnRUeXBlIFRlbGVtZXRyeSBldmVudCB0eXBlIGluIHdoaWNoIGV2ZW50IHdpbGwgYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlc3BvbnNlIFJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIEVsYXBzZWQgdGltZSBpbiBtc1xuICAgKiBAcGFyYW0gcmVxdWVzdFBhdGggUmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBtZXRob2QgTWV0aG9kXG4gICAqIEBwYXJhbSBlcnJvciBFcnJvclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhXG4gICAqL1xuICBwcml2YXRlIGxvZ1dpdGhMb2dnZXIobG9nTGV2ZWw6IExvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGU6IE9DU0RLVGVsZW1ldHJ5RXZlbnQsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZywgcmVzcG9uc2U/OiBBeGlvc1Jlc3BvbnNlPGFueT4sIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHJlcXVlc3RQYXRoPzogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgcmVxdWVzdFBheWxvYWQ/OiBhbnksIHJlcXVlc3RIZWFkZXJzPzogYW55LCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZT86IG51bWJlciwgcmV0cnlDb3VudD86IG51bWJlcik6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcik7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1ZXN0UGF5bG9hZCkge1xuICAgICAgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB7IC4uLnJlcXVlc3RQYXlsb2FkIH07XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFByZUNoYXRSZXNwb25zZShzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEdlb2xvY2F0aW9uKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGF1dGhUb2tlbkRldGFpbHM6IGFueSA9IHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHsgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMoc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICBpZiAocmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSkge1xuICAgICAgICBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0b2tlbi5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LmF0b2IocGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0cyA9IGpzb25EYXRhW1wibHdpY29udGV4dHNcIl07XG4gICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzID0ge1xuICAgICAgICAgICAgICBzdWI6IGpzb25EYXRhW1wic3ViXCJdLFxuICAgICAgICAgICAgICBleHA6IGpzb25EYXRhW1wiZXhwXCJdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobHdpQ29udGV4dHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgbHdpQ29udGV4dHNEYXRhID0gSlNPTi5wYXJzZShsd2lDb250ZXh0cyk7XG4gICAgICAgICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyhsd2lDb250ZXh0c0RhdGEpO1xuICAgICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzLmx3aUNvbnRleHRzID0gbHdpQ29udGV4dHNEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbURhdGEgPSB7XG4gICAgICBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIFJlZ2lvbjogcmVzcG9uc2U/LmRhdGEuUmVnaW9uLFxuICAgICAgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyxcbiAgICAgIEh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOiBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSxcbiAgICAgIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlPy5oZWFkZXJzW0NvbnN0YW50cy50cmFuc2FjdGlvbmlkXSxcbiAgICAgIFJlcXVlc3RQYXRoOiByZXF1ZXN0UGF0aCxcbiAgICAgIFJlcXVlc3RNZXRob2Q6IG1ldGhvZCxcbiAgICAgIFJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5zdGF0dXMgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgXG4gICAgICBFeGNlcHRpb25EZXRhaWxzOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yIDogdW5kZWZpbmVkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIFJlcXVlc3RQYXlsb2FkOiBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCxcbiAgICAgIFJlcXVlc3RIZWFkZXJzOiBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyxcbiAgICAgIFJlc3BvbnNlRXJyb3Jjb2RlOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5oZWFkZXJzPy5lcnJvcmNvZGUgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgQXV0aFRva2VuRGV0YWlsczogYXV0aFRva2VuRGV0YWlscyxcbiAgICAgIFJldHJ5Q291bnQ6IHJldHJ5Q291bnRcbiAgICB9O1xuICAgIHRoaXMubG9nZ2VyLmxvZyhsb2dMZXZlbCwgdGVsZW1ldHJ5RXZlbnRUeXBlLCBjdXN0b21EYXRhLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldEF1dGhDb2RlTm9uY2UgPSAoaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2UpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlID0gaGVhZGVycz8uYXV0aGNvZGVub25jZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldFNlc3Npb25JZEhlYWRlciA9IChzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkXSA9IHNlc3Npb25JZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFJlcXVlc3RJZEhlYWRlciA9IChyZXF1ZXN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogU3RyaW5nTWFwKSA9PiB7XG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIgPSAoY29ycmVsYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBTdHJpbmdNYXApID0+IHtcbiAgICBpZiAoY29ycmVsYXRpb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmNvcnJlbGF0aW9uSWRdID0gY29ycmVsYXRpb25JZDtcbiAgICB9XG4gIH1cbn1cblxuIl0sIm1h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
|