oxygen-cli 1.33.4 → 1.33.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/build/ox_modules/module-http.js +4 -2
- package/build/ox_modules/module-mob.js +4 -2
- package/build/ox_modules/module-utils.js +4 -2
- package/build/ox_modules/module-web/commands/waitForAngular.js +13 -14
- package/build/ox_modules/module-web.js +4 -2
- package/build/ox_modules/module-win.js +4 -2
- package/package.json +1 -1
|
@@ -780,7 +780,9 @@ class WebModule extends _WebDriverModule.default {
|
|
|
780
780
|
} // just in case user passed a complex object by mistake
|
|
781
781
|
|
|
782
782
|
|
|
783
|
-
name = name.toString();
|
|
783
|
+
name = name.toString(); // limit the name length (since we can't store values larger than 512B in the database)
|
|
784
|
+
|
|
785
|
+
name = name.slice(0, 512);
|
|
784
786
|
|
|
785
787
|
if (global._lastTransactionName) {
|
|
786
788
|
this.transactions[global._lastTransactionName] = null;
|
|
@@ -976,4 +978,4 @@ class WebModule extends _WebDriverModule.default {
|
|
|
976
978
|
}
|
|
977
979
|
|
|
978
980
|
exports.default = WebModule;
|
|
979
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsImN0eCIsImRlZmF1bHRCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJlcnJvckNvZGUiLCJJTlZBTElEX0NBUEFCSUxJVElFUyIsInRvTG93ZXJDYXNlIiwicmVjb3JkSEFSIiwiYnJvd3NlciIsInBlcmZvcm1hbmNlIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJzZWxlbml1bVVybEJhc2UiLCJpc1J1bm5pbmdPblNlbGVub2lkIiwiX2lzU2VsZW5vaWRIdWIiLCJlbmFibGVWaWRlbyIsInVuZGVmaW5lZCIsInZpZGVvRnJhbWVSYXRlIiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsImluaXRFcnJvciIsIl90aGlzIiwicHJvdmlkZXIiLCJtb2RVdGlscyIsImRldGVybWluZVByb3ZpZGVyIiwiUEVSRkVDVE8iLCJvcGVuRGV2aWNlVGltZW91dCIsImRyaXZlciIsIndkaW8iLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwicGVyZmVjdG9FeGVjdXRpb25Db250ZXh0IiwicGVyZmVjdG9SZXBvcnRpbmciLCJQZXJmZWN0byIsIlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsIndlYmRyaXZlciIsImV4ZWN1dGVTY3JpcHQiLCJjb21tYW5kIiwicGFyYW1zIiwiZXhlY3V0ZSIsInJlcG9ydGluZ0NsaWVudCIsIlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50IiwidGVzdFN0YXJ0IiwiZSIsImdldFNlbGVuaXVtSW5pdEVycm9yIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJlcnJvciIsIkxBTUJEQVRFU1QiLCJCUk9XU0VSU1RBQ0siLCJpbmNsdWRlcyIsIm1heGltaXplV2luZG93Iiwic2V0VGltZW91dCIsImVyciIsIlVOS05PV05fRVJST1IiLCJtZXNzYWdlIiwidXRpbCIsImluc3BlY3QiLCJkaXNwb3NlIiwic3RhdHVzIiwiX3doZW5XZWJNb2R1bGVEaXNwb3NlIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwicHJvbWlzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJzZWxlbml1bVBpZCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiY2FsbCIsIlByb21pc2UiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJoYW5kbGVzIiwiZ2V0V2luZG93SGFuZGxlcyIsImhhbmRsZSIsInN3aXRjaFRvV2luZG93IiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJyZXF1aXJlIiwidGl0bGVJbWFnZSIsImdlbmVyYXRlIiwibWVyZ2VkSW1hZ2UiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwiZXciLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJjb25zb2xlIiwiRG9tQ29udGVudExvYWRlZEV2ZW50IiwiTG9hZEV2ZW50IiwidHJhbnNhY3Rpb24iLCJjb3VudGVyIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwidHlwZXMiLCJnZXRMb2dUeXBlcyIsImdldExvZ3MiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudHMiLCJtc2dPYmoiLCJjaGVja1dhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyIiwid2FpdEZvckFuZ3VsYXIiLCJhdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IiLCJhdXRvV2FpdEZvckFuZ3VsYXJTb2Z0V2FpdCIsImF1dG9XYWl0Rm9yQW5ndWxhclRpbWVvdXQiLCJsYW1iZGFDcmVkZW50aWFscyIsImxhbWJkYUF1dG9tYXRpb25DbGllbnQiLCJsYW1iZGFSZXN0Q2xpZW50IiwiQXV0b21hdGlvbkNsaWVudCIsInJlcXVlc3RCb2R5Iiwic3RhdHVzX2luZCIsInVwZGF0ZVNlc3Npb25CeUlkIiwidGIiLCJUZXN0aW5nQm90IiwiYXBpX2tleSIsImFwaV9zZWNyZXQiLCJ0ZXN0RGF0YSIsInVwZGF0ZVRlc3QiLCJ0ZXN0RGV0YWlscyIsIm1ldGhvZCIsImpzb24iLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJyZXMiLCJpbmRleE9mIiwicmVjb3JkVmlkZW8iLCJ2aWRlb0ZpbGVVcmwiLCJmaWxlTmFtZSIsImF0dGFjaG1lbnRzIiwibmV3VmlkZW9BdHRhY2htZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUdBLE1BQU1BLFdBQVcsR0FBRyxLQUFwQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLDhCQUE3QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFFBQTdCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsU0FBL0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxhQUFULENBQS9CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0FBeEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUFLLElBQWxDLEMsQ0FBbUQ7O0FBRXBDLE1BQU1DLFNBQU4sU0FBd0JDLHdC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O0FBQ0QsUUFBSSxDQUFDLEtBQUtoRCxPQUFMLENBQWFvUSxXQUFkLElBQTZCLENBQUMxRyxTQUFsQyxFQUE2QztBQUN6QztBQUNIOztBQUNELFVBQU0yRyxZQUFZLEdBQUksR0FBRSxLQUFLdE4sZUFBZ0IsVUFBUyxLQUFLc0IsU0FBVSxNQUFyRTtBQUNBLFVBQU1pTSxRQUFRLEdBQUksR0FBRSxLQUFLak0sU0FBVSxNQUFuQztBQUNBLFNBQUtuRSxFQUFMLENBQVFxUSxXQUFSLENBQW9CakgsSUFBcEIsQ0FBeUJ4RixlQUFTME0sa0JBQVQsQ0FBNEJGLFFBQTVCLEVBQXNDRCxZQUF0QyxDQUF6QjtBQUNIOztBQWowQmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3ZWJcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGJyb3dzZXIgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKk5vdGVzOioqICBcclxuICogICBcclxuICogQ29tbWFuZHMgd2hpY2ggb3BlcmF0ZSBvbiBlbGVtZW50cyBzdWNoIGFzIGNsaWNrLCBhc3NlcnQsIHdhaXRGb3IsIHR5cGUsIHNlbGVjdCwgYW5kIG90aGVycyB3aWxsIGF1dG9tYXRpY2FsbHkgd2FpdCBmb3IgYSBwZXJpb2Qgb2YgdGltZSBmb3IgdGhlIGVsZW1lbnQgdG8gYXBwZWFyIGluIERPTSBhbmQgYmVjb21lIHZpc2libGUuIEJ5IGRlZmF1bHQgdGhpcyBwZXJpb2QgZXF1YWxzIHRvIDYwIHNlY29uZHMsIGJ1dCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgYHNldFRpbWVvdXRgY29tbWFuZC5cclxuICogICBcclxuICogKipTdHJpbmcgbWF0Y2hpbmcgcGF0dGVybnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGByZWdleDpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYHJlZ2V4aTpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgZXhhY3Q6U1RSSU5HYCAtIE1hdGNoIHRoZSBzdHJpbmcgdmVyYmF0aW0uXHJcbiAqICAqIGBnbG9iOlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBnbG9iIHBhdHRlcm4uIGA/YCB3aWxsIG1hdGNoIGFueSBzaW5nbGUgY2hhcmFjdGVyIGV4Y2VwdCBuZXcgbGluZSBcXChcXG5cXCkuIGAqYCB3aWxsIG1hdGNoIGFueSBzZXF1ZW5jZSBcXCgwIG9yIG1vcmVcXCkgb2YgY2hhcmFjdGVycyBleGNlcHQgbmV3IGxpbmUuIEVtcHR5ICAgICBQQVRURVJOIHdpbGwgbWF0Y2ggb25seSBvdGhlciBlbXB0eSBzdHJpbmdzLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBTYW1lIGFzIGdsb2IgbWF0Y2hpbmcuICBcclxuICpcclxuICogKipMb2NhdG9yczoqKiBcclxuICogXHJcbiAqICBDb21tYW5kcyB3aGljaCBleHBlY3QgYW4gZWxlbWVudCBsb2NhdG9yIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgbG9jYXRvciB0eXBlcyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElEIGF0dHJpYnV0ZS5cclxuICogICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiAgKiBgbGluaz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBsaW5rIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBOQU1FIGF0dHJpYnV0ZS5cclxuICogICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAgKiBgKFhQQVRIKVtdYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICovXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBxdW90ZXMgKi9cclxuaW1wb3J0IHsgaGFyRnJvbU1lc3NhZ2VzIH0gZnJvbSAnY2hyb21lLWhhcic7XHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xyXG5pbXBvcnQgU2F1Y2VMYWJzIGZyb20gJ3NhdWNlbGFicyc7XHJcbmltcG9ydCBsYW1iZGFSZXN0Q2xpZW50IGZyb20gJ0BsYW1iZGF0ZXN0L25vZGUtcmVzdC1jbGllbnQnO1xyXG5pbXBvcnQgVGVzdGluZ0JvdCBmcm9tICd0ZXN0aW5nYm90LWFwaSc7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3ZWInO1xyXG5jb25zdCBERUZBVUxUX1NFTEVOSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9CUk9XU0VSX05BTUUgPSAnY2hyb21lJztcclxuY29uc3QgREVGQVVMVF9NT0JJTEVfQlJPV1NFUiA9ICdkZWZhdWx0JztcclxuY29uc3QgTk9fU0NSRUVOU0hPVF9DT01NQU5EUyA9IFsnaW5pdCcsICdhc3NlcnRBbGVydCddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCAnY2xpY2snXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTsgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24tPmhhciBkaWN0aW9uYXJ5XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBuZXcgU2VsZW5pdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc2VsZW5pdW1VcmwgLSBSZW1vdGUgc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2Fwcywgc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICAgICAgLy8gaWYgYXBwaXVtVXJsIHBvaW50cyB0byBhbiBleHRlcm5hbCBleGVjdXRpb24gZ3JpZCAoc3VjaCBhcyBCUylcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcHBpdW1VcmwgJiYgIXRoaXMub3B0aW9ucy5hcHBpdW1Vcmwuc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5hcHBpdW1Vcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVVybCB8fCBERUZBVUxUX1NFTEVOSVVNX1VSTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGFrZSBjYXBhYmlsaXRpZXMgZWl0aGVyIGZyb20gaW5pdCBtZXRob2QgYXJndW1lbnQgb3IgZnJvbSBjb250ZXh0IHBhcmFtZXRlcnMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgYnJvd3Nlck5hbWUgY2FwcyBmcm9tIG9wdGlvbnMuIEZJWE1FOiB3aHkgaXMgdGhpcyBldmVuIG5lZWRlZD9cclxuICAgICAgICBsZXQgZGVmYXVsdEJyb3dzZXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLm9wdGlvbnMuYnJvd3Nlck5hbWUgfHwgREVGQVVMVF9CUk9XU0VSX05BTUU7XHJcbiAgICAgICAgICAgIGRlZmF1bHRCcm93c2VyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRklYTUU6IHNoYWxsIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBicm93c2VyTmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBuZWl0aGVyIGluIGNhcHMgbm9yIGluIG9wdGlvbnM/IVxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuSU5WQUxJRF9DQVBBQklMSVRJRVMsXHJcbiAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGluaXRpYWxpemUgYHdlYmAgbW9kdWxlIC0gYnJvd3Nlck5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGp1c3QgYnJvd3Nlck5hbWUtc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2llJykge1xyXG4gICAgICAgICAgICAvLyBJRSBpcyBzcGVjaWZpZWQgYXMgJ2llJyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUgYW5kIHBvc3NpYmx5IHN1aXRlc1xyXG4gICAgICAgICAgICAvLyBidXQgc2VsZW5pdW0gc3RhbmRhbG9uZSBzZXJ2ZXIgZXhwZWN0cyAnaW50ZXJuZXQgZXhwbG9yZXInXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9ICdpbnRlcm5ldCBleHBsb3Jlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHNbJ2xhbWJkYTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gbGFtYmRhdGVzdCBleHBlY3RzIG9yaWdpbmFsIGNhc2UgbmFtZXNcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIC8vIHBlcmZlY3RvTW9iaWxlIGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lICE9PSAnTWljcm9zb2Z0RWRnZScpIHtcclxuICAgICAgICAgICAgLy8gc2VsZW5pdW0gc3RhbmRhbG9uZSBzZXJ2ZXIgZXhwZWN0cyBhbGwgYnJvd3Nlck5hbWVzIHRvIGJlIGxvd2VyY2FzZVxyXG4gICAgICAgICAgICAvLyBleGNlcHQgXCJNaWNyb3NvZnRFZGdlXCJcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGp1c3QgY2FwYWJpbGl0aWVzIHRvIGVuYWJsZSBjb2xsZWN0aW5nIGJyb3dzZXIgYW5kIHBlcmZvcm1hbmNlIHN0YXRzIGluIENocm9tZSBcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwc1snZ29vZzpsb2dnaW5nUHJlZnMnXSA9IHsgICAgIC8vIGZvciBDaHJvbWVEcml2ZXIgPj0gNzVcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6ICdBTEwnLFxyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6ICdBTEwnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIC8vIHNwZWNpZnlpbmcgdGhpcyBsZWFkcyBDaHJvbWUgNzcrIHRvIHJlZnVzZSBsb2FkaW5nXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5sb2dnaW5nUHJlZnMgPSB7ICAgICAgICAgICAgIC8vIGZvciBDaHJvbWVEcml2ZXIgPCA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmNocm9tZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBwZXJmTG9nZ2luZ1ByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlTmV0d29yazogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVQYWdlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgV0RJTyBvcHRpb25zXHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKHNlbGVuaXVtVXJsIHx8IERFRkFVTFRfU0VMRU5JVU1fVVJMKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVuaXVtVXJsQmFzZSA9IGAke3Byb3RvY29sfTovLyR7aG9zdH06JHtwb3J0fWA7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgc2VsZW5pdW0gaHViIGlzIGJhc2VkIG9uIFNlbGVub2lkLCB0aGVuIGVuYWJsZSB2aWRlbyByZWNvcmRpbmdcclxuICAgICAgICB0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQgPSBhd2FpdCB0aGlzLl9pc1NlbGVub2lkSHViKHRoaXMuc2VsZW5pdW1VcmxCYXNlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmdPblNlbGVub2lkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLmVuYWJsZVZpZGVvID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLmVuYWJsZVZpZGVvID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLnZpZGVvRnJhbWVSYXRlID0gNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBnZW5lcmF0ZSBXZWJkcml2ZXIuaW8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgaW5pdEVycm9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBtb2RVdGlscy5kZXRlcm1pbmVQcm92aWRlcih3ZGlvT3B0cyk7XHJcblxyXG4gICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgd2Rpb09wdHMucGF0aCA9ICcvbmV4cGVyaWVuY2UvcGVyZmVjdG9tb2JpbGUvd2QvaHViJztcclxuICAgICAgICAgICAgd2Rpb09wdHMucG9ydCA9IDgwO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wcm90b2NvbCA9ICdodHRwJztcclxuICAgICAgICAgICAgd2Rpb09wdHMub3BlbkRldmljZVRpbWVvdXQgPSAxNTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBuYW1lID0gJ25hbWUnO1xyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2xhbWJkYTpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBicm93c2VyIGZvciBtb2JpbGUgd2ViIHRlc3RzLCBpZiBleGVjdXRlZCBhZ2FpbnN0IHJlbW90ZSBkZXZpY2VzIG9mIGEgY2xvdWQgcHJvdmlkZXJcclxuICAgICAgICBpZiAoZGVmYXVsdEJyb3dzZXIgJiYgcHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gREVGQVVMVF9NT0JJTEVfQlJPV1NFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53ZGlvT3B0cyA9IHdkaW9PcHRzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldFNlbGVuaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzZXQgYnJvd3NlciBsb2dzIGlmIGF1dG8gY29sbGVjdCBsb2dzIG9wdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGx5IGNhbGwgdGhpcyB0byBjbGVhciB0aGUgcHJldmlvdXMgbG9ncyBhbmQgc3RhcnQgdGhlIHRlc3Qgd2l0aCB0aGUgY2xlYW4gbG9nc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgW21vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QsIG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSywgbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE9dLmluY2x1ZGVzKHRoaXMuZHJpdmVyLnByb3ZpZGVyKVxyXG4gICAgICAgICAgICAgICAgLy9bJ01pY3Jvc29mdEVkZ2UnLCAnbXNlZGdlJywgJ0VkZ2UnLCAnSW50ZXJuZXQgRXhwbG9yZXInXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IG1heGltaXplIHdpbmRvdyBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGV4dGVybmFsIGNsb3VkIHByb3ZpZGVyIGluZnJhc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAvLyBhcyBtb3N0IG9mIGNsb3VkIHByb3ZpZGVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG1heGltaXplIGJyb3dzZXIgd2luZG93XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5tYXhpbWl6ZVdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgVGltZW91dFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aGlzLndhaXRGb3JUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5VTktOT1dOX0VSUk9SLCBlcnIubWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZSA9IGRlZmVyKCk7XHJcblxyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5TQVVDRUxBQlMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ3VzZXJuYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzS2V5ID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsnYWNjZXNzS2V5J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkID0gc3RhdHVzID09PSAnUEFTU0VEJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gXCJ7XFxcInBhc3NlZFxcXCI6XCIrcGFzc2VkK1wifVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBteUFjY291bnQgPSBuZXcgU2F1Y2VMYWJzKHsgdXNlcjogdXNlcm5hbWUsIGtleTogYWNjZXNzS2V5fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnVwZGF0ZUpvYih1c2VybmFtZSwgaWQsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC5zdG9wSm9iKHVzZXJuYW1lLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuVEVTVElOR0JPVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBbJ1BBU1NFRCcsJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsZWQgb3Igb3RoZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJywgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgJiYgJ0ZBSUxFRCcgPT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoc3RhdHVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZUNvbnRpbnVlKHN0YXR1cykge1xyXG4gICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIC8vIGNsZWFudXAgY2hyb21lZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCd0YXNra2lsbCAvSU0gY2hyb21lZHJpdmVyLmV4ZSAvRicsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBjaHJvbWVkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGVkZ2Vkcml2ZXIncyBvbmx5IHdoZW4gcnVubmluZyBmcm9tIHdpdGhpbiB0aGUgSURFIGFuZCB0ZXN0IGRpZCBub3QgZmFpbFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkICYmICghc3RhdHVzIHx8ICdGQUlMRUQnICE9PSBzdGF0dXMudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGZvciBub3dcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBtc2VkZ2Vkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyA9PT0gdHJ1ZSAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEJyb3dzZXJMb2cobG9nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2xlYXIgdHJhbnNhY3Rpb25zIHRvIGF2b2lkIGR1cGxpY2F0ZSBuYW1lcyBhY3Jvc3MgaXRlcmF0aW9uc1xyXG4gICAgICAgIC8vIGFsc28gc2hvdWxkIHRocm93IG9uIGR1cGxpY2F0ZSBuYW1lcy5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG5vIHRyYW5zYWN0aW9ucyBzZXQgaWYgdGVzdCBmYWlscyBiZWZvcmUgd2ViLnRyYW5zYWN0aW9uIGNvbW1hbmRcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJzLmhhciA9IHRoaXMudHJhbnNhY3Rpb25zO1xyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZCA9IGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IgIT09IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYWRkU2VsZW5vaWRWaWRlb0FzVGVzdEF0dGFjaG1lbnQoaGFzRmFpbGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXNBY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NDUkVFTlNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmIGhhbmRsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIGhhbmRsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFRpdGxlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRUb0ltYWdlID0gcmVxdWlyZSgnLi4vbGliL3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZUltYWdlID0gYXdhaXQgdGV4dFRvSW1hZ2UuZ2VuZXJhdGUodGl0bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCh0aXRsZUltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgxKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgyKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2FkanVzdEJyb3dzZXJMb2cobG9nKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBicm93c2VyIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgLy8gY29udmVydCBTRVZFUkUgbG9nIGxldmVsIHRvIEVSUk9SXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwgPT09ICdTRVZFUkUnID8gJ0VSUk9SJyA6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiAnYnJvd3NlcidcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBGSVhNRTogVGhlcmUgaXMgYSBidWcgd2l0aCBJRS4gU2VlIHRoZSBjb21tZW50IHdpdGhpbiBmdW5jdGlvbiBib2R5LlxyXG4gICAgICpcclxuICAgICAqICBkb21Db250ZW50TG9hZGVkIChha2EgRmlyc3QgVmlzdWFsIFRpbWUpLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqICBsb2FkIChha2EgRnVsbCBMb2FkIFRpbWUpICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9hZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcHJvY2Vzc2luZyBtb2RlbDpcclxuICAgICAqXHJcbiAgICAgKiAgMS4gbmF2aWdhdGlvblN0YXJ0ICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyByZXF1ZXN0ZWQgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDIuIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOb3QgcmVsZXZhbnQgdG8gdXMuIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9uYXZpZ2F0aW9uLXRpbWluZy8jcHJvY2VzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cclxuICAgICAqICAzLiBkb21Mb2FkaW5nICAgICAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgc3RhcnRzIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDQuIGRvbUludGVyYWN0aXZlICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgZmluaXNoZWQgcGFyc2luZyB0aGUgZG9jdW1lbnQgYW5kIHRoZSB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlLlxyXG4gICAgICogIDUuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ICAgLSBUaGUgZG9jdW1lbnQgaGFzIGJlZW4gY29tcGxldGVseSBsb2FkZWQgYW5kIHBhcnNlZCBhbmQgZGVmZXJyZWQgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLiBcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmMgc2NyaXB0cywgaWYgYW55LCBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVzaGVldHNbMV0sIGltYWdlcywgYW5kIHN1YmZyYW1lcyBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSAtIFN0eWxlc2hlZXRzIC91c3VhbGx5LyBkZWZlciB0aGlzIGV2ZW50ISAtIGh0dHA6Ly9tb2xpbHkuZGUvd2VibG9nL2RvbWNvbnRlbnRsb2FkZWRcclxuICAgICAqICA2LiBkb21Db250ZW50TG9hZGVkRXZlbnRFbmQgICAgIC0gVGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLiBFLmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJET00gZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcIik7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgKiAgNy4gZG9tQ29tcGxldGUgICAgICAgICAgICAgICAgICAtIFRoZSBET00gdHJlZSBpcyBjb21wbGV0ZWx5IGJ1aWx0LiBBc3luYyBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgOC4gbG9hZEV2ZW50U3RhcnQgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhdmUgZmluaXNoZWQgbG9hZGluZyBhbGwgdGhlIHJlc291cmNlcyBsaWtlIGltYWdlcywgc3dmLCBldGMuXHJcbiAgICAgKiAgOS4gbG9hZEV2ZW50RW5kICAgICAgICAgICAgICAgICAtIFRoZSBsb2FkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy5cclxuICAgICAqL1xyXG4gICAgX2dldFN0YXRzKGNvbW1hbmROYW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mZXRjaFN0YXRzICYmIHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLl9pc0FjdGlvbihjb21tYW5kTmFtZSkpIHtcclxuICAgICAgICAgICAgdmFyIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgbG9hZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzYW1lUGFnZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGZvbGxvd2luZyBzaXR1YXRpb246XHJcbiAgICAgICAgICAgIC8vIGlmIG5hdmlnYXRlU3RhcnQgZXF1YWxzIHRvIHRoZSBvbmUgd2UgZ290IGZyb20gcHJldmlvdXMgYXR0ZW1wdCAod2UgbmVlZCB0byBzYXZlIGl0KVxyXG4gICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBhcmUgc3RpbGwgb24gdGhlIHNhbWUgcGFnZSBhbmQgZG9uJ3QgbmVlZCB0byByZWNvcmQgbG9hZC9kb21Db250ZW50TG9hZGVkIHRpbWVzXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdEVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypnbG9iYWwgd2luZG93Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltaW5ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5sb2FkRXZlbnRTdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgdGltaW5ncy5sb2FkRXZlbnRTdGFydCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhZ2UgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lICYmIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPT0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydCA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID0gdGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRFdmVudFN0YXJ0ID0gdGltaW5ncy5sb2FkRXZlbnRTdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWQgPSBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGxvYWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiBsb2FkRXZlbnRTdGFydCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4ZWN1dGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgZXJyb3IgaW5zaWRlIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBleGVjdXRlRXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkbid0IGdldCB0aW1pbmdzLlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNhbWVQYWdlID8ge30gOiB7IERvbUNvbnRlbnRMb2FkZWRFdmVudDogZG9tQ29udGVudExvYWRlZCwgTG9hZEV2ZW50OiBsb2FkIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25zW25hbWVdICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50cmFuc2FjdGlvbnMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zdGFydHNXaXRoKG5hbWUpKS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lKycgKCMnK2NvdW50ZXIrJyknO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IG1vZFV0aWxzLmdldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50U3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9nZXRIQVIoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRMb2dUeXBlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdwZXJmb3JtYW5jZScpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9ncygncGVyZm9ybWFuY2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpbiBvbmUgaW5zdGFuY2UsIGxvZ3Mgd2FzIG5vdCBpdGVyYWJsZSBmb3Igc29tZSByZWFzb24gLSBoZW5jZSB0aGUgZm9sbG93aW5nIGNoZWNrOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFsb2dzIHx8IHR5cGVvZiBsb2dzW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZ2V0SEFSOiBsb2dzIG5vdCBpdGVyYWJsZTogJyArIEpTT04uc3RyaW5naWZ5KGxvZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnT2JqID0gSlNPTi5wYXJzZShsb2cubWVzc2FnZSk7ICAgLy8gcmV0dXJuZWQgYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2gobXNnT2JqLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhciA9IGhhckZyb21NZXNzYWdlcyhldmVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGhhcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBIQVI6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tXYWl0Rm9yQW5ndWxhcigpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQW5ndWxhcih0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclJvb3RTZWxlY3RvciwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJTb2Z0V2FpdCwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3Qoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGFtYmRhQ3JlZGVudGlhbHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUF1dG9tYXRpb25DbGllbnQgPSBsYW1iZGFSZXN0Q2xpZW50LkF1dG9tYXRpb25DbGllbnQoXHJcbiAgICAgICAgICAgICAgICBsYW1iZGFDcmVkZW50aWFsc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1c19pbmQ6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50LnVwZGF0ZVNlc3Npb25CeUlkKHNlc3Npb25JZCwgcmVxdWVzdEJvZHksIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBMYW1iZGFUZXN0OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgY29uc3QgdGIgPSBuZXcgVGVzdGluZ0JvdCh7XHJcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBhcGlfc2VjcmV0OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdGVzdERhdGEgPSB7IFwidGVzdFtzdWNjZXNzXVwiIDogc3RhdHVzID09PSAnUEFTU0VEJyA/IFwiMVwiIDogXCIwXCIgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRiLnVwZGF0ZVRlc3QodGVzdERhdGEsIHNlc3Npb25JZCwgZnVuY3Rpb24oZXJyb3IsIHRlc3REZXRhaWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIFRlc3RpbmdCb3Q6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxyXG4gICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmtleSxcclxuICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pc1NlbGVub2lkSHViKHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogYCR7c2VsZW5pdW1Vcmx9YCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggJiYgYm9keS5pbmRleE9mKCdZb3UgYXJlIHVzaW5nIFNlbGVub2lkJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIGluc2lkZSBTZWxlbm9pZCwgdGhlbiBkb3dubG9hZCB0aGUgdmlkZW8gaWYgdGVzdCBoYXMgZmFpbGVkXHJcbiAgICBhc3luYyBfYWRkU2VsZW5vaWRWaWRlb0FzVGVzdEF0dGFjaG1lbnQoaGFzRmFpbGVkID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlY29yZFZpZGVvICYmICFoYXNGYWlsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2aWRlb0ZpbGVVcmwgPSBgJHt0aGlzLnNlbGVuaXVtVXJsQmFzZX0vdmlkZW8vJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke3RoaXMuc2Vzc2lvbklkfS5tcDRgO1xyXG4gICAgICAgIHRoaXMucnMuYXR0YWNobWVudHMucHVzaChtb2RVdGlscy5uZXdWaWRlb0F0dGFjaG1lbnQoZmlsZU5hbWUsIHZpZGVvRmlsZVVybCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
|
|
981
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsImN0eCIsImRlZmF1bHRCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJlcnJvckNvZGUiLCJJTlZBTElEX0NBUEFCSUxJVElFUyIsInRvTG93ZXJDYXNlIiwicmVjb3JkSEFSIiwiYnJvd3NlciIsInBlcmZvcm1hbmNlIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJzZWxlbml1bVVybEJhc2UiLCJpc1J1bm5pbmdPblNlbGVub2lkIiwiX2lzU2VsZW5vaWRIdWIiLCJlbmFibGVWaWRlbyIsInVuZGVmaW5lZCIsInZpZGVvRnJhbWVSYXRlIiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsImluaXRFcnJvciIsIl90aGlzIiwicHJvdmlkZXIiLCJtb2RVdGlscyIsImRldGVybWluZVByb3ZpZGVyIiwiUEVSRkVDVE8iLCJvcGVuRGV2aWNlVGltZW91dCIsImRyaXZlciIsIndkaW8iLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwicGVyZmVjdG9FeGVjdXRpb25Db250ZXh0IiwicGVyZmVjdG9SZXBvcnRpbmciLCJQZXJmZWN0byIsIlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsIndlYmRyaXZlciIsImV4ZWN1dGVTY3JpcHQiLCJjb21tYW5kIiwicGFyYW1zIiwiZXhlY3V0ZSIsInJlcG9ydGluZ0NsaWVudCIsIlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50IiwidGVzdFN0YXJ0IiwiZSIsImdldFNlbGVuaXVtSW5pdEVycm9yIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJlcnJvciIsIkxBTUJEQVRFU1QiLCJCUk9XU0VSU1RBQ0siLCJpbmNsdWRlcyIsIm1heGltaXplV2luZG93Iiwic2V0VGltZW91dCIsImVyciIsIlVOS05PV05fRVJST1IiLCJtZXNzYWdlIiwidXRpbCIsImluc3BlY3QiLCJkaXNwb3NlIiwic3RhdHVzIiwiX3doZW5XZWJNb2R1bGVEaXNwb3NlIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwicHJvbWlzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJzZWxlbml1bVBpZCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiY2FsbCIsIlByb21pc2UiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJoYW5kbGVzIiwiZ2V0V2luZG93SGFuZGxlcyIsImhhbmRsZSIsInN3aXRjaFRvV2luZG93IiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJyZXF1aXJlIiwidGl0bGVJbWFnZSIsImdlbmVyYXRlIiwibWVyZ2VkSW1hZ2UiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwiZXciLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJjb25zb2xlIiwiRG9tQ29udGVudExvYWRlZEV2ZW50IiwiTG9hZEV2ZW50IiwidHJhbnNhY3Rpb24iLCJzbGljZSIsImNvdW50ZXIiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZ2V0V2Rpb0xvY2F0b3IiLCJtYXRjaFBhdHRlcm4iLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRDaGlsZEVsZW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2V0VGltZW91dEltcGxpY2l0IiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0QXJndW1lbnRTdHJpbmciLCJ0eXBlcyIsImdldExvZ1R5cGVzIiwiZ2V0TG9ncyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50cyIsIm1zZ09iaiIsImNoZWNrV2FpdEZvckFuZ3VsYXIiLCJhdXRvV2FpdEZvckFuZ3VsYXIiLCJ3YWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhclJvb3RTZWxlY3RvciIsImF1dG9XYWl0Rm9yQW5ndWxhclNvZnRXYWl0IiwiYXV0b1dhaXRGb3JBbmd1bGFyVGltZW91dCIsImxhbWJkYUNyZWRlbnRpYWxzIiwibGFtYmRhQXV0b21hdGlvbkNsaWVudCIsImxhbWJkYVJlc3RDbGllbnQiLCJBdXRvbWF0aW9uQ2xpZW50IiwicmVxdWVzdEJvZHkiLCJzdGF0dXNfaW5kIiwidXBkYXRlU2Vzc2lvbkJ5SWQiLCJ0YiIsIlRlc3RpbmdCb3QiLCJhcGlfa2V5IiwiYXBpX3NlY3JldCIsInRlc3REYXRhIiwidXBkYXRlVGVzdCIsInRlc3REZXRhaWxzIiwibWV0aG9kIiwianNvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsInJlcyIsImluZGV4T2YiLCJyZWNvcmRWaWRlbyIsInZpZGVvRmlsZVVybCIsImZpbGVOYW1lIiwiYXR0YWNobWVudHMiLCJuZXdWaWRlb0F0dGFjaG1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsOEJBQTdCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsUUFBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxTQUEvQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQUMsTUFBRCxFQUFTLGFBQVQsQ0FBL0I7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxNQUFELEVBQVMsT0FBVCxDQUF4QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEtBQUssSUFBbEMsQyxDQUFtRDs7QUFFcEMsTUFBTUMsU0FBTixT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LFFBQWpDZSxpQ0FBaUMsQ0FBQ0QsU0FBUyxHQUFHLEtBQWIsRUFBb0I7QUFDdkQsUUFBSSxDQUFDLEtBQUsxRyxtQkFBVixFQUErQjtBQUMzQjtBQUNIOztBQUNELFFBQUksQ0FBQyxLQUFLaEQsT0FBTCxDQUFhcVEsV0FBZCxJQUE2QixDQUFDM0csU0FBbEMsRUFBNkM7QUFDekM7QUFDSDs7QUFDRCxVQUFNNEcsWUFBWSxHQUFJLEdBQUUsS0FBS3ZOLGVBQWdCLFVBQVMsS0FBS3NCLFNBQVUsTUFBckU7QUFDQSxVQUFNa00sUUFBUSxHQUFJLEdBQUUsS0FBS2xNLFNBQVUsTUFBbkM7QUFDQSxTQUFLbkUsRUFBTCxDQUFRc1EsV0FBUixDQUFvQmxILElBQXBCLENBQXlCeEYsZUFBUzJNLGtCQUFULENBQTRCRixRQUE1QixFQUFzQ0QsWUFBdEMsQ0FBekI7QUFDSDs7QUFwMEJrRCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2ViXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBicm93c2VyIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipOb3RlczoqKiAgXHJcbiAqICAgXHJcbiAqIENvbW1hbmRzIHdoaWNoIG9wZXJhdGUgb24gZWxlbWVudHMgc3VjaCBhcyBjbGljaywgYXNzZXJ0LCB3YWl0Rm9yLCB0eXBlLCBzZWxlY3QsIGFuZCBvdGhlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IHdhaXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBlbGVtZW50IHRvIGFwcGVhciBpbiBET00gYW5kIGJlY29tZSB2aXNpYmxlLiBCeSBkZWZhdWx0IHRoaXMgcGVyaW9kIGVxdWFscyB0byA2MCBzZWNvbmRzLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBzZXRUaW1lb3V0YGNvbW1hbmQuXHJcbiAqICAgXHJcbiAqICoqU3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGByZWdleGk6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYGV4YWN0OlNUUklOR2AgLSBNYXRjaCB0aGUgc3RyaW5nIHZlcmJhdGltLlxyXG4gKiAgKiBgZ2xvYjpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgZ2xvYiBwYXR0ZXJuLiBgP2Agd2lsbCBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBleGNlcHQgbmV3IGxpbmUgXFwoXFxuXFwpLiBgKmAgd2lsbCBtYXRjaCBhbnkgc2VxdWVuY2UgXFwoMCBvciBtb3JlXFwpIG9mIGNoYXJhY3RlcnMgZXhjZXB0IG5ldyBsaW5lLiBFbXB0eSAgICAgUEFUVEVSTiB3aWxsIG1hdGNoIG9ubHkgb3RoZXIgZW1wdHkgc3RyaW5ncy5cclxuICogICogYFBBVFRFUk5gIC0gU2FtZSBhcyBnbG9iIG1hdGNoaW5nLiAgXHJcbiAqXHJcbiAqICoqTG9jYXRvcnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGFuIGVsZW1lbnQgbG9jYXRvciBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIGxvY2F0b3IgdHlwZXMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRCBhdHRyaWJ1dGUuXHJcbiAqICAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgTkFNRSBhdHRyaWJ1dGUuXHJcbiAqICAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYChYUEFUSClbXWAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgcXVvdGVzICovXHJcbmltcG9ydCB7IGhhckZyb21NZXNzYWdlcyB9IGZyb20gJ2Nocm9tZS1oYXInO1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcclxuaW1wb3J0IFNhdWNlTGFicyBmcm9tICdzYXVjZWxhYnMnO1xyXG5pbXBvcnQgbGFtYmRhUmVzdENsaWVudCBmcm9tICdAbGFtYmRhdGVzdC9ub2RlLXJlc3QtY2xpZW50JztcclxuaW1wb3J0IFRlc3RpbmdCb3QgZnJvbSAndGVzdGluZ2JvdC1hcGknO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnd2ViJztcclxuY29uc3QgREVGQVVMVF9TRUxFTklVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2Nocm9tZSc7XHJcbmNvbnN0IERFRkFVTFRfTU9CSUxFX0JST1dTRVIgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywgJ2NsaWNrJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307ICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uLT5oYXIgZGljdGlvbmFyeVxyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgbmV3IFNlbGVuaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHNlbGVuaXVtVXJsIC0gUmVtb3RlIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGFwcGl1bVVybCBwb2ludHMgdG8gYW4gZXh0ZXJuYWwgZXhlY3V0aW9uIGdyaWQgKHN1Y2ggYXMgQlMpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwaXVtVXJsICYmICF0aGlzLm9wdGlvbnMuYXBwaXVtVXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly9sb2NhbGhvc3QnKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRha2UgY2FwYWJpbGl0aWVzIGVpdGhlciBmcm9tIGluaXQgbWV0aG9kIGFyZ3VtZW50IG9yIGZyb20gY29udGV4dCBwYXJhbWV0ZXJzIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3JcclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIGJyb3dzZXJOYW1lIGNhcHMgZnJvbSBvcHRpb25zLiBGSVhNRTogd2h5IGlzIHRoaXMgZXZlbiBuZWVkZWQ/XHJcbiAgICAgICAgbGV0IGRlZmF1bHRCcm93c2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5vcHRpb25zLmJyb3dzZXJOYW1lIHx8IERFRkFVTFRfQlJPV1NFUl9OQU1FO1xyXG4gICAgICAgICAgICBkZWZhdWx0QnJvd3NlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZJWE1FOiBzaGFsbCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgYnJvd3Nlck5hbWUgaXMgbm90IHNwZWNpZmllZCwgbmVpdGhlciBpbiBjYXBzIG5vciBpbiBvcHRpb25zPyFcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLklOVkFMSURfQ0FQQUJJTElUSUVTLFxyXG4gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBpbml0aWFsaXplIGB3ZWJgIG1vZHVsZSAtIGJyb3dzZXJOYW1lIG11c3QgYmUgc3BlY2lmaWVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRqdXN0IGJyb3dzZXJOYW1lLXNcclxuICAgICAgICBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZScpIHtcclxuICAgICAgICAgICAgLy8gSUUgaXMgc3BlY2lmaWVkIGFzICdpZScgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lIGFuZCBwb3NzaWJseSBzdWl0ZXNcclxuICAgICAgICAgICAgLy8gYnV0IHNlbGVuaXVtIHN0YW5kYWxvbmUgc2VydmVyIGV4cGVjdHMgJ2ludGVybmV0IGV4cGxvcmVyJ1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSAnaW50ZXJuZXQgZXhwbG9yZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydsYW1iZGE6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIC8vIGxhbWJkYXRlc3QgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBwZXJmZWN0b01vYmlsZSBleHBlY3RzIG9yaWdpbmFsIGNhc2UgbmFtZXNcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAhPT0gJ01pY3Jvc29mdEVkZ2UnKSB7XHJcbiAgICAgICAgICAgIC8vIHNlbGVuaXVtIHN0YW5kYWxvbmUgc2VydmVyIGV4cGVjdHMgYWxsIGJyb3dzZXJOYW1lcyB0byBiZSBsb3dlcmNhc2VcclxuICAgICAgICAgICAgLy8gZXhjZXB0IFwiTWljcm9zb2Z0RWRnZVwiXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRqdXN0IGNhcGFiaWxpdGllcyB0byBlbmFibGUgY29sbGVjdGluZyBicm93c2VyIGFuZCBwZXJmb3JtYW5jZSBzdGF0cyBpbiBDaHJvbWUgXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2dvb2c6bG9nZ2luZ1ByZWZzJ10gPSB7ICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyID49IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAvLyBzcGVjaWZ5aW5nIHRoaXMgbGVhZHMgQ2hyb21lIDc3KyB0byByZWZ1c2UgbG9hZGluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMubG9nZ2luZ1ByZWZzID0geyAgICAgICAgICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyIDwgNzVcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6ICdBTEwnLFxyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6ICdBTEwnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5jaHJvbWVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgcGVyZkxvZ2dpbmdQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZU5ldHdvcms6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlUGFnZTogZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShzZWxlbml1bVVybCB8fCBERUZBVUxUX1NFTEVOSVVNX1VSTCk7XHJcbiAgICAgICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XHJcbiAgICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0bmFtZTtcclxuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcclxuICAgICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGhuYW1lO1xyXG5cclxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcclxuICAgICAgICBpZiAodXJsLmF1dGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0aCA9IHVybC5hdXRoLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IGF1dGhbMF0sXHJcbiAgICAgICAgICAgICAgICBrZXk6IGF1dGhbMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlbml1bVVybEJhc2UgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3R9OiR7cG9ydH1gO1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIHNlbGVuaXVtIGh1YiBpcyBiYXNlZCBvbiBTZWxlbm9pZCwgdGhlbiBlbmFibGUgdmlkZW8gcmVjb3JkaW5nXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmdPblNlbGVub2lkID0gYXdhaXQgdGhpcy5faXNTZWxlbm9pZEh1Yih0aGlzLnNlbGVuaXVtVXJsQmFzZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS5lbmFibGVWaWRlbyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS5lbmFibGVWaWRlbyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS52aWRlb0ZyYW1lUmF0ZSA9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgV2ViZHJpdmVyLmlvIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGluaXRFcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBhdGggPSAnL25leHBlcmllbmNlL3BlcmZlY3RvbW9iaWxlL3dkL2h1Yic7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBvcnQgPSA4MDtcclxuICAgICAgICAgICAgd2Rpb09wdHMucHJvdG9jb2wgPSAnaHR0cCc7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLm9wZW5EZXZpY2VUaW1lb3V0ID0gMTU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICduYW1lJztcclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2xhbWJkYTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgYnJvd3NlciBmb3IgbW9iaWxlIHdlYiB0ZXN0cywgaWYgZXhlY3V0ZWQgYWdhaW5zdCByZW1vdGUgZGV2aWNlcyBvZiBhIGNsb3VkIHByb3ZpZGVyXHJcbiAgICAgICAgaWYgKGRlZmF1bHRCcm93c2VyICYmIHByb3ZpZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IERFRkFVTFRfTU9CSUxFX0JST1dTRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Rpb09wdHMgPSB3ZGlvT3B0cztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLnByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCA9IGF3YWl0IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdlYmRyaXZlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NyaXB0OiBhc3luYyAoY29tbWFuZCwgcGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShjb21tYW5kLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ0NsaWVudCA9IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b1JlcG9ydGluZ0NsaWVudChwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0YXJ0KG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyckhlbHBlci5nZXRTZWxlbml1bUluaXRFcnJvcihlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlc2V0IGJyb3dzZXIgbG9ncyBpZiBhdXRvIGNvbGxlY3QgbG9ncyBvcHRpb24gaXMgZW5hYmxlZFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIHNpbXBseSBjYWxsIHRoaXMgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGxvZ3MgYW5kIHN0YXJ0IHRoZSB0ZXN0IHdpdGggdGhlIGNsZWFuIGxvZ3NcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIFttb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNULCBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0ssIG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5wcm92aWRlcilcclxuICAgICAgICAgICAgICAgIC8vWydNaWNyb3NvZnRFZGdlJywgJ21zZWRnZScsICdFZGdlJywgJ0ludGVybmV0IEV4cGxvcmVyJ10uaW5jbHVkZXModGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBtYXhpbWl6ZSB3aW5kb3cgaWYgdGhlIHRlc3QgaXMgZXhlY3V0ZWQgYWdhaW5zdCBleHRlcm5hbCBjbG91ZCBwcm92aWRlciBpbmZyYXN0cnVjdHVyZVxyXG4gICAgICAgICAgICAgICAgLy8gYXMgbW9zdCBvZiBjbG91ZCBwcm92aWRlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBtYXhpbWl6ZSBicm93c2VyIHdpbmRvd1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIubWF4aW1pemVXaW5kb3coKTtcclxuICAgICAgICAgICAgICAgIC8vIHNldCBpbml0aWFsIFRpbWVvdXRcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3BhZ2VMb2FkJzogdGhpcy53YWl0Rm9yVGltZW91dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVU5LTk9XTl9FUlJPUiwgZXJyLm1lc3NhZ2UsIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBzdGF0dXMgLSBUZXN0IHN0YXR1cywgZWl0aGVyIGBwYXNzZWRgIG9yIGBmYWlsZWRgLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UgPSBkZWZlcigpO1xyXG5cclxuICAgICAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSAncGFzc2VkJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJzLnN0ZXBzICYmIEFycmF5LmlzQXJyYXkodGhpcy5ycy5zdGVwcykgJiYgdGhpcy5ycy5zdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWRGaW5kZWQgPSB0aGlzLnJzLnN0ZXBzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkRmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuU0FVQ0VMQUJTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlcm5hbWUgPSB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snc2F1Y2U6b3B0aW9ucyddWyd1c2VybmFtZSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY2Vzc0tleSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ2FjY2Vzc0tleSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3NlZCA9IHN0YXR1cyA9PT0gJ1BBU1NFRCc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IFwie1xcXCJwYXNzZWRcXFwiOlwiK3Bhc3NlZCtcIn1cIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXlBY2NvdW50ID0gbmV3IFNhdWNlTGFicyh7IHVzZXI6IHVzZXJuYW1lLCBrZXk6IGFjY2Vzc0tleX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC51cGRhdGVKb2IodXNlcm5hbWUsIGlkLCBib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteUFjY291bnQuc3RvcEpvYih1c2VybmFtZSwgaWQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuTEFNQkRBVEVTVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlRFU1RJTkdCT1QpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90KHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdG9wKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMucGFzc2VkIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMuZmFpbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0spIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG51bGwgJiYgWydQQVNTRUQnLCdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbmNlbGVkIG9yIG90aGVyIHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcsIGUpOyAgICAvLyBpZ25vcmUgYW55IGVycm9ycyBhdCBkaXNwb3NhbCBzdGFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZS5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZVNlc3Npb24oKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGVTZXNzaW9uIHdpbGwgdGFrZSA1IG1pbiB0byBjYWxsXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlbGV0ZVNlc3Npb24gZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyV2luZG93cyhzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzICYmICdGQUlMRUQnID09PSBzdGF0dXMudG9VcHBlckNhc2UoKSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKHN0YXR1cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2VDb250aW51ZShzdGF0dXMpIHtcclxuICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGNocm9tZWRyaXZlcidzIG9ubHkgd2hlbiBydW5uaW5nIGZyb20gd2l0aGluIHRoZSBJREUgYW5kIHRlc3QgZGlkIG5vdCBmYWlsXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQgJiYgKCFzdGF0dXMgfHwgJ0ZBSUxFRCcgIT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjU3luYygndGFza2tpbGwgL0lNIGNocm9tZWRyaXZlci5leGUgL0YnLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgY2hyb21lZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2xlYW51cCBlZGdlZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBmb3Igbm93XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgbXNlZGdlZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucmVzb2x2ZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGJyb3dzZXIgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgPT09IHRydWUgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RCcm93c2VyTG9nKGxvZykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNsZWFyIHRyYW5zYWN0aW9ucyB0byBhdm9pZCBkdXBsaWNhdGUgbmFtZXMgYWNyb3NzIGl0ZXJhdGlvbnNcclxuICAgICAgICAvLyBhbHNvIHNob3VsZCB0aHJvdyBvbiBkdXBsaWNhdGUgbmFtZXMuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBubyB0cmFuc2FjdGlvbnMgc2V0IGlmIHRlc3QgZmFpbHMgYmVmb3JlIHdlYi50cmFuc2FjdGlvbiBjb21tYW5kXHJcbiAgICAgICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ycy5oYXIgPSB0aGlzLnRyYW5zYWN0aW9ucztcclxuICAgICAgICBjb25zdCBoYXNGYWlsZWQgPSBlcnJvciAhPT0gdW5kZWZpbmVkICYmIGVycm9yICE9PSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50KGhhc0ZhaWxlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgKHNjcmVlbnNob3QgYW5kIHRpdGxlKSBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVzKSAmJiBoYW5kbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJy4uL2xpYi90ZXh0LXRvLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZUltYWdlICYmIHR5cGVvZiB0aXRsZUltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSW1hZ2UgPSB0aXRsZUltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMSknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMiknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgzKScsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9hZGp1c3RCcm93c2VyTG9nKGxvZykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgYnJvd3NlciB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgU0VWRVJFIGxvZyBsZXZlbCB0byBFUlJPUlxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsID09PSAnU0VWRVJFJyA/ICdFUlJPUicgOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogJ2Jyb3dzZXInXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogRklYTUU6IFRoZXJlIGlzIGEgYnVnIHdpdGggSUUuIFNlZSB0aGUgY29tbWVudCB3aXRoaW4gZnVuY3Rpb24gYm9keS5cclxuICAgICAqXHJcbiAgICAgKiAgZG9tQ29udGVudExvYWRlZCAoYWthIEZpcnN0IFZpc3VhbCBUaW1lKS0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKiAgbG9hZCAoYWthIEZ1bGwgTG9hZCBUaW1lKSAgICAgICAgICAgICAgIC0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHByb2Nlc3NpbmcgbW9kZWw6XHJcbiAgICAgKlxyXG4gICAgICogIDEuIG5hdmlnYXRpb25TdGFydCAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgcmVxdWVzdGVkIHRoZSBkb2N1bWVudC5cclxuICAgICAqICAyLiAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gTm90IHJlbGV2YW50IHRvIHVzLiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvbmF2aWdhdGlvbi10aW1pbmcvI3Byb2Nlc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgKiAgMy4gZG9tTG9hZGluZyAgICAgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIHN0YXJ0cyBwYXJzaW5nIHRoZSBkb2N1bWVudC5cclxuICAgICAqICA0LiBkb21JbnRlcmFjdGl2ZSAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGFzIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGRvY3VtZW50IGFuZCB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZS5cclxuICAgICAqICA1LiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAgIC0gVGhlIGRvY3VtZW50IGhhcyBiZWVuIGNvbXBsZXRlbHkgbG9hZGVkIGFuZCBwYXJzZWQgYW5kIGRlZmVycmVkIHNjcmlwdHMsIGlmIGFueSwgaGF2ZSBleGVjdXRlZC4gXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzeW5jIHNjcmlwdHMsIGlmIGFueSwgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlc2hlZXRzWzFdLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgbG9hZGluZy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0gLSBTdHlsZXNoZWV0cyAvdXN1YWxseS8gZGVmZXIgdGhpcyBldmVudCEgLSBodHRwOi8vbW9saWx5LmRlL3dlYmxvZy9kb21jb250ZW50bG9hZGVkXHJcbiAgICAgKiAgNi4gZG9tQ29udGVudExvYWRlZEV2ZW50RW5kICAgICAtIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy4gRS5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRE9NIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXCIpO1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICogIDcuIGRvbUNvbXBsZXRlICAgICAgICAgICAgICAgICAgLSBUaGUgRE9NIHRyZWUgaXMgY29tcGxldGVseSBidWlsdC4gQXN5bmMgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLlxyXG4gICAgICogIDguIGxvYWRFdmVudFN0YXJ0ICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXZlIGZpbmlzaGVkIGxvYWRpbmcgYWxsIHRoZSByZXNvdXJjZXMgbGlrZSBpbWFnZXMsIHN3ZiwgZXRjLlxyXG4gICAgICogIDkuIGxvYWRFdmVudEVuZCAgICAgICAgICAgICAgICAgLSBUaGUgbG9hZCBldmVudCBjYWxsYmFjaywgaWYgYW55LCBmaW5pc2hlZCBleGVjdXRpbmcuXHJcbiAgICAgKi9cclxuICAgIF9nZXRTdGF0cyhjb21tYW5kTmFtZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmV0Y2hTdGF0cyAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5faXNBY3Rpb24oY29tbWFuZE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkID0gMDtcclxuICAgICAgICAgICAgdmFyIGxvYWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2FtZVBhZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRPRE86IGhhbmRsZSBmb2xsb3dpbmcgc2l0dWF0aW9uOlxyXG4gICAgICAgICAgICAvLyBpZiBuYXZpZ2F0ZVN0YXJ0IGVxdWFscyB0byB0aGUgb25lIHdlIGdvdCBmcm9tIHByZXZpb3VzIGF0dGVtcHQgKHdlIG5lZWQgdG8gc2F2ZSBpdClcclxuICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgYXJlIHN0aWxsIG9uIHRoZSBzYW1lIHBhZ2UgYW5kIGRvbid0IG5lZWQgdG8gcmVjb3JkIGxvYWQvZG9tQ29udGVudExvYWRlZCB0aW1lc1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3RFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qZ2xvYmFsIHdpbmRvdyovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWluZ3MgPSBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvblN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubG9hZEV2ZW50U3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPiAwICYmIHRpbWluZ3MubG9hZEV2ZW50U3RhcnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVQYWdlID0gdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSAmJiB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID09IHRpbWluZ3MubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA9IHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkRXZlbnRTdGFydCA9IHRpbWluZ3MubG9hZEV2ZW50U3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Db250ZW50TG9hZGVkID0gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgLSBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgPSBsb2FkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgbG9hZEV2ZW50U3RhcnQgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGVjdXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGVycm9yIGluc2lkZSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZXhlY3V0ZUVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnQgZXJyb3IgZnJvbSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICAvLyBjb3VsZG4ndCBnZXQgdGltaW5ncy5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzYW1lUGFnZSA/IHt9IDogeyBEb21Db250ZW50TG9hZGVkRXZlbnQ6IGRvbUNvbnRlbnRMb2FkZWQsIExvYWRFdmVudDogbG9hZCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB1c2VyIHBhc3NlZCBhIGNvbXBsZXggb2JqZWN0IGJ5IG1pc3Rha2VcclxuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBsaW1pdCB0aGUgbmFtZSBsZW5ndGggKHNpbmNlIHdlIGNhbid0IHN0b3JlIHZhbHVlcyBsYXJnZXIgdGhhbiA1MTJCIGluIHRoZSBkYXRhYmFzZSlcclxuICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCA1MTIpO1xyXG5cclxuICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zYWN0aW9uc1tuYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IE9iamVjdC5rZXlzKHRoaXMudHJhbnNhY3Rpb25zKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc3RhcnRzV2l0aChuYW1lKSkubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZSsnICgjJytjb3VudGVyKycpJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSBtb2RVdGlscy5nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZ2V0SEFSKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9nVHlwZXMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygncGVyZm9ybWFuY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldExvZ3MoJ3BlcmZvcm1hbmNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW4gb25lIGluc3RhbmNlLCBsb2dzIHdhcyBub3QgaXRlcmFibGUgZm9yIHNvbWUgcmVhc29uIC0gaGVuY2UgdGhlIGZvbGxvd2luZyBjaGVjazpcclxuICAgICAgICAgICAgICAgIGlmICghbG9ncyB8fCB0eXBlb2YgbG9nc1tTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2dldEhBUjogbG9ncyBub3QgaXRlcmFibGU6ICcgKyBKU09OLnN0cmluZ2lmeShsb2dzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ09iaiA9IEpTT04ucGFyc2UobG9nLm1lc3NhZ2UpOyAgIC8vIHJldHVybmVkIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5wdXNoKG1zZ09iai5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXIgPSBoYXJGcm9tTWVzc2FnZXMoZXZlbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShoYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmV0Y2ggSEFSOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrV2FpdEZvckFuZ3VsYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckFuZ3VsYXIodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyVGltZW91dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUNyZWRlbnRpYWxzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0tleTogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICBjb25zdCBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50ID0gbGFtYmRhUmVzdENsaWVudC5BdXRvbWF0aW9uQ2xpZW50KFxyXG4gICAgICAgICAgICAgICAgbGFtYmRhQ3JlZGVudGlhbHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXNfaW5kOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGFtYmRhQXV0b21hdGlvbkNsaWVudC51cGRhdGVTZXNzaW9uQnlJZChzZXNzaW9uSWQsIHJlcXVlc3RCb2R5LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gTGFtYmRhVGVzdDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHRiID0gbmV3IFRlc3RpbmdCb3Qoe1xyXG4gICAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYXBpX3NlY3JldDogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3REYXRhID0geyBcInRlc3Rbc3VjY2Vzc11cIiA6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyBcIjFcIiA6IFwiMFwiIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0Yi51cGRhdGVUZXN0KHRlc3REYXRhLCBzZXNzaW9uSWQsIGZ1bmN0aW9uKGVycm9yLCB0ZXN0RGV0YWlscykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBUZXN0aW5nQm90OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXNTZWxlbm9pZEh1YihzZWxlbml1bVVybCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGAke3NlbGVuaXVtVXJsfWAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5ICYmIGJvZHkubGVuZ3RoICYmIGJvZHkuaW5kZXhPZignWW91IGFyZSB1c2luZyBTZWxlbm9pZCcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBpbnNpZGUgU2VsZW5vaWQsIHRoZW4gZG93bmxvYWQgdGhlIHZpZGVvIGlmIHRlc3QgaGFzIGZhaWxlZFxyXG4gICAgYXN5bmMgX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50KGhhc0ZhaWxlZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZWNvcmRWaWRlbyAmJiAhaGFzRmFpbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmlkZW9GaWxlVXJsID0gYCR7dGhpcy5zZWxlbml1bVVybEJhc2V9L3ZpZGVvLyR7dGhpcy5zZXNzaW9uSWR9Lm1wNGA7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBgJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICB0aGlzLnJzLmF0dGFjaG1lbnRzLnB1c2gobW9kVXRpbHMubmV3VmlkZW9BdHRhY2htZW50KGZpbGVOYW1lLCB2aWRlb0ZpbGVVcmwpKTtcclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
@@ -265,7 +265,9 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
265
265
|
} // just in case user passed a complex object by mistake
|
|
266
266
|
|
|
267
267
|
|
|
268
|
-
name = name.toString();
|
|
268
|
+
name = name.toString(); // limit the name length (since we can't store values larger than 512B in the database)
|
|
269
|
+
|
|
270
|
+
name = name.slice(0, 512);
|
|
269
271
|
global._lastTransactionName = name;
|
|
270
272
|
}
|
|
271
273
|
/*
|
|
@@ -369,4 +371,4 @@ class WindowsModule extends _WebDriverModule.default {
|
|
|
369
371
|
}
|
|
370
372
|
|
|
371
373
|
exports.default = WindowsModule;
|
|
372
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJkaXNwb3NlIiwic3RhdHVzIiwidG9VcHBlckNhc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0IiwiZGVsZXRlU2Vzc2lvbiIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsInRvU3RyaW5nIiwiZ2xvYmFsIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJfaXNBY3Rpb24iLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJ0YWtlU2NyZWVuc2hvdCIsImVycm9yIiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJsb2dzIiwiZ2V0QXBwaXVtTG9ncyIsIkFycmF5IiwiaXNBcnJheSIsImxvZ0VudHJ5IiwicHVzaCIsIl9nZXRXZGlvTG9jYXRvciIsImxvY2F0b3IiLCJTQ1JJUFRfRVJST1IiLCJpbmRleE9mIiwic3Vic3RyIiwibGVuZ3RoIiwiZ2V0V2Rpb0xvY2F0b3IiLCJtYXRjaFBhdHRlcm4iLCJtb2RVdGlscyIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUdBLE1BQU1BLFdBQVcsR0FBRyxLQUFwQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDhCQUEzQjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxNQUFwQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQUMsTUFBRCxFQUFTLGFBQVQsQ0FBL0I7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxNQUFELEVBQVEsS0FBUixFQUFjLE9BQWQsRUFBc0IsT0FBdEIsRUFBOEIsUUFBOUIsRUFBdUMsVUFBdkMsQ0FBeEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUFLLElBQWxDLEMsQ0FBbUQ7O0FBQ25ELE1BQU1DLHdCQUF3QixHQUFHO0FBQzdCQyxFQUFBQSxVQUFVLEVBQUUsK0NBRGlCO0FBRTdCQyxFQUFBQSxVQUFVLEVBQUUsMkNBRmlCO0FBRzdCQyxFQUFBQSxPQUFPLEVBQUUsb0NBSG9CO0FBSTdCQyxFQUFBQSxLQUFLLEVBQUUsb0NBSnNCO0FBSzdCQyxFQUFBQSxPQUFPLEVBQUUsbURBTG9CO0FBTTdCQyxFQUFBQSxXQUFXLEVBQUU7QUFOZ0IsQ0FBakM7O0FBU2UsTUFBTUMsYUFBTixTQUE0QkMsd0JBQTVCLENBQTRDO0FBQ3ZEQyxFQUFBQSxXQUFXLENBQUNDLE9BQUQsRUFBVUMsT0FBVixFQUFt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QVNDLFVBQW5DO0FBQ0EsU0FBS3BHLE9BQUwsQ0FBYXFHLFdBQWIsR0FBMkJGLGVBQVNFLFdBQXBDO0FBQ0EsU0FBS3JHLE9BQUwsQ0FBYXNHLGVBQWIsR0FBK0JILGVBQVNHLGVBQXhDO0FBQ0EsU0FBS3RHLE9BQUwsQ0FBYXVHLGdCQUFiLEdBQWdDSixlQUFTSSxnQkFBekM7QUFDQSxTQUFLdkcsT0FBTCxDQUFhd0csa0JBQWIsR0FBa0NMLGVBQVNLLGtCQUEzQztBQUNBLFNBQUt4RyxPQUFMLENBQWF5RyxzQkFBYixHQUFzQ04sZUFBU00sc0JBQS9DO0FBQ0EsU0FBS3pHLE9BQUwsQ0FBYTBHLGNBQWIsR0FBOEJQLGVBQVNPLGNBQXZDO0FBQ0EsU0FBSzFHLE9BQUwsQ0FBYTJHLDRCQUFiLEdBQTRDUixlQUFTUSw0QkFBckQ7QUFDQSxTQUFLM0csT0FBTCxDQUFhNEcsb0JBQWIsR0FBb0NULGVBQVNTLG9CQUE3QztBQUNBLFNBQUs1RyxPQUFMLENBQWE2RywrQkFBYixHQUErQ1YsZUFBU1UsK0JBQXhEO0FBQ0EsU0FBSzdHLE9BQUwsQ0FBYThHLGtCQUFiLEdBQWtDWCxlQUFTVyxrQkFBM0M7QUFDQSxTQUFLOUcsT0FBTCxDQUFhK0csMEJBQWIsR0FBMENaLGVBQVNZLDBCQUFuRDtBQUNBLFNBQUsvRyxPQUFMLENBQWFnSCxxQkFBYixHQUFxQ2IsZUFBU2EscUJBQTlDO0FBQ0g7O0FBblNzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2luXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBXaW5kb3dzIG5hdGl2ZSBhcHBsaWNhdGlvbnMgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogICBcclxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICAqIGB+QWNjZXNzaWJpbGl0eUlkYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBBdXRvbWF0aW9uSWQuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lLiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIE5hbWUuXHJcbiAqICAqIGBpZD1JRGAgLSAgTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBSdW50aW1lSUQuICBcclxuICogIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqICBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqICBcclxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICovXHJcblxyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3aW4nO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQVBQID0gJ1Jvb3QnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsJ3RhcCcsJ2NsaWNrJywnc3dpcGUnLCdzdWJtaXQnLCdzZXRWYWx1ZSddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuY29uc3QgV0lORE9XU19TVEFOREFSRF9BUFBfSURTID0ge1xyXG4gICAgQ2FsY3VsYXRvcjogJ01pY3Jvc29mdC5XaW5kb3dzQ2FsY3VsYXRvcl84d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBBbGFybUNsb2NrOiAnTWljcm9zb2Z0LldpbmRvd3NBbGFybXNfOHdla3liM2Q4YmJ3ZSFBcHAnLFxyXG4gICAgTm90ZXBhZDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbm90ZXBhZC5leGUnLFxyXG4gICAgUGFpbnQ6ICdDOlxcXFxXaW5kb3dzXFxcXFN5c3RlbTMyXFxcXG1zcGFpbnQuZXhlJyxcclxuICAgIFBhaW50M0Q6ICdNaWNyb3NvZnQuTVNQYWludF84d2VreWIzZDhiYndlIU1pY3Jvc29mdC5NU1BhaW50JyxcclxuICAgIFN0aWNreU5vdGVzOiAnTWljcm9zb2Z0Lk1pY3Jvc29mdFN0aWNreU5vdGVzXzh3ZWt5YjNkOGJid2UhQXBwJ1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2luZG93c01vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV0d29ya1JlcXVlc3RzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnYXBwJyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIChtYW5kYXRvcnkgZm9yIFdpbkFwcERyaXZlcilcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IERFRkFVTFRfQVBQO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwQ2FwVmFsID0gdGhpcy5jYXBzLmFwcDtcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgJ2FwcCcgdmFsdWUgaW4gdGhlIFdpbmRvd3Mgc3RhbmRhcmQgYXBwIGxpc3RcclxuICAgICAgICAgICAgY29uc3QgYXBwTmFtZXMgPSBPYmplY3Qua2V5cyhXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMpO1xyXG4gICAgICAgICAgICBpZiAoYXBwTmFtZXMuaW5jbHVkZXMoYXBwQ2FwVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEU1thcHBDYXBWYWxdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHBsYXRmb3JtTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMucGxhdGZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPSAnV2luZG93cyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGRldmljZU5hbWUgZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmRldmljZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSAnV2luZG93c1BDJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1WZXJzaW9uIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9ICcxLjAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2UoYXBwaXVtVXJsKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcblxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZSB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBQcml2YXRlXHJcbiAgICAgKi9cclxuXHJcbiAgICBfaXNBY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NDUkVFTlNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGUpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gX2dldExvZ3MobmFtZSkge1xyXG4gICAgLy8gICAgIGlmICghTk9fTE9HU19DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2dzKCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIF9hZGp1c3RBcHBpdW1Mb2cobG9nLCBzcmMpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGRldmljZSB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIEFwcGl1bSBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RBcHBpdW1Mb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gdGhpcy5nZXRBcHBpdW1Mb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nRW50cnkgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nRW50cnksICdhcHBpdW0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIEFwcGl1bSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFsb2NhdG9yKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gYC8vKltAaWQ9XCIke2xvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCl9XCJdYDtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnW25hbWU9XCInICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ1wiXSc7XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IHRoaXMuX2dldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
|
|
374
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJkaXNwb3NlIiwic3RhdHVzIiwidG9VcHBlckNhc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0IiwiZGVsZXRlU2Vzc2lvbiIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsInRvU3RyaW5nIiwic2xpY2UiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwiZXJyb3IiLCJfYWRqdXN0QXBwaXVtTG9nIiwibG9nIiwic3JjIiwidGltZSIsInRpbWVzdGFtcCIsIm1zZyIsIm1lc3NhZ2UiLCJsZXZlbCIsIl9pdGVyYXRpb25TdGFydCIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImxvZ3MiLCJnZXRBcHBpdW1Mb2dzIiwiQXJyYXkiLCJpc0FycmF5IiwibG9nRW50cnkiLCJwdXNoIiwiX2dldFdkaW9Mb2NhdG9yIiwibG9jYXRvciIsIlNDUklQVF9FUlJPUiIsImluZGV4T2YiLCJzdWJzdHIiLCJsZW5ndGgiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsIm1vZFV0aWxzIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQTNCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLE1BQXBCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxNQUFELEVBQVMsYUFBVCxDQUEvQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUFDLE1BQUQsRUFBUSxLQUFSLEVBQWMsT0FBZCxFQUFzQixPQUF0QixFQUE4QixRQUE5QixFQUF1QyxVQUF2QyxDQUF4QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEtBQUssSUFBbEMsQyxDQUFtRDs7QUFDbkQsTUFBTUMsd0JBQXdCLEdBQUc7QUFDN0JDLEVBQUFBLFVBQVUsRUFBRSwrQ0FEaUI7QUFFN0JDLEVBQUFBLFVBQVUsRUFBRSwyQ0FGaUI7QUFHN0JDLEVBQUFBLE9BQU8sRUFBRSxvQ0FIb0I7QUFJN0JDLEVBQUFBLEtBQUssRUFBRSxvQ0FKc0I7QUFLN0JDLEVBQUFBLE9BQU8sRUFBRSxtREFMb0I7QUFNN0JDLEVBQUFBLFdBQVcsRUFBRTtBQU5nQixDQUFqQzs7QUFTZSxNQUFNQyxhQUFOLFNBQTRCQyx3QkFBNUIsQ0FBNEM7QUFDdkRDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxP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QUFDQSxTQUFLNUYsT0FBTCxDQUFhbUcsWUFBYixHQUE0QkMsZUFBU0QsWUFBckM7QUFDQSxTQUFLbkcsT0FBTCxDQUFhcUcsVUFBYixHQUEwQkQsZUFBU0MsVUFBbkM7QUFDQSxTQUFLckcsT0FBTCxDQUFhc0csV0FBYixHQUEyQkYsZUFBU0UsV0FBcEM7QUFDQSxTQUFLdEcsT0FBTCxDQUFhdUcsZUFBYixHQUErQkgsZUFBU0csZUFBeEM7QUFDQSxTQUFLdkcsT0FBTCxDQUFhd0csZ0JBQWIsR0FBZ0NKLGVBQVNJLGdCQUF6QztBQUNBLFNBQUt4RyxPQUFMLENBQWF5RyxrQkFBYixHQUFrQ0wsZUFBU0ssa0JBQTNDO0FBQ0EsU0FBS3pHLE9BQUwsQ0FBYTBHLHNCQUFiLEdBQXNDTixlQUFTTSxzQkFBL0M7QUFDQSxTQUFLMUcsT0FBTCxDQUFhMkcsY0FBYixHQUE4QlAsZUFBU08sY0FBdkM7QUFDQSxTQUFLM0csT0FBTCxDQUFhNEcsNEJBQWIsR0FBNENSLGVBQVNRLDRCQUFyRDtBQUNBLFNBQUs1RyxPQUFMLENBQWE2RyxvQkFBYixHQUFvQ1QsZUFBU1Msb0JBQTdDO0FBQ0EsU0FBSzdHLE9BQUwsQ0FBYThHLCtCQUFiLEdBQStDVixlQUFTVSwrQkFBeEQ7QUFDQSxTQUFLOUcsT0FBTCxDQUFhK0csa0JBQWIsR0FBa0NYLGVBQVNXLGtCQUEzQztBQUNBLFNBQUsvRyxPQUFMLENBQWFnSCwwQkFBYixHQUEwQ1osZUFBU1ksMEJBQW5EO0FBQ0EsU0FBS2hILE9BQUwsQ0FBYWlILHFCQUFiLEdBQXFDYixlQUFTYSxxQkFBOUM7QUFDSDs7QUF2U3NEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3aW5cclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIFdpbmRvd3MgbmF0aXZlIGFwcGxpY2F0aW9ucyBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiAgIFxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYH5BY2Nlc3NpYmlsaXR5SWRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIEF1dG9tYXRpb25JZC5cclxuICogICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gTmFtZS5cclxuICogICogYGlkPUlEYCAtICBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIFJ1bnRpbWVJRC4gIFxyXG4gKiAgXHJcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcclxuICogIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKi9cclxuXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3dpbic7XHJcbmNvbnN0IERFRkFVTFRfQVBQSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9BUFAgPSAnUm9vdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywndGFwJywnY2xpY2snLCdzd2lwZScsJ3N1Ym1pdCcsJ3NldFZhbHVlJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5jb25zdCBXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMgPSB7XHJcbiAgICBDYWxjdWxhdG9yOiAnTWljcm9zb2Z0LldpbmRvd3NDYWxjdWxhdG9yXzh3ZWt5YjNkOGJid2UhQXBwJyxcclxuICAgIEFsYXJtQ2xvY2s6ICdNaWNyb3NvZnQuV2luZG93c0FsYXJtc184d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBOb3RlcGFkOiAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFxub3RlcGFkLmV4ZScsXHJcbiAgICBQYWludDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbXNwYWludC5leGUnLFxyXG4gICAgUGFpbnQzRDogJ01pY3Jvc29mdC5NU1BhaW50Xzh3ZWt5YjNkOGJid2UhTWljcm9zb2Z0Lk1TUGFpbnQnLFxyXG4gICAgU3RpY2t5Tm90ZXM6ICdNaWNyb3NvZnQuTWljcm9zb2Z0U3RpY2t5Tm90ZXNfOHdla3liM2Q4YmJ3ZSFBcHAnXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaW5kb3dzTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xyXG4gICAgICAgICAgICBhcHBpdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsIHx8IERFRkFVTFRfQVBQSVVNX1VSTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWFrZSBzdXJlICdhcHAnIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgKG1hbmRhdG9yeSBmb3IgV2luQXBwRHJpdmVyKVxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmFwcCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gREVGQVVMVF9BUFA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhcHBDYXBWYWwgPSB0aGlzLmNhcHMuYXBwO1xyXG4gICAgICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSAnYXBwJyB2YWx1ZSBpbiB0aGUgV2luZG93cyBzdGFuZGFyZCBhcHAgbGlzdFxyXG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lcyA9IE9iamVjdC5rZXlzKFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyk7XHJcbiAgICAgICAgICAgIGlmIChhcHBOYW1lcy5pbmNsdWRlcyhhcHBDYXBWYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gV0lORE9XU19TVEFOREFSRF9BUFBfSURTW2FwcENhcFZhbF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1OYW1lIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA9ICdXaW5kb3dzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgZGV2aWNlTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuZGV2aWNlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9ICdXaW5kb3dzUEMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBwbGF0Zm9ybVZlcnNpb24gZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gJzEuMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyckhlbHBlci5nZXRBcHBpdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCB9KTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB1c2VyIHBhc3NlZCBhIGNvbXBsZXggb2JqZWN0IGJ5IG1pc3Rha2VcclxuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBsaW1pdCB0aGUgbmFtZSBsZW5ndGggKHNpbmNlIHdlIGNhbid0IHN0b3JlIHZhbHVlcyBsYXJnZXIgdGhhbiA1MTJCIGluIHRoZSBkYXRhYmFzZSlcclxuICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCA1MTIpO1xyXG5cclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBQcml2YXRlXHJcbiAgICAgKi9cclxuXHJcbiAgICBfaXNBY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NDUkVFTlNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGUpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gX2dldExvZ3MobmFtZSkge1xyXG4gICAgLy8gICAgIGlmICghTk9fTE9HU19DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2dzKCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIF9hZGp1c3RBcHBpdW1Mb2cobG9nLCBzcmMpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGRldmljZSB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIEFwcGl1bSBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RBcHBpdW1Mb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gdGhpcy5nZXRBcHBpdW1Mb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nRW50cnkgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nRW50cnksICdhcHBpdW0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIEFwcGl1bSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFsb2NhdG9yKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gYC8vKltAaWQ9XCIke2xvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCl9XCJdYDtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnW25hbWU9XCInICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ1wiXSc7XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IHRoaXMuX2dldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
|