@phenixrts/sdk 2023.0.16-beta.52 → 2023.0.17-beta.53
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/debug/channels.js +31 -109
- package/dist/debug/full.js +31 -109
- package/dist/debug/groups.js +2 -2
- package/dist/debug/messaging.js +2 -2
- package/dist/debug/publish.js +31 -109
- package/dist/debug.private/channels.js +31 -109
- package/dist/debug.private/full.js +31 -109
- package/dist/debug.private/groups.js +2 -2
- package/dist/debug.private/messaging.js +2 -2
- package/dist/debug.private/publish.js +31 -109
- package/dist/es5.debug.private/channels.js +31 -109
- package/dist/es5.debug.private/full.js +31 -109
- package/dist/es5.debug.private/groups.js +2 -2
- package/dist/es5.debug.private/messaging.js +2 -2
- package/dist/es5.debug.private/publish.js +31 -109
- package/dist/min/channels.js +1 -1
- package/dist/min/channels.js.map +1 -1
- package/dist/min/full.js +1 -1
- package/dist/min/full.js.map +1 -1
- package/dist/min/groups.js +1 -1
- package/dist/min/groups.js.map +1 -1
- package/dist/min/messaging.js +1 -1
- package/dist/min/messaging.js.map +1 -1
- package/dist/min/publish.js +1 -1
- package/dist/min/publish.js.map +1 -1
- package/dist/min.private/channels.js +1 -1
- package/dist/min.private/channels.js.map +1 -1
- package/dist/min.private/full.js +1 -1
- package/dist/min.private/full.js.map +1 -1
- package/dist/min.private/groups.js +1 -1
- package/dist/min.private/groups.js.map +1 -1
- package/dist/min.private/messaging.js +1 -1
- package/dist/min.private/messaging.js.map +1 -1
- package/dist/min.private/publish.js +1 -1
- package/dist/min.private/publish.js.map +1 -1
- package/dist/types/sdk/api/Publish.d.ts +4 -6
- package/dist/types/sdk/api/SetRemoteDescription.d.ts +2 -4
- package/dist/types/sdk/api/Subscribe.d.ts +4 -6
- package/dist/types/sdk/discovery/EndPoint.d.ts +0 -2
- package/package.json +1 -1
- package/dist/types/sdk/api/RtcConfiguration.d.ts +0 -16
- package/dist/types/sdk/api/SessionDescription.d.ts +0 -5
package/dist/debug/channels.js
CHANGED
|
@@ -6406,11 +6406,10 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
|
|
|
6406
6406
|
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./node_modules/@babel/runtime/regenerator/index.js */ "./node_modules/@babel/runtime/regenerator/index.js");
|
|
6407
6407
|
/* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
6408
6408
|
/* harmony import */ var _logger_LoggerFactory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../logger/LoggerFactory */ "./src/logger/LoggerFactory.ts");
|
|
6409
|
-
/* harmony import */ var
|
|
6410
|
-
/* harmony import */ var
|
|
6411
|
-
/* harmony import */ var
|
|
6412
|
-
/* harmony import */ var
|
|
6413
|
-
/* harmony import */ var _BitrateStateMapping__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./BitrateStateMapping */ "./src/sdk/discovery/BitrateStateMapping.ts");
|
|
6409
|
+
/* harmony import */ var _version_VersionManager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../version/VersionManager */ "./src/sdk/version/VersionManager.ts");
|
|
6410
|
+
/* harmony import */ var _edgeAuth_EdgeAuth__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../edgeAuth/EdgeAuth */ "./src/sdk/edgeAuth/EdgeAuth.ts");
|
|
6411
|
+
/* harmony import */ var _BitrateModeMapping__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./BitrateModeMapping */ "./src/sdk/discovery/BitrateModeMapping.ts");
|
|
6412
|
+
/* harmony import */ var _BitrateStateMapping__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./BitrateStateMapping */ "./src/sdk/discovery/BitrateStateMapping.ts");
|
|
6414
6413
|
/* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
|
|
6415
6414
|
|
|
6416
6415
|
|
|
@@ -6426,8 +6425,7 @@ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpe
|
|
|
6426
6425
|
|
|
6427
6426
|
|
|
6428
6427
|
|
|
6429
|
-
|
|
6430
|
-
var apiVersion = 6;
|
|
6428
|
+
var apiVersion = 7;
|
|
6431
6429
|
var EndPoint = /*#__PURE__*/function () {
|
|
6432
6430
|
function EndPoint(uri, timeout) {
|
|
6433
6431
|
_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_2___default()(this, EndPoint);
|
|
@@ -6502,7 +6500,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6502
6500
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee2$(_context2) {
|
|
6503
6501
|
while (1) switch (_context2.prev = _context2.next) {
|
|
6504
6502
|
case 0:
|
|
6505
|
-
parsedToken =
|
|
6503
|
+
parsedToken = _edgeAuth_EdgeAuth__WEBPACK_IMPORTED_MODULE_8__.default.parseToken(token);
|
|
6506
6504
|
if (!(!parsedToken || !parsedToken.applicationId)) {
|
|
6507
6505
|
_context2.next = 4;
|
|
6508
6506
|
break;
|
|
@@ -6515,7 +6513,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6515
6513
|
tenancy = parsedToken.applicationId;
|
|
6516
6514
|
url = this.buildUrl([tenancy, 'stream', 'subscribe']).toString();
|
|
6517
6515
|
formData = new FormData();
|
|
6518
|
-
clientVersion =
|
|
6516
|
+
clientVersion = _version_VersionManager__WEBPACK_IMPORTED_MODULE_7__.default.sdkVersion;
|
|
6519
6517
|
if (failureCount === 0 && localSessionDescription) {
|
|
6520
6518
|
bodyWithOffer = {
|
|
6521
6519
|
apiVersion: apiVersion,
|
|
@@ -6526,7 +6524,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6526
6524
|
setRemoteDescription: {
|
|
6527
6525
|
apiVersion: apiVersion,
|
|
6528
6526
|
sessionDescription: {
|
|
6529
|
-
type:
|
|
6527
|
+
type: localSessionDescription.type,
|
|
6530
6528
|
sdp: localSessionDescription.sdp
|
|
6531
6529
|
}
|
|
6532
6530
|
},
|
|
@@ -6615,7 +6613,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6615
6613
|
return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_5___default().wrap(function _callee3$(_context3) {
|
|
6616
6614
|
while (1) switch (_context3.prev = _context3.next) {
|
|
6617
6615
|
case 0:
|
|
6618
|
-
parsedToken =
|
|
6616
|
+
parsedToken = _edgeAuth_EdgeAuth__WEBPACK_IMPORTED_MODULE_8__.default.parseToken(token);
|
|
6619
6617
|
if (!(!parsedToken || !parsedToken.applicationId)) {
|
|
6620
6618
|
_context3.next = 4;
|
|
6621
6619
|
break;
|
|
@@ -6628,7 +6626,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6628
6626
|
tenancy = parsedToken.applicationId;
|
|
6629
6627
|
url = this.buildUrl([tenancy, 'stream', 'publish']).toString();
|
|
6630
6628
|
formData = new FormData();
|
|
6631
|
-
clientVersion =
|
|
6629
|
+
clientVersion = _version_VersionManager__WEBPACK_IMPORTED_MODULE_7__.default.sdkVersion;
|
|
6632
6630
|
if (failureCount === 0 && localSessionDescription) {
|
|
6633
6631
|
bodyWithOffer = {
|
|
6634
6632
|
apiVersion: apiVersion,
|
|
@@ -6640,7 +6638,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6640
6638
|
setRemoteDescription: {
|
|
6641
6639
|
apiVersion: apiVersion,
|
|
6642
6640
|
sessionDescription: {
|
|
6643
|
-
type:
|
|
6641
|
+
type: localSessionDescription.type,
|
|
6644
6642
|
sdp: localSessionDescription.sdp
|
|
6645
6643
|
}
|
|
6646
6644
|
},
|
|
@@ -6740,7 +6738,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6740
6738
|
apiVersion: apiVersion,
|
|
6741
6739
|
sharedSecret: stream.sharedSecret,
|
|
6742
6740
|
sessionDescription: {
|
|
6743
|
-
type:
|
|
6741
|
+
type: sessionDescription.type,
|
|
6744
6742
|
sdp: sessionDescription.sdp
|
|
6745
6743
|
}
|
|
6746
6744
|
};
|
|
@@ -6819,8 +6817,8 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
6819
6817
|
sharedSecret: stream.sharedSecret,
|
|
6820
6818
|
elapsedInMilliseconds: elapsedInMilliseconds,
|
|
6821
6819
|
bitrateInBitsPerSecond: bitrateInBitsPerSecond,
|
|
6822
|
-
bitrateState:
|
|
6823
|
-
bitrateMode:
|
|
6820
|
+
bitrateState: _BitrateStateMapping__WEBPACK_IMPORTED_MODULE_10__.default.convertBitrateStateToBitrateStateType(bitrateState),
|
|
6821
|
+
bitrateMode: _BitrateModeMapping__WEBPACK_IMPORTED_MODULE_9__.default.convertBitrateModeToBitrateModeType(bitrateMode)
|
|
6824
6822
|
};
|
|
6825
6823
|
formData.append('jsonBody', JSON.stringify(body));
|
|
6826
6824
|
start = Date.now();
|
|
@@ -7082,7 +7080,7 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7082
7080
|
key: "buildPingUrl",
|
|
7083
7081
|
value: function buildPingUrl() {
|
|
7084
7082
|
var uri = new URL(this._uri);
|
|
7085
|
-
var sdkVersion =
|
|
7083
|
+
var sdkVersion = _version_VersionManager__WEBPACK_IMPORTED_MODULE_7__.default.sdkVersion;
|
|
7086
7084
|
uri.search = "?".concat(new URLSearchParams([['type', 'http'], ['version', sdkVersion], ['_', "".concat(Date.now())]]).toString());
|
|
7087
7085
|
return uri.toString();
|
|
7088
7086
|
}
|
|
@@ -7247,17 +7245,17 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7247
7245
|
}
|
|
7248
7246
|
if (data.setRemoteDescriptionResponse && data.setRemoteDescriptionResponse.sessionDescription) {
|
|
7249
7247
|
subscribeResponse.setRemoteDescriptionResponse = {
|
|
7250
|
-
sessionDescription:
|
|
7248
|
+
sessionDescription: data.setRemoteDescriptionResponse.sessionDescription
|
|
7251
7249
|
};
|
|
7252
7250
|
}
|
|
7253
7251
|
if (data.createAnswerDescriptionResponse && data.createAnswerDescriptionResponse.sessionDescription) {
|
|
7254
7252
|
subscribeResponse.createAnswerDescriptionResponse = {
|
|
7255
|
-
sessionDescription:
|
|
7253
|
+
sessionDescription: data.createAnswerDescriptionResponse.sessionDescription
|
|
7256
7254
|
};
|
|
7257
7255
|
}
|
|
7258
7256
|
if (data.createOfferDescriptionResponse && data.createOfferDescriptionResponse.sessionDescription) {
|
|
7259
7257
|
subscribeResponse.createOfferDescriptionResponse = {
|
|
7260
|
-
sessionDescription:
|
|
7258
|
+
sessionDescription: data.createOfferDescriptionResponse.sessionDescription
|
|
7261
7259
|
};
|
|
7262
7260
|
}
|
|
7263
7261
|
}
|
|
@@ -7299,17 +7297,17 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7299
7297
|
}
|
|
7300
7298
|
if (data.setRemoteDescriptionResponse && data.setRemoteDescriptionResponse.sessionDescription) {
|
|
7301
7299
|
publishResponse.setRemoteDescriptionResponse = {
|
|
7302
|
-
sessionDescription:
|
|
7300
|
+
sessionDescription: data.setRemoteDescriptionResponse.sessionDescription
|
|
7303
7301
|
};
|
|
7304
7302
|
}
|
|
7305
7303
|
if (data.createAnswerDescriptionResponse && data.createAnswerDescriptionResponse.sessionDescription) {
|
|
7306
7304
|
publishResponse.createAnswerDescriptionResponse = {
|
|
7307
|
-
sessionDescription:
|
|
7305
|
+
sessionDescription: data.createAnswerDescriptionResponse.sessionDescription
|
|
7308
7306
|
};
|
|
7309
7307
|
}
|
|
7310
7308
|
if (data.createOfferDescriptionResponse && data.createOfferDescriptionResponse.sessionDescription) {
|
|
7311
7309
|
publishResponse.createOfferDescriptionResponse = {
|
|
7312
|
-
sessionDescription:
|
|
7310
|
+
sessionDescription: data.createOfferDescriptionResponse.sessionDescription
|
|
7313
7311
|
};
|
|
7314
7312
|
}
|
|
7315
7313
|
}
|
|
@@ -7328,21 +7326,11 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7328
7326
|
}, {
|
|
7329
7327
|
key: "convertIRtcConfigurationToRTCConfiguration",
|
|
7330
7328
|
value: function convertIRtcConfigurationToRTCConfiguration(configuration) {
|
|
7331
|
-
var rtcConfiguration = {
|
|
7329
|
+
var rtcConfiguration = {
|
|
7330
|
+
iceServers: []
|
|
7331
|
+
};
|
|
7332
7332
|
if (configuration.bundlePolicy) {
|
|
7333
|
-
|
|
7334
|
-
case 'BundlePolicyBalanced':
|
|
7335
|
-
rtcConfiguration.bundlePolicy = 'balanced';
|
|
7336
|
-
break;
|
|
7337
|
-
case 'BundlePolicyMaxCompat':
|
|
7338
|
-
rtcConfiguration.bundlePolicy = 'max-compat';
|
|
7339
|
-
break;
|
|
7340
|
-
case 'BundlePolicyMaxBundle':
|
|
7341
|
-
rtcConfiguration.bundlePolicy = 'max-bundle';
|
|
7342
|
-
break;
|
|
7343
|
-
default:
|
|
7344
|
-
(0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_7__.default)(configuration.bundlePolicy);
|
|
7345
|
-
}
|
|
7333
|
+
rtcConfiguration.bundlePolicy = configuration.bundlePolicy;
|
|
7346
7334
|
}
|
|
7347
7335
|
if (typeof configuration.iceCandidatePoolSize === 'number') {
|
|
7348
7336
|
rtcConfiguration.iceCandidatePoolSize = configuration.iceCandidatePoolSize;
|
|
@@ -7359,64 +7347,13 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7359
7347
|
rtcConfiguration.iceServers = iceServers;
|
|
7360
7348
|
}
|
|
7361
7349
|
if (configuration.iceTransportPolicy) {
|
|
7362
|
-
|
|
7363
|
-
case 'IceTransportPolicyAll':
|
|
7364
|
-
rtcConfiguration.iceTransportPolicy = 'all';
|
|
7365
|
-
break;
|
|
7366
|
-
case 'IceTransportPolicyRelay':
|
|
7367
|
-
rtcConfiguration.iceTransportPolicy = 'relay';
|
|
7368
|
-
break;
|
|
7369
|
-
case 'IceTransportPolicyPublic':
|
|
7370
|
-
// Deprecated - Not supported
|
|
7371
|
-
break;
|
|
7372
|
-
default:
|
|
7373
|
-
(0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_7__.default)(configuration.iceTransportPolicy);
|
|
7374
|
-
}
|
|
7375
|
-
}
|
|
7376
|
-
if (configuration.peerIdentity) {
|
|
7377
|
-
// Ignored as legacy peerIdentity property as it is deprecated
|
|
7378
|
-
// Requires a ts-ignore directive to prevent typescript errors
|
|
7379
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
7380
|
-
// @ts-ignore
|
|
7381
|
-
rtcConfiguration.peerIdentity = configuration.peerIdentity;
|
|
7350
|
+
rtcConfiguration.iceTransportPolicy = configuration.iceTransportPolicy;
|
|
7382
7351
|
}
|
|
7383
7352
|
if (configuration.rtcpMuxPolicy) {
|
|
7384
|
-
|
|
7385
|
-
case 'RtcpMuxPolicyNegotiate':
|
|
7386
|
-
// Ignored as legacy 'negotiate' value as it is deprecated
|
|
7387
|
-
// Requires a ts-ignore directive to prevent typescript errors
|
|
7388
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
7389
|
-
// @ts-ignore
|
|
7390
|
-
rtcConfiguration.rtcpMuxPolicy = 'negotiate';
|
|
7391
|
-
break;
|
|
7392
|
-
case 'RtcpMuxPolicyRequire':
|
|
7393
|
-
rtcConfiguration.rtcpMuxPolicy = 'require';
|
|
7394
|
-
break;
|
|
7395
|
-
default:
|
|
7396
|
-
(0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_7__.default)(configuration.rtcpMuxPolicy);
|
|
7397
|
-
}
|
|
7353
|
+
rtcConfiguration.rtcpMuxPolicy = configuration.rtcpMuxPolicy;
|
|
7398
7354
|
}
|
|
7399
7355
|
return rtcConfiguration;
|
|
7400
7356
|
}
|
|
7401
|
-
}, {
|
|
7402
|
-
key: "convertISessionDescriptionToRTCSessionDescription",
|
|
7403
|
-
value: function convertISessionDescriptionToRTCSessionDescription(sessionDescription) {
|
|
7404
|
-
var rtcSessionDescription = {
|
|
7405
|
-
type: undefined,
|
|
7406
|
-
sdp: sessionDescription.sdp
|
|
7407
|
-
};
|
|
7408
|
-
switch (sessionDescription.type) {
|
|
7409
|
-
case 'Offer':
|
|
7410
|
-
rtcSessionDescription.type = 'offer';
|
|
7411
|
-
break;
|
|
7412
|
-
case 'Answer':
|
|
7413
|
-
rtcSessionDescription.type = 'answer';
|
|
7414
|
-
break;
|
|
7415
|
-
default:
|
|
7416
|
-
(0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_7__.default)(sessionDescription.type);
|
|
7417
|
-
}
|
|
7418
|
-
return rtcSessionDescription;
|
|
7419
|
-
}
|
|
7420
7357
|
}, {
|
|
7421
7358
|
key: "convertHttpResponseToSetRemoteDescriptionResponse",
|
|
7422
7359
|
value: function () {
|
|
@@ -7433,14 +7370,14 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7433
7370
|
status: data.status
|
|
7434
7371
|
};
|
|
7435
7372
|
if (data && data.sessionDescription) {
|
|
7436
|
-
setRemoteDescriptionResponse.sessionDescription =
|
|
7373
|
+
setRemoteDescriptionResponse.sessionDescription = data.sessionDescription;
|
|
7437
7374
|
}
|
|
7438
7375
|
return _context11.abrupt("return", setRemoteDescriptionResponse);
|
|
7439
7376
|
case 6:
|
|
7440
7377
|
case "end":
|
|
7441
7378
|
return _context11.stop();
|
|
7442
7379
|
}
|
|
7443
|
-
}, _callee11
|
|
7380
|
+
}, _callee11);
|
|
7444
7381
|
}));
|
|
7445
7382
|
function convertHttpResponseToSetRemoteDescriptionResponse(_x26) {
|
|
7446
7383
|
return _convertHttpResponseToSetRemoteDescriptionResponse.apply(this, arguments);
|
|
@@ -7507,21 +7444,6 @@ var EndPoint = /*#__PURE__*/function () {
|
|
|
7507
7444
|
}
|
|
7508
7445
|
return convertHttpResponseToDestroyStreamResponse;
|
|
7509
7446
|
}()
|
|
7510
|
-
}, {
|
|
7511
|
-
key: "convertRTCSdpTypeToSdpType",
|
|
7512
|
-
value: function convertRTCSdpTypeToSdpType(type) {
|
|
7513
|
-
switch (type) {
|
|
7514
|
-
case 'answer':
|
|
7515
|
-
return 'Answer';
|
|
7516
|
-
case 'offer':
|
|
7517
|
-
return 'Offer';
|
|
7518
|
-
case 'pranswer':
|
|
7519
|
-
case 'rollback':
|
|
7520
|
-
throw new Error("SDP type [".concat(type, "] is not supported"));
|
|
7521
|
-
default:
|
|
7522
|
-
(0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_7__.default)(type);
|
|
7523
|
-
}
|
|
7524
|
-
}
|
|
7525
7447
|
}]);
|
|
7526
7448
|
return EndPoint;
|
|
7527
7449
|
}();
|
|
@@ -9045,7 +8967,7 @@ var VersionManager = /*#__PURE__*/function () {
|
|
|
9045
8967
|
key: "sdkVersion",
|
|
9046
8968
|
get: function get() {
|
|
9047
8969
|
try {
|
|
9048
|
-
return "2023-
|
|
8970
|
+
return "2023-05-04T15:42:03.367Z (2023.0.17-beta.53)";
|
|
9049
8971
|
} catch (e) {
|
|
9050
8972
|
return this._defaultVersion;
|
|
9051
8973
|
}
|
|
@@ -9974,4 +9896,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
|
|
|
9974
9896
|
/******/ })()
|
|
9975
9897
|
;
|
|
9976
9898
|
});
|
|
9977
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9jb250ZXh0L1Rva2VuQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZWRnZUF1dGgvRWRnZUF1dGgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0xpdmVTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIm1lZGlhU3RyZWFtIiwiU3ViamVjdCIsInBlZXJDb25uZWN0aW9uIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIlN0YXRlQ29udGV4dCIsImlzU3RhcnRpbmciLCJpc0Rpc3Bvc2VkIiwiVG9rZW5Db250ZXh0IiwidG9rZW4iLCJ0b2tlbkV4cGlyaW5nIiwiZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIkRpc3Bvc2FibGVMaXN0IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiTmV0d29ya01vbml0b3IiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJnZXRSb3VuZFRyaXBUaW1lIiwicnR0IiwibGlzdGVuZXIiLCJQcml2YWN5TW9kZSIsIl9pc1ByaXZhdGUiLCJhcHBseUlzUHJpdmF0ZSIsIl9fUFJJVkFDWV9NT0RFX18iLCJlIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJsZW5ndGgiLCJ0b1N0cmluZyIsIlN0cmluZ3MiLCJFcnJvciIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiZXJyb3IiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJXYXJuIiwiX2xlbjQiLCJfa2V5NCIsIl9sZW41IiwiX2tleTUiLCJmYXRhbCIsIkZhdGFsIiwiX2xlbjYiLCJfa2V5NiIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiSlNPTiIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsIlVSTCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX3NlbmRNZXRyaWNzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJzZW5kTWV0cmljcyIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwic2V0VGltZW91dCIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsIkZlYXR1cmVFbmFibGVtZW50IiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FsbGVlMyIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwiX3JlZiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJ2aWRlb1RyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsIm9wdGlvbnMiLCJhZGRUcmFuc2NlaXZlciIsInQwIiwidDEiLCJ0MiIsImNyZWF0ZU9mZmVyIiwidDMiLCJsb2NhbE9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJ0NCIsInQ1IiwiUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIiLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJjb25maWd1cmF0aW9uIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsImZsb29yIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJyb3VuZCIsIl91cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsInN0YXJ0c1dpdGgiLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwiX2luaGVyaXRzIiwiX3N1cGVyIiwiX2NyZWF0ZVN1cGVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfd2ViUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX21ldHJpY3NTZXJ2aWNlIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsIl90ZWxlbWV0cnlMZXZlbCIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJpZ25vcmVkVGVuYW5jeSIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJEaXNjb3ZlcnlVcmkiLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwicGFyc2VkVG9rZW4iLCJFZGdlQXV0aCIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJfcGFyc2VkVG9rZW4kdG9rZW4kY2EiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJjYXBhYmlsaXRpZXMiLCJfdG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJfcGFyc2VkVG9rZW4kdG9rZW4kY2EyIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiZ2V0VXJpIiwiX3N0YXJ0IiwicHJvY2Vzc1N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9jYWxsZWU1IiwiX3RoaXM1IiwibGlzdGVuT25TdHJlYW1TZXR1cCIsInVyaSIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJTdHJlYW1GYWN0b3J5IiwiZmluYWxseSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfcmVzdGFydEFmdGVyU3RvcCIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiX3BsYXkiLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInBsYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYXBwbGljYXRpb25JZCIsImJ1aWxkVXJsIiwiZWRnZUF1dGhUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUiLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3g4IiwiX3g5IiwiX2xpbWl0Qml0cmF0ZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfYXJnczYiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlcyIsIl94MTUiLCJfeDE2IiwiX3gxNyIsIl9kZXN0cm95U3RyZWFtIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl94MTgiLCJfeDE5IiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJfbmF2aWdhdG9yIiwic2VuZEJlYWNvbiIsIl94MjAiLCJfeDIxIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInBlZXJJZGVudGl0eSIsInJ0Y3BNdXhQb2xpY3kiLCJydGNTZXNzaW9uRGVzY3JpcHRpb24iLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiZWRnZUF1dGhUb2tlblByZWZpeCIsInBhcnNlVG9rZW4iLCJpc1ZhbGlkVG9rZW4iLCJlbmNvZGVkRWRnZUF1dGhUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJwYXJzZSIsImdldFRlbmFuY3kiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIkNodW5rZWRTdHJlYW0iLCJjaGFubmVsQ29udGV4dCIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwiTGl2ZVN0cmVhbWluZyIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIl9zdHJlYW1TdGF0aXN0aWNzIiwiY3VycmVudFRpbWUiLCJkYXRhQnVmZmVyZWQiLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsInBhdXNlZCIsIkhsc1BsYXllciIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsIl9vcHRpb25zIiwiX3BsYXllciIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImxpdmVCYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJzcmMiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrU3RhdGVzIiwiTmV0d29ya05vU291cmNlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJ0cnVlQ3VycmVudFRpbWUiLCJtYXgiLCJkZXN0cm95IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm0iLCJnZXRWaWRlb1RyYWNrcyIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsInRyYW5zZm9ybWVkU3RyZWFtIiwiTWVkaWFTdHJlYW0iLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsIl9vYmplY3RTcHJlYWQiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMiQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmMyIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjQiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY1IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJpc1J0bXAiLCJpc1N0cmVhbWluZyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJfc2VuZExvZ3MiLCJsb2dNZXNzYWdlcyIsInNlbmRMb2dzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJwb3ciLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNML0Y7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0g3Rix1QkFBdUIsbUJBQU8sQ0FBQyx3RkFBdUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0poRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7OztBQ05wRztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRjtBQUNsRjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHVCQUF1QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCw2Q0FBNkMsT0FBTztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FB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TUFDakIsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDd04sZ0JBQWdCLEdBQUdELGFBQWE7SUFDdkM7RUFBQztFQUFBLE9BQUF6ZCxjQUFBO0FBQUE7Ozs7Ozs7VUMxTUg7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDckJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxnQ0FBZ0MsWUFBWTtXQUM1QztXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLHNGOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRCxrQkFBa0I7V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7O1VDTkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IG51bGwgPT0gYXJyID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSBfaSkge1xuICAgIHZhciBfcyxcbiAgICAgIF9lLFxuICAgICAgX3gsXG4gICAgICBfcixcbiAgICAgIF9hcnIgPSBbXSxcbiAgICAgIF9uID0gITAsXG4gICAgICBfZCA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX3ggPSAoX2kgPSBfaS5jYWxsKGFycikpLm5leHQsIDAgPT09IGkpIHtcbiAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgIF9uID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoX24gPSAoX3MgPSBfeC5jYWxsKF9pKSkuZG9uZSkgJiYgKF9hcnIucHVzaChfcy52YWx1ZSksIF9hcnIubGVuZ3RoICE9PSBpKTsgX24gPSAhMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9ICEwLCBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBudWxsICE9IF9pW1wicmV0dXJuXCJdICYmIChfciA9IF9pW1wicmV0dXJuXCJdKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIik7XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgZXhwb3J0cyA9IHt9LFxuICAgIE9wID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAob2JqLCBrZXksIGRlc2MpIHtcbiAgICAgIG9ialtrZXldID0gZGVzYy52YWx1ZTtcbiAgICB9LFxuICAgICRTeW1ib2wgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCA/IFN5bWJvbCA6IHt9LFxuICAgIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIG9ialtrZXldO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3IsXG4gICAgICBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSksXG4gICAgICBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShnZW5lcmF0b3IsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KVxuICAgIH0pLCBnZW5lcmF0b3I7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogZXJyXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiYgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkgJiYgKEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUpO1xuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSByZWNvcmQudHlwZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZyxcbiAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZih2YWx1ZSkgJiYgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSA/IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KSA6IFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZCwgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgIH1cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuICAgIGRlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobWV0aG9kLCBhcmcpIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9IHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoXCJleGVjdXRpbmdcIiA9PT0gc3RhdGUpIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAoXCJjb21wbGV0ZWRcIiA9PT0gc3RhdGUpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gbWV0aG9kKSB0aHJvdyBhcmc7XG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnRleHQubWV0aG9kID0gbWV0aG9kLCBjb250ZXh0LmFyZyA9IGFyZzs7KSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBjb250ZXh0Lm1ldGhvZCkgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHtcbiAgICAgICAgICBpZiAoXCJzdXNwZW5kZWRTdGFydFwiID09PSBzdGF0ZSkgdGhyb3cgc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0LmFyZztcbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IGNvbnRleHQubWV0aG9kICYmIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgc3RhdGUgPSBcImV4ZWN1dGluZ1wiO1xuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgIGlmIChzdGF0ZSA9IGNvbnRleHQuZG9uZSA/IFwiY29tcGxldGVkXCIgOiBcInN1c3BlbmRlZFlpZWxkXCIsIHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSAmJiAoc3RhdGUgPSBcImNvbXBsZXRlZFwiLCBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kTmFtZSA9IGNvbnRleHQubWV0aG9kLFxuICAgICAgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kTmFtZV07XG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gbWV0aG9kKSByZXR1cm4gY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbWV0aG9kTmFtZSAmJiBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCksIFwidGhyb3dcIiA9PT0gY29udGV4dC5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG1ldGhvZE5hbWUgJiYgKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG1ldGhvZE5hbWUgKyBcIicgbWV0aG9kXCIpKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSByZXR1cm4gY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZywgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuICAgIHJldHVybiBpbmZvID8gaW5mby5kb25lID8gKGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlLCBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSBjb250ZXh0Lm1ldGhvZCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCkgOiBpbmZvIDogKGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0ge1xuICAgICAgdHJ5TG9jOiBsb2NzWzBdXG4gICAgfTtcbiAgICAxIGluIGxvY3MgJiYgKGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXSksIDIgaW4gbG9jcyAmJiAoZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl0sIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgcmVjb3JkLmFyZywgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaXRlcmFibGUubmV4dCkgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsXG4gICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytpIDwgaXRlcmFibGUubGVuZ3RoOykgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkgcmV0dXJuIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHVuZGVmaW5lZCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgZG9uZTogITBcbiAgICB9O1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lUHJvcGVydHkoR3AsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBkZWZpbmVQcm9wZXJ0eShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBnZW5GdW4gJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWN0b3IgJiYgKGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSk7XG4gIH0sIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCksIGdlbkZ1bjtcbiAgfSwgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogYXJnXG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBhc3luY0l0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24gKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIHZvaWQgMCA9PT0gUHJvbWlzZUltcGwgJiYgKFByb21pc2VJbXBsID0gUHJvbWlzZSk7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSwgUHJvbWlzZUltcGwpO1xuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKSwgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShHcCwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBleHBvcnRzLmtleXMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdmFyIG9iamVjdCA9IE9iamVjdCh2YWwpLFxuICAgICAga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGtleXMucHVzaChrZXkpO1xuICAgIHJldHVybiBrZXlzLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyBrZXlzLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSByZXR1cm4gbmV4dC52YWx1ZSA9IGtleSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHVuZGVmaW5lZCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFza2lwVGVtcFJlc2V0KSBmb3IgKHZhciBuYW1lIGluIHRoaXMpIFwidFwiID09PSBuYW1lLmNoYXJBdCgwKSAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpICYmICh0aGlzW25hbWVdID0gdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciByb290UmVjb3JkID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSByb290UmVjb3JkLnR5cGUpIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSBcInRocm93XCIsIHJlY29yZC5hcmcgPSBleGNlcHRpb24sIGNvbnRleHQubmV4dCA9IGxvYywgY2F1Z2h0ICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksICEhY2F1Z2h0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV0sXG4gICAgICAgICAgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBlbnRyeS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNGaW5hbGx5KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5hbGx5RW50cnkgJiYgKFwiYnJlYWtcIiA9PT0gdHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHR5cGUpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYyAmJiAoZmluYWxseUVudHJ5ID0gbnVsbCk7XG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJldHVybiByZWNvcmQudHlwZSA9IHR5cGUsIHJlY29yZC5hcmcgPSBhcmcsIGZpbmFsbHlFbnRyeSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYywgQ29udGludWVTZW50aW5lbCkgOiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcbiAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHRocm93IHJlY29yZC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSByZWNvcmQudHlwZSB8fCBcImNvbnRpbnVlXCIgPT09IHJlY29yZC50eXBlID8gdGhpcy5uZXh0ID0gcmVjb3JkLmFyZyA6IFwicmV0dXJuXCIgPT09IHJlY29yZC50eXBlID8gKHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHJlY29yZC50eXBlICYmIGFmdGVyTG9jICYmICh0aGlzLm5leHQgPSBhZnRlckxvYyksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcbiAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHJldHVybiB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShlbnRyeSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdW5kZWZpbmVkKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH0sIGV4cG9ydHM7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXlMaW1pdCA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCIpO1xuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkge1xuICBpZiAoX3R5cGVvZihpbnB1dCkgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDtcbiAgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKF90eXBlb2YocmVzKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvbkNvbnRleHQge1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZUNvbnRleHQge1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4uL3Nkay9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IHN0cmluZykge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUFJJVkFDWV9NT0RFX186IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaXZhY3lNb2RlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2lzUHJpdmF0ZTogYm9vbGVhbjtcblxuICBzdGF0aWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNQcml2YXRlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SXNQcml2YXRlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBfX1BSSVZBQ1lfTU9ERV9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5Qcml2YWN5TW9kZS5hcHBseUlzUHJpdmF0ZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsIDogVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgIHRoaXMuZG9SZXNvbHZlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRvUmVzb2x2ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlamVjdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVzb2x2ZShuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb21pc2VzLWFwbHVzL1Byb21pc2VzLXNwZWMjdGhlLVByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIFByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXQgc2VsZi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlICYmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UuX3N0YXRlID0gMztcbiAgICAgICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIHByb21pc2UuZmluYWxlKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwcm9taXNlLmRvUmVzb2x2ZShmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgIHRoZW4uYXBwbHkobmV3VmFsdWUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSAxO1xuICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHByb21pc2UuZmluYWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZWplY3QobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlclwiJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbikge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb25GYWN0b3J5ID0gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZTtcblxuICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24oKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vc2RrL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF90cmFja3NUb01vbml0b3I6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICB0aGlzLl90cmFja3NUb01vbml0b3IgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5tYXAodHJhY2sgPT4gdHJhY2sua2luZCkgfHwgW107XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoJ209Jyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7c2RwU3BsaXRCeUxpbmVzLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbkZhY3Rvcnkge1xuICBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuY2xhc3MgRGlzcG9zYWJsZUxpc3RlbmVyPFQ+IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0cnVjdG9yKGxpc3RlbmVyczogQXJyYXk8VD4sIGxpc3RlbmVyOiBUKSB7XG4gICAgc3VwZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IEFycmF5PChUKSA9PiB2b2lkPjtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6IChUKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIGxpc3RlbmVyKHRoaXMuX3ZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZUxpc3RlbmVyPChUKSA9PiB2b2lkPih0aGlzLl9saXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoIVByaXZhY3lNb2RlLmlzUHJpdmF0ZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oU0RLLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6IChXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAoU2hha2FUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGhsc0pzTG9hZGVyKCk6IChIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyKSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IFVSTCB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlciAmJiB0ZW5hbmN5KSB7XG4gICAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUodGVsZW1ldHJ5QXBwZW5kZXIpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnVGVsZW1ldHJ5IHRlbmFuY3kgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShEaXNjb3ZlcnlVcmkudXJpLnZhbHVlKTtcbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uID0gU0RLLl9tZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LW1ldHJpY3MtbGV2ZWwnKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwoVGVsZW1ldHJ5TGV2ZWxbdmFsdWVdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwgPSBTREsuX3RlbGVtZXRyeUxldmVsLnN1YnNjcmliZSh0ZWxlbWV0cnlMZXZlbCA9PiB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbihjaGFubmVsVG9rZW4pO1xuXG4gICAgICBTREsuX3RlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKTtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmlWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC11cmknKTtcblxuICAgIGlmICh1cmlWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaVZhbHVlO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VVUklWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1iYXNlLXVyaScpO1xuXG4gICAgaWYgKGJhc2VVUklWYWx1ZSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGAke2Jhc2VVUklWYWx1ZX0vcGNhc3QvZW5kUG9pbnRzYDtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgU0RLLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuXG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7Q2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICcuLi8uLi9jb250ZXh0L1N0YXRlQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogISFwYXJzZWRUb2tlbj8udG9rZW4uY2FwYWJpbGl0aWVzPy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJylcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pIHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSAhIXBhcnNlZFRva2VuPy50b2tlbi5jYXBhYmlsaXRpZXM/LmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbik6IFVSTCB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoLmlzVmFsaWRUb2tlbih0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sudmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IG1pc3NpbmcgY2FsbGJhY2sgZnVuY3Rpb24gQ3JlYXRlQ2hhbm5lbE9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaycpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIFN0cmVhbSBUcmFjayBBUEknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQsIGJ1dCBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIHZpYSBpbnNlcnRhYmxlLXN0cmVhbXMgY2FwYWJpbGl0eScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJldHJ5SW50ZXJ2YWwoKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsIHJlYXNvbilcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRGVzdHJveWVkIHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50ICYmIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55PjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogU3ViamVjdDxUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pj47XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFubmVsQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnBsYXlpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRhcmdldExhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPihvcHRpb25zPy50YXJnZXRMYWcgPz8gZGVmYXVsdFRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBuZXcgU3ViamVjdDxUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pj4ob3B0aW9ucz8udmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG4gICAgdGhpcy5oYXNJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCEhb3B0aW9ucz8uaGFzSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBFcnJvclxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBDaGFubmVsLCB7Q2hhbm5lbE9wdGlvbnN9IGZyb20gJy4vQ2hhbm5lbCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFja1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgdXJsLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnlVcmkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lSdGNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9hcGkvUnRjQ29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lTZXNzaW9uRGVzY3JpcHRpb24sIFNkcFR5cGV9IGZyb20gJy4uL2FwaS9TZXNzaW9uRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA2O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogc3RyaW5nLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuXG4gICAgaWYgKCFwYXJzZWRUb2tlbiB8fCAhcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW5hbmN5ID0gcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUobG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSksXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGVkZ2VBdXRoVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcblxuICAgIGlmICghcGFyc2VkVG9rZW4gfHwgIXBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdGVuYW5jeSA9IHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUobG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSksXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFB1Ymxpc2hTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3QgcHVibGlzaCByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hSZXNwb25zZTtcbiAgICBjb25zdCBwdWJsaXNoUmVzcG9uc2U6IElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcHVibGlzaFJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IElSdGNDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHt9O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeUJhbGFuY2VkJzpcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdiYWxhbmNlZCc7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5TWF4Q29tcGF0JzpcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdtYXgtY29tcGF0JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lNYXhCdW5kbGUnOlxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gJ21heC1idW5kbGUnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5QWxsJzpcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9ICdhbGwnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeVJlbGF5JzpcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9ICdyZWxheSc7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5UHVibGljJzpcbiAgICAgICAgICAvLyBEZXByZWNhdGVkIC0gTm90IHN1cHBvcnRlZFxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHBlZXJJZGVudGl0eSBwcm9wZXJ0eSBhcyBpdCBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkgPSBjb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5TmVnb3RpYXRlJzpcbiAgICAgICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSAnbmVnb3RpYXRlJyB2YWx1ZSBhcyBpdCBpcyBkZXByZWNhdGVkXG4gICAgICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9ICduZWdvdGlhdGUnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1J0Y3BNdXhQb2xpY3lSZXF1aXJlJzpcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSAncmVxdWlyZSc7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbjogSVNlc3Npb25EZXNjcmlwdGlvbik6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQge1xuICAgIGNvbnN0IHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCA9IHtcbiAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdPZmZlcic6XG4gICAgICAgIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ29mZmVyJztcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fuc3dlcic6XG4gICAgICAgIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ2Fuc3dlcic7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZSh0eXBlOiBSVENTZHBUeXBlKTogU2RwVHlwZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhbnN3ZXInOlxuICAgICAgICByZXR1cm4gJ0Fuc3dlcic7XG4gICAgICBjYXNlICdvZmZlcic6XG4gICAgICAgIHJldHVybiAnT2ZmZXInO1xuICAgICAgY2FzZSAncHJhbnN3ZXInOlxuICAgICAgY2FzZSAncm9sbGJhY2snOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNEUCB0eXBlIFske3R5cGV9XSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0eXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUVkZ2VBdXRofSBmcm9tICcuL0VkZ2VBdXRoVG9rZW4nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuL0VkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aCcpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBJRWRnZUF1dGgge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5jb2RlZEVkZ2VBdXRoVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZUF1dGhUb2tlbiA9IEpTT04ucGFyc2UoZW5jb2RlZEVkZ2VBdXRoVG9rZW4pO1xuXG4gICAgICBlZGdlQXV0aFRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlQXV0aFRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIGVkZ2VBdXRoVG9rZW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGguX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFVyaShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogVVJMIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4udXJpID9cbiAgICAgIG5ldyBVUkwocGFyc2VkVG9rZW4udG9rZW4udXJpKSA6IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVuYW5jeShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCA/XG4gICAgICBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkIDogJyc7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZFRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NoYW5uZWxTdGF0ZX0gZnJvbSAnLi4vY2hhbm5lbHMnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaHVua2VkU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaHVua2VkU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9uaXRvckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3N0cmVhbVN0YXRpc3RpY3M6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBwcml2YXRlIF9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpOiBVUkwsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBJRGlzcG9zYWJsZT4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAudGhlbihlbmRQb2ludCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBudWxsLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZlclNkcCA9IGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIG9yaWdpblN0YXJ0VGltZTogRGF0ZS5ub3coKSAtIGxhZyArIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyAyLFxuICAgICAgICAgIGxhZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLnN0YXJ0KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSwgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIG9mZmVyU2RwLCBvcHRpb25zKVxuICAgICAgICAgIC50aGVuKHBsYXllciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignTGl2ZVN0cmVhbWluZyBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9uaXRvcihwbGF5ZXI6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gTGl2ZVN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fc3RyZWFtU3RhdGlzdGljcyAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPiA2KSB7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7SUhsc1BsYXllclR5cGV9IGZyb20gJy4vSUhsc1BsYXllcic7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhsc1BsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJSGxzUGxheWVyVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLmhsc1BsYXllcikge1xuICAgICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKHtcbiAgICAgICAgICBlbmFibGVXb3JrZXI6IHRydWUsXG4gICAgICAgICAgbWF4QnVmZmVyTGVuZ3RoOiAxLFxuICAgICAgICAgIGxpdmVCYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLmhsc1BsYXllciAmJiBMaXZlU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RhdGljIHNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSh0cmFuc2Zvcm06IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+LCBzdHJlYW06IE1lZGlhU3RyZWFtKSB7XG4gICAgY29uc3QgdHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcblxuICAgIGlmICh0cmFjay5raW5kID09PSAndmlkZW8nKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybX0pO1xuICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrfSk7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogJ3ZpZGVvJ30pO1xuICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgc291cmNlXG4gICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcblxuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc2VydGFibGVTdHJlYW1zIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgTGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi8uLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSwgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGlzUnRtcCA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKTtcblxuICAgIGlmIChpc1J0bXApIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignU0RLIGRvZXMgbm90IHN1cHBvcnQgUlRNUCBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnc3RyZWFtaW5nJyk7XG5cbiAgICBpZiAoaXNTdHJlYW1pbmcpIHtcbiAgICAgIHJldHVybiBuZXcgQ2h1bmtlZFN0cmVhbShjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
9899
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9jb250ZXh0L1Rva2VuQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZWRnZUF1dGgvRWRnZUF1dGgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0xpdmVTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIm1lZGlhU3RyZWFtIiwiU3ViamVjdCIsInBlZXJDb25uZWN0aW9uIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIlN0YXRlQ29udGV4dCIsImlzU3RhcnRpbmciLCJpc0Rpc3Bvc2VkIiwiVG9rZW5Db250ZXh0IiwidG9rZW4iLCJ0b2tlbkV4cGlyaW5nIiwiZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIkRpc3Bvc2FibGVMaXN0IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiTmV0d29ya01vbml0b3IiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJnZXRSb3VuZFRyaXBUaW1lIiwicnR0IiwibGlzdGVuZXIiLCJQcml2YWN5TW9kZSIsIl9pc1ByaXZhdGUiLCJhcHBseUlzUHJpdmF0ZSIsIl9fUFJJVkFDWV9NT0RFX18iLCJlIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJsZW5ndGgiLCJ0b1N0cmluZyIsIlN0cmluZ3MiLCJFcnJvciIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiZXJyb3IiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJXYXJuIiwiX2xlbjQiLCJfa2V5NCIsIl9sZW41IiwiX2tleTUiLCJmYXRhbCIsIkZhdGFsIiwiX2xlbjYiLCJfa2V5NiIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiSlNPTiIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsIlVSTCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX3NlbmRNZXRyaWNzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJzZW5kTWV0cmljcyIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwic2V0VGltZW91dCIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsIkZlYXR1cmVFbmFibGVtZW50IiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FsbGVlMyIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwiX3JlZiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJ2aWRlb1RyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsIm9wdGlvbnMiLCJhZGRUcmFuc2NlaXZlciIsInQwIiwidDEiLCJ0MiIsImNyZWF0ZU9mZmVyIiwidDMiLCJsb2NhbE9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJ0NCIsInQ1IiwiUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIiLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJjb25maWd1cmF0aW9uIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsImZsb29yIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJyb3VuZCIsIl91cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsInN0YXJ0c1dpdGgiLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwiX2luaGVyaXRzIiwiX3N1cGVyIiwiX2NyZWF0ZVN1cGVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfd2ViUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX21ldHJpY3NTZXJ2aWNlIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsIl90ZWxlbWV0cnlMZXZlbCIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJpZ25vcmVkVGVuYW5jeSIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJEaXNjb3ZlcnlVcmkiLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwicGFyc2VkVG9rZW4iLCJFZGdlQXV0aCIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJfcGFyc2VkVG9rZW4kdG9rZW4kY2EiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJjYXBhYmlsaXRpZXMiLCJfdG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJfcGFyc2VkVG9rZW4kdG9rZW4kY2EyIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiZ2V0VXJpIiwiX3N0YXJ0IiwicHJvY2Vzc1N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9jYWxsZWU1IiwiX3RoaXM1IiwibGlzdGVuT25TdHJlYW1TZXR1cCIsInVyaSIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJTdHJlYW1GYWN0b3J5IiwiZmluYWxseSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfcmVzdGFydEFmdGVyU3RvcCIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiX3BsYXkiLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInBsYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50IiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYXBwbGljYXRpb25JZCIsImJ1aWxkVXJsIiwiZWRnZUF1dGhUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50IiwiX25hdmlnYXRvciIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiZWRnZUF1dGhUb2tlblByZWZpeCIsInBhcnNlVG9rZW4iLCJpc1ZhbGlkVG9rZW4iLCJlbmNvZGVkRWRnZUF1dGhUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJwYXJzZSIsImdldFRlbmFuY3kiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIkNodW5rZWRTdHJlYW0iLCJjaGFubmVsQ29udGV4dCIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwiTGl2ZVN0cmVhbWluZyIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIl9zdHJlYW1TdGF0aXN0aWNzIiwiY3VycmVudFRpbWUiLCJkYXRhQnVmZmVyZWQiLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsInBhdXNlZCIsIkhsc1BsYXllciIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsIl9vcHRpb25zIiwiX3BsYXllciIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImxpdmVCYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJzcmMiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrU3RhdGVzIiwiTmV0d29ya05vU291cmNlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJ0cnVlQ3VycmVudFRpbWUiLCJtYXgiLCJkZXN0cm95IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm0iLCJnZXRWaWRlb1RyYWNrcyIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsInRyYW5zZm9ybWVkU3RyZWFtIiwiTWVkaWFTdHJlYW0iLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsImxvYWRlZCIsIl9wZW5kaW5nIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsIl9vYmplY3RTcHJlYWQiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMiQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmMyIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjQiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY1IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJpc1J0bXAiLCJpc1N0cmVhbWluZyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJfc2VuZExvZ3MiLCJsb2dNZXNzYWdlcyIsInNlbmRMb2dzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldExvZ1NpemUiLCJzdW0iLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJwb3ciLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiX25ldHdvcmtNb25pdG9yIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7QUNWQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNML0Y7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0g3Rix1QkFBdUIsbUJBQU8sQ0FBQyx3RkFBdUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0poRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7OztBQ05wRztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILElBQUksT0FBTztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNM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Q0EsZ0NBQWdDLFlBQVk7V0FDNUM7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esd0NBQXdDLHlDQUF5QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSxzRjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7OztVQ05BO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBudWxsID09IGFyciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gX2kpIHtcbiAgICB2YXIgX3MsXG4gICAgICBfZSxcbiAgICAgIF94LFxuICAgICAgX3IsXG4gICAgICBfYXJyID0gW10sXG4gICAgICBfbiA9ICEwLFxuICAgICAgX2QgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKF94ID0gKF9pID0gX2kuY2FsbChhcnIpKS5uZXh0LCAwID09PSBpKSB7XG4gICAgICAgIGlmIChPYmplY3QoX2kpICE9PSBfaSkgcmV0dXJuO1xuICAgICAgICBfbiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKF9uID0gKF9zID0gX3guY2FsbChfaSkpLmRvbmUpICYmIChfYXJyLnB1c2goX3MudmFsdWUpLCBfYXJyLmxlbmd0aCAhPT0gaSk7IF9uID0gITApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaVtcInJldHVyblwiXSAmJiAoX3IgPSBfaVtcInJldHVyblwiXSgpLCBPYmplY3QoX3IpICE9PSBfcikpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYXJyO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG9iaik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9zZGsvZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBhIGRlZmluaXRpb24gZm9yICdtc0hpZGRlbicgb3IgJ3dlYmtpdEhpZGRlbicgdHlwZXNcbiAgICAvLyBSZXF1aXJlZCB0byBAdHMtaWdub3JlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cblxuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSAhZG9jdW1lbnRbaGlkZGVuXTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50W2hpZGRlbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcblxuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdGVuRm9yRG9jdW1lbnRGb2N1cy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTY5ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzAgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcyID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzQgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc2ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzcgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpO1xuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTY5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSkgfHxcbiAgICAgIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKSB8fFxuICAgICAgdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICdPbic7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVGcm9tVXJpID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApO1xuXG4gICAgaWYgKHZhbHVlRnJvbVVyaSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JyR7bmFtZX0nXWApO1xuXG4gICAgaWYgKCFtZXRhVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG1ldGFWYWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWVVUklQYXJhbWV0ZXJOYW1lID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKS5nZXQodmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmV0d29ya01vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1N1cHBvcnRlZCA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnR0OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICB9XG5cbiAgZ2V0IGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBydHQoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcnR0O1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVR5cGUoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWZmZWN0aXZlVHlwZTtcbiAgfVxuXG4gIGdldCBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGluayB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5kb3dubGlua01heDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlVHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuICdVbmtub3duJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZWZmZWN0aXZlVHlwZSB8fCBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS50eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJ0dDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gICAgfTtcblxuICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BSSVZBQ1lfTU9ERV9fOiBib29sZWFuO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcml2YWN5TW9kZSB7XG4gIHByaXZhdGUgc3RhdGljIF9pc1ByaXZhdGU6IGJvb2xlYW47XG5cbiAgc3RhdGljIGdldCBpc1ByaXZhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUHJpdmF0ZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUlzUHJpdmF0ZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5faXNQcml2YXRlID0gX19QUklWQUNZX01PREVfXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuUHJpdmFjeU1vZGUuYXBwbHlJc1ByaXZhdGUoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5ncyB7XG4gIHN0YXRpYyByYW5kb20obGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbTEzQ2hhcmFjdGVycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyLCAxNSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb3BzOiBudW1iZXIgPSBNYXRoLmNlaWwobGVuZ3RoIC8gMTMpO1xuXG4gICAgcmV0dXJuIG5ldyBBcnJheShsb29wcykuZmlsbChyYW5kb20xM0NoYXJhY3RlcnMpLnJlZHVjZSgoc3RyaW5nLCBmdW5jKSA9PiB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgZnVuYygpO1xuICAgIH0sICcnKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmdzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKHg6IG5ldmVyKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgWyR7eH1dLiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkYCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2VydFVucmVhY2hhYmxlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwZW5kZXJzIHtcbiAgcHJpdmF0ZSBfYXBwZW5kZXJzOiBBcnJheTxJQXBwZW5kZXI+ID0gW107XG5cbiAgZ2V0IHZhbHVlKCk6IEFycmF5PElBcHBlbmRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBhZGQoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5wdXNoKGFwcGVuZGVyKTtcbiAgfVxuXG4gIHJlbW92ZShhcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IHRoaXMuX2FwcGVuZGVycy5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIShpdGVtID09PSBhcHBlbmRlcikpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdIGFzIEFycmF5PElBcHBlbmRlcj4pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uc29sZUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpfSBbJHtjYXRlZ29yeX1dIFske0xvZ2dpbmdMZXZlbFtsb2dMZXZlbF19XSAke21lc3NhZ2V9YDtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsTWVzc2FnZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGZ1bGxNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBMb2dnaW5nTGV2ZWwuT2ZmIDogTG9nZ2luZ0xldmVsLkFsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4vVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRlbGVtZXRyeUxldmVsIHtcbiAgT2ZmID0gMTAwLFxuICBFc3NlbnRpYWwgPSAxMCxcbiAgQWxsID0gLTFcbn1cblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5TGV2ZWxUeXBlID0gJ09mZicgfCAnRXNzZW50aWFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9tZXRyaWNzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCA9IFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldHJpY3NVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICBtZXRyaWNzVXJsLnBhdGhuYW1lID0gbWV0cmljc1VybC5wYXRobmFtZSArICcvbWV0cmljcyc7XG5cbiAgICB0aGlzLl91cmwgPSBtZXRyaWNzVXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4uL3Nkay9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uL3Nkay9FbnZpcm9ubWVudCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4vVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlczoge1tjYXRlZ29yeTogc3RyaW5nXTogTWV0cmljc1NlcnZpY2V9ID0ge307XG5cbiAgc3RhdGljIGdldE1ldHJpY3NTZXJ2aWNlKHVybDogc3RyaW5nKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1cicpO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMpIHtcbiAgICAgIHJldHVybiBtZXRyaWNzU2VydmljZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh1cmwpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKFNESy50ZWxlbWV0cnlMZXZlbCk7XG5cbiAgICByZXR1cm4gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdID0gbmV3IE1ldHJpY3NTZXJ2aWNlKG1ldHJpY3NDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBPYmplY3QudmFsdWVzKE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXMpO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcyAmJiBtZXRyaWNzU2VydmljZXMubGVuZ3RoKSB7XG4gICAgICBtZXRyaWNzU2VydmljZXMuZm9yRWFjaChtZXRyaWNzU2VydmljZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gdGVsZW1ldHJ5TGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBtZXRyaWNzTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG1ldHJpY3NNZXNzYWdlcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UoMCwgcmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzID0gdGhpcy5fbWV0cmljcy5zbGljZShyZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIE1ldHJpY3NUeXBlIHtcbiAgVGltZVRvRmlyc3RGcmFtZSxcbiAgQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgU3RhbGxlZCxcbiAgQnVmZmVyaW5nLFxuICBTZXR1cENvbXBsZXRlZCxcbiAgU2V0dXBGYWlsZWQsXG4gIFJvdW5kVHJpcFRpbWUsXG4gIERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICBOZXR3b3JrVHlwZSxcbiAgUmVzb2x1dGlvbkNoYW5nZWQsXG4gIEFwcGxpY2F0aW9uRm9yZWdyb3VuZCxcbiAgQXBwbGljYXRpb25CYWNrZ3JvdW5kXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1ldHJpY3NUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbCkge1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsOlxuICAgICAgICByZXR1cm4gJ0Vzc2VudGlhbCc7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbFR5cGU6IFRlbGVtZXRyeUxldmVsVHlwZSk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLk9mZjtcbiAgICAgIGNhc2UgJ0Vzc2VudGlhbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGVsZW1ldHJ5TGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeURlZmF1bHQge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbCA6IFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vc2RrL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXJcIicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSA9IFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWU7XG5cbiAgICByZXR1cm4gcGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKClcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KCdtPScpO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGR1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgbGVnYWN5ICdnZXRTdGF0cycgbWV0aG9kIHR5cGUgZGVmaW5pdGlvblxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlICdnZXRTdGF0cycgbWV0aG9kIGZvclxuICAgICAgLy8gQ2hyb21lQDw9IDY2IGRldGFpbGVkIGhlcmU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYyNzgxNlxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhY2sodHJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCFQcml2YWN5TW9kZS5pc1ByaXZhdGUpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbik7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcblxuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VUb2tlbic7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uLy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCwge0NoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uLy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlWaWRlb0VsZW1lbnQ6IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbjogUmVhZE9ubHlTdWJqZWN0PEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogc3RyaW5nLCBvcHRpb25zPzogQ2hhbm5lbE9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6ICEhcGFyc2VkVG9rZW4/LnRva2VuLmNhcGFiaWxpdGllcz8uaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0YXRlQ29udGV4dCA9IG5ldyBTdGF0ZUNvbnRleHQoKTtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcmVhZE9ubHlWaWRlb0VsZW1lbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9NdXRlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVBsYXlpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkKTtcbiAgICB0aGlzLl9yZWFkT25seVRhcmdldExhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0KTtcbiAgICB0aGlzLl9yZWFkT25seVJlc29sdXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4odGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbikgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuICAgIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciA9IHRoaXMuaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnN1YnNjcmliZShzdHJlYW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSA9IG5ldyBWaWRlb1RlbGVtZXRyeSh0aGlzLnN0cmVhbUlkLCBTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9jaGFubmVsU3RhcnRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh0aGlzLnZpZGVvRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHRoaXMudmlkZW9FbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnJlc3RhcnRBZnRlclN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdmlkZW9FbGVtZW50KCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlID0gdmlkZW9FbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBuZXcgRGltZW5zaW9uKHZpZGVvRWxlbWVudC52aWRlb1dpZHRoLCB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlID0gISFwYXJzZWRUb2tlbj8udG9rZW4uY2FwYWJpbGl0aWVzPy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aC5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBtaXNzaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIENyZWF0ZUNoYW5uZWxPcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2snKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sudmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kLCBidXQgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCB2aWEgaW5zZXJ0YWJsZS1zdHJlYW1zIGNhcGFiaWxpdHknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG4gICAgY29uc3QgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IGlzU3RhcnRpbmcgdG8gZmFsc2UgYW5kIGNhbGwgaGFuZGxlU3RyZWFtRmFpbHVyZSBpZiBzdHJlYW0gbW9uaXRvcnMgZm91bmQgYW4gaXNzdWVcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY2hhbm5lbENvbnRleHQsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5mYWlsKCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT47XG4gIGhhc0luc2VydGFibGVTdHJlYW1zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+O1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gbmV3IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+KG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPighIW9wdGlvbnM/Lmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2tcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogc3RyaW5nLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuXG4gICAgaWYgKCFwYXJzZWRUb2tlbiB8fCAhcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW5hbmN5ID0gcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGVkZ2VBdXRoVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcblxuICAgIGlmICghcGFyc2VkVG9rZW4gfHwgIXBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdGVuYW5jeSA9IHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQ7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFB1Ymxpc2hTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3QgcHVibGlzaCByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hSZXNwb25zZTtcbiAgICBjb25zdCBwdWJsaXNoUmVzcG9uc2U6IElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcHVibGlzaFJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2ljZVNlcnZlcnM6IFtdfTtcblxuICAgIGlmIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSBjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgIHVybHM6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9IGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5O1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9IGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjQ29uZmlndXJhdGlvbjtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUVkZ2VBdXRofSBmcm9tICcuL0VkZ2VBdXRoVG9rZW4nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuL0VkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aCcpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBJRWRnZUF1dGgge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5jb2RlZEVkZ2VBdXRoVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZUF1dGhUb2tlbiA9IEpTT04ucGFyc2UoZW5jb2RlZEVkZ2VBdXRoVG9rZW4pO1xuXG4gICAgICBlZGdlQXV0aFRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlQXV0aFRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIGVkZ2VBdXRoVG9rZW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGguX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFVyaShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogVVJMIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4udXJpID9cbiAgICAgIG5ldyBVUkwocGFyc2VkVG9rZW4udG9rZW4udXJpKSA6IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVuYW5jeShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCA/XG4gICAgICBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkIDogJyc7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZFRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NoYW5uZWxTdGF0ZX0gZnJvbSAnLi4vY2hhbm5lbHMnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaHVua2VkU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaHVua2VkU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9uaXRvckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3N0cmVhbVN0YXRpc3RpY3M6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBwcml2YXRlIF9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpOiBVUkwsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBJRGlzcG9zYWJsZT4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAudGhlbihlbmRQb2ludCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBudWxsLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZlclNkcCA9IGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIG9yaWdpblN0YXJ0VGltZTogRGF0ZS5ub3coKSAtIGxhZyArIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyAyLFxuICAgICAgICAgIGxhZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLnN0YXJ0KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSwgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIG9mZmVyU2RwLCBvcHRpb25zKVxuICAgICAgICAgIC50aGVuKHBsYXllciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignTGl2ZVN0cmVhbWluZyBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9uaXRvcihwbGF5ZXI6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gTGl2ZVN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fc3RyZWFtU3RhdGlzdGljcyAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPiA2KSB7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7SUhsc1BsYXllclR5cGV9IGZyb20gJy4vSUhsc1BsYXllcic7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhsc1BsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJSGxzUGxheWVyVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLmhsc1BsYXllcikge1xuICAgICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKHtcbiAgICAgICAgICBlbmFibGVXb3JrZXI6IHRydWUsXG4gICAgICAgICAgbWF4QnVmZmVyTGVuZ3RoOiAxLFxuICAgICAgICAgIGxpdmVCYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMaXZlU3RyZWFtaW5nLmhsc1BsYXllciAmJiBMaXZlU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RhdGljIHNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSh0cmFuc2Zvcm06IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+LCBzdHJlYW06IE1lZGlhU3RyZWFtKSB7XG4gICAgY29uc3QgdHJhY2sgPSBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXTtcblxuICAgIGlmICh0cmFjay5raW5kID09PSAndmlkZW8nKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybX0pO1xuICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrfSk7XG4gICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogJ3ZpZGVvJ30pO1xuICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgc291cmNlXG4gICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcblxuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc2VydGFibGVTdHJlYW1zIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgTGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi8uLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSwgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGlzUnRtcCA9IHBhcnNlZFRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcyAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKTtcblxuICAgIGlmIChpc1J0bXApIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignU0RLIGRvZXMgbm90IHN1cHBvcnQgUlRNUCBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzICYmIHBhcnNlZFRva2VuLnRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnc3RyZWFtaW5nJyk7XG5cbiAgICBpZiAoaXNTdHJlYW1pbmcpIHtcbiAgICAgIHJldHVybiBuZXcgQ2h1bmtlZFN0cmVhbShjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdPcHRpb25zLCBMaXZlU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
|