appcd-client
Advanced tools
Comparing version 2.0.4 to 3.0.0
@@ -0,1 +1,8 @@ | ||
# v3.0.0 (Jun 12, 2020) | ||
* BREAKING CHANGE: Requires Node.js 10.13.0 or newer. | ||
[(DAEMON-334)](https://jira.appcelerator.org/browse/DAEMON-334) | ||
* feat: Added `startDaemon` flag to `request()` method which passes it through to `connect()`. | ||
* chore: Updated dependencies. | ||
# v2.0.4 (Jan 13, 2020) | ||
@@ -2,0 +9,0 @@ |
@@ -16,4 +16,2 @@ "use strict"; | ||
var _uuid = _interopRequireDefault(require("uuid")); | ||
var _ws = _interopRequireDefault(require("ws")); | ||
@@ -31,2 +29,4 @@ | ||
var _uuid = require("uuid"); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -286,2 +286,5 @@ | ||
* @param {Object} [pathOrParams.data] - An object to send. | ||
* @param {Boolean} [pathOrParams.startDaemon] - When `true`, ensures the daemon is running and | ||
* if not, attempts to locate the daemon, determine the configuration, start it, and | ||
* re-connect. | ||
* @param {String} [pathOrParams.type] - The request type. Valid types include `call`, | ||
@@ -300,5 +303,3 @@ * `subscribe`, and `unsubscribe`. | ||
const emitter = new _events.EventEmitter(); | ||
const id = _uuid.default.v4(); | ||
const id = (0, _uuid.v4)(); | ||
const startTime = new Date(); | ||
@@ -310,5 +311,9 @@ const req = { | ||
}; | ||
let startDaemon = false; | ||
if (typeof pathOrParams === 'object') { | ||
Object.assign(req, pathOrParams); | ||
({ | ||
startDaemon | ||
} = req); | ||
} | ||
@@ -331,3 +336,5 @@ | ||
setImmediate(() => { | ||
this.connect().once('connected', client => { | ||
this.connect({ | ||
startDaemon | ||
}).once('connected', client => { | ||
// if a response is chunked, this handler will be invoked multiple times | ||
@@ -537,2 +544,2 @@ this.requests[id] = { | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNsaWVudC5qcyJdLCJuYW1lcyI6WyJFcnJvciIsInByZXBhcmVTdGFja1RyYWNlIiwicmVxdWlyZSIsImVycm9yIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJub3RlIiwib2siLCJhcHBjZExvZ2dlciIsInN0eWxlcyIsIkNsaWVudCIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNvY2tldCIsInJlcXVlc3RzIiwiaG9zdCIsInBvcnQiLCJUeXBlRXJyb3IiLCJ1c2VyQWdlbnQiLCJjb25zdHJ1Y3RVc2VyQWdlbnQiLCJjb25uZWN0IiwicGFyYW1zIiwiZW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInRyeUNvbm5lY3QiLCJlbWl0IiwiaGVhZGVycyIsImxvY2FsZVZhbHVlIiwicHJvY2VzcyIsImVudiIsIkFQUENEX0xPQ0FMRSIsInVybCIsIldlYlNvY2tldCIsIm9uIiwiZGF0YSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJlIiwibWVzc2FnZSIsIm1zZ3BhY2siLCJkZWNvZGUiLCJpZCIsImhhbmRsZXIiLCJvbmNlIiwiZXJyIiwiY2xvc2UiLCJjb2RlIiwic3RhcnREYWVtb24iLCJhcHBjZCIsInVuZGVmaW5lZCIsImZpbmQiLCJmZXRjaGVkQXBwY2RDb25maWciLCJydW4iLCJzdGFydCIsImNmZyIsInN0ZG91dCIsImN1cnJlbnRIb3N0IiwiY3VycmVudFBvcnQiLCJob3N0bmFtZSIsIm5ld0hvc3QiLCJuZXdQb3J0IiwicmVzdWx0IiwiYW1wbGlmeSIsInBhY2thZ2VzIiwiYXBwY2RQa2ciLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJwIiwibmFtZSIsImFwcGNkUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwidmVyc2lvbnMiLCJ2ZXJzaW9uIiwiZnMiLCJleGlzdHNTeW5jIiwic2V0SW1tZWRpYXRlIiwicmVxdWVzdCIsInBhdGhPclBhcmFtcyIsInV1aWQiLCJ2NCIsInN0YXJ0VGltZSIsIkRhdGUiLCJyZXEiLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwiY2xpZW50IiwicmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNDbGFzcyIsIk1hdGgiLCJmbG9vciIsImZpbiIsInN0eWxlIiwic3RhdHVzQ29kZSIsIlN0cmluZyIsInByb3AiLCJrZXlzIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwidmFsdWUiLCJ3cml0YWJsZSIsInNlbmQiLCJzdHJpbmdpZnkiLCJhcmdzIiwiZGlzY29ubmVjdCIsInBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJlbnRyeSIsIm1vZHVsZSIsInBhcmVudCIsImZpbGVuYW1lIiwiYmFzZW5hbWUiLCJyb290IiwiZGlyIiwiZGlybmFtZSIsInBrZ0pzb25GaWxlIiwiam9pbiIsInB1c2giLCJyZWFkSnNvblN5bmMiLCJyZWFkRmlsZVN5bmMiLCJfX2Rpcm5hbWUiLCJzb21lIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJwbGF0Zm9ybSIsImFyY2hpdGVjdHVyZSIsImJpbiIsIndoaWNoIiwic3luYyIsImNtZCIsInRlc3QiLCJleGVjUGF0aCIsInNoaWZ0IiwiREVCVUciLCJTTk9PUExPR0ciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQWhCQTtBQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDQyxpQkFBWCxFQUE4QjtBQUM3QkMsRUFBQUEsT0FBTyxDQUFDLDZCQUFELENBQVA7QUFDQTs7QUFlRCxNQUFNO0FBQUVDLEVBQUFBLEtBQUY7QUFBU0MsRUFBQUE7QUFBVCxJQUFpQiwwQkFBWSxjQUFaLENBQXZCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBLFNBQVQ7QUFBb0JDLEVBQUFBLElBQXBCO0FBQTBCQyxFQUFBQTtBQUExQixJQUFpQ0MscUJBQVlDLE1BQW5EO0FBRUE7Ozs7QUFHZSxNQUFNQyxNQUFOLENBQWE7QUFDM0I7Ozs7Ozs7Ozs7QUFV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Q0FBRSxHQUFFa0ksR0FBSSxJQUFHM0IsSUFBSSxDQUFDYyxJQUFMLENBQVUsR0FBVixDQUFlLEVBQTFCLENBQTZCLEVBQXBELENBQUgsQ0FIcUIsQ0FLckI7O0FBQ0EsUUFBTTtBQUFFN0YsSUFBQUE7QUFBRixNQUFVRCxPQUFoQjtBQUNBLFNBQU9DLEdBQUcsQ0FBQzhHLEtBQVg7QUFDQSxTQUFPOUcsR0FBRyxDQUFDK0csU0FBWDtBQUVBLFFBQU05RSxNQUFNLEdBQUcsOEJBQVV5RSxHQUFWLEVBQWUzQixJQUFmLEVBQXFCO0FBQUUvRSxJQUFBQTtBQUFGLEdBQXJCLENBQWY7O0FBQ0EsTUFBSSxDQUFDaUMsTUFBTSxDQUFDNkIsTUFBWixFQUFvQjtBQUNuQixXQUFPN0IsTUFBUDtBQUNBOztBQUVELFFBQU0sSUFBSS9ELEtBQUosQ0FBVyxHQUFFcUksR0FBSSxxQkFBb0J0RSxNQUFNLENBQUM2QixNQUFPLEVBQW5ELENBQU47QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuaW1wb3J0IGFwcGNkTG9nZ2VyIGZyb20gJ2FwcGNkLWxvZ2dlcic7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IG1zZ3BhY2sgZnJvbSAnbXNncGFjay1saXRlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQgV2ViU29ja2V0IGZyb20gJ3dzJztcbmltcG9ydCB3aGljaCBmcm9tICd3aGljaCc7XG5cbmltcG9ydCB7IGFyY2ggfSBmcm9tICdhcHBjZC11dGlsJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2NhbGUgfSBmcm9tICdhcHBjZC1yZXNwb25zZSc7XG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgeyBlcnJvciwgbG9nIH0gPSBhcHBjZExvZ2dlcignYXBwY2Q6Y2xpZW50Jyk7XG5jb25zdCB7IGFsZXJ0LCBoaWdobGlnaHQsIG5vdGUsIG9rIH0gPSBhcHBjZExvZ2dlci5zdHlsZXM7XG5cbi8qKlxuICogVGhlIGNsaWVudCBmb3IgY29ubmVjdGluZyB0byB0aGUgYXBwY2Qgc2VydmVyLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnQge1xuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGNsaWVudC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhvc3Q9JzEyNy4wLjAuMSddIC0gVGhlIGhvc3QgdG8gY29ubmVjdCB0by5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnBvcnQ9MTczMl0gLSBUaGUgcG9ydCB0byBjb25uZWN0IHRvLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudXNlckFnZW50XSAtIFRoZSB1c2VyIGFnZW50IGNvbnRhaW5pbmcgdGhlIG5hbWUgYW5kXG5cdCAqIHZlcnNpb24gb2YgdGhlIGNsaWVudC4gSWYgbm90IHNwZWNpZmllZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0LyoqXG5cdFx0ICogVGhlIHdlYnNvY2tldCB0byB0aGUgc2VydmVyLlxuXHRcdCAqIEB0eXBlIHtXZWJTb2NrZXR9XG5cdFx0ICogQGFjY2VzcyBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5zb2NrZXQgPSBudWxsO1xuXG5cdFx0LyoqXG5cdFx0ICogQW4gaW50ZXJuYWwgbWFwIHVzZWQgdG8gZGlzcGF0Y2ggcmVzcG9uc2VzIHRvIHJlcXVlc3RlcnMuXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKiBAYWNjZXNzIHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLnJlcXVlc3RzID0ge307XG5cblx0XHQvKipcblx0XHQgKiBUaGUgaG9zdCB0byBjb25uZWN0IHRvLlxuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQGFjY2VzcyBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5ob3N0ID0gb3B0cy5ob3N0IHx8ICcxMjcuMC4wLjEnO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIHBvcnQgdG8gY29ubmVjdCB0by5cblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdGlmIChvcHRzLnBvcnQgJiYgKHR5cGVvZiBvcHRzLnBvcnQgIT09ICdudW1iZXInIHx8IG9wdHMucG9ydCA8IDEgfHwgb3B0cy5wb3J0ID4gNjU1MzUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHBvcnQsIGV4cGVjdGVkIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgNjU1MzUnKTtcblx0XHR9XG5cdFx0dGhpcy5wb3J0ID0gb3B0cy5wb3J0IHx8IDE3MzI7XG5cblx0XHQvKipcblx0XHQgKiBUaGUgdXNlciBhZ2VudCBjb250YWluaW5nIHRoZSBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoZSBjbGllbnQuIElmIG5vdFxuXHRcdCAqIHNwZWNpZmllZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuXHRcdCAqIEB0eXBlIHtTdHJpbmd9XG5cdFx0ICogQGFjY2VzcyBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy51c2VyQWdlbnQgPSBjb25zdHJ1Y3RVc2VyQWdlbnQob3B0cy51c2VyQWdlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgdmlhIGEgd2Vic29ja2V0LiBZb3UgZG8gbm90IG5lZWQgdG8gY2FsbCB0aGlzLlxuXHQgKiBgcmVxdWVzdCgpYCB3aWxsIGF1dG9tYXRpY2FsbHkgY2FsbCB0aGlzIGZ1bmN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBWYXJpb3VzIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhcmFtcy5zdGFydERhZW1vbl0gLSBXaGVuIGB0cnVlYCwgZW5zdXJlcyB0aGUgZGFlbW9uIGlzIHJ1bm5pbmcgYW5kIGlmXG5cdCAqIG5vdCwgYXR0ZW1wdHMgdG8gbG9jYXRlIHRoZSBkYWVtb24sIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiwgc3RhcnQgaXQsIGFuZCByZS1jb25uZWN0LlxuXHQgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBFbWl0cyBldmVudHMgYGNvbm5lY3RlZGAsIGBjbG9zZWAsIGFuZCBgZXJyb3JgLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29ubmVjdChwYXJhbXMgPSB7fSkge1xuXHRcdGNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0XHRjb25zdCB0cnlDb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuc29ja2V0KSB7XG5cdFx0XHRcdGVtaXR0ZXIuZW1pdCgnY29ubmVjdGVkJywgdGhpcyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgaGVhZGVycyA9IHtcblx0XHRcdFx0XHQnVXNlci1BZ2VudCc6IHRoaXMudXNlckFnZW50XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgbG9jYWxlVmFsdWUgPSBwcm9jZXNzLmVudi5BUFBDRF9MT0NBTEUgfHwgYXdhaXQgbG9jYWxlKCk7XG5cdFx0XHRcdGlmIChsb2NhbGVWYWx1ZSkge1xuXHRcdFx0XHRcdGhlYWRlcnNbJ0FjY2VwdC1MYW5ndWFnZSddID0gbG9jYWxlVmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB1cmwgPSBgd3M6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnBvcnR9YDtcblx0XHRcdFx0bG9nKGBDb25uZWN0aW5nIHRvICR7aGlnaGxpZ2h0KHVybCl9YCk7XG5cdFx0XHRcdGNvbnN0IHNvY2tldCA9IHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwsIHsgaGVhZGVycyB9KTtcblxuXHRcdFx0XHRzb2NrZXRcblx0XHRcdFx0XHQub24oJ21lc3NhZ2UnLCBkYXRhID0+IHtcblx0XHRcdFx0XHRcdGxldCBqc29uID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRqc29uID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJhZCByZXNwb25zZSwgc2hvdWxkbid0IGV2ZXIgaGFwcGVuXG5cdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCd3YXJuaW5nJywgYFNlcnZlciByZXR1cm5lZCBpbnZhbGlkIEpTT046ICR7ZS5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0anNvbiA9IG1zZ3BhY2suZGVjb2RlKGRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoanNvbiAmJiB0eXBlb2YganNvbiA9PT0gJ29iamVjdCcgJiYgdGhpcy5yZXF1ZXN0c1tqc29uLmlkXSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzW2pzb24uaWRdLmhhbmRsZXIoanNvbik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ3dhcm5pbmcnLCAnU2VydmVyIHJlc3BvbnNlIGlzIG5vdCBhbiBvYmplY3Qgb3IgaGFzIGFuIGludmFsaWQgaWQnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignb3BlbicsICgpID0+IGVtaXR0ZXIuZW1pdCgnY29ubmVjdGVkJywgdGhpcykpXG5cdFx0XHRcdFx0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4gZW1pdHRlci5lbWl0KCdjbG9zZScpKVxuXHRcdFx0XHRcdC5vbmNlKCdlcnJvcicsIGFzeW5jIGVyciA9PiB7XG5cdFx0XHRcdFx0XHRzb2NrZXQuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0aWYgKGVyci5jb2RlICE9PSAnRUNPTk5SRUZVU0VEJyB8fCAhcGFyYW1zLnN0YXJ0RGFlbW9uKSB7XG5cdFx0XHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGxvZyhgRmFpbGVkIHRvIGNvbm5lY3QgdG8gYXBwY2Q6ICR7aGlnaGxpZ2h0KGAke3RoaXMuaG9zdH06JHt0aGlzLnBvcnR9YCl9YCk7XG5cdFx0XHRcdFx0XHRcdGxvZygnQXR0ZW1wdGluZyB0byBsb2NhdGUgYXBwY2QsIHRoZW4gZGV0ZXJtaW5lIGNvbmZpZ3VyYXRpb24uLi4nKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hcHBjZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hcHBjZCA9IGF3YWl0IGZpbmQoJ2FwcGNkJyk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hcHBjZCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLmZldGNoZWRBcHBjZENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gbWF5YmUgaXQganVzdCBuZWVkcyB0byBiZSBzdGFydGVkP1xuXHRcdFx0XHRcdFx0XHRcdFx0bG9nKCdTdGFydGluZyBkYWVtb24uLi4nKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJ1bih0aGlzLmFwcGNkLCAnc3RhcnQnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYXQgdGhpcyBwb2ludCwgd2UndmUgZG9uZSBhbGwgd2UgY2FuIGRvIGFuZCBpZiBjb25uZWN0KCkgdGhyb3dzIGFuIGVycm9yLCB0aGVuIHNvIGJlIGl0XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ5Q29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRsb2coJ0ZldGNoaW5nIGFwcGNkIGNvbmZpZyB0byBkZXRlcm1pbmUgaG9zdCBhbmQgcG9ydC4uLicpO1xuXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHN0YXJ0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5mZXRjaGVkQXBwY2RDb25maWcgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGNmZyA9IEpTT04ucGFyc2UocnVuKHRoaXMuYXBwY2QsICdjb25maWcnLCAnZ2V0JywgJ3NlcnZlcicsICctLWpzb24nKS5zdGRvdXQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNmZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IGhvc3Q6IGN1cnJlbnRIb3N0LCBwb3J0OiBjdXJyZW50UG9ydCB9ID0gdGhpcztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgeyBob3N0bmFtZTogbmV3SG9zdCwgcG9ydDogbmV3UG9ydCB9ID0gY2ZnLnJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5ld0hvc3QgJiYgY3VycmVudEhvc3QgIT09IG5ld0hvc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmhvc3QgPSBuZXdIb3N0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobmV3UG9ydCAmJiBjdXJyZW50UG9ydCAhPT0gbmV3UG9ydCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucG9ydCA9IG5ld1BvcnQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxvZyhgVXBkYXRpbmcgY2xpZW50IGNvbmZpZyBmcm9tICR7aGlnaGxpZ2h0KGAke2N1cnJlbnRIb3N0fToke2N1cnJlbnRQb3J0fWApfSB0byAke2hpZ2hsaWdodChgJHtuZXdIb3N0fToke25ld1BvcnR9YCl9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bG9nKGBDbGllbnQgY29uZmlnIGlzIHVuY2hhbmdlZDogJHtoaWdobGlnaHQoYCR7Y3VycmVudEhvc3R9OiR7Y3VycmVudFBvcnR9YCl9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvcihgRmFpbGVkIHRvIGdldCBhcHBjZCBjb25maWc6ICR7ZS5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bG9nKCdTdGFydGluZyBkYWVtb24uLi4nKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJ1bih0aGlzLmFwcGNkLCAnc3RhcnQnKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ5Q29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bG9nKGAke2hpZ2hsaWdodCgnYXBwY2QnKX0gbm90IGZvdW5kLCBhdHRlbXB0aW5nIHRvIGxvY2F0ZSAke2hpZ2hsaWdodCgnYW1wbGlmeScpfS4uLmApO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFtcGxpZnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYW1wbGlmeSA9IGF3YWl0IGZpbmQoJ2FtcGxpZnknKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFtcGxpZnkpIHtcblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY2hlY2sgaWYgYXBwY2QgaXMgaW5zdGFsbGVkXG5cdFx0XHRcdFx0XHRcdFx0XHRsb2coJ0NoZWNraW5nIGFtcGxpZnkgaWYgYXBwY2QgaXMgaW5zdGFsbGVkLi4uJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYWNrYWdlcyA9IEpTT04ucGFyc2UocnVuKHRoaXMuYW1wbGlmeSwgJ3BtJywgJ2xpc3QnLCAnLS1qc29uJykuc3Rkb3V0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFwcGNkUGtnID0gQXJyYXkuaXNBcnJheShwYWNrYWdlcykgJiYgcGFja2FnZXMuZmlsdGVyKHAgPT4gcC5uYW1lID09PSAnYXBwY2QnKVswXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChhcHBjZFBrZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhcHBjZFBhdGggPSBwYXRoLnJlc29sdmUoYXBwY2RQa2cudmVyc2lvbnNbYXBwY2RQa2cudmVyc2lvbl0ucGF0aCwgJ2JpbicsICdhcHBjZCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZnMuZXhpc3RzU3luYyhhcHBjZFBhdGgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hcHBjZCA9IGFwcGNkUGF0aDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZldGNoZWRBcHBjZENvbmZpZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxvZyhgYW1wbGlmeSBmb3VuZCBhcHBjZDogJHtoaWdobGlnaHQoYXBwY2QpfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnlDb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3IoYEZhaWxlZCB0byBjaGVjayBhbXBsaWZ5IGZvciBhcHBjZDogJHtlLm1lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGxvZyhgJHtoaWdobGlnaHQoJ2FtcGxpZnknKX0gbm90IGZvdW5kYCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFx0J1VuYWJsZSB0byBmaW5kIHRoZSBBcHBjIERhZW1vbiAoYXBwY2QpLlxcbidcblx0XHRcdFx0XHRcdFx0XHQrIGBSdW4gJHt0aGlzLmFtcGxpZnkgPyAnXCJhbXBsaWZ5IHBtIGkgYXBwY2RcIiBvciAnIDogJyd9XCJucG0gaSAtZyBhcHBjZFwiIHRvIGluc3RhbGwgaXQuYFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Vycm9yJywgZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIG5lZWQgdG8gZGVsYXkgcmVxdWVzdCBzbyBldmVudCBlbWl0dGVyIGNhbiBiZSByZXR1cm5lZCBhbmQgZXZlbnRzIGNhblxuXHRcdC8vIGJlIHdpcmVkIHVwXG5cdFx0c2V0SW1tZWRpYXRlKCgpID0+IHRyeUNvbm5lY3QoKSk7XG5cblx0XHRyZXR1cm4gZW1pdHRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJc3N1ZXMgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgb3ZlciBhIHdlYnNvY2tldC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBwYXRoT3JQYXJhbXMgLSBUaGUgcGF0aCB0byByZXF1ZXN0IG9yIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwYXRoLFxuXHQgKiBkYXRhLCBhbmQgdHlwZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXRoT3JQYXJhbXMucGF0aF0gLSBUaGUgcGF0aCB0byByZXF1ZXN0LlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhdGhPclBhcmFtcy5kYXRhXSAtIEFuIG9iamVjdCB0byBzZW5kLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3BhdGhPclBhcmFtcy50eXBlXSAtIFRoZSByZXF1ZXN0IHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgYGNhbGxgLFxuXHQgKiBgc3Vic2NyaWJlYCwgYW5kIGB1bnN1YnNjcmliZWAuXG5cdCAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IEVtaXRzIGV2ZW50cyBgcmVzcG9uc2VgIGFuZCBgZXJyb3JgLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0cmVxdWVzdChwYXRoT3JQYXJhbXMpIHtcblx0XHRpZiAoIXBhdGhPclBhcmFtcyB8fCAodHlwZW9mIHBhdGhPclBhcmFtcyAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHBhdGhPclBhcmFtcyAhPT0gJ29iamVjdCcpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBub24tZW1wdHkgcGF0aCBvciBwYXJhbWV0ZXJzIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdFx0Y29uc3QgaWQgPSB1dWlkLnY0KCk7XG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcblx0XHRjb25zdCByZXEgPSB7XG5cdFx0XHR2ZXJzaW9uOiAnMS4wJyxcblx0XHRcdHBhdGg6IHBhdGhPclBhcmFtcyxcblx0XHRcdGlkXG5cdFx0fTtcblxuXHRcdGlmICh0eXBlb2YgcGF0aE9yUGFyYW1zID09PSAnb2JqZWN0Jykge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihyZXEsIHBhdGhPclBhcmFtcyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZXEucGF0aCB8fCB0eXBlb2YgcmVxLnBhdGggIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwYXRoIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHRcdH1cblxuXHRcdGlmIChyZXEuZGF0YSAmJiAodHlwZW9mIHJlcS5kYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJlcS5kYXRhKSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGRhdGEgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcS50eXBlICYmIHR5cGVvZiByZXEudHlwZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHR5cGUgdG8gYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cblx0XHQvLyBuZWVkIHRvIGRlbGF5IHJlcXVlc3Qgc28gZXZlbnQgZW1pdHRlciBjYW4gYmUgcmV0dXJuZWQgYW5kIGV2ZW50cyBjYW5cblx0XHQvLyBiZSB3aXJlZCB1cFxuXHRcdHNldEltbWVkaWF0ZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmNvbm5lY3QoKVxuXHRcdFx0XHQub25jZSgnY29ubmVjdGVkJywgY2xpZW50ID0+IHtcblx0XHRcdFx0XHQvLyBpZiBhIHJlc3BvbnNlIGlzIGNodW5rZWQsIHRoaXMgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgbXVsdGlwbGUgdGltZXNcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzW2lkXSA9IHtcblx0XHRcdFx0XHRcdGhhbmRsZXI6IHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gbm8gbmVlZCBmb3IgdGhlIGlkIGFueW1vcmVcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJlc3BvbnNlLmlkO1xuXG5cdFx0XHRcdFx0XHRcdGxldCB7IHN0YXR1cyB9ID0gdGhpcy5yZXF1ZXN0c1tpZF07XG5cdFx0XHRcdFx0XHRcdGlmICghc3RhdHVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmlyc3QgcmVzcG9uc2Vcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXMgPSB0aGlzLnJlcXVlc3RzW2lkXS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPSB+fnJlc3BvbnNlLnN0YXR1cyB8fCA1MDA7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IE1hdGguZmxvb3Ioc3RhdHVzIC8gMTAwKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAocmVzcG9uc2UuZmluKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGUgPSBzdGF0dXMgPCA0MDAgPyBvayA6IGFsZXJ0O1xuXHRcdFx0XHRcdFx0XHRcdGxvZyhgJHtzdHlsZShzdGF0dXMpfSAke2hpZ2hsaWdodChyZXEucGF0aCl9ICR7bm90ZShgJHtuZXcgRGF0ZSgpIC0gc3RhcnRUaW1lfW1zYCl9YCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHN0YXR1c0NsYXNzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3BvbnNlLnR5cGUgIT09ICdmaW5pc2gnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgncmVzcG9uc2UnLCByZXNwb25zZS5tZXNzYWdlLCByZXNwb25zZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBgZmluYCBleGlzdHMgb24gdGhlIGxhc3QgbWVzc2FnZSBmcm9tIHRoZSByZXF1ZXN0IHdoaWNoIGNhbiBiZVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW55IG1lc3NhZ2UgdHlwZSwgbm90IGp1c3QgYGZpbmlzaGBcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXNwb25zZS5maW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdmaW5pc2gnKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgNTpcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5tZXNzYWdlIHx8ICdTZXJ2ZXIgRXJyb3InKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghcmVzcG9uc2Uuc3RhdHVzQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zdGF0dXNDb2RlID0gU3RyaW5nKHN0YXR1cyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMocmVzcG9uc2UpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gdXNlIGRlZmluZVByb3BlcnR5KCkgdG8gZm9yY2UgcHJvcGVydGllcyB0byBiZSBjcmVhdGVkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIsIHByb3AsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW51bWVyYWJsZTogICB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAgICAgICAgcmVzcG9uc2VbcHJvcF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JpdGFibGU6ICAgICB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGVyciwgcmVzcG9uc2UpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGxvZygnU2VuZGluZyByZXF1ZXN0OicsIHJlcSk7XG5cblx0XHRcdFx0XHRjbGllbnQuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignd2FybmluZycsICguLi5hcmdzKSA9PiBlbWl0dGVyLmVtaXQoJ3dhcm5pbmcnLCAuLi5hcmdzKSlcblx0XHRcdFx0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnJlcXVlc3RzW2lkXTtcblx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Nsb3NlJyk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbmNlKCdlcnJvcicsIGVyciA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMucmVxdWVzdHNbaWRdO1xuXHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBlbWl0dGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2Nvbm5lY3RzIGZyb20gdGhlIHNlcnZlci5cblx0ICpcblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuc29ja2V0KSB7XG5cdFx0XHR0aGlzLnNvY2tldC5jbG9zZSgpO1xuXHRcdH1cblx0XHR0aGlzLnNvY2tldCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1c2VyIGFnZW50IHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQtbW9zdCBzY3JpcHRcbiAqIG5hbWUsIE5vZGUuanMgdmVyc2lvbiwgcGxhdGZvcm0gbmFtZSwgYW5kIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW3VzZXJBZ2VudF0gLSBUaGUgaW52b2tpbmcgY2xpZW50J3MgdXNlciBhZ2VudC4gVGhpcyBzaW1wbHkgbmVlZHMgdG8gYmUgdGhlXG4gKiBgbmFtZS92ZXJzaW9uYC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdFVzZXJBZ2VudCh1c2VyQWdlbnQpIHtcblx0aWYgKHVzZXJBZ2VudCAmJiB0eXBlb2YgdXNlckFnZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHVzZXIgYWdlbnQgdG8gYmUgYSBzdHJpbmcnKTtcblx0fVxuXG5cdGNvbnN0IHBhcnRzID0gdXNlckFnZW50ID8gdXNlckFnZW50LnNwbGl0KCcgJykgOiBbXTtcblxuXHRpZiAoIXBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBlbnRyeSA9IG1vZHVsZTtcblx0XHR3aGlsZSAoZW50cnkucGFyZW50KSB7XG5cdFx0XHRlbnRyeSA9IGVudHJ5LnBhcmVudDtcblx0XHR9XG5cblx0XHRpZiAoZW50cnkuZmlsZW5hbWUpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBwYXRoLmJhc2VuYW1lKGVudHJ5LmZpbGVuYW1lKTtcblx0XHRcdGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoJy8nKTtcblx0XHRcdGxldCBkaXIgPSBwYXRoLmRpcm5hbWUoZW50cnkuZmlsZW5hbWUpO1xuXG5cdFx0XHRkbyB7XG5cdFx0XHRcdGNvbnN0IHBrZ0pzb25GaWxlID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cGFydHMucHVzaChgJHtuYW1lfS8ke2ZzLnJlYWRKc29uU3luYyhwa2dKc29uRmlsZSkudmVyc2lvbiB8fCAnJ31gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdC8vIGVpdGhlciB0aGUgcGFja2FnZS5qc29uIGRvZXNuJ3QgZXhpc3Qgb3IgdGhlIEpTT04gd2FzIG1hbGZvcm1lZFxuXHRcdFx0XHRcdGlmIChlLmNvZGUgIT09ICdFTk9FTlQnKSB7XG5cdFx0XHRcdFx0XHQvLyBtdXN0IGJlIG1hbGZvcm1lZCBKU09OLCB3ZSBjYW4gc3RvcFxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlyID0gcGF0aC5kaXJuYW1lKGRpcik7XG5cdFx0XHR9IHdoaWxlIChkaXIgIT09IHJvb3QpO1xuXHRcdH1cblx0fVxuXG5cdHBhcnRzLnB1c2goYGFwcGNkLWNsaWVudC8ke0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKSkpLnZlcnNpb259YCk7XG5cblx0aWYgKCFwYXJ0cy5zb21lKHAgPT4gcC5pbmRleE9mKCdub2RlLycpID09PSAwKSkge1xuXHRcdHBhcnRzLnB1c2goYG5vZGUvJHtwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgvXnYvLCAnJyl9YCk7XG5cdH1cblxuXHRpZiAoIXBhcnRzLnNvbWUocCA9PiBwID09PSBwcm9jZXNzLnBsYXRmb3JtKSkge1xuXHRcdHBhcnRzLnB1c2gocHJvY2Vzcy5wbGF0Zm9ybSk7XG5cdH1cblxuXHRjb25zdCBhcmNoaXRlY3R1cmUgPSBhcmNoKCk7XG5cdGlmICghcGFydHMuc29tZShwID0+IHAgPT09IGFyY2hpdGVjdHVyZSkpIHtcblx0XHRwYXJ0cy5wdXNoKGFyY2hpdGVjdHVyZSk7XG5cdH1cblxuXHRyZXR1cm4gcGFydHMuam9pbignICcpO1xufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGxvY2F0ZSBhbiBleGVjdXRhYmxlIGluIHRoZSBzeXN0ZW0gcGF0aC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYmluIC0gVGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUgdG8gZmluZC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH1cbiAqL1xuZnVuY3Rpb24gZmluZChiaW4pIHtcblx0dHJ5IHtcblx0XHRjb25zdCBwYXRoID0gd2hpY2guc3luYyhiaW4pO1xuXHRcdGxvZyhgRm91bmQgJHtiaW59OiAke2hpZ2hsaWdodChwYXRoKX1gKTtcblx0XHRyZXR1cm4gcGF0aDtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBzcGF3bnMgYSBwcm9jZXNzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIElmIHRoZSBwcm9jZXNzIHJldHVybnMgYSBub24temVybyBleGl0XG4gKiBjb2RlLCB0aGVuIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHsuLi5TdHJpbmd9IGFyZ3MgLSBUaGUgY29tbWFuZCBhbmQgYXJndW1lbnRzLiBJZiB0aGUgcGxhdGZvcm0gaXMgV2luZG93cyBhbmQgdGhlIGZpcnN0XG4gKiBhcmd1bWVudCBpcyBub3QgYSBgLmNtZGAsIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgY29tbWFuZCB0byB0aGUgY3VycmVudCBOb2RlXG4gKiBleGVjdXRhYmxlLlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcnVuKC4uLmFyZ3MpIHtcblx0Y29uc3QgYmluID0gYXJnc1swXTtcblx0Y29uc3QgY21kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiAhL1xcLmNtZCQvaS50ZXN0KGJpbikgPyBwcm9jZXNzLmV4ZWNQYXRoIDogYXJncy5zaGlmdCgpO1xuXHRsb2coYEV4ZWN1dGluZyAke2hpZ2hsaWdodChgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9YCl9YCk7XG5cblx0Ly8gcmVtb3ZlIGRlYnVnIGVudiB2YXJzIHNvIHRoYXQgSlNPTiByZXNwb25zZXMgYXJlbid0IG1hbGZvcm1lZFxuXHRjb25zdCB7IGVudiB9ID0gcHJvY2Vzcztcblx0ZGVsZXRlIGVudi5ERUJVRztcblx0ZGVsZXRlIGVudi5TTk9PUExPR0c7XG5cblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNtZCwgYXJncywgeyBlbnYgfSk7XG5cdGlmICghcmVzdWx0LnN0YXR1cykge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYCR7YmlufSBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LnN0YXR1c31gKTtcbn1cbiJdLCJmaWxlIjoiY2xpZW50LmpzIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNsaWVudC5qcyJdLCJuYW1lcyI6WyJFcnJvciIsInByZXBhcmVTdGFja1RyYWNlIiwicmVxdWlyZSIsImVycm9yIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJub3RlIiwib2siLCJhcHBjZExvZ2dlciIsInN0eWxlcyIsIkNsaWVudCIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNvY2tldCIsInJlcXVlc3RzIiwiaG9zdCIsInBvcnQiLCJUeXBlRXJyb3IiLCJ1c2VyQWdlbnQiLCJjb25zdHJ1Y3RVc2VyQWdlbnQiLCJjb25uZWN0IiwicGFyYW1zIiwiZW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInRyeUNvbm5lY3QiLCJlbWl0IiwiaGVhZGVycyIsImxvY2FsZVZhbHVlIiwicHJvY2VzcyIsImVudiIsIkFQUENEX0xPQ0FMRSIsInVybCIsIldlYlNvY2tldCIsIm9uIiwiZGF0YSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJlIiwibWVzc2FnZSIsIm1zZ3BhY2siLCJkZWNvZGUiLCJpZCIsImhhbmRsZXIiLCJvbmNlIiwiZXJyIiwiY2xvc2UiLCJjb2RlIiwic3RhcnREYWVtb24iLCJhcHBjZCIsInVuZGVmaW5lZCIsImZpbmQiLCJmZXRjaGVkQXBwY2RDb25maWciLCJydW4iLCJzdGFydCIsImNmZyIsInN0ZG91dCIsImN1cnJlbnRIb3N0IiwiY3VycmVudFBvcnQiLCJob3N0bmFtZSIsIm5ld0hvc3QiLCJuZXdQb3J0IiwicmVzdWx0IiwiYW1wbGlmeSIsInBhY2thZ2VzIiwiYXBwY2RQa2ciLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJwIiwibmFtZSIsImFwcGNkUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwidmVyc2lvbnMiLCJ2ZXJzaW9uIiwiZnMiLCJleGlzdHNTeW5jIiwic2V0SW1tZWRpYXRlIiwicmVxdWVzdCIsInBhdGhPclBhcmFtcyIsInN0YXJ0VGltZSIsIkRhdGUiLCJyZXEiLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwiY2xpZW50IiwicmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNDbGFzcyIsIk1hdGgiLCJmbG9vciIsImZpbiIsInN0eWxlIiwic3RhdHVzQ29kZSIsIlN0cmluZyIsInByb3AiLCJrZXlzIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwidmFsdWUiLCJ3cml0YWJsZSIsInNlbmQiLCJzdHJpbmdpZnkiLCJhcmdzIiwiZGlzY29ubmVjdCIsInBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJlbnRyeSIsIm1vZHVsZSIsInBhcmVudCIsImZpbGVuYW1lIiwiYmFzZW5hbWUiLCJyb290IiwiZGlyIiwiZGlybmFtZSIsInBrZ0pzb25GaWxlIiwiam9pbiIsInB1c2giLCJyZWFkSnNvblN5bmMiLCJyZWFkRmlsZVN5bmMiLCJfX2Rpcm5hbWUiLCJzb21lIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJwbGF0Zm9ybSIsImFyY2hpdGVjdHVyZSIsImJpbiIsIndoaWNoIiwic3luYyIsImNtZCIsInRlc3QiLCJleGVjUGF0aCIsInNoaWZ0IiwiREVCVUciLCJTTk9PUExPR0ciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQWhCQTtBQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDQyxpQkFBWCxFQUE4QjtBQUM3QkMsRUFBQUEsT0FBTyxDQUFDLDZCQUFELENBQVA7QUFDQTs7QUFlRCxNQUFNO0FBQUVDLEVBQUFBLEtBQUY7QUFBU0MsRUFBQUE7QUFBVCxJQUFpQiwwQkFBWSxjQUFaLENBQXZCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBLFNBQVQ7QUFBb0JDLEVBQUFBLElBQXBCO0FBQTBCQyxFQUFBQTtBQUExQixJQUFpQ0MscUJBQVlDLE1BQW5EO0FBRUE7Ozs7QUFHZSxNQUFNQyxNQUFOLENBQWE7QUFDM0I7Ozs7Ozs7Ozs7QUFVQUMsRUFBQUEsV0FB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RyxRQUEvRCxHQUEwRTdCLElBQUksQ0FBQzhCLEtBQUwsRUFBdEY7QUFDQXJJLEVBQUFBLEdBQUcsQ0FBRSxhQUFZRSxTQUFTLENBQUUsR0FBRWdJLEdBQUksSUFBRzNCLElBQUksQ0FBQ2MsSUFBTCxDQUFVLEdBQVYsQ0FBZSxFQUExQixDQUE2QixFQUFwRCxDQUFILENBSHFCLENBS3JCOztBQUNBLFFBQU07QUFBRTNGLElBQUFBO0FBQUYsTUFBVUQsT0FBaEI7QUFDQSxTQUFPQyxHQUFHLENBQUM0RyxLQUFYO0FBQ0EsU0FBTzVHLEdBQUcsQ0FBQzZHLFNBQVg7QUFFQSxRQUFNNUUsTUFBTSxHQUFHLDhCQUFVdUUsR0FBVixFQUFlM0IsSUFBZixFQUFxQjtBQUFFN0UsSUFBQUE7QUFBRixHQUFyQixDQUFmOztBQUNBLE1BQUksQ0FBQ2lDLE1BQU0sQ0FBQzJCLE1BQVosRUFBb0I7QUFDbkIsV0FBTzNCLE1BQVA7QUFDQTs7QUFFRCxRQUFNLElBQUkvRCxLQUFKLENBQVcsR0FBRW1JLEdBQUkscUJBQW9CcEUsTUFBTSxDQUFDMkIsTUFBTyxFQUFuRCxDQUFOO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcblx0cmVxdWlyZSgnc291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyJyk7XG59XG5cbmltcG9ydCBhcHBjZExvZ2dlciBmcm9tICdhcHBjZC1sb2dnZXInO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBtc2dwYWNrIGZyb20gJ21zZ3BhY2stbGl0ZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSAnd3MnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcblxuaW1wb3J0IHsgYXJjaCB9IGZyb20gJ2FwcGNkLXV0aWwnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IGxvY2FsZSB9IGZyb20gJ2FwcGNkLXJlc3BvbnNlJztcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbmNvbnN0IHsgZXJyb3IsIGxvZyB9ID0gYXBwY2RMb2dnZXIoJ2FwcGNkOmNsaWVudCcpO1xuY29uc3QgeyBhbGVydCwgaGlnaGxpZ2h0LCBub3RlLCBvayB9ID0gYXBwY2RMb2dnZXIuc3R5bGVzO1xuXG4vKipcbiAqIFRoZSBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIGFwcGNkIHNlcnZlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IHtcblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBjbGllbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ob3N0PScxMjcuMC4wLjEnXSAtIFRoZSBob3N0IHRvIGNvbm5lY3QgdG8uXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5wb3J0PTE3MzJdIC0gVGhlIHBvcnQgdG8gY29ubmVjdCB0by5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVzZXJBZ2VudF0gLSBUaGUgdXNlciBhZ2VudCBjb250YWluaW5nIHRoZSBuYW1lIGFuZFxuXHQgKiB2ZXJzaW9uIG9mIHRoZSBjbGllbnQuIElmIG5vdCBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSB3ZWJzb2NrZXQgdG8gdGhlIHNlcnZlci5cblx0XHQgKiBAdHlwZSB7V2ViU29ja2V0fVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblxuXHRcdC8qKlxuXHRcdCAqIEFuIGludGVybmFsIG1hcCB1c2VkIHRvIGRpc3BhdGNoIHJlc3BvbnNlcyB0byByZXF1ZXN0ZXJzLlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQGFjY2VzcyBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5yZXF1ZXN0cyA9IHt9O1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIGhvc3QgdG8gY29ubmVjdCB0by5cblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMuaG9zdCA9IG9wdHMuaG9zdCB8fCAnMTI3LjAuMC4xJztcblxuXHRcdC8qKlxuXHRcdCAqIFRoZSBwb3J0IHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAYWNjZXNzIHByaXZhdGVcblx0XHQgKi9cblx0XHRpZiAob3B0cy5wb3J0ICYmICh0eXBlb2Ygb3B0cy5wb3J0ICE9PSAnbnVtYmVyJyB8fCBvcHRzLnBvcnQgPCAxIHx8IG9wdHMucG9ydCA+IDY1NTM1KSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwb3J0LCBleHBlY3RlZCBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDY1NTM1Jyk7XG5cdFx0fVxuXHRcdHRoaXMucG9ydCA9IG9wdHMucG9ydCB8fCAxNzMyO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIHVzZXIgYWdlbnQgY29udGFpbmluZyB0aGUgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGUgY2xpZW50LiBJZiBub3Rcblx0XHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMudXNlckFnZW50ID0gY29uc3RydWN0VXNlckFnZW50KG9wdHMudXNlckFnZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25uZWN0cyB0byB0aGUgc2VydmVyIHZpYSBhIHdlYnNvY2tldC4gWW91IGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhpcy5cblx0ICogYHJlcXVlc3QoKWAgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIC0gVmFyaW91cyBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXJhbXMuc3RhcnREYWVtb25dIC0gV2hlbiBgdHJ1ZWAsIGVuc3VyZXMgdGhlIGRhZW1vbiBpcyBydW5uaW5nIGFuZCBpZlxuXHQgKiBub3QsIGF0dGVtcHRzIHRvIGxvY2F0ZSB0aGUgZGFlbW9uLCBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24sIHN0YXJ0IGl0LCBhbmQgcmUtY29ubmVjdC5cblx0ICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gRW1pdHMgZXZlbnRzIGBjb25uZWN0ZWRgLCBgY2xvc2VgLCBhbmQgYGVycm9yYC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbm5lY3QocGFyYW1zID0ge30pIHtcblx0XHRjb25zdCBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdFx0Y29uc3QgdHJ5Q29ubmVjdCA9IGFzeW5jICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNvY2tldCkge1xuXHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Nvbm5lY3RlZCcsIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGhlYWRlcnMgPSB7XG5cdFx0XHRcdFx0J1VzZXItQWdlbnQnOiB0aGlzLnVzZXJBZ2VudFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IGxvY2FsZVZhbHVlID0gcHJvY2Vzcy5lbnYuQVBQQ0RfTE9DQUxFIHx8IGF3YWl0IGxvY2FsZSgpO1xuXHRcdFx0XHRpZiAobG9jYWxlVmFsdWUpIHtcblx0XHRcdFx0XHRoZWFkZXJzWydBY2NlcHQtTGFuZ3VhZ2UnXSA9IGxvY2FsZVZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdXJsID0gYHdzOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWA7XG5cdFx0XHRcdGxvZyhgQ29ubmVjdGluZyB0byAke2hpZ2hsaWdodCh1cmwpfWApO1xuXHRcdFx0XHRjb25zdCBzb2NrZXQgPSB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCB7IGhlYWRlcnMgfSk7XG5cblx0XHRcdFx0c29ja2V0XG5cdFx0XHRcdFx0Lm9uKCdtZXNzYWdlJywgZGF0YSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQganNvbiA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0anNvbiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBiYWQgcmVzcG9uc2UsIHNob3VsZG4ndCBldmVyIGhhcHBlblxuXHRcdFx0XHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnd2FybmluZycsIGBTZXJ2ZXIgcmV0dXJuZWQgaW52YWxpZCBKU09OOiAke2UubWVzc2FnZX1gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGpzb24gPSBtc2dwYWNrLmRlY29kZShkYXRhKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGpzb24gJiYgdHlwZW9mIGpzb24gPT09ICdvYmplY3QnICYmIHRoaXMucmVxdWVzdHNbanNvbi5pZF0pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZXF1ZXN0c1tqc29uLmlkXS5oYW5kbGVyKGpzb24pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCd3YXJuaW5nJywgJ1NlcnZlciByZXNwb25zZSBpcyBub3QgYW4gb2JqZWN0IG9yIGhhcyBhbiBpbnZhbGlkIGlkJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29wZW4nLCAoKSA9PiBlbWl0dGVyLmVtaXQoJ2Nvbm5lY3RlZCcsIHRoaXMpKVxuXHRcdFx0XHRcdC5vbmNlKCdjbG9zZScsICgpID0+IGVtaXR0ZXIuZW1pdCgnY2xvc2UnKSlcblx0XHRcdFx0XHQub25jZSgnZXJyb3InLCBhc3luYyBlcnIgPT4ge1xuXHRcdFx0XHRcdFx0c29ja2V0LmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNvY2tldCA9IG51bGw7XG5cblx0XHRcdFx0XHRcdGlmIChlcnIuY29kZSAhPT0gJ0VDT05OUkVGVVNFRCcgfHwgIXBhcmFtcy5zdGFydERhZW1vbikge1xuXHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRsb2coYEZhaWxlZCB0byBjb25uZWN0IHRvIGFwcGNkOiAke2hpZ2hsaWdodChgJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWApfWApO1xuXHRcdFx0XHRcdFx0XHRsb2coJ0F0dGVtcHRpbmcgdG8gbG9jYXRlIGFwcGNkLCB0aGVuIGRldGVybWluZSBjb25maWd1cmF0aW9uLi4uJyk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwY2QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXBwY2QgPSBhd2FpdCBmaW5kKCdhcHBjZCcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwY2QpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5mZXRjaGVkQXBwY2RDb25maWcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIG1heWJlIGl0IGp1c3QgbmVlZHMgdG8gYmUgc3RhcnRlZD9cblx0XHRcdFx0XHRcdFx0XHRcdGxvZygnU3RhcnRpbmcgZGFlbW9uLi4uJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRydW4odGhpcy5hcHBjZCwgJ3N0YXJ0Jyk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0IHRoaXMgcG9pbnQsIHdlJ3ZlIGRvbmUgYWxsIHdlIGNhbiBkbyBhbmQgaWYgY29ubmVjdCgpIHRocm93cyBhbiBlcnJvciwgdGhlbiBzbyBiZSBpdFxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRyeUNvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bG9nKCdGZXRjaGluZyBhcHBjZCBjb25maWcgdG8gZGV0ZXJtaW5lIGhvc3QgYW5kIHBvcnQuLi4nKTtcblxuXHRcdFx0XHRcdFx0XHRcdGxldCBzdGFydCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hlZEFwcGNkQ29uZmlnID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBjZmcgPSBKU09OLnBhcnNlKHJ1bih0aGlzLmFwcGNkLCAnY29uZmlnJywgJ2dldCcsICdzZXJ2ZXInLCAnLS1qc29uJykuc3Rkb3V0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChjZmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgeyBob3N0OiBjdXJyZW50SG9zdCwgcG9ydDogY3VycmVudFBvcnQgfSA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgaG9zdG5hbWU6IG5ld0hvc3QsIHBvcnQ6IG5ld1BvcnQgfSA9IGNmZy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChuZXdIb3N0ICYmIGN1cnJlbnRIb3N0ICE9PSBuZXdIb3N0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ob3N0ID0gbmV3SG9zdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5ld1BvcnQgJiYgY3VycmVudFBvcnQgIT09IG5ld1BvcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnBvcnQgPSBuZXdQb3J0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coYFVwZGF0aW5nIGNsaWVudCBjb25maWcgZnJvbSAke2hpZ2hsaWdodChgJHtjdXJyZW50SG9zdH06JHtjdXJyZW50UG9ydH1gKX0gdG8gJHtoaWdobGlnaHQoYCR7bmV3SG9zdH06JHtuZXdQb3J0fWApfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxvZyhgQ2xpZW50IGNvbmZpZyBpcyB1bmNoYW5nZWQ6ICR7aGlnaGxpZ2h0KGAke2N1cnJlbnRIb3N0fToke2N1cnJlbnRQb3J0fWApfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3IoYEZhaWxlZCB0byBnZXQgYXBwY2QgY29uZmlnOiAke2UubWVzc2FnZX1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxvZygnU3RhcnRpbmcgZGFlbW9uLi4uJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRydW4odGhpcy5hcHBjZCwgJ3N0YXJ0Jyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRyeUNvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGxvZyhgJHtoaWdobGlnaHQoJ2FwcGNkJyl9IG5vdCBmb3VuZCwgYXR0ZW1wdGluZyB0byBsb2NhdGUgJHtoaWdobGlnaHQoJ2FtcGxpZnknKX0uLi5gKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hbXBsaWZ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFtcGxpZnkgPSBhd2FpdCBmaW5kKCdhbXBsaWZ5Jyk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hbXBsaWZ5KSB7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGFwcGNkIGlzIGluc3RhbGxlZFxuXHRcdFx0XHRcdFx0XHRcdFx0bG9nKCdDaGVja2luZyBhbXBsaWZ5IGlmIGFwcGNkIGlzIGluc3RhbGxlZC4uLicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcGFja2FnZXMgPSBKU09OLnBhcnNlKHJ1bih0aGlzLmFtcGxpZnksICdwbScsICdsaXN0JywgJy0tanNvbicpLnN0ZG91dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhcHBjZFBrZyA9IEFycmF5LmlzQXJyYXkocGFja2FnZXMpICYmIHBhY2thZ2VzLmZpbHRlcihwID0+IHAubmFtZSA9PT0gJ2FwcGNkJylbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXBwY2RQa2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwY2RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcGNkUGtnLnZlcnNpb25zW2FwcGNkUGtnLnZlcnNpb25dLnBhdGgsICdiaW4nLCAnYXBwY2QnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoYXBwY2RQYXRoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYXBwY2QgPSBhcHBjZFBhdGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mZXRjaGVkQXBwY2RDb25maWcgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coYGFtcGxpZnkgZm91bmQgYXBwY2Q6ICR7aGlnaGxpZ2h0KGFwcGNkKX1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ5Q29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yKGBGYWlsZWQgdG8gY2hlY2sgYW1wbGlmeSBmb3IgYXBwY2Q6ICR7ZS5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRsb2coYCR7aGlnaGxpZ2h0KCdhbXBsaWZ5Jyl9IG5vdCBmb3VuZGApO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdCdVbmFibGUgdG8gZmluZCB0aGUgQXBwYyBEYWVtb24gKGFwcGNkKS5cXG4nXG5cdFx0XHRcdFx0XHRcdFx0KyBgUnVuICR7dGhpcy5hbXBsaWZ5ID8gJ1wiYW1wbGlmeSBwbSBpIGFwcGNkXCIgb3IgJyA6ICcnfVwibnBtIGkgLWcgYXBwY2RcIiB0byBpbnN0YWxsIGl0LmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGVtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBuZWVkIHRvIGRlbGF5IHJlcXVlc3Qgc28gZXZlbnQgZW1pdHRlciBjYW4gYmUgcmV0dXJuZWQgYW5kIGV2ZW50cyBjYW5cblx0XHQvLyBiZSB3aXJlZCB1cFxuXHRcdHNldEltbWVkaWF0ZSgoKSA9PiB0cnlDb25uZWN0KCkpO1xuXG5cdFx0cmV0dXJuIGVtaXR0ZXI7XG5cdH1cblxuXHQvKipcblx0ICogSXNzdWVzIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIG92ZXIgYSB3ZWJzb2NrZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gcGF0aE9yUGFyYW1zIC0gVGhlIHBhdGggdG8gcmVxdWVzdCBvciBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGF0aCxcblx0ICogZGF0YSwgYW5kIHR5cGUuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGF0aE9yUGFyYW1zLnBhdGhdIC0gVGhlIHBhdGggdG8gcmVxdWVzdC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXRoT3JQYXJhbXMuZGF0YV0gLSBBbiBvYmplY3QgdG8gc2VuZC5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcGF0aE9yUGFyYW1zLnN0YXJ0RGFlbW9uXSAtIFdoZW4gYHRydWVgLCBlbnN1cmVzIHRoZSBkYWVtb24gaXMgcnVubmluZyBhbmRcblx0ICogaWYgbm90LCBhdHRlbXB0cyB0byBsb2NhdGUgdGhlIGRhZW1vbiwgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uLCBzdGFydCBpdCwgYW5kXG5cdCAqIHJlLWNvbm5lY3QuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGF0aE9yUGFyYW1zLnR5cGVdIC0gVGhlIHJlcXVlc3QgdHlwZS4gVmFsaWQgdHlwZXMgaW5jbHVkZSBgY2FsbGAsXG5cdCAqIGBzdWJzY3JpYmVgLCBhbmQgYHVuc3Vic2NyaWJlYC5cblx0ICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gRW1pdHMgZXZlbnRzIGByZXNwb25zZWAgYW5kIGBlcnJvcmAuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZXF1ZXN0KHBhdGhPclBhcmFtcykge1xuXHRcdGlmICghcGF0aE9yUGFyYW1zIHx8ICh0eXBlb2YgcGF0aE9yUGFyYW1zICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcGF0aE9yUGFyYW1zICE9PSAnb2JqZWN0JykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG5vbi1lbXB0eSBwYXRoIG9yIHBhcmFtZXRlcnMgb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0XHRjb25zdCBpZCA9IHV1aWR2NCgpO1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5cdFx0Y29uc3QgcmVxID0ge1xuXHRcdFx0dmVyc2lvbjogJzEuMCcsXG5cdFx0XHRwYXRoOiBwYXRoT3JQYXJhbXMsXG5cdFx0XHRpZFxuXHRcdH07XG5cdFx0bGV0IHN0YXJ0RGFlbW9uID0gZmFsc2U7XG5cblx0XHRpZiAodHlwZW9mIHBhdGhPclBhcmFtcyA9PT0gJ29iamVjdCcpIHtcblx0XHRcdE9iamVjdC5hc3NpZ24ocmVxLCBwYXRoT3JQYXJhbXMpO1xuXHRcdFx0KHsgc3RhcnREYWVtb24gfSA9IHJlcSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZXEucGF0aCB8fCB0eXBlb2YgcmVxLnBhdGggIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwYXRoIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHRcdH1cblxuXHRcdGlmIChyZXEuZGF0YSAmJiAodHlwZW9mIHJlcS5kYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJlcS5kYXRhKSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGRhdGEgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcS50eXBlICYmIHR5cGVvZiByZXEudHlwZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHR5cGUgdG8gYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cblx0XHQvLyBuZWVkIHRvIGRlbGF5IHJlcXVlc3Qgc28gZXZlbnQgZW1pdHRlciBjYW4gYmUgcmV0dXJuZWQgYW5kIGV2ZW50cyBjYW5cblx0XHQvLyBiZSB3aXJlZCB1cFxuXHRcdHNldEltbWVkaWF0ZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmNvbm5lY3QoeyBzdGFydERhZW1vbiB9KVxuXHRcdFx0XHQub25jZSgnY29ubmVjdGVkJywgY2xpZW50ID0+IHtcblx0XHRcdFx0XHQvLyBpZiBhIHJlc3BvbnNlIGlzIGNodW5rZWQsIHRoaXMgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgbXVsdGlwbGUgdGltZXNcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzW2lkXSA9IHtcblx0XHRcdFx0XHRcdGhhbmRsZXI6IHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gbm8gbmVlZCBmb3IgdGhlIGlkIGFueW1vcmVcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJlc3BvbnNlLmlkO1xuXG5cdFx0XHRcdFx0XHRcdGxldCB7IHN0YXR1cyB9ID0gdGhpcy5yZXF1ZXN0c1tpZF07XG5cdFx0XHRcdFx0XHRcdGlmICghc3RhdHVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmlyc3QgcmVzcG9uc2Vcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXMgPSB0aGlzLnJlcXVlc3RzW2lkXS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPSB+fnJlc3BvbnNlLnN0YXR1cyB8fCA1MDA7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IE1hdGguZmxvb3Ioc3RhdHVzIC8gMTAwKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAocmVzcG9uc2UuZmluKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGUgPSBzdGF0dXMgPCA0MDAgPyBvayA6IGFsZXJ0O1xuXHRcdFx0XHRcdFx0XHRcdGxvZyhgJHtzdHlsZShzdGF0dXMpfSAke2hpZ2hsaWdodChyZXEucGF0aCl9ICR7bm90ZShgJHtuZXcgRGF0ZSgpIC0gc3RhcnRUaW1lfW1zYCl9YCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHN0YXR1c0NsYXNzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3BvbnNlLnR5cGUgIT09ICdmaW5pc2gnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgncmVzcG9uc2UnLCByZXNwb25zZS5tZXNzYWdlLCByZXNwb25zZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBgZmluYCBleGlzdHMgb24gdGhlIGxhc3QgbWVzc2FnZSBmcm9tIHRoZSByZXF1ZXN0IHdoaWNoIGNhbiBiZVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW55IG1lc3NhZ2UgdHlwZSwgbm90IGp1c3QgYGZpbmlzaGBcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXNwb25zZS5maW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdmaW5pc2gnKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgNTpcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5tZXNzYWdlIHx8ICdTZXJ2ZXIgRXJyb3InKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghcmVzcG9uc2Uuc3RhdHVzQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zdGF0dXNDb2RlID0gU3RyaW5nKHN0YXR1cyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMocmVzcG9uc2UpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gdXNlIGRlZmluZVByb3BlcnR5KCkgdG8gZm9yY2UgcHJvcGVydGllcyB0byBiZSBjcmVhdGVkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIsIHByb3AsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW51bWVyYWJsZTogICB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAgICAgICAgcmVzcG9uc2VbcHJvcF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JpdGFibGU6ICAgICB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGVyciwgcmVzcG9uc2UpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGxvZygnU2VuZGluZyByZXF1ZXN0OicsIHJlcSk7XG5cblx0XHRcdFx0XHRjbGllbnQuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignd2FybmluZycsICguLi5hcmdzKSA9PiBlbWl0dGVyLmVtaXQoJ3dhcm5pbmcnLCAuLi5hcmdzKSlcblx0XHRcdFx0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnJlcXVlc3RzW2lkXTtcblx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Nsb3NlJyk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbmNlKCdlcnJvcicsIGVyciA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMucmVxdWVzdHNbaWRdO1xuXHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBlbWl0dGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2Nvbm5lY3RzIGZyb20gdGhlIHNlcnZlci5cblx0ICpcblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuc29ja2V0KSB7XG5cdFx0XHR0aGlzLnNvY2tldC5jbG9zZSgpO1xuXHRcdH1cblx0XHR0aGlzLnNvY2tldCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1c2VyIGFnZW50IHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQtbW9zdCBzY3JpcHRcbiAqIG5hbWUsIE5vZGUuanMgdmVyc2lvbiwgcGxhdGZvcm0gbmFtZSwgYW5kIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW3VzZXJBZ2VudF0gLSBUaGUgaW52b2tpbmcgY2xpZW50J3MgdXNlciBhZ2VudC4gVGhpcyBzaW1wbHkgbmVlZHMgdG8gYmUgdGhlXG4gKiBgbmFtZS92ZXJzaW9uYC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdFVzZXJBZ2VudCh1c2VyQWdlbnQpIHtcblx0aWYgKHVzZXJBZ2VudCAmJiB0eXBlb2YgdXNlckFnZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHVzZXIgYWdlbnQgdG8gYmUgYSBzdHJpbmcnKTtcblx0fVxuXG5cdGNvbnN0IHBhcnRzID0gdXNlckFnZW50ID8gdXNlckFnZW50LnNwbGl0KCcgJykgOiBbXTtcblxuXHRpZiAoIXBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBlbnRyeSA9IG1vZHVsZTtcblx0XHR3aGlsZSAoZW50cnkucGFyZW50KSB7XG5cdFx0XHRlbnRyeSA9IGVudHJ5LnBhcmVudDtcblx0XHR9XG5cblx0XHRpZiAoZW50cnkuZmlsZW5hbWUpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBwYXRoLmJhc2VuYW1lKGVudHJ5LmZpbGVuYW1lKTtcblx0XHRcdGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoJy8nKTtcblx0XHRcdGxldCBkaXIgPSBwYXRoLmRpcm5hbWUoZW50cnkuZmlsZW5hbWUpO1xuXG5cdFx0XHRkbyB7XG5cdFx0XHRcdGNvbnN0IHBrZ0pzb25GaWxlID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cGFydHMucHVzaChgJHtuYW1lfS8ke2ZzLnJlYWRKc29uU3luYyhwa2dKc29uRmlsZSkudmVyc2lvbiB8fCAnJ31gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdC8vIGVpdGhlciB0aGUgcGFja2FnZS5qc29uIGRvZXNuJ3QgZXhpc3Qgb3IgdGhlIEpTT04gd2FzIG1hbGZvcm1lZFxuXHRcdFx0XHRcdGlmIChlLmNvZGUgIT09ICdFTk9FTlQnKSB7XG5cdFx0XHRcdFx0XHQvLyBtdXN0IGJlIG1hbGZvcm1lZCBKU09OLCB3ZSBjYW4gc3RvcFxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlyID0gcGF0aC5kaXJuYW1lKGRpcik7XG5cdFx0XHR9IHdoaWxlIChkaXIgIT09IHJvb3QpO1xuXHRcdH1cblx0fVxuXG5cdHBhcnRzLnB1c2goYGFwcGNkLWNsaWVudC8ke0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKSkpLnZlcnNpb259YCk7XG5cblx0aWYgKCFwYXJ0cy5zb21lKHAgPT4gcC5pbmRleE9mKCdub2RlLycpID09PSAwKSkge1xuXHRcdHBhcnRzLnB1c2goYG5vZGUvJHtwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgvXnYvLCAnJyl9YCk7XG5cdH1cblxuXHRpZiAoIXBhcnRzLnNvbWUocCA9PiBwID09PSBwcm9jZXNzLnBsYXRmb3JtKSkge1xuXHRcdHBhcnRzLnB1c2gocHJvY2Vzcy5wbGF0Zm9ybSk7XG5cdH1cblxuXHRjb25zdCBhcmNoaXRlY3R1cmUgPSBhcmNoKCk7XG5cdGlmICghcGFydHMuc29tZShwID0+IHAgPT09IGFyY2hpdGVjdHVyZSkpIHtcblx0XHRwYXJ0cy5wdXNoKGFyY2hpdGVjdHVyZSk7XG5cdH1cblxuXHRyZXR1cm4gcGFydHMuam9pbignICcpO1xufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGxvY2F0ZSBhbiBleGVjdXRhYmxlIGluIHRoZSBzeXN0ZW0gcGF0aC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYmluIC0gVGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUgdG8gZmluZC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH1cbiAqL1xuZnVuY3Rpb24gZmluZChiaW4pIHtcblx0dHJ5IHtcblx0XHRjb25zdCBwYXRoID0gd2hpY2guc3luYyhiaW4pO1xuXHRcdGxvZyhgRm91bmQgJHtiaW59OiAke2hpZ2hsaWdodChwYXRoKX1gKTtcblx0XHRyZXR1cm4gcGF0aDtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBzcGF3bnMgYSBwcm9jZXNzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIElmIHRoZSBwcm9jZXNzIHJldHVybnMgYSBub24temVybyBleGl0XG4gKiBjb2RlLCB0aGVuIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHsuLi5TdHJpbmd9IGFyZ3MgLSBUaGUgY29tbWFuZCBhbmQgYXJndW1lbnRzLiBJZiB0aGUgcGxhdGZvcm0gaXMgV2luZG93cyBhbmQgdGhlIGZpcnN0XG4gKiBhcmd1bWVudCBpcyBub3QgYSBgLmNtZGAsIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgY29tbWFuZCB0byB0aGUgY3VycmVudCBOb2RlXG4gKiBleGVjdXRhYmxlLlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcnVuKC4uLmFyZ3MpIHtcblx0Y29uc3QgYmluID0gYXJnc1swXTtcblx0Y29uc3QgY21kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiAhL1xcLmNtZCQvaS50ZXN0KGJpbikgPyBwcm9jZXNzLmV4ZWNQYXRoIDogYXJncy5zaGlmdCgpO1xuXHRsb2coYEV4ZWN1dGluZyAke2hpZ2hsaWdodChgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9YCl9YCk7XG5cblx0Ly8gcmVtb3ZlIGRlYnVnIGVudiB2YXJzIHNvIHRoYXQgSlNPTiByZXNwb25zZXMgYXJlbid0IG1hbGZvcm1lZFxuXHRjb25zdCB7IGVudiB9ID0gcHJvY2Vzcztcblx0ZGVsZXRlIGVudi5ERUJVRztcblx0ZGVsZXRlIGVudi5TTk9PUExPR0c7XG5cblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNtZCwgYXJncywgeyBlbnYgfSk7XG5cdGlmICghcmVzdWx0LnN0YXR1cykge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYCR7YmlufSBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LnN0YXR1c31gKTtcbn1cbiJdLCJmaWxlIjoiY2xpZW50LmpzIn0= |
{ | ||
"name": "appcd-client", | ||
"version": "2.0.4", | ||
"version": "3.0.0", | ||
"description": "The Node.js client for connecting to the Appc Daemon.", | ||
@@ -25,14 +25,14 @@ "main": "./dist/client", | ||
"dependencies": { | ||
"appcd-logger": "^2.0.5", | ||
"appcd-response": "^2.0.4", | ||
"appcd-util": "^2.0.2", | ||
"fs-extra": "^8.1.0", | ||
"appcd-logger": "^3.0.0", | ||
"appcd-response": "^3.0.0", | ||
"appcd-util": "^3.0.0", | ||
"fs-extra": "^9.0.1", | ||
"msgpack-lite": "^0.1.26", | ||
"source-map-support": "^0.5.16", | ||
"uuid": "^3.3.3", | ||
"source-map-support": "^0.5.19", | ||
"uuid": "^8.1.0", | ||
"which": "^2.0.2", | ||
"ws": "^7.2.1" | ||
"ws": "^7.3.0" | ||
}, | ||
"devDependencies": { | ||
"appcd-gulp": "^2.3.2" | ||
"appcd-gulp": "^3.0.1" | ||
}, | ||
@@ -43,4 +43,4 @@ "homepage": "https://github.com/appcelerator/appc-daemon", | ||
"engines": { | ||
"node": "^8.12.0 || >=10.2.0" | ||
"node": ">=10.13.0" | ||
} | ||
} |
61492
589
+ Addedappcd-fs@2.1.2(transitive)
+ Addedappcd-logger@3.0.7(transitive)
+ Addedappcd-path@2.0.8(transitive)
+ Addedappcd-response@3.0.7(transitive)
+ Addedappcd-util@3.1.6(transitive)
+ Addedat-least-node@1.0.0(transitive)
+ Addedchalk@4.1.2(transitive)
+ Addedfs-extra@9.1.0(transitive)
+ Addedjsonfile@6.1.0(transitive)
+ Addedlodash.set@4.3.2(transitive)
+ Addedsnooplogg@3.0.2(transitive)
+ Addedsupports-color@8.1.1(transitive)
+ Addedtmp@0.2.3(transitive)
+ Addeduniversalify@2.0.1(transitive)
+ Addeduuid@8.3.2(transitive)
- Removedappcd-fs@1.1.10(transitive)
- Removedappcd-logger@2.0.5(transitive)
- Removedappcd-path@1.1.10(transitive)
- Removedappcd-response@2.0.4(transitive)
- Removedappcd-util@2.0.2(transitive)
- Removedchalk@3.0.0(transitive)
- Removedfs-extra@8.1.0(transitive)
- Removedjsonfile@4.0.0(transitive)
- Removedsnooplogg@2.3.3(transitive)
- Removeduniversalify@0.1.2(transitive)
- Removeduuid@3.4.0(transitive)
Updatedappcd-logger@^3.0.0
Updatedappcd-response@^3.0.0
Updatedappcd-util@^3.0.0
Updatedfs-extra@^9.0.1
Updatedsource-map-support@^0.5.19
Updateduuid@^8.1.0
Updatedws@^7.3.0